Color management

Last updated

Color management is the process of ensuring consistent and accurate colors across various devices, such as monitors, printers, and cameras. It involves the use of color profiles, which are standardized descriptions of how colors should be displayed or reproduced.

Contents

Color management is necessary because different devices have different color capabilities and characteristics. For example, a monitor may display colors differently than a printer can reproduce them. Without color management, the same image may appear differently on different devices, leading to inconsistencies and inaccuracies.

To achieve color management, a color profile is created for each device involved in the color workflow. This profile describes the device's color capabilities and characteristics, such as its color gamut (range of colors it can display or reproduce) and color temperature. These profiles are then used to translate colors between devices, ensuring consistent and accurate color reproduction.

Color management is particularly important in industries such as graphic design, photography, and printing, where accurate color representation is crucial. It helps to maintain color consistency throughout the entire workflow, from capturing an image to displaying or printing it.

Parts of color management are implemented in the operating system (OS), helper libraries, the application, and devices. The type of color profile that is typically used is called an ICC profile. A cross-platform view of color management is the use of an ICC-compatible color management system. The International Color Consortium (ICC) is an industry consortium that has defined:

There are other approaches to color management besides using ICC profiles. This is partly due to history and partly because of other needs than the ICC standard covers. The film and broadcasting industries make use of some of the same concepts, but they frequently rely on more limited boutique solutions. The film industry, for instance, often uses 3D LUTs (lookup table) to represent a complete color transformation for a specific RGB encoding.

At the consumer level, system wide color management is available in most of Apple's products (macOS, iOS, iPadOS, watchOS). [2] Microsoft Windows lacks system wide color management and virtually all applications do not employ color management. [3] Windows' media player API is not color space aware, and if applications want to color manage videos manually, they have to incur significant performance and power consumption penalties. Android supports system wide color management, [4] but most devices ship with color management disabled. [5]

Overview

  1. Characterize. Every color-managed device requires a personalized table, or "color profile," which characterizes the color response of that particular device.
  2. Standardize. Each color profile describes these colors relative to a standardized set of reference colors (the "Profile Connection Space").
  3. Translate. Color-managed software then uses these standardized profiles to translate color from one device to another. This is usually performed by a color management module (CMM). [6]

Hardware

Characterization

To describe the behavior of various output devices, they must be compared (measured) in relation to a standard color space. Often a step called linearization is performed first, to undo the effect of gamma correction that was done to get the most out of limited 8-bit color paths. Instruments used for measuring device colors include colorimeters and spectrophotometers. As an intermediate result, the device gamut is described in the form of scattered measurement data. The transformation of the scattered measurement data into a more regular form, usable by the application, is called profiling. Profiling is a complex process involving mathematics, intense computation, judgment, testing, and iteration. After the profiling is finished, an idealized color description of the device is created. This description is called a profile.

Calibration

Calibration is like characterization, except that it can include the adjustment of the device, as opposed to just the measurement of the device. Color management is sometimes sidestepped by calibrating devices to a common standard color space such as sRGB; when such calibration is done well enough, no color translations are needed to get all devices to handle colors consistently. This avoidance of the complexity of color management was one of the goals in the development of sRGB.

Color profiles

A 3D view of two ICC profiles CTPgifsm.gif
A 3D view of two ICC profiles

Embedding

Image formats themselves (such as TIFF, JPEG, PNG, EPS, PDF, and SVG) may contain embedded color profiles but are not required to do so by the image format. The International Color Consortium standard was created to bring various developers and manufacturers together. The ICC standard permits the exchange of output device characteristics and color spaces in the form of metadata. This allows the embedding of color profiles into images as well as storing them in a database or a profile directory.

Working spaces

Working spaces, such as sRGB, Adobe RGB or ProPhoto are color spaces that facilitate good results while editing. For instance, pixels with equal values of R,G,B should appear neutral. Using a large (gamut) working space will lead to posterization, while using a small working space will lead to clipping. [7] This trade-off is a consideration for the critical image editor.

Color transformation

