ICC profiles

From ArchWiki

As it pertains to general desktop use, an ICC profile is a binary file which contains precise data regarding the color attributes of an input, or output device. Single, or multiple profiles can be applied across a system and its devices to produce consistent and repeatable results for graphic and document editing and publishing. ICC profiles are typically calibrated with a (tristimulus) colorimeter, or a spectrophotometer when absolute color accuracy is required.

Tip: This article begins quite technical. If clarification is needed, see an introductory article about Color Management (On Linux).

Utilities

  • ArgyllCMS — ICC compatible color management system. It supports accurate ICC profile creation for scanners, cameras and film recorders, and calibration and profiling of displays and RGB & CMYK printers.
https://argyllcms.com/ || argyllcms
  • ColorHug — The Hughski ColorHug Colorimeter is a low cost open-source hardware sensor used to calibrate screens. This package includes the client tools which allows the user to upgrade the firmware on the sensor or to query the sensor from command line scripts.
https://github.com/hughski/colorhug-client || colorhug-client
  • dcamprof — A digital camera profiling tool.
https://www.ludd.ltu.se/~torger/dcamprof.html || dcamprofAUR
  • DisplayCAL — Display calibration and profiling solution with a focus on accuracy and versatility. At its core it relies on ArgyllCMS color management system, to take measurements, create calibrations and profiles, and for a variety of other advanced color related tasks.
https://displaycal.net/ || displaycal
  • GNOME Color Manager — Set of graphical utilities for color management to be used in the GNOME desktop.
https://gitlab.gnome.org/GNOME/gnome-color-manager || gnome-color-manager
  • xcalib — Lightweight monitor calibration loader which can load an ICC monitor profile to be shared across desktop applications.
https://github.com/OpenICC/xcalib || xcalib

Profile generation

Color management is a workflow of hardware calibration, software profiling and embedding the profile into the picture or video. It is all based on using an ICC profile.

Colorimeter or spectrometer

It is highly recommended to use a colorimeter or spectrometer device for hardware-assisted display, printer and scanner calibration. For home use there are several affordable colorimeters available. Some are well- or even better-supported under Linux than on other operating systems. Frequently recommended devices are X-Rite ColorMunki Display, DataColor Spyder5 Express and the open source hardware ColorHug. You can find more Linux-supported devices listed in the AgyllCMS documentation.

Argyll CMS

The Argyll Color Management System is a complete suite of command-line profile creation and loading tools listed under argyllcms.

Review the official Argyll CMS documentation for details on how to profile selected devices.

Monitor calibration and profiling with additional calibration hardware

There is a GUI frontend for ArgyllCMS called DisplayCal, available as displaycal. In most common cases you will want to use its default settings. It is a common way to calibrate to a daylight color of 6500K and gamma 2,2. Read the DispalGui documentation for more. Many tutorials are available on the net.

Scanner calibration

Follow the scanner part of the scanner calibration tutorial.

Printer calibration

See cups-calibrate(8).

File transfer

Profile generation on a Windows or macOS system is one of the easiest and most widely recommended methods to obtain a ICC monitor profile. Since ICC color profiles are written to an open specification, they are compatible across operating systems. Transferring profiles from one OS to another can be used as a workaround for the lack of support for certain spectrophotometers or colorimeters under Linux: one can simply produce a profile on a different OS and then use it in a Linux workflow. Note that the system on which the profile is generated must host the exact same video card and monitor for which the profile is to be used. Once generation of an ICC profile, or a series of profiles is complete on a Windows system, copy the file(s) from the default path:

C:\WINDOWS\System32\spool\drivers\color

macOS generally stores ICC profiles in:

  • /Library/ColorSync/Profiles/Displays/
  • /System/Library/ColorSync/Profiles/Displays/
  • /Users/USER_NAME/Library/ColorSync/Profile

Once the appropriate .icc/.icm files have been copied, install the device profiles to your desired system. Common installation device profiles directories on Linux include:

  • /usr/share/color/icc
  • /usr/local/share/color/icc
  • /home/USER_NAME/.color/icc
Note: Ensure that the calibrated contrast, brightness and RGB settings of the monitor do not change between the time of calibration and the loading of the ICC profile. Use this method only if you are absolutely certain that neither Linux nor the other OS does anything behind your back (in video drivers or vendor utilities) that alters the signal actually sent to the display, or the way the display interprets the signal. Watch out for "Broadcast RGB" or similar settings. One concrete example where profiling in Windows and Linux yields significantly different results is the Lenovo Ideapad Yoga 2 Pro laptop, because these OSes program the flat panel controller in very different ways.

Gnome Color Manager

On Gnome, an ICC profile can easily be created by using gnome-color-manager. Under Gnome, this is accessible via the Control Center and is pretty straightforward to use. You will need a colorimeter device to use this feature.

LPROF ICC Profiler

This article or section is out of date.

Reason: The lprof package was dropped from AUR since it no longer built. According to Wikipedia, it's obsolete anyway and had not seen a release since 2006. Depending on purpose, another package from #Utilities may be used. (Discuss in Talk:ICC profiles#Remove section 2.8 about LPROF ICC Profiler?)

