![]() |
VOOZH | about |
If you would like to support the development of, technical assistance with, and continued availability of DisplayCAL and ArgyllCMS, please consider a financial contribution.
As DisplayCAL wouldn't be useful without ArgyllCMS, all contributions received for DisplayCAL will be split between both projects.
For light personal non-commercial use, a one-time contribution may be appropriate.
If you're using DisplayCAL professionally, an annual or monthly contribution would make a great deal of difference in ensuring that both projects continue to be available.
If you have decided to contribute (many thanks!), but you'd like to give to ArgyllCMS directly on your own behalf (visit argyllcms.com and scroll down a bit to get to its contribution links), please leave a message on your DisplayCAL contribution if contributing to both projects. Please note that if your contribution should be put towards adding a certain feature in ArgyllCMS, like support for a specific instrument, it will be more appropriate and efficient to contribute to ArgyllCMS only, and directly.
(For other means of contributing, please contact me)Thanks to all contributors!
Special thanks to the following people and organizations:
Riley Brandt Photography—The Open Source Photography Course
👁 Image
If you'd like to measure color on the go, you may also be interested in ArgyllPRO ColorMeter by Graeme Gill, author of ArgyllCMS. Available for Android from the Google Play store. Check out the 2 Minute Overview + Guided Tour Video.
DisplayCAL (formerly known as dispcalGUI) is a display calibration and profiling solution with a focus on accuracy and versatility (in fact, the author is of the honest opinion it may be the most accurate and versatile ICC compatible display profiling solution available anywhere). At its core it relies on ArgyllCMS, an advanced open source color management system, to take measurements, create calibrations and profiles, and for a variety of other advanced color related tasks.
Calibrate and characterize your display devices using one of many supported measurement instruments, with support for multi-display setups and a variety of available options for advanced users, such as verification and reporting functionality to evaluate ICC profiles and display devices, creating video 3D LUTs, as well as optional CIECAM02 gamut mapping to take into account varying viewing conditions. Other features include:
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
DisplayCAL is written in Python and uses the 3rd-party packages NumPy, wxPython (GUI[4] toolkit), Certifi, PyGObject or dbus-python for Linux (required for Wayland support with colord), as well as Python extensions for Windows, comtypes and the Python WMI module to provide Windows-specific functionality. Other minor dependencies include faulthandler, psutil, PyChromecast and pyglet (macOS/Windows) or libSDL2 (Linux). It makes extensive use of and depends on functionality provided by ArgyllCMS. The build system to create standalone executables additionally uses py2app on Mac OS X or py2exe on Windows. All of these software packages are © by their respective authors.
Native packages for several distributions are available via openSUSE Build Service:
Packages made for older distributions may work on newer distributions as long as nothing substantial has changed (i.e. Python version). Also there are several distributions out there that are based on one in the above list (e.g. Linux Mint which is based on Ubuntu). This means that packages for that base distribution should also work on derivatives, you just need to know which version the derivative is based upon and pick your download accordingly.
If you want to verify the integrity of the downloaded file, compare its SHA-256 checksum to that of the respective entry in the SHA-256 checksum list. To obtain the checksum of the downloaded file, run the following command in Terminal: shasum -a 256 /Users/Your Username/Downloads/DisplayCAL-3.8.9.3.pkg
Installer (recommended) or ZIP archive
If you want to verify the integrity of the downloaded file, compare its SHA-256 checksum to that of the respective entry in the SHA-256 checksum list (case does not matter). To obtain the checksum of the downloaded file, run the following command in a Windows PowerShell command prompt: get-filehash -a sha256 C:\Users\Your Username\Downloads\DisplayCAL-3.8.9.3-[Setup.exe|win32.zip]
You need to have a working Python installation and all requirements.
If you want to verify the integrity of the downloaded file, compare its SHA-256 checksum to that of the respective entry in the SHA-256 checksum list. To obtain the checksum of the downloaded file, run the following command:
Linux: sha256sum /home/Your Username/Downloads/DisplayCAL-3.8.9.3.tar.gz
macOS: shasum -a 256 /Users/Your Username/Downloads/DisplayCAL-3.8.9.3.tar.gz
Windows (PowerShell command prompt): get-filehash -a sha256 C:\Users\Your Username\Downloads\DisplayCAL-3.8.9.3.tar.gz
Alternatively, if you don't mind trying out development code, browse the SVN[8] repository of the latest development version (or do a full checkout using svn checkout svn://svn.code.sf.net/p/dispcalgui/code/trunk displaycal). But please note that the development code might contain bugs or not run at all, or only on some platform(s). Use at your own risk.
Please continue with the Quickstart Guide.
This short guide intends to get you up and running quickly, but if you run into a problem, please refer to the full prerequisites and installation sections.
Launch DisplayCAL. If it cannot find ArgyllCMS on your computer, it will prompt you to automatically download the latest version or select the location manually.
Windows only: If your measurement device is not a ColorMunki Display, i1 Display Pro, Huey, ColorHug, specbos, spectraval or K-10, you need to install an Argyll-specific driver before continuing (the specbos, spectraval and K-10 may require the FTDI virtual COM port driver instead). Select “Instrument” › “Install ArgyllCMS instrument drivers...” from the “Tools” menu. See also “Instrument driver installation under Windows”.
Mac OS X only: If you want to use the HCFR colorimeter, follow the instructions in the “HCFR Colorimeter” section under “Installing ArgyllCMS on Mac OS X” in the ArgyllCMS documentation before continuing.
Connect your measurement device to your computer.
Click the small icon with the swirling arrow 👁 Image
in between the “Display device” and “Instrument” controls to detect connected display devices and instruments. The detected instrument(s) should show up in the “Instrument” dropdown.
If your measurement device is a Spyder2, a popup dialog will show which will let you enable the device. This is required to be able to use the Spyder2 with ArgyllCMS and DisplayCAL.
If your measurement device is a i1 Display 2, i1 Display Pro, ColorMunki Display, DTP94, Spyder2/3/4/5, a popup dialog will show and allow you to import generic colorimeter corrections from the vendor software which may help measurement accuracy on the type of display you're using. After importing, they are available under the “Correction” dropdown, where you can choose one that fits the type of display you have, or leave it at “Auto” if there is no match. Note: Importing from the Spyder4/5 software enables additional measurement modes for that instrument.
Click “Calibrate & profile”. That's it!
Feel free to check out the Wiki for guides and tutorials, and refer to the documentation for advanced usage instructions (optional).
Linux only: If you can't access your instrument, choose “Install ArgyllCMS instrument configuration files...” from the “Tools” menu (if that menu item is grayed out, the ArgyllCMS version you're currently using has probably been installed from the distribution's repository and should already be setup correctly for instrument access). If you still cannot access the instrument, try unplugging and reconnecting it, or a reboot. If all else fails, read “Installing ArgyllCMS on Linux: Setting up instrument access” in the ArgyllCMS documentation.
To use DisplayCAL, you need to download and install ArgyllCMS (1.0 or newer).
You need one of the supported instruments to make measurements. All instruments supported by ArgyllCMS are also supported by DisplayCAL. For display readings, these currently are:
If you've decided to buy a color instrument because ArgyllCMS supports it, please let the dealer and manufacturer know that “You bought it because ArgyllCMS supports it”—thanks.
Note that the i1 Display Pro and i1 Pro are very different instruments despite their naming similarities.
Also there are currently (2014-05-20) five instruments (or rather, packages) under the ColorMunki brand, two of which are spectrometers, and three are colorimeters (not all of them being recent offerings, but you should be able to find them used in case they are no longer sold new):
When using a spectrometer that is supported by the unattended feature (see below), having to take the instrument off the screen to do a sensor self-calibration again after display calibration before starting the measurements for profiling may be avoided if the menu item “Allow skipping of spectrometer self-calibration” under the “Advanced” sub-menu in the “Options” menu is checked (colorimeter measurements are always unattended because they generally do not require a sensor calibration away from the screen, with the exception of the i1 Display 1).
Unattended calibration and profiling currently supports the following spectrometers in addition to most colorimeters:
Be aware you may still be forced to do a sensor calibration if the instrument requires it. Also, please look at the possible caveats.
You can skip this section if you downloaded a package, installer, ZIP archive or disk image of DisplayCAL for your operating system and do not want to run from source.
Normally you can skip this section as the source code contains pre-compiled versions of the C extension module that DisplayCAL uses.
sudo python util/ez_setup.py setuptoolsAfter satisfying all additional requirements for using the source code, you can simply run any of the included .pyw files from a terminal, e.g. python2 DisplayCAL.pyw, or install the software so you can access it via your desktop's application menu with python2 setup.py install. Run python2 setup.py --help to view available options.
One-time setup instructions for source code checked out from SVN:
Run python2 setup.py to create the version file so you don't see the update popup at launch.
If the pre-compiled extension module that is included in the sources does not work for you (in that case you'll notice that the movable measurement window's size does not closely match the size of the borderless window generated by ArgyllCMS during display measurements) or you want to re-build it unconditionally, run python2 setup.py build_ext -i to re-build it from scratch (you need to satisfy the requirements for compiling the C extension module first).
You only need to install the Argyll-specific driver if your measurement device is not a ColorMunki Display, i1 Display Pro, Huey, ColorHug, specbos, spectraval or K-10 (the latter two may require the FTDI virtual COM port driver instead).
To automatically install the Argyll-specific driver that is needed to use some instruments, launch DisplayCAL and select “Instrument” › “Install ArgyllCMS instrument drivers...” from the “Tools” menu. Alternatively, follow the manual instructions below.
If you are using Windows 8, 8.1, or 10, you need to disable driver signature enforcement before you can install the driver. If Secure Boot is enabled in the UEFI[12] setup, you need to disable it first. Refer to your mainboard or firmware manual how to go about this. Usually entering the firmware setup requires holding the DEL key when the system starts booting.
Method 1: Disable driver signature enforcement temporarily
Method 2: Disable driver signature enforcement permanently
bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKSbcdedit /set TESTSIGNING ONTo install the Argyll-specific driver that is needed to use some instruments, launch Windows' Device Manager and locate the instrument in the device list. It may be underneath one of the top level items. Right click on the instrument and select “Update Driver Software...”, then choose “Browse my computer for driver software”, “Let me pick from a list of device drivers on my computer”, “Have Disk...”, browse to the Argyll_VX.X.X\usb folder, open the ArgyllCMS.inf file, click OK, and finally confirm the Argyll driver for your instrument from the list.
To switch between the ArgyllCMS and vendor drivers, launch Windows' Device Manager and locate the instrument in the device list. It may be underneath one of the top level items. Right click on the instrument and select “Update Driver Software...”, then choose “Browse my computer for driver software”, “Let me pick from a list of device drivers on my computer” and finally select the desired driver for your instrument from the list.
A lot of distributions allow easy installation of packages via the graphical desktop, i.e. by double-clicking the package file's icon. Please consult your distribution's documentation if you are unsure how to install packages.
If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing ArgyllCMS on Linux: Setting up instrument access”.
Use the Installer Package to install DisplayCAL to your “Applications” folder. Afterwards open the “DisplayCAL” folder in your “Applications” folder and drag DisplayCAL's icon to the dock if you want easy access.
If you want to use the HCFR colorimeter under Mac OS X, follow the instructions under “installing ArgyllCMS on Mac OS X” in the ArgyllCMS documentation.
Launch the installer which will guide you trough the required setup steps.
If your measurement device is not a ColorMunki Display, i1 Display Pro, Huey, ColorHug, specbos, spectraval or K-10, you need to install an Argyll-specific driver (the specbos, spectraval and K-10 may require the FTDI virtual COM port driver instead). See “Instrument driver installation under Windows”.
Unpack and then simply run DisplayCAL from the created folder.
If your measurement device is not a ColorMunki Display, i1 Display Pro, Huey, ColorHug, specbos, spectraval or K-10, you need to install an Argyll-specific driver (the specbos, spectraval and K-10 may require the FTDI virtual COM port driver instead). See “Instrument driver installation under Windows”.
See the “Prerequisites” section to run directly from source.
Starting with DisplayCAL 0.2.5b, you can use standard distutils/setuptools commands with setup.py to build, install, and create packages. sudo python setup.py install will compile the extension modules and do a standard installation. Run python setup.py --help or python setup.py --help-commands for more information. A few additional commands and options which are not part of distutils or setuptools (and thus do not appear in the help) are also available:
0installappdatabdist_appdmg (Mac OS X only)0install command.bdist_pkg (Mac OS X only)bdist_deb (Linux/Debian-based)sudo rpmdb --initdb, then edit (or create from scratch) the setup.cfg (you can have a look at misc/setup.ubuntu9.cfg for a working example). Under Ubuntu, running utils/dist_ubuntu.sh will automatically use the correct setup.cfg. If you are using Ubuntu 11.04 or any other debian-based distribution which has Python 2.7 as default, you need to edit /usr/lib/python2.7/distutils/command/bdist_rpm.py, and change the line install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT ' to install_cmd = ('%s install --root=$RPM_BUILD_ROOT ' by removing the -O1 flag. Also, you need to change /usr/lib/rpm/brp-compress to do nothing (e.g. change the file contents to exit 0, but don't forget to create a backup copy first) otherwise you will get errors when building.bdist_pyibdist_standalone, which uses PyInstaller instead of bbfreeze/py2app/py2exe.bdist_standalone/Library/Frameworks/Python.framework/Versions/Current/lib). Then, run sudo python util/ez_setup.py -Z setuptools which will install setuptools unpacked, thus allowing py2app to acces all its files. This is no longer an issue with py2app 0.4 and later.buildservicesdist).finalize_msi (Windows only)bdist_msi. Successful MSI creation needs a patched msilib (additional information).inno (Windows only)py2exe or bdist_standalone commands and for 0install.purgebuild and DisplayCAL.egg-info directories including their contents.purge_distdist directory and its contents.readmeuninstallinstall command.--cfg=<name>-n, --dry-run--skip-instrument-configuration-files--skip-postinstall--stability=stable | testing | developer | buggy | insecure0install command.--use-distutils--use-setuptools switch (see next paragraph).--use-setuptools--use-distutils switch (see above).If your measurement device is a i1 Display 2, i1 Display Pro, ColorMunki Display, DTP94, Spyder2/3/4/5, you'll want to import the colorimeter corrections that are part of the vendor software packages, which can be used to better match the instrument to a particular type of display. Note: The full range of measurement modes for the Spyder4/5 are also only available if they are imported from the Spyder4/5 software.
Choose “Import colorimeter corrections from other display profiling software...” from DisplayCAL's “Tools” menu.
If your measurement device is a Spyder2, you need to enable it to be able to use it with ArgyllCMS and DisplayCAL. Choose “Enable Spyder2 colorimeter...” from DisplayCAL's “Tools” menu.
If you have previous experience, skip ahead. If you are new to display calibration, here is a quick outline of the basic concept.
First, the display behavior is measured and adjusted to meet
user-definable target characteristics, like brightness, gamma and white point.
This step is generally referred to as calibration. Calibration is done by
adjusting the monitor controls, and the output of the graphics card (via
calibration curves, also sometimes called video LUT[7] curves—please don't confuse these with LUT profiles, the differences are explained here) to get as
close as possible to the chosen target.
To meet the user-defined target characteristics, it is generally advisable to
get as far as possible by using the monitor controls, and only thereafter by
manipulating the output of the video card via calibration curves, which are loaded into the video card gamma table, to get the best
results.
Second, the calibrated displays response is measured and an ICC[5] profile describing it is created.
Optionally and for convenience purposes, the calibration is stored in the profile, but both still need to be used together to get correct results. This can lead to some ambiguity, because loading the calibration curves from the profile is generally the responsibility of a third party utility or the OS, while applications using the profile to do color transforms usually don't know or care about the calibration (they don't need to). Currently, the only OS that applies calibration curves out-of-the-box is Mac OS X (under Windows 7 or later you can enable it, but it's off by default and doesn't offer the same high precision as the DisplayCAL profile loader)—for other OS's, DisplayCAL takes care of creating an appropriate loader.
Even non-color-managed applications will benefit from a loaded calibration because it is stored in the graphics card—it is “global”. But the calibration alone will not yield accurate colors—only fully color-managed applications will make use of display profiles and the necessary color transforms.
Regrettably there are several image viewing and editing applications that only implement half-baked color management by not using the system's display profile (or any display profile at all), but an internal and often unchangeable “default” color space like sRGB, and sending output unaltered to the display after converting to that default colorspace. If the display's actual response is close to sRGB, you might get pleasing (albeit not accurate) results, but on displays which behave differently, for example wide-color-gamut displays, even mundane colors can get a strong tendency towards neon.
Colorimeters need a correction in hardware or software to obtain correct measurements from different types of displays (please also see “Wide Gamut Displays and Colorimeters” on the ArgyllCMS website for more information). The latter is supported when using ArgyllCMS >= 1.3.0, so if you own a display and colorimeter which has not been specifically tuned for this display (i.e. does not contain a correction in hardware), you can apply a correction that has been calculated from spectrometer measurements to help better measure such a screen.
You need a spectrometer in the first place to do the necessary measurements to create such a correction, or you may query DisplayCAL's Colorimeter Corrections Database, and there's also a list of contributed colorimeter correction files on the ArgyllCMS website—please note though that a matrix created for one particular instrument/display combination may not work well for different instances of the same combination because of display manufacturing variations and generally low inter-instrument agreement of most older colorimeters (with the exception of the DTP94), newer devices like the i1 Display Pro/ColorMunki Display seem to be less affected by this.
Starting with DisplayCAL 0.6.8, you can also import generic corrections from some profiling softwares by choosing the corresponding item in the “Tools” menu.
If you buy a screen bundled with a colorimeter, the instrument may have been matched to the screen in some way already, so you may not need a software correction in that case.
These instruments greatly reduce the amount of work needed to match them to a display because they contain the spectral sensitivities of their filters in hardware, so only a spectrometer reading of the display is needed to create the correction (in contrast to matching other colorimeters to a display, which needs two readings: One with a spectrometer and one with the colorimeter).
That means anyone with a particular screen and a spectrometer can create a special Colorimeter Calibration Spectral Set (.ccss) file of that screen for use with those colorimeters, without needing to actually have access to the colorimeter itself.
Through the main window, you can choose your settings. When running calibration measurements, another window will guide you through the interactive part of display adjustment.
Here, you can load a preset, or a calibration (.cal) or ICC profile (.icc / .icm) file from a previous
run. This will set options to
those stored in the file. If the file contains only a subset of settings, the other options will automatically be reset to defaults (except the 3D LUT settings, which won't be reset if the settings file doesn't contain 3D LUT settings, and the verification settings which will never be reset automatically).
If a calibration file or profile is loaded in this way, its name will
show up here to indicate that the settings reflect those in the file.
Also, if a calibration is present it can be used as the base when “Just Profiling”.
The chosen settings file will stay selected as long as you do not change any of the
calibration or profiling settings, with one exception: When a .cal file with the same base name as the settings file
exists in the same directory, adjusting the quality and profiling controls will not cause unloading of the settings file. This allows you to use an existing calibration with new profiling settings for “Just Profiling”, or to update an existing calibration with different quality and/or profiling settings. If you change settings in other situations, the file will get unloaded (but current settings will be retained—unloading just happens to remind you that the settings no longer match those in the file), and current display profile's calibration curves will be restored (if present, otherwise they will reset to linear).
When a calibration file is selected, the “Update calibration” checkbox will become available, which takes less time than a calibration from scratch. If a ICC[5] profile is selected, and a calibration file with the same base name exists in the same directory, the profile will be updated with the new calibration. Ticking the “Update calibration” checkbox will gray out all options as well as the “Calibrate & profile” and “Just profile” buttons, only the quality level will be changeable.
Starting with DisplayCAL v0.2.5b, predefined settings for several use cases are selectable in the settings dropdown. I strongly recommend to NOT view these presets as the solitary “correct” settings you absolutely should use unmodified if your use case matches their description. Rather view them as starting points, from where you can work towards your own, optimized (in terms of your requirements, hardware, surroundings, and personal preference) settings.
Many displays, be it CRT, LCD, Plasma or OLED, have a default response characteristic close to a gamma of approx. 2.2-2.4 (for CRTs, this is the actual native behaviour; and other technologies typically try to mimic CRTs). A target response curve for calibration that is reasonably close to the native response of a display should help to minimize calibration artifacts like banding, because the adjustments needed to the video card's gamma tables via calibration curves will not be as strong as if a target response farther away from the display's native response had been chosen.
Of course, you can and should change the calibration response curve to a value suitable for your own requirements. For example, you might have a display that offers hardware calibration or gamma controls, that has been internally calibrated/adjusted to a different response curve, or your display's response is simply not close to a gamma of 2.2 for other reasons. You can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info.
The main user interface is divided into tabs, with each tab containing a sub-set of settings. Not all tabs may be available at any given time. Unavailable tabs will be grayed out.
After connecting the instrument, click the small icon with the swirling arrow 👁 Image
in between the “Display device” and “Instrument” controls to detect connected display devices and instruments.
Directly connected displays will appear at the top of the list as entries in the form “Display Name/Model @ x, y, w, h” with x, y, w and h being virtual screen coordinates depending on resolution and DPI settings. Apart from those directly connected displays, a few additional options are also available:
Starts a standalone web server on your machine, which then allows a local or remote web browser to display the color test patches, e.g. to calibrate/profile a smartphone or tablet computer.
Note that if you use this method of displaying test patches, then colors will be displayed with 8 bit per component precision, and any screen-saver or power-saver will not be automatically disabled. You will also be at the mercy of any color management applied by the web browser, and may have to carefully review and configure such color management.
Causes test patches to be displayed using the madVR Test Pattern Generator (madTPG) application which comes with the madVR video renderer (only available for Windows, but you can connect via local network from Linux and Mac OS X). Note that while you can adjust the test pattern configuration controls in madTPG itself, you should not normally alter the “disable videoLUT” and “disable 3D LUT” controls, as these will be set appropriately automatically when doing measurements.
Note that if you want to create a 3D LUT for use with madVR, there is a “Video 3D LUT for madVR” preset available under “Settings” that will not only configure DisplayCAL to use madTPG, but also setup the correct 3D LUT format and encoding for madVR.
The Q, Inc./Murideo Prisma is a video processor and combined pattern generator/3D LUT holder accessible over the network.
Note that if you want to create a 3D LUT for use with a Prisma, there is a “Video 3D LUT for Prisma” preset available under “Settings” that will not only configure DisplayCAL to use a Prisma, but also setup the correct 3D LUT format and encoding.
Also note that the Prisma has 1 MB of internal memory for custom LUT storage, which is enough for around 15 17x17x17 LUTs. You may occasionally need to enter the Prisma's administrative interface via a web browser to delete old LUTs to make space for new ones.
Allows you to use the built-in pattern generator of DaVinci Resolve video editing and grading software, which is accessible over the network or on the local machine. The way this works is that you start a calibration or profiling run in DisplayCAL, position the measurement window and click “Start measurement”. A message “Waiting for connection on IP:PORT” should appear. Note the IP and port numbers. In Resolve, switch to the “Color” tab and then choose “Monitor calibration”, “CalMAN” in the “Color” menu (Resolve version 11 and earlier) or the “Workspace” menu (Resolve 12).
Enter the IP address in the window that opens (port should already be filled) and click “Connect” (if Resolve is running on the same machine as DisplayCAL, enter localhost or 127.0.0.1 instead). The position of the measurement window you placed earlier will be mimicked on the display you have connected via Resolve.
Note that if you want to create a 3D LUT for use with Resolve, there is a “Video 3D LUT for Resolve” preset available under “Settings” that will not only configure DisplayCAL to use Resolve, but also setup the correct 3D LUT format and encoding.
Note that if you want to create a 3D LUT for a display that is directly connected (e.g. for Resolve's GUI viewer), you should not use the Resolve pattern generator, and select the actual display device instead which will allow for quicker measurements (Resolve's pattern generator has additional delay).
See untethered display measurements. Please note that the untethered mode should generally only be used if you've exhausted all other options.
Some instruments may support different measurement modes for different types of display devices. In general, there are two base measurement modes: “LCD” and “Refresh” (e.g. CRT and Plasma are refresh-type displays). Some instruments like the Spyder4/5 and ColorHug support additional measurement modes, where a mode is coupled with a predefined colorimeter correction (in that case, the colorimeter correction dropdown will automatically be set to “None”).
Variations of these measurement modes may be available depending on the instrument: “Adaptive” measurement mode for spectrometers uses varying integration times (always used by colorimeters) to increase accuracy of dark readings. “HiRes” turns on high resolution spectral mode for spectrometers like the i1 Pro, which may increase the accuracy of measurements.
White level drift compensation tries to counter luminance changes of a warming up display device. For this purpose, a white test patch is measured periodically, which increases the overall time needed for measurements.
Black level drift compensation tries to counter measurement deviations caused by black calibration drift of a warming up measurement device. For this purpose, a black test patch is measured periodically, which increases the overall time needed for measurements. Many colorimeters are temperature stabilised, in which case black level drift compensation should not be needed, but spectrometers like the i1 Pro or ColorMunki Design/Photo/i1Studio are not temperature compensated.
Normally a delay of 200 msec is allowed between changing a patch color in software, and that change appearing in the displayed color itself. For some instuments (i.e. i1 Display Pro, ColorMunki Display, i1 Pro, ColorMunki Design/Photo/i1Studio, Klein K10-A) ArgyllCMS will automatically measure and set an appropriate update delay during instrument calibration. In rare situations this delay may not be sufficient (ie. some TV's with extensive image processing features turned on), and a larger delay can be set here.
Normally the display technology type determines how long is allowed between when a patch color change appears on the display, and when that change has settled down, and as actually complete within measurement tolerance. A CRT or Plasma display for instance, can have quite a long settling delay due to the decay characteristics of the phosphor used, while an LCD can also have a noticeable settling delay due to the liquid crystal response time and any response time enhancement circuit (instruments without a display technology type selection such as spectrometers assume a worst case).
The display settle time multiplier allows the rise and fall times of the model to be scaled to extend or reduce the settling time. For instance, a multiplier of 2.0 would double the settling time, while a multiplier of 0.5 would halve it.
The default value of “Auto” detects the correct output levels automatically during measurements. This usually takes a few seconds. If you know the correct output levels for the selected display, you can set it here.
Full field pattern insertion can help with displays that employ ASBL (automatic static brightness limiting), like some types of OLED and HDR displays. A full field pattern is shown every few seconds (the minimum interval can be set with the respective control) for a given duration, at a given signal level, if this option is enabled.
This can improve a colorimeters accuracy for a particular type of display, please also see “A note about colorimeters, displays and DisplayCAL”. You can import generic matrices from some other display profiling softwares, as well as check the online Colorimeter Corrections Database for a match of your display/instrument combination (click the small globe next to the correction dropdown)—please note though that all colorimeter corrections in the online database have been contributed by various users, and their usefulness to your particular situation is up to you to evaluate: They may or may not improve the absolute accuracy of your colorimeter with your display.
Please note this option is only available if using ArgyllCMS >= 1.3.0 and a colorimeter.
For correction matrices, a visual simulation of the effect of the correction will be shown (“flower”). Note that this is not meant to be color accurate, but give you a rough idea about the impact on the measurements of your colorimeter. The six outer circles of primary and secondary colors (clockwise: green, yellow, red, magenta, blue, cyan) and center white circle all have an outer part as well as a smaller inner area. The outer part of each circle represents what the colorimeter would “see” (i.e. measure) without the correction, the inner part of each circle represents the corrected result.
Below this visual representation you will find the matrix values, as well as optional further information, like the reference instrument or source used, the method used to create the correction (“perceptual” or “minimize xy chromaticity difference”), as well as the average and maximum fit error (the lower the fit error, the better the corrected instrument should match the reference instrument).
For spectral samples, the respective spectra will be shown along with information about the reference spectrometer used, as well as the resolution and range in nm (nanometer). You can toggle between the spectral graph and a CIE 1931 chromaticity diagram using the button at the top, which allows you to see the corresponding xy locations of the spectra in comparison to several common RGB colorspaces (Rec. 709, DCI P3, Adobe RGB and Rec. 2020).
To see this setting, you need to have an instrument that supports spectral readings (i.e. a spectrometer) or spectral sample calibration (e.g. i1 DisplayPro, ColorMunki Display and Spyder4/5), and go into the “Options” menu, and enable “Show advanced options”.
This can be used to select a different colorimetric observer, also known as color matching function (CMF), for instruments that support it. The default is the CIE 1931 standard 2° observer.
Note that if you select anything other than the default 1931 2 degree observer, then the Y values will not be cd/m², due to the Y curve not being the CIE 1924 photopic V(λ) luminosity function.
Allows setting the target white point locus to the equivalent of a daylight or black body spectrum of the given temperature in degrees Kelvin, or as chromaticity co-ordinates. By default the white point target will be the native white of the display, and it's color temperature and delta E to the daylight spectrum locus will be shown during monitor adjustment, and adjustments will be recommended to put the display white point directly on the Daylight locus. If a daylight color temperature is given, then this will become the target of the adjustment, and the recommended adjustments will be those needed to make the monitor white point meet the target. Typical values might be 5000 for matching printed output, or 6500, which gives a brighter, bluer look. A white point temperature different to that native to the display may limit the maximum brightness possible.
A whitepoint other than “As measured” will also be used as the target whitepoint when creating 3D LUTs.
If you want to find out the current uncalibrated whitepoint of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.
If you want to adjust the whitepoint to the chromaticities of your ambient lighting, or those of a viewing booth as used in prepress and photography, and your measurement device has ambient measuring capability (e.g. like the i1 Pro or i1 Display with their respective ambient measurement heads), you can use the “Measure ambient” button next to the whitepoint settings. If you want to measure ambient lighting, place the instrument upwards, beside the display. Or if you want to measure a viewing booth, put a metamerism-free gray card inside the booth and point the instrument towards it. Further instructions how to measure ambient may be available in your instrument's documentation.
The visual whitepoint editor allows visually adjusting the whitepoint on display devices that lack hardware controls as well as match several displays to one another (or a reference). To use it, set the whitepoint to “Chromaticity” and click the visual whitepoint editor button (you can open as many visual whitepoint editors simultaneously as you like, so that e.g. one can be left unchanged as reference, while the other can be adjusted to match said reference). The editor window can be put into a distraction-free fullscreen mode by maximizing it (press ESC to leave fullscreen again). Adjust the whitepoint using the controls on the editor tool pane until you have achieved a visual match. Then, place your instrument on the measurement area and click “Measure”. The measured whitepoint will be set as calibration target.
Set the target brightness of white in cd/m2. If this number cannot be reached, the brightest output possible is chosen, consistent with matching the white point target. Note that many of the instruments are not particularly accurate when assessing the absolute display brightness in cd/m2. Note that some LCD screens behave a little strangely near their absolute white point, and may therefore exhibit odd behavior at values just below white. It may be advisable in such cases to set a brightness slightly less than the maximum such a display is capable of.
If you want to find out the current uncalibrated white level of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.
(To see this setting, go into the “Options” menu, and enable “Show advanced options”)
Can be used to set the target brightness of black in cd/m2 and is useful for e.g. matching two different screens with different native blacks to one another, by measuring the black levels on both (i.e. in the “Tools” menu, choose “Report on uncalibrated display”) and then entering the highest measured value. Normally you may want to use native black level though, to maximize contrast ratio. Setting too high a value may also give strange results as it interacts with trying to achieve the target “advertised” tone curve shape. Using a black output offset of 100% tries to minimize such problems.
The target response curve is normally an exponential curve (output = inputgamma), and defaults to 2.2 (which is close to a typical CRT displays real response). Four pre-defined curves can be used as well: the sRGB colorspace response curve, which is an exponent curve with a straight segment at the dark end and an overall response of approximately gamma 2.2, the L* curve, which is the response of the CIE L*a*b* perceptual colorspace, the Rec. 709 video standard response curve and the SMPTE 240M video standard response curve.
Another possible choice is “As measured”, which will skip video card gamma table (1D LUT) calibration.
Note that a real display usually can't reproduce any of the ideal pre-defined curves, since it will have a non-zero black point, whereas all the ideal curves assume zero light at zero input.
For gamma values, you can also specify whether it should be interpreted relative, meaning the gamma value provided is used to set an actual response curve in light of the non-zero black of the actual display that has the same relative output at 50% input as the ideal gamma power curve, or absolute, which allows the actual power to be specified instead, meaning that after the actual displays non-zero black is accounted for, the response at 50% input will probably not match that of the ideal power curve with that gamma value (to see this setting, you have to go into the “Options” menu, and enable “Show advanced options”).
To allow for the non-zero black level of a real display, by default the target curve values will be offset so that zero input gives the actual black level of the display (output offset). This ensures that the target curve better corresponds to the typical natural behavior of displays, but it may not be the most visually even progression from display minimum. This behavior can be changed using the black output offset option (see further below).
Also note that many color spaces are encoded with, and labelled as having a gamma of approximately 2.2 (ie. sRGB, REC 709, SMPTE 240M, Macintosh OS X 10.6), but are actually intended to be displayed on a display with a typical CRT gamma of 2.4 viewed in a darkened environment.
This is because this 2.2 gamma is a source gamma encoding in bright viewing conditions such as a television studio, while typical display viewing conditions are quite dark by comparison, and a contrast expansion of (approx.) gamma 1.1 is desirable to make the images look as intended.
So if you are displaying images encoded to the sRGB standard, or displaying video through the calibration, just setting the gamma curve to sRGB or REC 709 (respectively) is probably not what you want! What you probably want to do, is to set the gamma curve to about gamma 2.4, so that the contrast range is expanded appropriately, or alternatively use sRGB or REC 709 or a gamma of 2.2 but also specify the actual ambient viewing conditions via a light level in Lux, so that an appropriate contrast enhancement can be made during calibration. If your instrument is capable of measuring ambient light levels, then you can do so.
(For in-depth technical information about sRGB, see “A Standard Default Color Space for the Internet: sRGB” at the ICC[5] website for details of how it is intended to be used)
If you're wondering what gamma value you should use, you can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info. Setting the gamma to the reported value can then help to reduce calibration artifacts like banding, because the adjustments needed for the video card's gamma table should not be as strong as if a gamma further away from the display's native response was chosen.
(To see this setting, go into the “Options” menu, and enable “Show advanced options”)
As explained for the tone curve settings, often colors are encoded in a situation with viewing conditions that are quite different to the viewing conditions of a typical display, with the expectation that this difference in viewing conditions will be allowed for in the way the display is calibrated. The ambient light level option is a way of doing this. By default calibration will not make any allowances for viewing conditions, but will calibrate to the specified response curve, but if the ambient light level is entered or measured, an appropriate viewing conditions adjustment will be performed. For a gamma value or sRGB, the original viewing conditions will be assumed to be that of the sRGB standard viewing conditions, while for REC 709 and SMPTE 240M they will be assumed to be television studio viewing conditions.
By specifying or measuring the ambient lighting for your display, a viewing conditions adjustment based on the CIECAM02 color appearance model will be made for the brightness of your display and the contrast it makes with your ambient light levels.
Please note your measurement device needs ambient measuring capability (e.g. like the i1 Pro or i1 Display with their respective ambient measurement heads) to measure the ambient light level.
(To see this setting, go into the “Options” menu, and enable “Show advanced options”)
Real displays do not have a zero black response, while all the target response curves do, so this has to be allowed for in some way.
The default way of handling this (equivalent to 100% black output offset) is to allow for this at the output of the ideal response curve, by offsetting and scaling the output values. This defined a curve that will match the responses that many other systems provide and may be a better match to the natural response of the display, but will give a less visually even response from black.
The other alternative is to offset and scale the input values into the ideal response curve so that zero input gives the actual non-zero display response. This ensures the most visually even progression from display minimum, but might be hard to achieve since it is different to the natural response of a display.
A subtlety is to provide a split between how much of the offset is accounted for as input to the ideal response curve, and how much is accounted for at the output, where the degree is 0.0 accounts for it all as input offset, and 100% accounts for all of it as output offset.
(To see this setting, go into the “Options” menu, and enable “Show advanced options”)
Normally dispcal will attempt to make all colors down the neutral axis (R=G=B) have the same hue as the chosen white point. Near the black point, red, green or blue can only be added, not subtracted from zero, so the process of making the near black colors have the desired hue, will lighten them to some extent. For a device with a good contrast ratio or a black point that has nearly the same hue as the white, this is not a problem. If the device contrast ratio is not so good, and the black hue is noticeably different to that of the chosen white point (which is often the case for LCD type displays), this could have a noticeably detrimental effect on an already limited contrast ratio. Here the amount of black point hue correction can be controlled.
By default a factor of 100% will be used, which is usually good for “Refresh”-type displays like CRT or Plasma and also by default a factor of 0% is used for LCD type displays, but you can override these with a custom value between 0% (no correction) to 100% (full correction), or enable automatically setting it based on the measured black level of the display.
If less than full correction is chosen, then the resulting calibration curves will have the target white point down most of the curve, but will then cross over to the native or compromise black point.
(To see this setting, go into the “Options” menu, and enable “Show advanced options”)
If the black point is not being set completely to the same hue as the white point (ie. because the factor is less than 100%), then the resulting calibration curves will have the target white point down most of the curve, but will then blend over to the native or compromise black point that is blacker, but not of the right hue. The rate of this blend can be controlled. The default value is 4.0, which results in a target that switches from the white point target to the black, moderately close to the black point. While this typically gives a good visual result with the target neutral hue being maintained to the point where the crossover to the black hue is not visible, it may be asking too much of some displays (typically LCD type displays), and there may be some visual effects due to inconsistent color with viewing angle. For this situation a smaller value may give a better visual result (e.g. try values of 3.0 or 2.0. A value of 1.0 will set a pure linear blend from white point to black point). If there is too much coloration near black, try a larger value, e.g. 6.0 or 8.0.
(This setting will not apply and be hidden when the tone curve is set to “As measured”)
Determines how much time and effort to go to in calibrating the display. The lower the speed, the more test readings will be done, the more refinement passes will be done, the tighter will be the accuracy tolerance, and the more detailed will be the calibration of the display. The result will ultimately be limited by the accuracy of the instrument, the repeatability of the display and instrument, and the resolution of the video card gamma table entries and digital or analogue output (RAMDAC).
(Note: This option has no effect if just calibrating and creating a simple curves + matrix profile directly from the calibration data without additional profiling measurements)
This effectively prevents black crush when using the profile, but at the expense of accuracy. It is generally best to only use this option when it is not certain that the applications you are going to use have a high quality color management implementation. For LUT profiles, more sophisticated options exist (i.e. advanced gamut mapping options and use either “Enhance effective resolution of colorimetric PCS[11]-to-device tables”, which is enabled by default, or “Gamut mapping for perceptual intent”, which can be used to create a perceptual table that maps the black point).
Generally you can differentiate between two types of profiles: LUT[7] based and matrix based.
Matrix based profiles are smaller in filesize, somewhat less accurate (though in most cases smoother) compared to LUT[7] based types, and usually have the best compatibility across CMM[2]s, applications and systems — but only support the colorimetric intent for color transforms. For matrix based profiles, the PCS[11] is always XYZ. You can choose between using individual curves for each channel (red, green and blue), a single curve for all channels, individual gamma values for each channel or a single gamma for all channels. Curves are more accurate than gamma values. A single curve or gamma can be used if individual curves or gamma values degrade the gray balance of an otherwise good calibration.
LUT[7] based profiles are larger in filesize, more accurate (but may sacrifice smoothness), in some cases less compatible (applications might not be able to use or show bugs/quirks with LUT[7] type profiles, or certain variations of them).
When choosing a LUT[7] based profile type, advanced gamut mapping options become available which you can use to create perceptual and/or saturation tables inside the profile in addition to the default colorimetric tables which are always created.
L*a*b* or XYZ can be used as PCS[11], with XYZ being recommended especially for wide-gamut displays bacause their primaries might exceed the ICC[5] L*a*b* encoding range (Note: Under Windows, XYZ LUT[7] types are only available in DisplayCAL if using ArgyllCMS >= 1.1.0 because of a requirement for matrix tags in the profile, which are not created by prior ArgyllCMS versions).
As it is hard to verify if the LUT[7] of an combined XYZ LUT[7] + matrix profile is actually used, you may choose to create a profile with a swapped matrix, ie. blue-red-green instead of red-green-blue, so it will be obvious if an application uses the (deliberately wrong) matrix instead of the (correct) LUT because the colors will look very wrong (e.g. everything that should be red will be blue, green will be red, blue will be green, yellow will be purple etc).
Note: LUT[7]-based profiles (which contain three-dimensional LUTs) might be confused with video card LUT[7] (calibration) curves (one-dimensional LUTs), but they're two different things. Both LUT[7]-based and matrix-based profiles may include calibration curves which can be loaded into a video card's gamma table hardware.
You can choose any of the following options after selecting a LUT profile type and clicking “Advanced...”. Note: The options “Low quality PCS[11]-to-device tables” and “Enhance effective resolution of colorimetric PCS[11]-to-device table” are mutually exclusive.
Choose this option if the profile is only going to be used with inverse device-to-PCS[11] gamut mapping to create a DeviceLink or 3D LUT (DisplayCAL always uses inverse device-to-PCS[11] gamut mapping when creating a DeviceLink/3D LUT). This will reduce the processing time needed to create the PCS[11]-to-device tables. Don't choose this option if you want to install or otherwise use the profile.
To use this option, you have to select a XYZ or L*a*b* LUT profile type (XYZ will be more effective). This option increases the effective resolution of the PCS[11] to device colorimetric color lookup table by using a matrix to limit the XYZ space and fill the whole grid with the values obtained by inverting the device-to-PCS[11] table, as well as optionally applies smoothing. If no CIECAM02 gamut mapping has been enabled for the perceptual intent, a simple but effective perceptual table (which is almost identical to the colorimetric table, but maps the black point to zero) will also be generated.
You can also set the interpolated lookup table size. The default “Auto” will use a base 33x33x33 resulution that is increased if needed and provide a good balance between smoothness and accuracy. Lowering the resolution can increase smoothness (at the potential expense of some accuracy), while increasing resolution may make the resulting profile potentially more accurate (at the expense of some smoothness). Note that computation will need a lot of memory (>= 4 GB of RAM recommended to prevent swapping to harddisk) especially at higher resolutions.
See below example images for the result you can expect, where the original image has been converted from sRGB to the display profile. Note though that the particular synthetic image chosen, a “granger rainbow”, exaggerates banding, real-world material is much less likely to show this. Also note that the sRGB blue in the image is actually out of gamut for the specific display used, and the edges visible in the blue gradient for the rendering are a result of the color being out of gamut, and the gamut mapping thus hitting the less smooth gamut boundaries.
👁 Original Granger Rainbow image
Original “granger rainbow” image
👁 Granger Rainbow - default colorimetric rendering
Default colorimetric rendering (2500 OFPS XYZ LUT profile)
👁 Granger Rainbow - “smooth” colorimetric rendering
“Smooth” colorimetric rendering (2500 OFPS XYZ LUT profile, inverted A2B)
👁 Granger Rainbow - “smooth” perceptual rendering
“Smooth” perceptual rendering (2500 OFPS XYZ LUT profile, inverted A2B)
Sets the default rendering intent. In theory applications could use this, in practice they don't, so changing this setting probably won't have any effect whatsoever.
Note: When enabling one of the CIECAM02 gamut mapping options, and the source profile is a matrix profile, then enabling effective resolution enhancement will also influence the CIECAM02 gamut mapping, making it smoother, more accurate and also generated faster as a side-effect.
Normally, profiles created by DisplayCAL only incorporate the colorimetric rendering intent, which means colors outside the display's gamut will be clipped to the next in-gamut color. LUT-type profiles can also have gamut mapping by implementing perceptual and/or saturation rendering intents (gamut compression/expansion). You can choose if and which of those you want by specifying a source profile and marking the appropriate checkboxes. Note that a input, output, display or device colororspace profile should be specified as source, not a non-device colorspace, device link, abstract or named color profile. You can also choose viewing conditions which describe the intended use of both the source and the display profile that is to be generated. An appropriate source viewing condition is chosen automatically based on the source profile type.
An explanation of the available rendering intents can be found in the 3D LUT section “Rendering intent”.
For more information on why a source gamut is needed, see “About ICC profiles and Gamut Mapping” in the ArgyllCMS documentation.
One strategy for getting the best perceptual results with display profiles is as follows: Select a CMYK profile as source for gamut mapping. Then, when converting from another RGB profile to the display profile, use relative colorimetric intent, and if converting from a CMYK profile, use the perceptual intent.
Another approach which especially helps limited-gamut displays is to choose one of the larger (gamut-wise) source profiles you usually work with for gamut mapping, and then always use perceptual intent when converting to the display profile.
Please note that not all applications support setting a rendering intent for display profiles and might default to colorimetric (e.g. Photoshop normally uses relative colorimetric with black point compensation, but can use different intents via custom soft proofing settings).
Controls the order in which the patches of a testchart are measured. “Minimize display response delay” is the ArgyllCMS test patch generator default, which should lead to the lowest overall measurement time. The other choices (detailed below) are aimed at potentially dealing better with displays employing ASBL (automatic static brightness limiting) leading to distorted measurements, and should be used together with display white level drift compensation (although overall measurement time will increase somewhat by using either option). If your display doesn't have ASBL issues, there is no need to change this settting.
Which of the choices works best on your ASBL display depends on how the display detects wether it should reduce light output. If it looks at the (assumed) relative luminance (or luma), then “Maximize lightness difference” or “Maximize luma difference” should work best. If your display is using an RGB instead of YCbCr signal path, then “Maximize RGB difference” or “Vary RGB difference” may produce desired results.
The provided default testcharts should work well in most situations, but allowing you to create custom charts ensures maximum flexibility when characterizing a display and can improve profiling accuracy and efficiency. See also optimizing testcharts.
You can enter the amount of patches to be generated for each patch type (white, black, gray, single channel, iterative and multidimensional cube steps). The iterative algorythm can be tuned if more than zero patches are to be generated. What follows is a quick description of the several available iterative algorythms, with “device space” meaning in this case RGB coordinates, and “perceptual space” meaning the (assumed) XYZ numbers of those RGB coordinates. The assumed XYZ numbers can be influenced by providing a previous profile, thus allowing optimized test point placement.
You can set the degree of adaptation to the known device characteristics used by the default full spread OFPS algorithm. A preconditioning profile should be provided if adaptation is set above a low level. By default the adaptation is 10% (low), and should be set to 100% (maximum) if a profile is provided. But, if for instance, the preconditioning profile doesn't represent the device behavior very well, a lower adaption than 100% might be appropriate.
For the body centered grid distributions, the angle parameter sets the overall angle that the grid distribution has.
The “Gamma” parameter sets a power-like (to avoid the excessive compression that a real power function would apply) value applied to all of the device values after they are generated. A value greater than 1.0 will cause a tighter spacing of test values near device value 0.0, while a value less than 1.0 will cause a tighter spacing near device value 1.0. Note that the device model used to create the expected patch values will not take into account the applied power, nor will the more complex full spread algorithms correctly take into account the power.
The neutral axis emphasis parameter allows changing the degree to which the patch distribution should emphasise the neutral axis. Since the neutral axis is regarded as the most visually critical area of the color space, it can help maximize the quality of the resulting profile to place more measurement patches in this region. This emphasis is only effective for perceptual patch distributions, and for the default OFPS distribution if the adaptation parameter is set to a high value. It is also most effective when a preconditioning profile is provided, since this is the only way that neutral can be determined. The default value of 50% provides an effect about twice the emphasis of the CIE94 Delta E formula.
The dark region emphasis parameter allows changing the degree to which the patch distribution should emphasis dark region of the device response. Display devices used for video or film reproduction are typically viewed in dark viewing environments with no strong white reference, and typically employ a range of brightness levels in different scenes. This often means that the devices dark region response is of particular importance, so increasing the relative number of sample points in the dark region may improve the balance of accuracy of the resulting profile for video or film reproduction. This emphasis is only effective for perceptual patch distributions where a preconditioning profile is provided. The default value of 0% provides no emphasis of the dark regions. A value somewhere around 15% - 30% is a good place to start for video profile use. A scaled down version of this parameter will be passed on to the profiler. Note that increasing the proportion of dark patches will typically lengthen the time that an instrument takes to read the whole chart. Emphasizing the dark region characterization will reduce the accuracy of measuring and modelling the lighter regions, given a fixed number of test points and profile quality/grid resolution. The parameter will also be used in an analogous way to the “Gamma” value in changing the distribution of single channel, grayscale and multidimensional steps.
The “Limit samples to sphere” option is used to define an L*a*b* sphere to filter the test points through. Only test points within the sphere (defined by it's center and radius) will be in the generated testchart. This can be good for targeting supplemental test points at a troublesome area of a device. The accuracy of the L*a*b* target will be best when a reasonably accurate preconditioning profile for the device is chosen. Note that the actual number of points generated can be hard to predict, and will depend on the type of generation used. If the OFPS, device and perceptual space random and device space filling quasi-random methods are used, then the target number of points will be achieved. All other means of generating points will generate a smaller number of test points than expected. For this reason, the device space filling quasi-random method is probably the easiest to use.
You can generate 3D views in several formats. The default HTML format should be viewable in a modern WebGL-enabled browser. You can choose the colorspace(s) you want to view the results in and also control whether to use RGB black offset (which will lighten up dark colors so they are better visible) and whether you want white to be neutral. All of these options are purely visual and will not influence the actual test patches.
If generating any number of iterative patches as well as single channel, gray or multidimensional patches, you can add the single channel, gray and multidimensional patches in a separate step by holding the shift key while clicking on “Create testchart”. This prevents those patches affecting the iterative patch distribution, with the drawback of making the patch distribution less even. This is an experimental feature.
You are also able to:
Controls for the spreadsheet-like patch editor are as follows:
If you want to insert a certain amount of patches generated in a spreadsheet application (as RGB coordinates in the range 0.0-100.0 per channel), the easiest way to do this is to save them as CSV file and drag & drop it on the testchart editor window to import it.
As long as you do not enter your own text here, the profile name is auto generated from the chosen calibration and profiling options. The current auto naming mechanism creates quite verbose names which are not necessarily nice to read, but they can help in identifying the profile.
Also note that the profile name is not only used for the resulting profile, but for all intermediate files as well (filename extensions are added automatically) and all files are stored in a folder of that name. You can choose where this folder is created by clicking the disk icon next to the field (it defaults to your system's default location for user data).
Here's an example under Linux, on other platforms some file extensions and the location of the home directory will differ. See User data and configuration file locations. You can mouse over the filenames to get a tooltip with a short description what the file is for:
Chosen profile save path: ~/.local/share/DisplayCAL/storage
Profile name: mydisplay
The following folder will be created: ~/.local/share/DisplayCAL/storage/mydisplay
During calibration & profiling the following files will be created:
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay vs ClayRGB1998.log
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay vs ClayRGB1998.wrz
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay vs sRGB.log
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay vs sRGB.wrz
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.cal
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.gam.gz
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.icc
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.log
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.ti1
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.ti3
~/.local/share/DisplayCAL/storage/mydisplay/mydisplay.wrz
Any used colorimeter correction file will also be copied to the profile folder.
If you are unclear about the difference between calibration and profiling (also called characterization), see “Calibration vs. Characterization” in the ArgyllCMS documentation.
Please let the screen stabilize for at least half an hour after powering it up before doing any measurements or assessing its color properties. The screen can be used normally with other applications during that time.
After you have set your options, click on the button at the bottom to start the actual calibration/profiling process. The main window will hide during measurements, and should pop up again after they are completed (or after an error). You can always cancel out of running measurements using the “Cancel” button in the progress dialog, or by pressing ESC or Q. Viewing the informational log window (from the “Tools” menu) after measurements will give you access to the raw output of the ArgyllCMS commandline tools and other verbose information.
If you clicked “Calibrate” or “Calibrate & profile” and have not turned off “Interactive display adjustment”, you will be presented with the interactive display adjustment window which contains several options to help you bring a display's characteristics closer to the chosen target values. Depending on whether you have a “Refresh”- or LCD-type display, I will try to give some recommendations here which options to adjust, and which to skip.
For LCD displays, you will in most cases only want to adjust white point (if the screen has RGB gain or other whitepoint controls) and white level (with the white level also affecting the black level unless you have a local dimming LED model), as many LCDs lack the necessary “offset” controls to adjust the black point (and even if they happen to have them, they often change the overall color temperature, not only the black point). Also note that for most LCD screens, you should leave the “contrast” control at (factory) default.
After the adjustments, you can run a check on all the settings by choosing the last option from the left-hand menu to verify the achieved values. If adjusting one setting adversely affected another, you can then simply repeat the respective option as necessary until the target parameters are met.
Finally, select “Continue on to calibration/profiling” to start the non-interactive part. Depending on the instrument you're using you may want to get a coffee or two as the process can take a fair amount of time, especially if you selected a slow speed level. If you only wanted help to adjust the display and don't want/need calibration curves to be created, you can also choose to exit by closing the interactive display adjustment window, then disable interactive adjustment, set calibration tone curve to “As measured” and then select “Profile only” from the main window.
If you originally selected “Calibrate & profile” and fulfil the requirements for unattended calibration & profiling, the characterization measurements for the profiling process should start automatically after calibration is finished. Otherwise, you may be forced to take the instrument off the screen to do a sensor self-calibration before starting the profiling measurements.
The easiest way to use an optimized testchart for profiling is to set the testchart to “Auto” and adjusting the patch amount slider to the desired number of test patches. Optimization will happen automatically as part of the profiling measurements (this will increase measurement and processing times by a certain degree).
Alternatively, if you want to do generate an optimized chart manually prior to a new profiling run, you could go about this in the following way:
When installing a profile after creating or updating it, a startup item to load its calibration curves automatically on login will be created (on Windows and Linux, Mac OS X does not need a loader). You may also prevent this loader from doing anything by removing the check in the “Load calibration curves on Login” checkbox in the profile installation dialog, and in case you are using Windows 7 or later, you may let the operating system handle calibration loading instead (note that the Windows internal calibration loader does not offer the same high precision as the DisplayCAL profile loader, due to wrong scaling and 8-bit quantization).
Under Windows, the profile loader will stay in the taskbar tray and keep the calibration loaded (unless started with the --oneshot argument, which will make the loader exit after loading calibration). In addition, the profile loader is madVR-aware and will disable calibration loading if it detects e.g. madTPG or madVR being used by a video player. You can double-click the profile loader system tray icon to instantly re-apply the currently selected calibration state (see below). A single click will show a popup with currently associated profiles and calibration information.
A right-click menu allows you to set the desired calibration state and a few other options:
You can create display correction RGB-in/RGB-out 3D LUTs (for use in video playback or editing applications/devices that don't have ICC support) as part of the profiling process.
.3dl), Iridas (.cube), eeColor (.txt), madVR (.3dlut), Pandora (.mga), Portable Network Graphic (.png), ReShade (.png, .fx) and Sony Imageworks (.spi3d). Note that an ICC device link profile (the ICC equivalent of an RGB-in/RGB-out 3D LUT) is always created as well.Depending on the 3D LUT file format, installing or saving the 3D LUT to a specific location may be required before it can be used. You will be asked to install or save the 3D LUT directly after it was created. If you need to install or save the 3D LUT again at a later point, switch to the “3D LUT” tab and click the small “Install 3D LUT” button next to the “Settings” dropdown (the same button that installs display profiles when on the “Display & instrument” tab and a directly connected, desktop-accessible display is selected).
First, you need to download the latest version of ReShade and extract the ZIP file. This should result in a folder “ReShade <version>”. Then, install the 3D LUT from within DisplayCAL to the “ReShade <version>” folder (select the folder when prompted). This will activate the 3D LUT for all applications/games that you're going to use ReShade with, which you can configure using the “ReShade Assistant” application that should come with ReShade (refer to the instructions available on the ReShade website on how to configure ReShade). The default toggle key to turn the 3D LUT on and off is the HOME key. You can change this key or disable the 3D LUT altogether by editing ColorLookUpTable.fx (with a text editor) inside the “ReShade <version>” folder where you installed the 3D LUT. To remove the 3D LUT from ReShade completely, delete ColorLookUpTable.png and ColorLookUpTable.fx in the ReShade folder, as well as edit ReShade.fx and remove the line #include "ColorLookupTable.fx" near the end.
You can do verification measurements to assess the display chain's (display profile - video card and the calibration curves in its gamma table - monitor) fit to the measured data, or to find out about the soft proofing capabilities of the display chain. You can also do a profile or device link (3D LUT) self check without having to take any further measurements by holding the “alt” key on your keyboard.
To check the fit to the measurement data, you have to select a CGATS[1] testchart file containing device values (RGB). The measured values are then compared to the values obtained by feeding the device RGB numbers through the display profile (measured vs expected values). The default verification chart contains 26 patches and can be used, for example, to check if a display needs to be re-profiled. If a RGB testchart with gray patches (R=G=B) is measured, like the default and extended verification charts, you also have the option to evaluate the graybalance through the calibration only, by placing a check in the corresponding box on the report.
To perform a check on the soft proofing capabilities, you have to provide a CGATS reference file containing XYZ or L*a*b* data, or a combination of simulation profile and testchart file, which will be fed through the display profile to lookup corresponding device (RGB) values, and then be sent to the display and measured. Afterwards, the measured values are compared to the original XYZ or L*a*b* values, which can give a hint how suitable (or unsuitable) the display is for softproofing to the colorspace indicated by the reference.
The profile that is to be evaluated can be chosen freely. You can select it in DisplayCAL's main window under “settings”. The report files generated after the verification measurements are plain HTML with some embedded JavaScript, and are fully self-contained. They also contain the reference and measurement data, which consists of device RGB numbers, original measured XYZ values, and D50-adapted L*a*b* values computed from the XYZ numbers, and which can be examined as plain text directly from the report at the click of a button.
Select the profile you want to evaluate under “Settings” (for evaluating 3D LUTs and DeviceLink profiles, this setting has significance for a Rec. 1886 or custom gamma tone response curve, because they depend on the black level).
There are two sets of default verification charts in different sizes, one for general use and one for Rec. 709 video. The “small” and “extended” versions can be used for a quick to moderate check to see if a display should be re-profiled, or if the used profile/3D LUT is any good to begin with. The “large” and “xl” versions can be used for a more thorough check. Also, you can create your own customized verification charts with the testchart editor.
In this case, you want to use a testchart with RGB device values and no simulation profile. Select a suitable file under “testchart or reference” and disable “simulation profile”. Other settings that do not apply in this case will be grayed out.
There are two ways of doing this:
Then, you have a few options that influence the simulation.
The nominal tolerances, with the whitepoint, average, maximum and gray balance Delta E CIE 1976 aim values stemming from UGRA/Fogra Media Wedge and UDACT, are pretty generous, so I've included somewhat stricter “recommended” numbers which I've chosen more or less arbitrarily to provide a bit “extra safety margin”.
For reports generated from reference files that contain CMYK numbers in addition to L*a*b* or XYZ values, you can also select the official Fogra Media Wedge V3 or IDEAlliance Control Strip aim values for paper white, CMYK solids and CMY grey, if the chart contains the right CMYK combinations.
This depends on the chart that was measured. The explanation in the first paragraph sums it up pretty well: If you have calibrated and profiled your display, and want to check how well the profile fits a set of measurements (profile accuracy), or if you want to know if your display has drifted and needs to be re-calibrated/re-profiled, you select a chart containing RGB numbers for the verification. Note that directly after profiling, accuracy can be expected to be high if the profile characterizes the display well, which will usually be the case if the display behaviour is not very non-linear, in which case creating a LUT profile instead of a “Curves + matrix” one, or increasing the number of measured patches for LUT profiles, can help.
If you want to know how well your profile can simulate another colorspace (softproofing), select a reference file containing L*a*b* or XYZ values, like one of the Fogra Media Wedge subsets, or a combination of a simulation profile and testchart. Be warned though, only wide-gamut displays will handle a larger offset printing colorspace like FOGRA39 or similar well enough.
In both cases, you should check that atleast the nominal tolerances are not exceeded. For a bit “extra safety margin”, look at the recommended values instead.
Note that both tests are “closed-loop” and will not tell you an “absolute” truth in terms of “color quality” or “color accuracy” as they may not show if your instrument is faulty/measures wrong (a profile created from repeatable wrong measurements will usually still verify well against other wrong measurements from the same instrument if they don't fluctuate too much) or does not cope with your display well (which is especially true for colorimeters and wide-gamut screens, as such combinations need a correction in hardware or software to obtain accurate results), or if colors on your screen match an actual colored object next to it (like a print). It is perfectly possible to obtain good verification results but the actual visual performance being sub-par. It is always wise to combine such measurements with a test of the actual visual appearance via a “known good” reference, like a print or proof (although it should not be forgotten that those also have tolerances, and illumination also plays a big role when assessing visual results). Keep all that in mind when admiring (or pulling your hair out over) verification results :)
Different softwares use different methods (which are not always disclosed in detail) to compare and evaluate measurements. This section aims to give interested users a better insight how DisplayCAL's profile verification feature works “under the hood”.
There are currently two slightly different paths depending if a testchart or reference file is used for the verification measurements, as outlined above. In both cases, Argyll's xicclu utility is run behind the scenes and the values of the testchart or reference file are fed relative colorimetrically (if no whitepoint simualtion is used) or absolute colorimetrically (if whitepoint simulation is used) through the profile that is tested to obtain corresponding L*a*b* (in the case of RGB testcharts) or device RGB numbers (in the case of XYZ or L*a*b* reference files or a combination of simulation profile and testchart). If a combination of simulation profile and testchart is used as reference, the reference L*a*b* values are calculated by feeding the device numbers from the testchart through the simulation profile absolute colorimetrically if whitepoint simulation is enabled (which will be the default if the simulation profile is a printer profile) and relative colorimetrically if whitepoint simulation is disabled (which will be the default if the simulation profile is a display profile, like most RGB working spaces). Then, the original RGB values from the testchart, or the looked up RGB values for a reference are sent to the display through the calibration curves of the profile that is going to be evaluated. A reference white of D50 (ICC default) and complete chromatic adaption of the viewer to the display's whitepoint is assumed if “simulate whitepoint relative to display profile whitepoint” is used, so the measured XYZ values are adapted to D50 (with the measured whitepoint as source reference white) using the Bradford transform (see Chromatic Adaption on Bruce Lindbloom's website for the formula and matrix that is used by DisplayCAL) or with the adaption matrix from the profile in the case of profiles with 'chad' chromatic adaption tag, and converted to L*a*b*. The L*a*b* values are then compared by the generated dynamic report, with user-selectable critera and ΔE (delta E) formula.
In a report, the correlated color temperature and assumed target whitepoint, as well as the whitepoint ΔE, do warrant some further explanations: The whitepoint ΔE is calculated as difference between the measured whitepoint's and the assumed target whitepoint's normalized XYZ values, which are first converted to L*a*b*. The assumed target whitepoint color temperature shown is simply the rounded correlated color temparature (100K threshold) calculated from the measured XYZ values. The XYZ values for the assumed target whitepoint are obtained by calculating the chromaticity (xy) coordinates of a CIE D (daylight) or blackbody illuminant of that color temperature and converting them to XYZ. You can find all the used formulas on Bruce Lindbloom's website and on Wikipedia.
The gray balance “range” uses a combined delta a/delta b absolute deviation (e.g. if max delta a = -0.5 and max delta b = 0.7, the range is 1.2). Because results in the extreme darks can be problematic due to lack of instrument accuracy and other effects like a black point which has a different chromaticity than the whitepoint, the gray balance check in DisplayCAL only takes into account gray patches with a minimum measured luminance of 1% (i.e. if the white luminance = 120 cd/m², then only patches with at least 1.2 cd/m² will be taken into account).
It sets the nominal (target) L* value to the measured L* value and a*=b*=0, so the profile is effectively ignored and only the calibration (if any) will influence the results of the gray balance checks. Note that this option will not make a difference for a “Single curve + matrix” profile, as the single curve effectively already achieves a similar thing (the L* values can be different, but they are ignored for the gray balance checks and only influence the overall result).
If you enable “Use absolute values” on a report, the chromatic adaptation to D50 is undone (but the refrence white for the XYZ to L*a*b* conversion stays D50). This mode is useful when checking softproofing results using a CMYK simulation profile, and will be automatically enabled if you used whitepoint simulation during verification setup without enabling whitepoint simulation relative to the profile whitepoint (true absolute colorimetric mode). If you enable “Use display profile whitepoint as reference white”, then the reference white used for the XYZ to L*a*b* conversion will be that of the display profile, which is useful when verifying video calibrations where the target is usually some standard color space like Rec. 709 with a D65 equivalent whitepoint.
When using ArgyllCMS 1.4.0 and newer, remote measurements on a device not directly connected to the machine that is running DisplayCAL is possible (e.g. a smartphone or tablet). The remote device needs to be able to run a web browser (Firefox recommended), and the local machine running DisplayCAL may need firewall rules added or altered to allow incoming connections. To set up remote profiling, select “Web @ localhost” from the display device dropdown menu, then choose the desired action (e.g. “Profile only”). When the message “Webserver waiting at http://<IP>:<Port>” appears, open the shown address in the remote browser and attach the measurement device.
NOTE: If you use this method of displaying test patches, there is no access to the display video LUT[7]s and hardware calibration is not possible. The colors will be displayed with 8 bit per component precision, and any screen-saver or power-saver will not be automatically disabled. You will also be at the mercy of any color management applied by the web browser, and may have to carefully review and configure such color management.
Note: Close the web browser window or tab after each run, otherwise reconnection may fail upon further runs.
DisplayCAL supports the madVR test pattern generator (madTPG) and madVR 3D LUT formats since version 1.5.2.5 when used together with ArgyllCMS 1.6.0 or newer.
Since version 2.5, DisplayCAL can use Resolve (10.1+) as pattern generator. Select the “Resolve” entry from the display devices dropdown in DisplayCAL and in Resolve itself choose “Monitor calibration”, “CalMAN” in the “Color” menu.
Please note that the untethered mode should generally only be used if you've exhausted all other options.
Untethered mode is another option to measure and profile a remote display that is not connected via standard means (calibration is not supported). To use untethered mode, the testchart that should be used needs to be optimized, then exported as image files (via the testchart editor) and those image files need to be displayed on the device that should be measured, in successive order. The procedure is as follows:
Measurements will commence, and changes in the displayed image should be automatically detected if “auto” mode is enabled. Use whatever means available to you to cycle through the images from first to last, carefully monitoring the measurement process and only changing to the next image if the current one has been successfully measured (as will be shown in the untethered measurement window). Note that untethered mode will be (atleast) twice as slow as normal display measurements.
.ti1 file used for profiling (existing profiles created with ArgyllCMS or DisplayCAL can also be selected as source)..ti3 measurement data file. The file is saved under the chosen save path (see “Choose save path...” under the “File” menu) and with the same base name used for profiles.Allows you to select one of the available localizations.
There is a bit of functionality that is not available via the UI and needs to be run from a command prompt or ternminal. Use of this functionality currently requires running from source.
Note that this reduces the profile gamut and accuracy.
From source:
python util/change_display_profile_cal_whitepoint.py \
[-t temp | -T temp | -w x,y] [--cal-only] [inprofile] outfilename
-t temptemp as whitepoint target.-T temptemp as whitepoint target.-w x,y--cal-only (optional)inprofile (optional)inprofile instead of the current display profile.outfilenameNote that Windows calibration loading is of lower quality than using ArgyllCMS because Windows always quantizes the calibration to 8 bit and scales it wrongly. This is not the case when using the DisplayCAL calibration loader which uses ArgyllCMS.
From source:
python -c "import sys; from DisplayCAL import util_win; \
util_win.calibration_management_isenabled() or \
util_win.enable_calibration_management() \
if '--os' in sys.argv[1:] else \
not util_win.calibration_management_isenabled() or \
util_win.disable_calibration_management();" [--os]
The --os option determines wether Windows calibration loading functionality should be enbaled or disabled.
DisplayCAL supports scripting locally and over the network (the latter must be explicitly enabled by setting app.allow_network_clients = 1 in DisplayCAL.ini) via sockets. DisplayCAL must be already running on the target machine for this to work. Below is an example connecting to a running instance on the default port 15411 and starting calibration measurements (the port is configurable in DisplayCAL.ini as app.port, although if the desired port is not available an unused one will be chosen automatically. You can read the actual used port from the file DisplayCAL.lock in the configuration file folder of DisplayCAL while it is running). The example is written in Python and deals with some of the intricacies of sockets as well.
#!/usr/bin/env python2
import socket
class DCGScriptingClientSocket(socket.socket):
def __enter__(self):
return self
def __exit__(self, etype, value, tb):
# Disconnect
try:
# Will fail if the socket isn't connected, i.e. if there was an
# error during the call to connect()
self.shutdown(socket.SHUT_RDWR)
except socket.error:
pass
self.close()
def __init__(self):
socket.socket.__init__(self)
self.recv_buffer = ''
def get_single_response(self):
# Buffer received data until EOT (response end marker) and return
# single response (additional data will still be in the buffer)
while not '\4' in self.recv_buffer:
incoming = self.recv(4096)
if incoming == '':
raise socket.error("Connection broken")
self.recv_buffer += incoming
end = self.recv_buffer.find('\4')
single_response = self.recv_buffer[:end]
self.recv_buffer = self.recv_buffer[end + 1:]
return single_response
def send_and_check(self, command, expected_response="ok"):
""" Send command, get & check response """
self.send_command(command)
single_response = self.get_single_response()
if single_response != expected_response:
# Check application state. If a modal dialog is displayed, choose
# the OK option. Note that this is just an example and normally you
# should be very careful with this, as it could mean confirming a
# potentially destructive operation (e.g. discarding current
# settings, overwriting existing files etc).
self.send_command('getstate')
state = self.get_single_response()
if 'Dialog' in state.split()[0]:
self.send_command('ok')
if self.get_single_response() == expected_response:
return
raise RuntimeError('%r got unexpected response: %r != %r' %
(command, single_response, expected_response))
def send_command(self, command):
# Automatically append newline (command end marker)
self.sendall(command + '\n')
# Generate a list of commands we want to execute in order
commands = []
# Load “Laptop” preset
commands.append('load presets/laptop.icc')
# Setup calibration & profiling measurements
commands.append('calibrate-profile')
# Start actual measurements
commands.append('measure')
# Create socket & send commands
with DCGScriptingClientSocket() as client:
client.settimeout(3) # Set a timeout of 3 seconds
# Open connection
client.connect(('127.0.0.1', 15411)) # Default port
for command in commands:
client.send_and_check(command)
Each command needs to be terminated with a newline character (after any arguments the command may accept). Note that data sent must be UTF-8 encoded, and if arguments contain spaces they should be encased in double or single quotes. You should check the response for each command sent (the response end marker is ASCII 0x4 EOT, and the default response format is a plain text format, but JSON and XML are also available). The common return values for commands are either ok in case the command was understood (note that this does not indicate if the command finished processing), busy or blocked in case the command was ignored because another operation was running or a modal dialog blocks the UI, failed in case the command or an argument could not be processed successfully, forbidden in case the command was not allowed (this may be a temporary condition depending on the circumstances, e.g. when trying to interact with an UI element that is currently disabled), invalid in case the command (or one of its arguments) was invalid, or error followed by an error message in case of an unhandled exception. Other return values are possible depending on the command. All values returned are UTF-8 encoded. If the return value is blocked (e.g. because a modal dialog is displayed) you should check the application state with the getstate command to determine the further course of action.
Below is a list of the currently supported commands (the list contains all valid commands for the main application, the standalone tools will typically just support a smaller subset. You can use the “DisplayCAL Scripting Client” standalone tool to learn about and experiment with commands). Note that filename arguments must refer to files present on the target machine running DisplayCAL.
3DLUT-maker [create filename]filename.abortactivate [window ID | name | label]window or the main application window (bring it to the front). If it is minimized, restore it.alt | cancel | ok [filename]ok filename chooses that file.calibrateinteract mainframe calibrate_btn instead). For non-virtual displays as well as pattern generators (except madVR), call the measure command afterwards to commence measurements.calibrate-profilemeasure command afterwards to commence measurements.close [window ID | name | label]window or the current active window (if the window is the main window, this quits the application). Note that this tries to abort any running operations first, so you may want to check application state via the getstate command.create-colorimeter-correctioncreate-profile [filename]curve-viewer [filename]filename. Relative paths are possible e.g. for presets: curve-viewer presets/photo.iccDisplayCAL [filename]filename.enable-spyder2getactivewindowclassname ID name label state. state is either enabled or disabled.getcellvalues [window ID | name | label] <grid ID | name | label>grid of window window or the current active window.getappnamegetcfg [option]option, or whole configuration (key-value pairs in INI format).getcommandsgetdefault <option>option (key-value pair in INI format).getdefaultsgetmenusID "label" state. state is either enabled or disabled.getmenuitems [menuposition | label]menuposition "menulabel" menuitemID "menuitemlabel" state [checkable] [checked]. state is either enabled or disabled.getstateidle, busy, dialogclassname ID dialogname [dialoglabel] state "messagetext" [path "path"] [buttons "buttonlabel"...] if a modal dialog is shown or blocked in case the UI is currently blocked. Most commands will not work if the UI is blocked—the only way to resolve the block is to non-programmatically interact with the actual UI elements of the application or closing it. Note that a state of blocked should normally only occur if an actual file dialog is shown. If using the scripting interface exclusively, this should never happen because it uses a replacement file dialog that supports the same actions as a real file dialog, but doesn't block. Also note that a return value of blocked for any of the other commands just means that a modal dialog is currently waiting to be interacted with, only if getstate also returns blocked you cannot resolve the situation with scripting alone.getuielement [window ID | name | label] <element ID | name | label>getuielements [window ID | name | label]window or the current active window. Each returned line represents an UI element and has the format classname ID name ["label"] state [checked] [value "value"] [items "item"...]. classname is the internal UI library class name. It can help you determine what type of UI element it is, and which interactions it supports. ID is a numeric identifier. name is the name of the UI element. "label" (if present) is a label which further helps in identifying the UI element. You can use the latter three with the interact command. state is either enabled or disabled. items "item"... (if present) is a list of items connected to the UI element (i.e. selection choices).getvalidranges and values. ranges are the valid ranges for options that accept numeric values (note that integer options not covered by ranges are typically boolean types). values are the valid values for options that only accept certain values. Options not covered by ranges and values are limited to their data type (you can't set a numeric option to a string and vice versa).getwindowsclassname ID name label state. state is either enabled or disabled.import-colorimeter-corrections [filename...]install-profile [filename]interact [window ID | name | label] <element ID | name | label> [setvalue value]element of window window or the current active window, e.g. invoke a button or set a control to a value.invokemenu <menuposition | menulabel> <menuitemID | menuitemlabel>load <filename>filename. Relative paths are possible e.g. for presets: load presets/photo.iccmeasuremeasure-uniformitymeasurement-report [filename]filename. For non-virtual displays as well as pattern generators (except madVR), call the measure command afterwards to commence measurements.profileload linear.cal prior to calling profile). For non-virtual displays as well as pattern generators (except madVR), call the measure command afterwards to commence measurements.profile-info [filename]filename. Relative paths are possible e.g. for presets: profile-info presets/photo.iccrefreshsetcfg or restore-defaults.report-calibratedmeasure command afterwards to commence measurements.report-uncalibratedmeasure command afterwards to commence measurements.restore-defaults [category...]category. Call refresh after changing the configuration to update the GUI.setlanguage <languagecode>setcfg <option> <value>option to value. The special value null clears a configuration option. Call refresh after changing the configuration to update the GUI. Also see getdefaults and getvalid.setresponseformat <format>plain is a text format that is easy to read, but not necessarily the best for parsing programmatically. The other possible formats are json, json.pretty, xml and xml.pretty. The *.pretty formats use newlines and indentation to make them easier to read.synthprofile [filename]filename.testchart-editor [filename | create filename]filename. Relative paths are possible e.g. for loading a default testchart: testchart-editor ti1/d3-e4-s17-g49-m5-b5-f0.ti1verify-calibrationmeasure command afterwards to commence measurements.interact [window] <button> e.g. show profile name placeholders information: interact mainframe profile_name_info_btninteract [window] <element> setvalue "value" e.g. set calibration gamma to 2.4: interact mainframe trc_textctrl setvalue 2.4 (note that for changing multiple options at once it is generally preferable to call setcfg <option> <value> for each option you want to set followed by a single refresh instead)interact [window] <grid> setvalue "row,col,value" e.g. while the testchart editor is shown, set the cell at the second column of the first row to 33: interact tcgen grid setvalue "0,1,33"There are a few things to be aware of when using commands that interact with the UI directly (i.e. activate, alt | cancel | ok, close, interact and invokemenu).
Referring to windows and UI elements: You can refer to windows and UI elements by their ID, name or label (you can find out about windows and UI elements with the getmenus/getmenuitems, getuielement/getuielements, and getwindows commands). If an object's ID is negative, it means that it has been automatically assigned at object creation time and is only valid during the lifetime of the object (i.e. for modal dialogs, only while the dialog is displayed). For this reason, using an object's name instead is easier, but names (aswell as non automatically assigned IDs) are not guaranteed to be unique, even for objects which share the same parent window (although most of the “important” controls as well as application windows will have unique names). Another possibility is to use an object's label, which while also not guaranteed to be unique, still has a fairly high likelihood of being unique for controls that share the same parent window, but has the drawback that it is localized (although you can ensure a specific UI language by calling setlanguage) and is subject to change when the localization is updated.
Sequential operations: Calling commands that interact with the UI in rapid succession may require the use of additional delays between sending commands to allow the GUI to react (so getstate will return the actual UI state after a specific command), although there is a default delay for commands that interact with the UI of atleast 55 ms. A good rule of thumb for sending commands is to use a “send command” → “read response” → “optionally wait a few extra ms” → “get application state (send getstate command)” → “read response” cycle.
Setting values: If setting a value on an UI element returns ok, this is not always an indication that the value was actually changed, but only that the attempt to set the value has not failed, i.e. the event handler of the element may still do error checking and change the value to something sane if it was not valid. If you want to make sure that the intended value is set, use getuielement on the affected element(s) and check the value (or even better, if you use JSON or XML response format, you can check the object property/element of the response instead which will reflect the object's current state and saves you one request). In general it is preferable to use interact <elementname> setvalue <value> only on dialogs, and in all other cases use a sequence of setcfg <option> <value> (repeat as necessary, optionally call load <filename> or restore-defaults first to minimize the amount of configuration options that you need to change) followed by a call to refresh to update the UI.
Also, not all controls may offer a comprehensive scripting interface. I'm open to suggestions though.
DisplayCAL uses the following folders for configuration, logfiles and storage (the storage directory is configurable). Note that if you have upgraded to DisplayCAL from dispcalGUI, that DisplayCAL will continue to use the existing dispcalGUI directories and configuration file names (so replace DisplayCAL with dispcalGUI in the lists below).
C:\Windows\system32\igfxtray.exe
C:\Windows\system32\igfxpph.dll
C:\Windows\system32\igfxpers.exexattr -dr com.apple.quarantine /Applications/DisplayCAL/*.app
Need help with a specific task or problem? It may be a good idea to first check the known issues & solutions if the topic has been covered. If you want to report a bug, please see the guidelines on bug reporting. Otherwise, feel free to use one of the following channels:
Found a bug? If so, please first check the issue tracker, it may have been reported already. Otherwise, please follow these guidelines for reporting bugs:
Note that if you have upgraded to DisplayCAL from dispcalGUI, that DisplayCAL will continue to use the existing dispcalGUI directories (so replace DisplayCAL with dispcalGUI in the locations above).
As the folder may contain several logfiles, it is a good idea to compress the whole folder to a ZIP or tar.gz archive that you can easily attach to a bug report.
Please note the logfiles may contain your username as well as paths of files you may have used in DisplayCAL. I will respect your privacy at all times, but you may want to consider this when attaching logfiles to public places like the issue tracker.
Create a new ticket (or if the bug has been reported already, use the existing ticket) at the issue tracker, following the guidelines above, and attach the logfiles archive.
If you don't want to or can't use the bug tracker, feel free to use one of the other support channels.
Do you want to get in touch with me or other users regarding DisplayCAL or related topics? The general discussion forum is a good place to do so. You can also contact me directly.
iccgamut tool. Compare gamut volumes using Argyll's viewgam tool with -i option and include the results in the report (coverage calculation for test set reference and profile to be evaluated could be done before the actual measurements and also shown in the yet-to-be-implemented profile verification “setup” window).I would like to thank the following people:
Graeme Gill, for creating ArgyllCMS
Translators: Loïc Guégant, François Leclerc, Jean-Luc Coulon (french translation), Roberto Quintero (spanish translation), Tommaso Schiavinotto (italian translation), 楊添明 (traditional chinese translation), 김환(Howard Kim) (korean translation), Alex Sikorsky (russian and ukrainian translation), Mars (simplified chinese translation)
Recent contributors: Gordon Klaus G., Mark D., Arnold M., Jan H., Erle G., Carlos C., Mihail-Simion M., Todd W., Paul E., Alan Paul B., Fineartpix L., Matthias N., 柄鈞, Alex B., Phillip R Z., Vicky M., Wolfgang M., Bernard S., Mikhail R., Yeonsik Y., Aaron S., Henning N., Thomas S., Richard N., Bastian B., Giuseppe P., Robert S., Allister F., Remo S., Phasmatodea - Bruno K., David B., Keith H., Yury L., Philipp M., Matthias P R., Jonathan-Miles G., Bogdan S., more...
And everyone who sent me feedback or bug reports, suggested features, or simply uses DisplayCAL.
Acknowledgements
Part of the comprehensive ArgyllCMS documentation has been used in this document, and was only slightly altered to better fit DisplayCAL's behavior and notations.
DisplayCAL © 2008-2019 Florian Höch | Imprint | Privacy | Terms of Service