Color transformation, or color space conversion, is the transformation of the representation of a color from one color space to another. This calculation is required whenever data is exchanged inside a color-managed chain and carried out by a Color Matching Module. Transforming profiled color information to different output devices is achieved by referencing the profile data into a standard color space. It makes it easier to convert colors from one device to a selected standard color space and from that to the colors of another device. By ensuring that the reference color space covers the many possible colors that humans can see, this concept allows one to exchange colors between many different color output devices. Color transformations can be represented by two profiles (source profile and target profile) or by a devicelink profile. In this process there are approximations involved which make sure that the image keeps its important color qualities and also gives an opportunity to control on how the colors are being changed. [8]

Profile connection space

In the terminology of the International Color Consortium, a translation between two color spaces can go through a profile connection space (PCS): Color Space 1 → PCS (CIELAB or CIEXYZ) → Color space 2; conversions into and out of the PCS are each specified by a profile. [9]

Gamut mapping

In nearly every translation process, we have to deal with the fact that the color gamut of different devices vary in range which makes an accurate reproduction impossible. [8] They therefore need some rearrangement near the borders of the gamut. Some colors must be shifted to the inside of the gamut, as they otherwise cannot be represented on the output device and would simply be clipped. This so-called gamut mismatch occurs for example, when we translate from the RGB color space with a wider gamut into the CMYK color space with a narrower gamut range. In this example, the dark highly saturated purplish-blue color of a typical computer monitor's "blue" primary is impossible to print on paper with a typical CMYK printer. The nearest approximation within the printer's gamut will be much less saturated. Conversely, an inkjet printer's "cyan" primary, a saturated mid-brightness blue, is outside the gamut of a typical computer monitor. The color management system can utilize various methods to achieve desired results and give experienced users control of the gamut mapping behavior.

Rendering intent

When the gamut of source color space exceeds that of the destination, saturated colors are liable to become clipped (inaccurately represented), or more formally burned. The color management module can deal with this problem in several ways. The ICC specification includes four different rendering intents, listed below. [9] [10] [11] Before the actual rendering intent is carried out, one can temporarily simulate the rendering by soft proofing. [12] It is a useful tool as it predicts the outcome of the colors and is available as an application in many color management systems:

Absolute colorimetric
Absolute colorimetry and relative colorimetry actually use the same table but differ in the adjustment for the white point media. If the output device has a much larger gamut than the source profile, i.e., all the colors in the source can be represented in the output, using the absolute colorimetry rendering intent would ideally (ignoring noise, precision, etc.) give an exact output of the specified CIELAB values. Perceptually, the colors may appear incorrect, but instrument measurements of the resulting output would match the source. Colors outside of the proof print system's possible color are mapped to the boundary of the color gamut.
Absolute colorimetry is useful to get an exact specified color (e.g., IBM blue), or to quantify the accuracy of mapping methods.
Relative colorimetric
The goal in relative colorimetry is to be truthful to the specified color, with only a correction for the media. Relative colorimetry is useful in proofing applications, since it can be used to get an idea of how a print on one device will appear on a different device. Media differences are the only thing that one really should adjust for, although some gamut mapping also needs to be applied. Usually this is done in a way where hue and lightness are maintained at the cost of reduced saturation. By default, in-gamut colors are unchanged, while out-of-gamut colors are clamped.
Relative colorimetric is the default rendering intent on many systems.
Perceptual
The perceptual intent smoothly moves out-of-gamut colors into gamut, preserving gradations, but distorts in-gamut colors in the process. Like the saturation intent, the results really depend upon the profile maker. This is even how some of the competitors in this market differentiate themselves. The profile maker tries to make results pleasing on this intent. Perceptual rendering is recommended for color separation.
Saturation
The saturation intent is designed to present eye-catching business graphics by preserving the saturation (colorfulness). It is most useful in charts and diagrams, where there is a discrete palette of colors that the designer wants saturated to make them intense, but where specific hue is less important.

In practice, photographers almost always use relative or perceptual intent, as for natural images, absolute causes color cast, while saturation produces unnatural colors. If an entire image is in-gamut, relative is perfect, but when there are out of gamut colors, which is preferable depends on a case-by-case basis. CMMs may offer options for BPC and partial chromatic adaptation. [13]

A black point correction (BPC) is not applied for absolute colorimetric or devicelink profiles. For ICCv4, it is always applied to the perceptual intent. [14] :17 ICCv2 sRGB profiles differ among each other in a number of ways, one of which being whether BPC is applied. [13]

Implementation

Color management module