LPROF is an ICC profiler with a graphical user interface listed under lprofAUR[broken link: package not found] in the AUR.

Note: The following walkthrough has been modified from the ArchWiki article Using LPROF to profile monitors.

Monitor calibration

Contrast/Brightness

Adjust the lighting in the room to what you will be using when working. Even if your screen is coated with an anti-reflective coating, you should avoid light falling directly on it. Let your monitor warm up for at least an hour for the image to get stabilized. If your calibration device has an ambient diffuser, adjust your room brightness to reach the recommended target lux point.

  1. Set the monitor contrast to maximum, or 100%.
  2. Next, display a pure black over entire screen by creating a small, black PNG image (all pixels have RGB = 0, 0, 0) and opening it up in a picture viewer that is capable of displaying an image in fullscreen mode without any controls.
  3. Reduce the vertical size of the monitor screen (not the PNG image displayed by a picture viewer but the whole of what is displayed on the screen) to 60% to 70% of the full height. What is revealed above and below the picture is called a non-scanned area, and since that area is not receiving any voltage, it is the blackest of black your monitor is capable of displaying.
  4. Locate the brightness control (usually a sun, circle with rays projecting from its edges) and lower the value until the black image matches the non-scanned area.
Color temperature

As we said in the introduction, setting color temperature must occur at noon. If you only have fixed factory default color temperature, you do not really need to wait for the sunny day to come. Just set it to 6500K.

Place your monitor so that you can see outside the window and your screen at the same time. For this step, you also need to create a white square image (RGB = 255, 255, 255), roughly 10 by 10 centimeters (4 by 3 inches). Using the same Gwenview technique as with brightness/contrast, display the white square on a pure black background.

  1. First, prepare your eyes by staring at the outside world for a while. Let them adjust to the daylight viewing condition for a few minutes.
  2. Glance at the monitor, and the white square for a few second (it has to be short, because eyes will readjust quickly).
  3. If the square seems yellowish, you need higher color temperature, or if it has a blueish cast, the temperature needs to be lowered.
  4. Keep glancing, looking out the window, and adjusting the white temperature, until the square looks pure white

Take your time with the steps described above. It is essential to get it right.

Monitor profiling without additional calibration hardware

Start lprof. You will be presented by a fairly large window with multiple tabs on the right.

  1. Click on the Monitor Profiler tab. Then click on the large Enter monitor values >> button.
  2. White point should be set to 6500K (daylight).
  3. Primaries should be set to either SMPTE RP145-1994, or EBU Tech.3213-E or P22, or whatever appropriate values for your monitor. If you come across correct values for your monitor, enter those by selecting User Defined from the drop-down. If in doubt, you may use P22 for all monitors with Trinitron CRTs (in this case, Trinitron is not related to Sony Trinitron mointors and TVs), and SMPTE RP145-1994 for other CRTs.
  4. Click the Set Gamma and Black Point button.
  5. You will now see a full-screen view of two charts with some controls at the bottom.
  6. Uncheck the Link channels check-box and adjust individual Red, Green, and Blue gamma by either moving the slider left or right, or by entering and changing values in the three boxes to the left. The goal is to make the chart on the left (the smaller square one) flat. When you are satisfied with how it looks, check the Link channels check-box and adjust the gamma again.
  7. When you are done, click OK. Click OK again.

When you are finished entering monitor values, you might want to enter some information about the monitor. This is not mandatory, but it is always nice to know what profile is for what.

  1. Click Profile identification button.
  2. Fill in the data.
  3. Click OK to finish.

After you are all done, click on the '...' button next to Output Profile File box. Enter the name of your profile: somemonitor.icc. Click Create Profile button, and you are done.

ThinkPads

See color profiles for IBM/Lenovo ThinkPad notebook monitor profile (generic) support.

The ThinkWiki instructions can be used to extract other ThinkPad driver executables from Lenovo, such as the Monitor INF File for Windows 11 for X1 Carbon Gen 10, X1 Yoga Gen 7, Z13, Z16.

Loading ICC profiles

Note: NVIDIA's proprietary driver is not compatible with colord profile management. You will get inconsistent results when working with color managed applications. Either use Nouveau or mask colord.service and load ICC profiles manually with dispwin.

ICC profiles are loaded either by the session daemon or by a dedicated ICC loader. Both Gnome and KDE have daemons capable of loading ICC profiles from colord. If you use colord in combination with either gnome-settings-daemon or colord-kde, the profile will be loaded automatically. If you are not using either Gnome or KDE, you may install an independent daemon, xiccd, which does the same but does not depend on your desktop environment. Do not start two ICC-capable daemons (e.g. gnome-settings-daemon and xiccdAUR) at the same time.

If you are not using any ICC-capable session daemon, make sure you use only one ICC loader - either xcalib, dispwin, dispcalGUI-apply-profiles or others. Otherwise, you can easily end up with an uncontrolled environment. (The most recently run loader sets the calibration, and the earlier loaded calibration is overwritten.)