Color matching module (also -method or -system) is a software algorithm that adjusts the numerical values that get sent to or received from different devices so that the perceived color they produce remains consistent. The key issue here is how to deal with a color that cannot be reproduced on a certain device in order to show it through a different device as if it were visually the same color, just as when the reproducible color range between color transparencies and printed matters are different. There is no common method for this process, and the performance depends on the capability of each color matching method.

Some well known CMMs are ColorSync, Adobe CMM, Little CMS, and ArgyllCMS.

Operating system level

Color profile viewer on KDE Plasma 5, showing an ICC color profile Colour profile viewer on KDE Plasma screenshot.png
Color profile viewer on KDE Plasma 5, showing an ICC color profile

Apple

Apple's classic Mac OS and macOS operating systems have provided OS-level color management APIs since 1993, through ColorSync. macOS has added automatic color management (assuming sRGB for most things) automatically in the OS, but applications can explicitly target other color spaces if they wish to. System wide color management is used in iOS, iPadOS and watchOS as well. [15]

Windows

Since 1997 color management in Windows is available through an ICC color management system: ICM (Image Color Management).

Beginning with Windows Vista, Microsoft introduced a new color architecture known as WCS (Windows Color System). [16] WCS supplements the ICM system in Windows 2000 and Windows XP, originally written by Heidelberg. [17] [18]

Apps need to be aware of color management and tag the content appropriately to accurately display colors. Otherwise, (unlike macOS) Windows will display the colors to the maximum extent of the display's gamut, resulting in over-saturated colors on wide-gamut displays. [19] To fix this issue, Microsoft includes a new feature called "Auto Color Management" since Windows 11 2022. [20]

Windows Photo Viewer from Windows 7 (also included in later Windows versions) performs proper color management, however, the newer Windows Photos app in Windows 8, 10, 11 does not perform color management [21] [22] [23] until version v2022.31070.26005.0. [24] Other Windows components, including Microsoft Paint, Snipping Tool, Windows Desktop, Windows Explorer, do not perform color management. [25]

Unfortunately, the vast majority of applications do not use the Windows Color System. [3] For applications that do employ color management (typically web browsers), color management tend to apply for only images and UI, but not videos. This is because Windows' media player API is not color space aware. Thus, browsers (Chrome, Firefox, Edge) are only able to do color management for images but not video. [26] For the same reason, virtually no video players on Windows support color management (including the default Movies & TV app and VLC), with Media Player Classic Home Cinema being a rare exception. [27] [28] [ failed verification ]

Android

On Android, system wide color management is introduced in Android Oreo 8.1. [4] However, most Android phones are shipped with color management disabled (ex: 'adaptive' color profile on Google Pixel, 'vivid' color profile on Samsung Galaxy [29] ). This oversaturates sRGB content to the native display gamut, typically DCI-P3. Users need to manually select the 'natural' color profile to enable color management, enabling accurate display of sRGB and P3 wide color content.

Others

Operating systems that use the X Window System for graphics can use ICC profiles, and support for color management on Linux, still less mature than on other platforms, is coordinated through OpenICC at freedesktop.org and makes use of LittleCMS.

File level

Certain image filetypes (TIFF and Photoshop) include the notion of color channels for specifying the color mode of the file. The most commonly used channels are RGB (mainly for display (monitors) but also for some desktop printing) and CMYK (for commercial printing). An additional alpha channel may specify a transparency mask value. Some image software (such as Photoshop) perform automatic color separation to maintain color information in CMYK mode using a specified ICC profile such as US Web Coated (SWOP) v2.

Creative software

Adobe software includes its own color management engine - Adobe Color Engine. It is also available as a separate Color Management Module - Adobe CMM for use by non-Adobe applications that supports 3rd-party CMMs. [30]

Web browsers

As of 2005, most web browsers ignored color profiles. [31] Notable exceptions were Safari, starting with version 2.0, and Firefox starting with version 3. Although disabled by default in Firefox 3.0, ICC v2 and ICC v4 color management could be enabled by using an add-on [32] or setting a configuration option. [33]

As of July 2019, Safari, Chrome and Firefox fully support color management. [34] However, it is important to note that most browsers only do color management for images and CSS elements, but not video.

Regarding mobile browsers, Safari 13.1 (on iOS 13.4.1) recognizes the device color profile and can displays images accordingly. [42] Chrome 83 (on Android 9) ignores the display profile, simply converting all images to sRGB. [42]