Before using a particular ICC loader, you should understand that some tools set only the calibration curves (e.g. xcalib), some tools set only the display profile to X.org _ICC_PROFILE atom (e.g. xicc), and other tools do both tasks at once (e.g. dispwin, dispcalGUI-apply-profiles).

Note: Running nvidia-settings or using the -load-config-only argument will override the ICC file when using the .xinitrc examples.

xiccd

xiccdAUR is a simple bridge between colord and X. It allows non-GNOME and non-KDE desktop environment to load and apply icc profiles.

Make sure colord is installed, then install xiccdAUR.

Copy your icc profiles to the profile directory.

# cp icc_profile /usr/share/color/icc/colord/

Start/enable colord.service.

If colord was already running, you need to restart colord.service, otherwise new profiles will not show up.

Execute xiccd in a terminal as a backend and ignore any verbose messages. Keep xiccd running during the next steps.

$ xiccd

This will enumerate displays and register them for colormgr(colord).

Open another terminal and execute colormgr. Note the Device ID of your screen.

$ colormgr get-devices

Note the Profile ID which you added earlier and want to use.

$ colormgr get-profiles

Add your profile to the display device.

# colormgr device-add-profile device_id profile_id

Make the profile as the default to the display device.

# colormgr device-make-profile-default device_id profile_id

Double-check that xiccdAUR installed /etc/xdg/autostart/xiccd.desktop so that it autostarts at system startup.

# cat /etc/xdg/autostart/xiccd.desktop

Close all terminals, and reboot the system to check whether the icc profile is being applied. If colord was already running, you need to restart colord.service.

xcalib

xcalib is a lightweight monitor calibration loader which can load an ICC monitor profile to be shared across desktop applications. Installation: install the package xcalib.

Xinitrc example

Load profile P221W-sRGB.icc in /usr/share/color/icc on display host:0 when X server starts

#!/bin/bash

/usr/bin/xcalib -d :0 /usr/share/color/icc/P221W-sRGB.icc

JWM <StartupCommand> example

Load profile P221W-Native.icc in /usr/local/share/color/icc on display host:0 when JWM starts

 <StartupCommand>xcalib -d :0 /usr/local/share/color/icc/P221W-Native.icc</StartupCommand>

dispwin

dispwin is a part of argyllcms.

Xinitrc example

Load profile 906w-6500K.icc in /home/arch/.color/icc on display 0 when X server starts

#!/bin/bash

/usr/bin/dispwin -d0 /home/arch/.color/icc/906w-6500K.icc

JWM <StartupCommand> example

Load Argyll calibration file 906w-7000K.cal in /usr/local/share/color/icc on display 1 when JWM starts

 <StartupCommand>dispwin -d1 /usr/local/share/color/icc/906w-7000K.cal</StartupCommand>

You can easily use one of these loaders to apply the color profile in early boot stage when starting a display manager, e.g. using LightDM startup script. This allows to load a single icc profile file. This will not work with loading several profile files when using a multi monitopr setup.

Wayland

Wayland supports color management through color profiles, but the user interface for managing these profiles is currently not implemented properly. However, you can manually add a color profile through the following steps:

Firstly, copy your .icc color profile file to the /usr/share/color/icc/colord/ directory.

Run colormgr get-profiles to obtain the available color profiles, and colormgr get-devices to obtain the IDs of the attached devices.

To assign a color profile to a device, use the command colormgr device-add-profile Device_ID Profile_ID. The device ID is obtained from the output of colormgr get-devices and the profile ID from colormgr get-profiles.

For example, if your device ID is "DP-3" and the profile ID is "icc-5fb87663ba378cadf463ba64d92dced3", the command would look like:

$ colormgr device-add-profile DP-3 icc-5fb87663ba378cadf463ba64d92dced3

With these steps, you can manually manage your color profiles in Wayland until the user interface is fully implemented. Once the ICC profile is added with this method, it will show up and work as expected in system settings like Color Manager in the KDE Plasma settings.

Applications that support ICC profiles

  • Xsane can use ICC profiles for color-corrected scanning.
  • CUPS can use ICC profiles for color-corrected printing using Colord, but the actual implementation and usability is unclear.
  • GIMP can use ICC profiles for display of the image being edited. The use of the installed ICC profile has to be explicitly enabled in the settings dialog, though.
  • mpv can take an ICC profile into account when playing a video. The command line argument is: --icc-profile=/path/to/profile.icc or --icc-profile-auto. Only --vo=gpu and --vo=gpu-next do color management; compatibility/fallback VO drivers will silently ignore the ICC profile options.
  • Firefox, by default, uses the system-wide ICC profile only when displaying images that are already tagged with an ICC profile. To assume that untagged images use sRGB and apply color correction also to them, set the gfx.color_management.mode preference to 1. Firefox can also use an ICC profile using the configuration option gfx.color_management.display_profile.
  • Both Eye of Gnome (eog) and Eye of MATE (eom) automatically use the system-installed ICC profile.

See also