As of 2023, Chrome 114, Android Browser 114 and Firefox for Android 115 support multiple colorspaces. [43] The same is valid for their desktop counterparts: Chrome 118, Edge 114, Safari 16.6, Firefox 117 and Opera 100. [43]

See also

Related Research Articles

<span class="mw-page-title-main">RGB color model</span> Color model based on red, green, and blue

The RGB color model is an additive color model in which the red, green and blue primary colors of light are added together in various ways to reproduce a broad array of colors. The name of the model comes from the initials of the three additive primary colors, red, green, and blue.

<span class="mw-page-title-main">CMYK color model</span> Subtractive color model, used in color printing

The CMYK color model is a subtractive color model, based on the CMY color model, used in color printing, and is also used to describe the printing process itself. The abbreviation CMYK refers to the four ink plates used: cyan, magenta, yellow, and key (black).

Gamma correction or gamma is a nonlinear operation used to encode and decode luminance or tristimulus values in video or still image systems. Gamma correction is, in the simplest cases, defined by the following power-law expression:

<span class="mw-page-title-main">RGB color spaces</span> Any additive color space based on the RGB color model

RGB color spaces are additive colorimetric color spaces specifying part of its absolute color space definition using the RGB color model.

Web colors are colors used in displaying web pages on the World Wide Web; they can be described by way of three methods: a color may be specified as an RGB triplet, in hexadecimal format or according to its common English name in some cases. A color tool or other graphics software is often used to generate color values. In some uses, hexadecimal color codes are specified with notation using a leading number sign (#). A color is specified according to the intensity of its red, green and blue components, each represented by eight bits. Thus, there are 24 bits used to specify a web color within the sRGB gamut, and 16,777,216 colors that may be so specified.

Color depth or colour depth, also known as bit depth, is either the number of bits used to indicate the color of a single pixel, or the number of bits used for each color component of a single pixel. When referring to a pixel, the concept can be defined as bits per pixel (bpp). When referring to a color component, the concept can be defined as bits per component, bits per channel, bits per color, and also bits per pixel component, bits per color channel or bits per sample (bps). Modern standards tend to use bits per component, but historical lower-depth systems used bits per pixel more often.

<span class="mw-page-title-main">CIELAB color space</span> Standard color space with color-opponent values

The CIELAB color space, also referred to as L*a*b*, is a color space defined by the International Commission on Illumination in 1976. It expresses color as three values: L* for perceptual lightness and a* and b* for the four unique colors of human vision: red, green, blue and yellow. CIELAB was intended as a perceptually uniform space, where a given numerical change corresponds to a similar perceived change in color. While the LAB space is not truly perceptually uniform, it nevertheless is useful in industry for detecting small differences in color.

<span class="mw-page-title-main">Gamut</span> Color reproduction capability

In color reproduction and colorimetry, a gamut, or color gamut, is a convex set containing the colors that can be accurately represented, i.e. reproduced by an output device or measured by an input device. Devices with a larger gamut can represent more colors. Similarly, gamut may also refer to the colors within a defined color space, which is not linked to a specific device. A trichromatic gamut is often visualized as a color triangle. A less common usage defines gamut as the subset of colors contained within an image, scene or video.

ColorSync is Apple Inc.'s color management API for the Mac OS and Mac OS X Operating Systems.

sRGB Standard RGB color space

sRGB is a standard RGB color space that HP and Microsoft created cooperatively in 1996 to use on monitors, printers, and the World Wide Web. It was subsequently standardized by the International Electrotechnical Commission (IEC) as IEC 61966-2-1:1999. sRGB is the current defined standard colorspace for the web, and it is usually the assumed colorspace for images that are neither tagged for a colorspace nor have an embedded color profile.

<span class="mw-page-title-main">Adobe RGB color space</span> Color space developed by Adobe

The Adobe RGB (1998) color space or opRGB is a color space developed by Adobe Inc. in 1998. It was designed to encompass most of the colors achievable on CMYK color printers, but by using RGB primary colors on a device such as a computer display. The Adobe RGB (1998) color space encompasses roughly 30% of the visible colors specified by the CIELAB color space – improving upon the gamut of the sRGB color space, primarily in cyan-green hues. It was subsequently standardized by the IEC as IEC 61966-2-5:1999 with a name opRGB and is used in HDMI.

A camera raw image file contains unprocessed or minimally processed data from the image sensor of either a digital camera, a motion picture film scanner, or other image scanner. Raw files are so named because they are not yet processed, and contain large amounts of potentially redundant data. Normally, the image is processed by a raw converter, in a wide-gamut internal color space where precise adjustments can be made before conversion to a viewable file format such as JPEG or PNG for storage, printing, or further manipulation. There are dozens of raw formats in use by different manufacturers of digital image capture equipment.

<span class="mw-page-title-main">Linux color management</span> Controlled color representations on Linux operating system

Linux color management has the same goal as the color management systems (CMS) for other operating systems, which is to achieve the best possible color reproduction throughout an imaging workflow from its source, through imaging software, and finally onto an output medium. In particular, color management attempts to enable color consistency across media and throughout a color-managed workflow.

In color management, an ICC profile is a set of data that characterizes a color input or output device, or a color space, according to standards promulgated by the International Color Consortium (ICC). Profiles describe the color attributes of a particular device or viewing requirement by defining a mapping between the device source or target color space and a profile connection space (PCS). This PCS is either CIELAB (L*a*b*) or CIEXYZ. Mappings may be specified using tables, to which interpolation is applied, or through a series of parameters for transformations.

Windows Color System (WCS) is a platform for color management, first included with Windows Vista, that aims to achieve color consistency across various software and hardware, including cameras, monitors, printers and scanners.

<span class="mw-page-title-main">FastPictureViewer</span> Freemium image viewer for Windows

FastPictureViewer is a freemium image viewer for Windows XP and later. Its aim is to facilitate quick review, rating and annotation of large quantities of digital images in the early steps of the digital workflow, with an emphasis on simplicity and speed. As an app with a freemium license, a basic version is available cost-free for personal, non-profit or educational uses, while a commercial license is required for the professional version with additional features. The basic version starts as a full version trial.

<span class="mw-page-title-main">Color space</span> Standard that defines a specific range of colors

A color space is a specific organization of colors. In combination with color profiling supported by various physical devices, it supports reproducible representations of color – whether such representation entails an analog or a digital representation. A color space may be arbitrary, i.e. with physically realized colors assigned to a set of physical color swatches with corresponding assigned color names, or structured with mathematical rigor. A "color space" is a useful conceptual tool for understanding the color capabilities of a particular device or digital file. When trying to reproduce color on another device, color spaces can show whether shadow/highlight detail and color saturation can be retained, and by how much either will be compromised.

<span class="mw-page-title-main">DCI-P3</span> RGB color space for digital movie projection from the American film industry

DCI-P3 is a color space first defined in 2005 as part of the Digital Cinema Initiative, to be used for digital theatrical motion picture distribution (DCDM). Display P3 is a variant developed by Apple Inc. for wide-gamut displays.

AV1 Image File Format (AVIF) is an open, royalty-free image file format specification for storing images or image sequences compressed with AV1 in the HEIF container format. It competes with HEIC, which uses the same container format built upon ISOBMFF, but HEVC for compression. Version 1.0.0 of the AVIF specification was finalized in February 2019.

References

  1. 1 2 von Seggern, Dietrich (February 28, 2019). "Why DeviceLink profiles should interest you". pdfa.org. PDF Association . Retrieved January 20, 2023. A DeviceLink profile is always between two color spaces and it does not pass through L*a*b*to do its conversion.
  2. "Technical Note TN2313: Best Practices for Color Management in OS X and iOS". developer.apple.com. Retrieved August 23, 2022.
  3. 1 2 "Applying color profile from x-rite across Windows 10 (image included!): PC Talk Forum: Digital Photography Review". www.dpreview.com. Retrieved August 23, 2022.
  4. 1 2 "Color Management". Android Open Source Project. Retrieved August 23, 2022.
  5. Frumusanu, Andrei. "The Samsung Galaxy S20+, S20 Ultra Exynos & Snapdragon Review: Megalomania Devices". www.anandtech.com. Retrieved August 23, 2022.
  6. Overview of Color Management,Camberidge in Colour,2016.1.23 http://www.cambridgeincolour.com/tutorials/color-management1.htm
  7. Rodney, Andrew. "The role of working spaces in Adobe applications" (PDF). Technical Paper. Adobe. Retrieved May 9, 2008.
  8. 1 2 "Color Management: Color Space Conversion". www.cambridgeincolour.com.
  9. 1 2 Rodney, Andrew (2005). Color Management for Photographers . Focal Press. pp.  32–33. ISBN   0-240-80649-2.
  10. Color Management: Color Space Conversion, Cambridge in Color
  11. https://www.color.org/specification/ICC1v43_2010-12.pdf ICC Specification ICC.1:2010
  12. "Soft Proofing: Matching On-Screen Photos with Prints". www.cambridgeincolour.com.
  13. 1 2 "Using the sRGB_v4_ICC_preference.icc profile" (PDF).
  14. "Specification ICC.1:2022 (Profile version 4.4.0.0)" (PDF). Perceptual transforms developed to meet ICC specifications prior to version 4.0 frequently use zero to represent the black point, and thus do not conform to this specification.
  15. "Technical Note TN2313: Best Practices for Color Management in OS X and iOS". developer.apple.com. Retrieved August 23, 2022.
  16. Upton, Steve (February 2008). Vista's New Color Management System: WCS.
  17. Microsoft (April 23, 1997). "Microsoft Licenses LinoColorCMM Technology To Improve Color Management in Windows". Microsoft . Retrieved May 8, 2008.
  18. The reader may verify this by examining the Properties of any ICM profile. The Profile Information tab should contain the entry "LinoColorCMM © by Heidelberger Druckmaschinen AG".
  19. "Windows Color Management, a Rant".
  20. "Advancing the State of Color Management in Windows".
  21. "Why do my colours look so different in Windows Photo Viewer?".
  22. "You're Using Your Monitor WRONG! (Here's How to Fix It)". YouTube .
  23. "3 Free Windows 10 Alternatives Color Managed Image Viewers! (Fix Windows 10 Color Issues)". YouTube .
  24. "[Windows 11] Color Management - Common FAQs for "Microsoft Photos"".
  25. "ICC Colour Profiles, AdobeRGB & sRGB, and "Colour Management" on Windows. "The Nightmare" Part 1".
  26. "Windows color management". DisplayCAL. Retrieved August 23, 2022.
  27. "ICC color management in Media Player Classic Home Cinema". September 20, 2010.
  28. "VLC for Mac 2019 - still not color managed! - The VideoLAN Forums". forum.videolan.org. Retrieved August 23, 2022.
  29. "Samsung Galaxy S10 Display Review: An ambassador that Android needs". XDA. March 28, 2019. Retrieved August 23, 2022.
  30. "Download Adobe Color Management Module".
  31. Smith, Colin; Kabili, Jan (2005). How to Wow: Photoshop CS2 for the Web. Berkeley, CA: Peachpit Press. p. 13. ISBN   0-321-39394-5 . Retrieved May 8, 2008. Many designers choose not to include ICC Profiles with Web files because most Web browsers can't read them and they increase the size of a file.
  32. Color Management add-on Archived 2018-10-01 at the Wayback Machine by Sean Hayes.
  33. The value gfx.color_management.enabled can be set to "true" in the "about:config" file of Firefox since version 3. Firefox 3: Color profile support (oh the pretty, pretty colors) Archived 2008-05-01 at the Wayback Machine , Deb Richardson, Mozilla Corporation.
  34. 1 2 "Web browser color management guide". cameratico.com.
  35. "463221 - color reftesting". bugzilla.mozilla.org.
  36. "679371 - Investigate color management test results". bugzilla.mozilla.org.
  37. "How to configure Firefox color management". cameratico.com.
  38. "143 - Handle color profiles in tagged images - chromium - Monorail". bugs.chromium.org.
  39. http://www.opera.com/docs/changelogs/unified/1210/ Archived 2013-07-31 at the Wayback Machine Opera Changelog 12.10 stable
  40. "Opera Developer News - What's new in Opera 12.10 beta". October 4, 2012. Archived from the original on October 4, 2012.
  41. "Pale Moon - Release Notes for Archived Versions". www.palemoon.org.
  42. 1 2 "Color Management for Creators - Mobile Devices | EIZO". www.eizoglobal.com.
  43. 1 2 "CSS color() function | Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved July 21, 2023.

Further reading