# DisplayCAL—Formerly known as dispcalGUI
Open Source Display Calibration and Characterization powered by ArgyllCMS

## 3.3.5

2017-10-18 17:34 UTC

- Get DisplayCAL
- System requirements
- What's new in this version

- About
- Quickstart guide
- Documentation
- Get help
- Report a bug
- Contribute

## Your support is appreciated!

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.

Contribute using PayPal

Use a credit card without a PayPal account
(PayPal does not guarantee the availability of payment via credit card)

(For other means of contributing, please contact me)

Thanks to all contributors!

Special thanks to the following people and organizations:

Load Testing Wiki

Riley Brandt Photography—The Open Source Photography Course

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.

## About DisplayCAL

DisplayCAL 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 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:

- Support of colorimeter corrections for different display device types to increase the absolute accuracy of colorimeters. Corrections can be imported from vendor software or created from measurements if a spectrometer is available.
- Check display device uniformity via measurements.
- Test chart editor: Create charts with any amount and composition of color patches, easy copy & paste from CGATS, CSV files (only tab-delimited) and spreadsheet applications, for profile verification and evaluation.
- Create synthetic ICC profiles with custom primaries, white- and blackpoint as well as tone response for use as working spaces or source profiles in device linking (3D LUT) transforms.

DisplayCAL is developed and maintained by Florian Höch, and would not be possible without ArgyllCMS, which is developed and maintained by Graeme W. Gill.

### Screenshots

Display & instrument settings
Calibration settings
Profiling settings

3D LUT settings
Verification settings
Testchart editor

Display adjustment
Profile information
Calibration curves

KDE4
Mac OS X
Windows 10

## Disclaimer

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, demjson (JSON[6] library), wxPython (GUI[4] toolkit), as well as Python extensions for Windows and the Python WMI module to provide Windows-specific functionality. Other minor dependencies include PyChromecast, comtypes and pyglet. It makes extensive use of and depends on functionality provided by ArgyllCMS. The build system to create standalone executables additionally uses setuptools and py2app on Mac OS X or py2exe on Windows. All of these software packages are © by their respective authors.

## Get DisplayCAL standalone

- ### For Linux

  Native packages for several distributions are available via openSUSE Build Service:

  - Arch Linux x86 | x86_64
  - CentOS 6 x86 | x86_64
  - CentOS 7 x86_64
  - Debian 7 (Wheezy) x86 | x86_64
  - Debian 8 (Jessie) x86 | x86_64
  - Debian 9 (Stretch) x86 | x86_64
  - Fedora 24 x86 | x86_64
  - Fedora 25 x86 | x86_64
  - Fedora 26 x86_64
  - Fedora Rawhide x86_64
  - Mageia 5 x86 | x86_64
  - Mageia 6 x86 | x86_64
  - Mageia Cauldron x86 | x86_64
  - openSUSE 13.1 x86 | x86_64
  - openSUSE 13.2 x86 | x86_64
  - openSUSE Leap 42.1 x86_64
  - openSUSE Leap 42.2 x86_64
  - openSUSE Leap 42.3 x86_64
  - openSUSE Factory x86 | x86_64
  - openSUSE Tumbleweed x86 | x86_64
  - RedHat RHEL 6 x86 | x86_64
  - RedHat RHEL 7 x86_64
  - SLE 11 SP4 x86 | x86_64
  - SLE 12 x86_64
  - SLE 12 SP1 x86_64
  - SLE 12 SP2 x86_64
  - SLE 12 SP3 x86_64
  - Ubuntu 12.04 (Precise) x86 | x86_64
  - Ubuntu 14.04 (Trusty) x86 | x86_64
  - Ubuntu 16.04 (Xenial) x86 | x86_64
  - Ubuntu 16.10 (Yakkety) x86 | x86_64
  - Ubuntu 17.04 (Zesty) x86 | x86_64

  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.

- ### For Mac OS X (10.5 or newer)

  Disk image

  Note that due to Mac OS X App Translocation (since 10.12 Sierra), you may need to remove the “quarantine” flag from the non-main standalone application bundles after you have copied them to your computer before you can successfully run them. E.g. if you copied them to /Applications/DisplayCAL-3.3.5.0/, open Terminal and run the following command: `xattr -dr com.apple.quarantine /Applications/DisplayCAL-3.3.5.0/*.app`

- ### For Windows (XP or newer)

  Installer (recommended) or ZIP archive

- ### Source code

  You need to have a working Python installation and all requirements.

  Source Tarball

  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.

## Get DisplayCAL via Zero Install

- ### Brief introduction to Zero Install

  (Note: Usually you do not have to install Zero Install separately, it is handled automatically by the DisplayCAL downloads linked below. The following paragraph is only informational.)

  Zero Install is a decentralised cross-platform software installation system. The benefits you get from Zero Install are:

  - Always up-to-date. Zero Install automatically keeps all software updated.
  - Easily switch between software versions from within Zero Install if desired.
  - No administrator rights needed to add or update software (*).

  * Note: Installing/updating Zero Install itself or software dependencies through the operating system's mechanisms may require administrative privileges.

- ### For Linux

  Native packages for several distributions are available via openSUSE Build Service:

  - Arch Linux
  - CentOS 6
  - CentOS 7
  - Debian 7 (Wheezy)
  - Debian 8 (Jessie)
  - Debian 9 (Stretch)
  - Fedora 24
  - Fedora 25
  - Fedora 26
  - Fedora Rawhide
  - openSUSE 13.1
  - openSUSE 13.2
  - openSUSE Leap 42.1
  - openSUSE Leap 42.2
  - openSUSE Leap 42.3
  - openSUSE Factory
  - openSUSE Tumbleweed
  - RedHat RHEL 6
  - RedHat RHEL 7
  - Ubuntu 12.04 (Precise)
  - Ubuntu 14.04 (Trusty)
  - Ubuntu 16.04 (Xenial)
  - Ubuntu 16.10 (Yakkety)
  - Ubuntu 17.04 (Zesty)

  Please note:

  - The version number in the package name does not necessarily reflect the DisplayCAL version.

  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. In all other cases, please try the instructions below or one of the standalone installations.

  #### Alternate installation method

  If your distribution is not listed above, please follow these instructions:

  1. Install the 0install or zeroinstall-injector package from your distribution. In case it is not available, there are pre-compiled generic binaries. Download the appropriate archive for your system, unpack it, `cd` to the extracted folder in a terminal, and run `sudo ./install.sh local` to install to /usr/local, or `./install.sh home` to install to your home directory (you may have to add ~/bin to your PATH variable in that case). You'll need libcurl installed (most systems have it by default).
  2. Choose the 0install entry from the applications menu (older versions of Zero Install will have an “Add New Program” entry instead).
  3. Drag DisplayCAL's Zero Install feed link to the Zero Install window.

  Note on DisplayCAL's standalone tools under Linux (3D LUT maker, curve viewer, profile information, synthetic profile creator, testchart editor, VRML to X3D converter): If using the alternate installation method, an application icon entry will only be created for DisplayCAL itself. This is currently a limitation of Zero Install under Linux. You can manually install icon entries for the standalone tools by running the following in a terminal:

      0launch --command=install-standalone-tools-icons \
      	http://displaycal.net/0install/DisplayCAL.xml

  And you may uninstall them again with:

      0launch --command=uninstall-standalone-tools-icons \
      	http://displaycal.net/0install/DisplayCAL.xml

- ### For Mac OS X (10.5 or newer)

  Download the DisplayCAL Zero Install Launcher disk image and run any of the included applications.

- ### For Windows (XP or newer)

  Download and install the DisplayCAL Zero Install Setup: Administrator install | Per-user install.

- ### Manually updating or switching between software versions

  Updates are normally applied automatically. If you want to manually update or switch between software versions, please follow the instructions below.

  - #### Linux

    Choose the 0install entry from the applications menu (older versions of Zero Install will have a “Manage Programs” entry instead). In the window that opens, right-click the DisplayCAL icon and select “Choose versions” (with older versions of Zero Install, you have to click the small “Update or change version” icon below the “Run” button instead). You can then click the “Refresh all” button to update, or click the small button to the right of an entry and select “Show versions”.

    To select a specific software version, click on the version entry and set the rating to “preferred” (note that this will prevent updates being downloaded for the selected software until you manually change to a different version or reset the rating).

  - #### Mac OS X

    Run the 0install Launcher. In the window that opens, click the “Refresh all” button to update, or click the small button to the right of an entry and select “Show versions”.

    To select a specific software version, click on the version entry and set the rating to “preferred” (note that this will prevent updates being downloaded for the selected software until you manually change to a different version or reset the rating).

  - #### Windows

    Choose the Zero Install entry from the start page under Windows 8, or the respective subfolder of the programs folder in the start menu under Windows 10, Windows 7 and earlier, and switch to the “My Applications” tab in the window that opens. Click the small “down” arrow inside the “Start” button to the right of the DisplayCAL entry and choose “Update” or “Select version”.

    To select a specific software version, click on the “change” link next to an item, then click on the version entry and set the rating to “preferred” (note that this will prevent updates being downloaded for the selected software until you manually change to a different version or reset the rating).

Please continue with the Quickstart Guide.

## 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.

1. 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.

2. 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 “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.

3. Click the small icon with the swirling arrow 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 Spyder 2, a popup dialog will show which will let you enable the device. This is required to be able to use the Spyder 2 with ArgyllCMS and DisplayCAL.

   If your measurement device is a i1 Display 2, i1 Display Pro, ColorMunki Display, DTP94, Spyder 2/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 Spyder 4/5 software enables additional measurement modes for that instrument.

4. 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.

## System requirements and other prerequisites

### General system requirements

- A recent Linux, Mac OS X (10.5 or newer) or Windows (XP/Server 2003 or newer) operating system.
- A graphics card with at least 24 bits per pixel (true color) support and the desktop set up to use this color depth.

### ArgyllCMS

To use DisplayCAL, you need to download and install ArgyllCMS (1.0 or newer).

### Supported instruments

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:

#### Colorimeters

- CalMAN X2 (treated as i1 Display 2)
- Datacolor/ColorVision Spyder 2
- Datacolor Spyder 3 (since ArgyllCMS 1.1.0)
- Datacolor Spyder 4 (since ArgyllCMS 1.3.6)
- Datacolor Spyder 5 (since ArgyllCMS 1.7.0)
- Hughski ColorHug (Linux support since ArgyllCMS 1.3.6, Windows support with newest ColorHug firmware since ArgyllCMS 1.5.0, fully functional Mac OS X support since ArgyllCMS 1.6.2)
- Hughski ColorHug2 (since ArgyllCMS 1.7.0)
- Image Engineering EX1 (since ArgyllCMS 1.8.0)
- Klein K10-A (since ArgyllCMS 1.7.0. The K-1, K-8 and K-10 are also reported to work)
- Lacie Blue Eye (treated as i1 Display 2)
- Sencore ColorPro III, IV & V (treated as i1 Display 1)
- Sequel Imaging MonacoOPTIX/Chroma 4 (treated as i1 Display 1)
- X-Rite Chroma 5 (treated as i1 Display 1)
- X-Rite ColorMunki Create (treated as i1 Display 2)
- X-Rite ColorMunki Smile (since ArgyllCMS 1.5.0)
- X-Rite DTP92
- X-Rite DTP94
- X-Rite/GretagMacbeth/Pantone Huey
- X-Rite/GretagMacbeth i1 Display 1
- X-Rite/GretagMacbeth i1 Display 2/LT (the HP DreamColor/Advanced Profiling Solution versions of the instrument are also reported to work)
- X-Rite i1 Display Pro, ColorMunki Display (since ArgyllCMS 1.3.4. The HP DreamColor, NEC SpectraSensor Pro and SpectraCal C6 versions of the instrument are also reported to work)

#### Spectrometers

- JETI specbos 1211/1201 (since ArgyllCMS 1.6.0)
- JETI spectraval 1511/1501 (since ArgyllCMS 1.9.0)
- X-Rite ColorMunki Design/Photo (since ArgyllCMS 1.1.0)
- X-Rite/GretagMacbeth i1 Monitor (since ArgyllCMS 1.0.3)
- X-Rite/GretagMacbeth i1 Pro (the EFI ES-1000 version of the instrument is also reported to work)
- X-Rite i1 Pro 2 (since ArgyllCMS 1.5.0)
- X-Rite/GretagMacbeth Spectrolino

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):

- The ColorMunki Design and ColorMunki Photo spectrometers differ only in the functionality of the bundled vendor software. There are no differences between the instruments when used with ArgyllCMS and DisplayCAL.
- The ColorMunki Display colorimeter is a less expensive version of the i1 Display Pro colorimeter. It comes bundled with a simpler vendor software and has longer measurement times compared to the i1 Display Pro. Apart from that, the instrument appears to be virtually identical.
- The ColorMunki Create and ColorMunki Smile colorimeters are similar hardware as the i1 Display 2 (with the ColorMunki Smile no longer having a built-in correction for CRT but for white LED backlit LCD instead).

### Additional requirements for unattended calibration and profiling

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:

- X-Rite ColorMunki
- X-Rite/GretagMacbeth i1 Monitor & Pro
- X-Rite/GretagMacbeth Spectrolino
- X-Rite i1 Pro 2

Be aware you may still be forced to do a sensor calibration if the instrument requires it. Also, please look at the possible caveats.

### Additional requirements for using the source code

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.

#### All platforms:

- Python >= v2.6 <= v2.7.x (2.7.x is the recommended version. Mac OS X users: If you want to compile DisplayCAL's C extension module, it is advisable to first install XCode and then the official python.org Python)
- NumPy
- wxPython GUI[4] toolkit

#### Windows:

- pywin32
- WMI

### Additional requirements for compiling the C extension module

Normally you can skip this section as the source code contains pre-compiled versions of the C extension module that DisplayCAL uses.

#### Linux:

- GCC and development headers for Python + X11 + Xrandr + Xinerama + Xxf86vm if not already installed, they should be available through your distribution's packaging system

#### Mac OS X:

- XCode
- py2app if you want to build a standalone executable. On Mac OS X before 10.5, install setuptools first: `sudo python util/ez_setup.py setuptools`

#### Windows:

- a C-compiler (e.g. MS Visual C++ Express or MinGW. If you're using the official python.org Python 2.6 or later I'd recommend Visual C++ Express as it works out of the box)
- py2exe if you want to build a standalone executable

### Running directly from source

After 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).

## Installation

It is recommended to first remove all previous versions unless you used Zero Install to get them.

### Instrument driver installation under Windows

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 “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

1. Windows 8/8.1: Go to “Settings” (hover the lower right corner of the screen, then click the gear icon) and select “Power” (the on/off icon).
   Windows 10: Click the “Power” button in the start menu.
2. Hold the SHIFT key down and click “Restart”.
3. Select “Troubleshoot” → “Advanced Options” → “Startup Settings” → “Restart”
4. After reboot, select “Disable Driver Signature Enforcement” (number 7 on the list)

Method 2: Disable driver signature enforcement permanently

1. Open an elevated command prompt. Search for “Command Prompt” in the Windows start menu, right-click and select “Run as administrator”
2. Run the following command: `bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKS`
3. Run the following command: `bcdedit /set TESTSIGNING ON`
4. Reboot

To 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 Argyll driver for your instrument from the list.

### Linux package (.deb/.rpm)

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”.

### Mac OS X

Mount the disk image and option-drag its icon 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.

### Windows (Installer)

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”.

### Windows (ZIP archive)

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”.

### Source code (all platforms)

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:

#### Additional setup commands

`0install`
  Create/update 0install feeds and create Mac OS X application bundles to run those feeds.
`appdata`
  Create/update AppData file.
`bdist_appdmg` (Mac OS X only)
  Creates a DMG of previously created (by the py2app or bdist_standalone commands) application bundles, or if used together with the `0install` command.
`bdist_deb` (Linux/Debian-based)
  Create an installable Debian (.deb) package, much like the standard distutils command bdist_rpm for RPM packages. Prerequisites: You first need to install alien and rpmdb, create a dummy RPM database via `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_pyi`
  An alternative to `bdist_standalone`, which uses PyInstaller instead of bbfreeze/py2app/py2exe.
`bdist_standalone`
  Creates a standalone application that does not require a Python installation. Uses bbfreeze on Linux, py2app on Mac OS X and py2exe on Windows. setup.py will try and automatically download/install these packages for you if they are not yet installed and if not using the --use-distutils switch. Note: On Mac OS X, older versions of py2app (before 0.4) are not able to access files inside python “egg” files (which are basically ZIP-compressed folders). Setuptools, which is needed by py2app, will normally be installed in “egg” form, thus preventing those older py2app versions from accessing its contents. To fix this, you need to remove any installed setuptools-<version>-py<python-version>.egg files from your Python installation's site-packages directory (normally found under `/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.
`buildservice`
  Creates control files for openSUSE Build Service (also happens implicitly when invoking `sdist`).
`finalize_msi` (Windows only)
  Adds icons and start menu shortcuts to the MSI installer previously created with `bdist_msi`. Successful MSI creation needs a patched msilib (additional information).
`inno` (Windows only)
  Creates Inno Setup scripts which can be used to compile setup executables for standalone applications generated by the `py2exe` or `bdist_standalone` commands and for 0install.
`purge`
  Removes the `build` and `DisplayCAL.egg-info` directories including their contents.
`purge_dist`
  Removes the `dist` directory and its contents.
`readme`
  Creates README.html by parsing misc/README.template.html and substituting placeholders like date and version numbers.
`uninstall`
  Uninstalls the package. You can specify the same options as for the `install` command.

#### Additional setup options

`--cfg=<name>`
  Use an alternate setup.cfg, e.g. tailored for a given Linux distribution. The original setup.cfg is backed up and restored afterwards. The alternate file must exist as misc/setup.<name>.cfg
`-n`, `--dry-run`
  Don't actually do anything. Useful in combination with the uninstall command to see which files would be removed.
`--skip-instrument-configuration-files`
  Skip installation of udev rules and hotplug scripts.
`--skip-postinstall`
  Skip post-installation on Linux (an entry in the desktop menu will still be created, but may not become visible until logging out and back in or rebooting) and Windows (no shortcuts in the start menu will be created at all).
`--stability=stable | testing | developer | buggy | insecure`
  Set the stability for the implementation that is added/updated via the `0install` command.
`--use-distutils`
  Force setup to use distutils (default) instead of setuptools. This is useful in combination with the bdist* commands, because it will avoid an artificial dependency on setuptools. This is actually a switch, use it once and the choice is remembered until you specify the `--use-setuptools` switch (see next paragraph).
`--use-setuptools`
  Force setup to try and use setuptools instead of distutils. This is actually a switch, use it once and the choice is remembered until you specify the `--use-distutils` switch (see above).

### Instrument-specific setup

If your measurement device is a i1 Display 2, i1 Display Pro, ColorMunki Display, DTP94, Spyder 2/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 Spyder 4/5 are also only available if they are imported from the Spyder 4/5 software.

Choose “Import colorimeter corrections from other display profiling software...” from DisplayCAL's “Tools” menu.

If your measurement device is a Spyder 2, you need to enable it to be able to use it with ArgyllCMS and DisplayCAL. Choose “Enable Spyder 2 colorimeter...” from DisplayCAL's “Tools” menu.

## Basic concept of display calibration and profiling

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.

## A note about colorimeters, displays and DisplayCAL

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 and possibly the Spyder 4/5 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.

### Special note about the X-Rite i1 Display Pro, ColorMunki Display and Spyder 4/5 colorimeters

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.

## Usage

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.

### Settings file

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.

### Predefined settings (presets)

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.

#### Why has a default gamma of 2.2 been chosen for some presets?

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.

### Tabs

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.

### Choosing the display to calibrate and the measurement device

After connecting the instrument, click the small icon with the swirling arrow in between the “Display device” and “Instrument” controls to detect connected display devices and instruments.

#### Choosing a display device

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:

Web @ localhost

  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.

madVR

  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.

Prisma

  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.

Resolve

  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).

Untethered

  See untethered display measurements. Please note that the untethered mode should generally only be used if you've exhausted all other options.

#### Choosing a measurement mode

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 Spyder 4/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.

#### Drift compensation during measurements (only available if using ArgyllCMS >= 1.3.0)

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 are not temperature compensated.

#### Override display update delay (only available if using ArgyllCMS >= 1.5.0, only visible if “Show advanced options” in the “Options” menu is enabled)

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. i1d3, i1pro, ColorMunki, 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.

#### Override display settle time multiplier (only available if using ArgyllCMS >= 1.7.0, only visible if “Show advanced options” in the “Options” menu is enabled)

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.

#### Choosing a colorimeter correction for a particular display

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. A list of contributed correction matrices can also be found on the ArgyllCMS website.

Please note this option is only available if using ArgyllCMS >= 1.3.0 and a colorimeter.

### Calibration settings

Interactive display adjustment
  Turning this off skips straight to calibration or profiling measurements instead of giving you the opportunity to alter the display's controls first. You will normally want to keep this checked, to be able to use the controls to get closer to the chosen target characteristics.
Observer

  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.

White point

  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.

  #### Visual whitepoint editor

  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.

White level

  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.

Black level

  (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.

Tone curve / gamma

  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.

Ambient light level

  (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.

Black output offset

  (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.

Black point correction

  (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.

Black point correction rate (only available if using ArgyllCMS >= 1.0.4)

  (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.

Calibration speed

  (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).

### Profiling settings

Profile quality
  Sets the level of effort and/or detail in the resulting profile. For table based profiles (LUT[7]), it sets the main lookup table size, and hence quality in the resulting profile. For matrix profiles it sets the per channel curve detail level and fitting “effort”.
Black point compensation (enable “Show advanced options” in the “Options” menu)

  (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).

Profile type (enable “Show advanced options” in the “Options” menu)

  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.

Advanced gamut mapping options (enable “Show advanced options” in the “Options” menu)

  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.

  #### Low quality PCS[11]-to-device tables

  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.

  #### Enhance effective resolution of colorimetric PCS[11]-to-device table

  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

  Default colorimetric rendering (2500 OFPS XYZ LUT profile)

  “Smooth” colorimetric rendering (2500 OFPS XYZ LUT profile, inverted A2B)

  “Smooth” perceptual rendering (2500 OFPS XYZ LUT profile, inverted A2B)

  #### Default rendering intent for profile

  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.

  #### CIECAM02 gamut mapping

  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).

Testchart file
  You can choose the test patches used when profiling the display here. The default “Auto” optimized setting takes the actual display characteristics into account. You can further increase potential profile accuracy by increasing the number of patches using the slider.
Patch sequence (enable “Show advanced options” in the “Options” menu)
  “Minimize display response delay” is the ArgyllCMS test patch generator default. “Maximize lightness difference”, “Maximize luma difference”, “Maximize RGB difference” and “Vary RGB difference” are alternate choices which 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.
Testchart editor

  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.

  #### Testchart generation options

  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.

  - Optimized Farthest Point Sampling (OFPS) will optimize the point locations to minimize the distance from any point in device space to the nearest sample point
  - Incremental Far Point Distribution incrementally searches for test points that are as far away as possible from any existing points
  - Device space random chooses test points with an even random distribution in device space
  - Perceptual space random chooses test points with an even random distribution in perceptual space
  - Device space filling quasi-random chooses test points with a quasi-random, space filling distribution in device space
  - Perceptual space filling quasi-random chooses test points with a quasi-random, space filling distribution in perceptual space
  - Device space body centered cubic grid chooses test points with body centered cubic distribution in device space
  - Perceptual space body centered cubic grid chooses test points with body centered cubic distribution in perceptual space

  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.

  #### Generating diagnostic 3D views of testcharts

  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.

  #### Other functions

  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:

  - Export patches as CSV, TIFF, PNG or DPX files, and set how often each patch should be repeated when exporting as images after you click the “Export” button (black patches will be repeated according to the “Max” value, and white patches according to the “Min” value, and patches in between according to their lightness in L* scaled to a value between “Min” and “Max”).
  - Add saturation sweeps which are often used in a video or film context to check color saturation. A preconditioning profile needs to be used to enable this.
  - Add reference patches from measurement files in CGATS format, from named color ICC profiles, or by analyzing TIFF, JPEG or PNG images. A preconditioning profile needs to be used to enable this.
  - Sort patches by various color criteria (warning: this will interfere with the ArgyllCMS 1.6.0 or newer patch order optimisation which minimizes measurement times, so manual sorting should only be used for visual inspection of testcharts, or if required to optimize the patch order for untethered measurements in automatic mode where it is useful to maximize the lightness difference from patch to patch so the automatism has an easier time detecting changes).

  #### Patch editor

  Controls for the spreadsheet-like patch editor are as follows:

  - To select patches, click and drag the mouse over table cells, or hold SHIFT (select range) or CTRL/CMD (add/remove single cells/rows to/from selection)
  - To add a patch below an existing one, double-click a row label
  - To delete patches, select them, then hold CTRL (Linux, Windows) or CMD (Mac OS X) and hit DEL or BACKSPACE (will always delete whole rows even if only single cells are selected)
  - CTRL-C/CTRL-V/CTRL-A = copy/paste/select all

  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.

Profile name

  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.

### Calibrating / profiling

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.

#### Adjusting a display before calibration

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.

##### Adjusting a LCD display

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.

White point
  If your screen has RGB gain, colortemperature or other whitepoint controls, the first step should be adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
  Continue with the white level adjustment. If you have set a target white level, you may reduce or increase the brightness of your screen (ideally using only the backlight) until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing brightness that doesn't cause eye strain.

##### Adjusting a “Refresh”-type display like CRT or Plasma

Black level
  On “Refresh”-type displays, this adjustment is usually done using the “brightness” control. You may reduce or increase the brightness of your screen until the desired black level is reached (i.e. the bar ends at the marked center position).
White point
  The next step should be adjusting the whitepoint, using the display's RGB gain controls or other means of adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
  Continue with the white level adjustment. On “Refresh”-type displays this is usually done using the “contrast” control. If you have set a target white level, you may reduce or increase contrast until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing level that doesn't cause eye strain.
Black point
  If your display has RGB offset controls, you can adjust the black point as well, in much the same way that you adjusted the whitepoint.

##### Finishing adjustments and starting calibration/characterization

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. You may want to get a coffee or two as the process can take a fair amount of time, especially if you selected a high quality 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 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.

##### Optimizing testcharts for improved profiling accuracy and efficiency

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:

- Have a previous display profile and select it under “Settings”.
- Select one of the pre-baked testcharts to use as base and bring up the testchart editor.
- Next to “Preconditioning profile” click on “current profile”. It should automatically select the previous profile you've chosen. Then place a check in the checkbox. Make sure adaptation is set to a high level (e.g. 100%)
- If desired, adjust the number of patches and make sure the iterative patches amount is not zero.
- Create the chart and save it. Click “yes” when asked to select the newly generated chart.
- Start the profiling measurements (e.g. click “calibrate & profile” or “profile only”).

#### Profile installation

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).

#### Profile loader (Windows)

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:

- Load calibration from current display device profile(s). Selecting this (re)loads the calibration instantly, and also sets the desired calibration state (see “Preserve calibration state” below).
- Reset video card gamma table. Selecting this resets the video card gamma tables instantly, and also sets the desired calibration state (see “Preserve calibration state” below).
- Load calibration on login & preserve calibration state. This periodically checks if the video card gamma tables match the desired calibration state. It may take up to three seconds until the selected calibration state is automatically re-applied.
- Fix profile associations automatically when only one display is active in a multi-display setup. This is a work-around for applications (and Windows itself) querying the display profile in a way that does not take into account the active display, which can lead to a wrong profile being used. A pre-requisite for this working correctly is that the profile loader has to be running before you switch from a multi-display to a single-display configuration in Windows, and the profile associations have to be correct at this point. Note that quitting the profile loader will restore profile associations to what they were (honoring any changes to profile associations during its runtime).
- Bitdepth. Some graphics drivers may internally quantize the video card gamma table values to a lower bitdepth than the nominal 16 bits per channel that are encoded in the video card gamma table tag of DisplayCAL-generated profiles. If this quantization is done using integer truncating instead of rounding, this may pronounce banding. In that case, you can let the profile loader quantize to the target bitdepth by using rounding, which may produce a smoother result.
- Exceptions. You can override the global profile loader state on a per application basis.
- Profile associations. Brings up a dialog where you can associate profiles to your display devices.
- Open Windows display settings.

### Creating 3D LUTs

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.

#### 3D LUT settings

Create 3D LUT after profiling
  Normally after profiling, you'll be given the option to install the profile to make it available for ICC color managed applications. If this box is checked, you'll have the option to generate a 3D LUT (with the chosen settings) instead, and the 3D LUT settings will also be stored inside the profile, so that they can be easily restored by selecting the profile under “Settings” if needed. If this box is unchecked, you can create a 3D LUT from an existing profile.
Source colorspace/source profile
  This sets the source colorspace for the 3D LUT, which is normally a video standard space like defined by Rec. 709 or Rec. 2020.
Tone curve
  This allows to set a predefined or custom tone response curve for the 3D LUT. Predefined settings are Rec. 1886 (input offset), Gamma 2.2 (output offset, pure power), SMPTE 2084 hard clip and SMPTE 2084 roll-off (BT.2390).

  ##### Tone curve parameters

  - “Absolute” vs. “Relative” gamma (not available for SMPTE 2084) To accomodate a non-zero black level of a real display, the tone response curve needs to be offset and scaled accordingly.
    “Absolute” gamma results in an actual output at 50% input which doesn't match that of an idealized power curve (unless the black level is zero).
    “Relative” gamma results in an actual output at 50% input which matches that of an idealized power curve.
  - Black output offset To accomodate a non-zero black level of a real display, the tone response curve needs to be offset and scaled accordingly. A black output offset of 0% (= all input offset) scales and offsets the input values (this matches BT.1886), while an offset of 100% scales and offsets the output values (this matches the overall curve shape of a pure power curve). A split between input and output offset is also possible.
  - Display peak luminance (only available for SMPTE 2084) This allows you to adjust the clipping point or roll-off to your display's capabilities.
  - HDR (only available for SMPTE 2084 when the 3D LUT format is set to madVR) Whether the 3D LUT will tell madVR to switch the display to HDR mode or not (HDR mode 3D LUTs will need to be set in the “process HDR content by an external 3D LUT” slot, HDR to SDR mode 3D LUTs in the “convert HDR content to SDR by using an external 3D LUT” slot in madVR's HDR options).
  - Maximum content light level (only available for SMPTE 2084 roll-off when advanced options are enabled in the “Options” menu) HDR video content may not encode the full range of HDR luminance levels, and so clipping after a certain point may be desirable to make slightly better use of a display's peak luminance capabilities. Note that you should be careful in choosing a maximum content light level, because you need to know exactly up to which point video content encodes luminance values, and HDR metadata is not guaranteed to be a reliable source to determine this clipping point. Setting a too low value may introduce visual artifacts, therefore you should normally leave the maximum content light level at its default value of 10000 cd/m² (this matches BT.2390).
  - Content colorspace (only available for SMPTE 2084 roll-off when advanced options are enabled in the “Options” menu) HDR video content may not encode the full source gamut, and so compressing the actual encoded gamut (instead of the full source gamut) into the display gamut may be desirable. Note that there is usually no need to change this from the default (DCI P3), and that this setting will mostly affect perceptual gamut mapping, not colorimetric.
Apply calibration (vcgt) (only visible if “Show advanced options” in the “Options” menu is enabled)
  Apply the profile's 1D LUT calibration (if any) to the 3D LUT. Normally, this should always be enabled if the profile contains a non-linear 1D LUT calibration, otherwise you have to make sure the 1D calibration is loaded whenever the 3D LUT is used.
Gamut mapping mode (only visible if “Show advanced options” in the “Options” menu is enabled)
  The default gamut mapping mode is “Inverse device to PCS” and gives the most accurate results. In case a profile with high enough PCS-to-device table resolution is used, the option “PCS-to-device” is selectable as well, which allows for quicker generation of a 3D LUT, but is somewhat less accurate.
Rendering intent
  - “Absolute colorimetric” is intended to reproduce colors exactly. Out of gamut colors will be clipped to the closest possible match. The destination whitepoint will be altered to match the source whitepoint if possible, which may get clipped if it is out of gamut.
  - “Absolute appearance” maps colors from source to destination, trying to match the appearance of colors as closely as possible, but may not exactly map the whitepoint. Out of gamut colors will be clipped to the closest possible match.
  - “Absolute colorimetric with white point scaling” behaves almost exactly like “Absolute colorimetric”, but will scale the source colorspace down to make sure the source whitepoint isn't clipped.
  - “Luminance matched appearance” linearly compresses or expands the luminance axis from white to black to match the source to the destination space, while not otherwise altering the gamut, clipping any out of gamut colors to the closest match. The destination whitepoint is not altered to match the source whitepoint.
  - “Perceptual” uses three-dimensional compression to make the source gamut fit within the destination gamut. As much as possible, clipping is avoided, hues and the overall appearance is maintained. The destination whitepoint is not altered to match the source whitepoint. This intent is useful if the destination gamut is smaller than the source gamut.
  - “Perceptual appearance” uses three-dimensional compression to make the source gamut fit within the destination gamut. As much as possible, clipping is avoided, hues and the overall appearance is maintained. The destination whitepoint is altered to match the source whitepoint. This intent is useful if the destination gamut is smaller than the source gamut.
  - “Luminance preserving perceptual” (ArgyllCMS 1.8.3+) uses compression to make the source gamut fit within the destination gamut, but very heavily weights the preservation of the luminance value of the source, which will compromise the preservation of saturation. No contrast enhancement is used if the dynamic range is reduced. This intent may be of use where preserving the tonal distinctions in images is more important than maintaining overall colorfulness or contrast.
  - “Preserve saturation” uses three-dimensional compression and expansion to try and make the source gamut match the destination gamut, and also favours higher saturation over hue or lightness preservation. The destination whitepoint is not altered to match the source whitepoint.
  - “Relative colorimetric” is intended to reproduce colors exactly, but relative to the destination whitepoint which will not be altered to match the source whitepoint. Out of gamut colors will be clipped to the closest possible match. This intent is useful if you have calibrated a display to a custom whitepoint that you want to keep.
  - “Saturation” uses the same basic gamut mapping as “Preserve saturation”, but increases saturation slightly in highly saturated areas of the gamut.
3D LUT file format
  Sets the output format for the 3D LUT. Currently supported are Autodesk/Kodak (`.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.
Input/output encoding
  Some 3D LUT formats allow you to set the input/output encoding. Note that in most cases, sensible defaults will be chosen depending on selected 3D LUT format, but may be application- or workflow-specific.
Input/output bit depth
  Some 3D LUT formats allow you to set the input/output bit depth. Note that in most cases, sensible defaults will be chosen depending on selected 3D LUT format, but may be application- or workflow-specific.

#### Installing 3D LUTs

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).

#### Installing 3D LUTs for the ReShade injector

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.

### Verification / measurement report

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.

To do the former, 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.

##### HowTo—Common scenarios

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.

###### Checking the accuracy of a display profile (evaluating how well the profile characterizes the display)

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.

###### Checking how well a display can simulate another colorspace (evaluating softproofing capabilities, 3D LUTs, DeviceLink profiles, or native display performance)

There are two ways of doing this:

- Use a reference file with XYZ or L*a*b* aim values,
- or use a combination of testchart with RGB or CMYK device values and an RGB or CMYK simulation profile (for an RGB testchart, it will only allow you to use an RGB simulation profile and vice versa, and equally a CMYK testchart needs to be used with a CMYK simulation profile)

Then, you have a few options that influence the simulation.

- Whitepoint simulation. If you are using a reference file that contains device white (100% RGB or 0% CMYK), or if you use a combination of testchart and simulation profile, you can choose if you want whitepoint simulation of the reference or simulation profile, and if so, if you want the whitepoint simulated relative to the display profile whitepoint. To explain the latter option: Let's assume a reference has a whitepoint that is slightly blueish (compared to D50), and a display profile has a whitepoint that is more blueish (compared to D50). If you do not choose to simulate the reference white relative to the display profile whitepoint, and the display profile's gamut is large and accurate enough to accomodate the reference white, then that is exactly what you will get. Depending on the adaptation state of your eyes though, it may be reasonable to assume that you are to a large extent adapted to the display profile whitepoint (assuming it is valid for the device), and the simulated whitepoint will look a little yellowish compared to the display profile whitepoint. In this case, choosing to simulate the whitepoint relative to that of the display profile may give you a better visual match e.g. in a softproofing scenario where you compare to a hardcopy proof under a certain illuminant, that is close to but not quite D50, and the display whitepoint has been matched to that illuminant. It will “add” the simulated whitepoint “on top” of the display profile whitepoint, so in our example the simulated whitepoint will be even more blueish than that of the display profile alone.
- Using the simulation profile as display profile will override the profile set under “Settings”. Whitepoint simulation does not apply here because color management will not be used and the display device is expected to be in the state described by the simulation profile. This may be accomplished in several ways, for example the display may be calibrated internally or externally, by a 3D LUT or device link profile. If this setting is enabled, a few other options will be available:
  - Enable 3D LUT (if using the madVR display device/madTPG under Windows, or a Prisma video processor). This allows you to check how well the 3D LUT transforms the simulation colorspace to the display colorspace. Note this setting can not be used together with a DeviceLink profile.
  - DeviceLink profile. This allows you to check how well the DeviceLink transforms the simulation colorspace to the display colorspace. Note this setting can not be used together with the “Enable 3D LUT” setting.
- Tone response curve. If you are evaluating a 3D LUT or DeviceLink profile, choose the same settings here as during 3D LUT/DeviceLink creation (and also make sure the same display profile is set, because it is used to map the blackpoint).
  To check a display that does not have an associated profile (e.g. “Untethered”), set the verification tone curve to “Unmodified”. In case you want to verify against a different tone response curve instead, you need to create a synthetic profile for this purpose (“Tools” menu).

#### How were the nominal and recommended aim values chosen?

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.

#### How are the results of the profile verification report to be interpreted?

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—this problem does not exist with spectrometers, which do not need a correction for wide-gamut, but have lately been discovered to have issues measuring the correct brightness of some LED backlit displays which use white LEDs), 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 :)

#### How are profiles evaluated against the measured values?

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”.

##### How is a testchart or reference file used?

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.

##### How is the assumed vs. measured whitepoint ΔE calculated?

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.

##### How is the gray balance “range” evaluated?

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).

##### What does the “Evaluate gray balance through calibration only” checkbox on a report actually do?

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).

##### What do the “Use absolute values” and “Use display profile whitepoint as reference white” checkboxes on a report do?

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.

### Special functionality

#### Remote measurements and profiling

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.

#### madVR test pattern generator

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.

#### Resolve (10.1+) as pattern generator

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.

#### Untethered display measurements

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:

- Select the desired testchart, then open the testchart editor.
- Select “Maximize lightness difference” from the sorting options dropdown, click “Apply”, then export the testchart.
- Burn the images to a DVD, copy them on an USB stick or use any other available means to get them to display onto the device that should be measured.
- In DisplayCAL's display dropdown, select “Untethered” (the last option).
- Show the first image on the remote display, and attach the instrument. Then select “Profile only”.

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.

## Non-UI functionality

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 0install, or running from source.

Change display profile and calibration whitepoint

  Note that this reduces the profile gamut and accuracy.

  Via 0install:

      0install run --command=change-display-profile-cal-whitepoint -- \

        http://displaycal.net/0install/DisplayCAL.xml \

        [-t temp | -T temp | -w x,y] [--cal-only] [inprofile] outfilename

  From source:

      python util/change_display_profile_cal_whitepoint.py- \

        http://displaycal.net/0install/DisplayCAL.xml \

        [-t temp | -T temp | -w x,y] [--cal-only] [inprofile] outfilename

  `-t temp`
    Use daylight color temperature `temp` as whitepoint target.
  `-T temp`
    Use blackbody color temperature `temp` as whitepoint target.
  `-w x,y`
    Use x,y chromaticity as whitepoint target.
  `--cal-only` (optional)
    Only alter the calibration embedded in the profile, not the profile itself.
  `inprofile` (optional)
    Use profile `inprofile` instead of the current display profile.
  `outfilename`
    Output profile filename. The changed profile will be written to this file.
Enable/disable Windows 7 and later calibration loading

  Note 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.

  Via 0install:

      0install run --command=set-calibration-loading -- \

        http://displaycal.net/0install/DisplayCAL.xml [--os]

  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.

## Scripting

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.

### List of supported commands

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]`
  Show 3D LUT creation tab, or create 3D LUT `filename`.
`abort`
  Try to abort a currently running operation.
`activate [window ID | name | label]`
  Activate window `window` or the main application window (bring it to the front). If it is minimized, restore it.
`alt | cancel | ok [filename]`
  If a modal dialog is shown, call the default action (ok), the alternate action (if applicable), or cancel it. If a file dialog is shown, using `ok filename` chooses that file.
`calibrate`
  Setup calibration measurements (note that this won't give a choice whether to create a fast curves + matrix profile as well, if you want that use `interact mainframe calibrate_btn` instead). For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.
`calibrate-profile`
  Setup calibration & profiling measurements. For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.
`close [window ID | name | label]`
  Close window `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-correction`
  Create colorimeter correction.
`create-profile [filename]`
  Create profile from existing measurements (profile or measurement file).
`curve-viewer [filename]`
  Show curves, optionally loading `filename`. Relative paths are possible e.g. for presets: `curve-viewer presets/photo.icc`
`DisplayCAL [filename]`
  Bring the main window to the front. If it is minimized, restore it. Optionally, load `filename`.
`enable-spyder2`
  Enable the spyder 2.
`getactivewindow`
  Get the current active window. The returned format is `classname` `ID` `name` `label` `state`. `state` is either `enabled` or `disabled`.
`getcellvalues [window ID | name | label] <grid ID | name | label>`
  Get cell values from grid `grid` of window `window` or the current active window.
`getappname`
  Get the name of the application you're connected to.
`getcfg [option]`
  Get configuration `option`, or whole configuration (key-value pairs in INI format).
`getcommands`
  Get list of commands supported by this application.
`getdefault <option>`
  Get default `option` (key-value pair in INI format).
`getdefaults`
  Get all defaults (key-value pairs in INI format).
`getmenus`
  Get available menus in the format `ID "label" state`. `state` is either `enabled` or `disabled`.
`getmenuitems [menuposition | label]`
  Get available menu items in the format `menuposition` `"menulabel"` `menuitemID` `"menuitemlabel"` `state` `[checkable]` `[checked]`. `state` is either `enabled` or `disabled`.
`getstate`
  Get application state. Return value will be either `idle`, `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]`
  Get a single UI element or a list of the visible UI elements of window `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).
`getvalid`
  Get valid values for options that have constraints (key-value pairs in INI format). There are two sections, `ranges` 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).
`getwindows`
  Get a list of visible windows. The returned format is a list of `classname` `ID` `name` `label` `state`. `state` is either `enabled` or `disabled`.
`import-colorimeter-corrections [filename...]`
  Import colorimeter corrections.
`install-profile [filename]`
  Install a profile.
`interact [window ID | name | label] <element ID | name | label> [setvalue value]`
  Interact with the UI element `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>`
  Invoke a menu item.
`load <filename>`
  Load `filename`. Relative paths are possible e.g. for presets: `load presets/photo.icc`
`measure`
  Start measurements (must be setup first!).
`measure-uniformity`
  Measure screen uniformity.
`measurement-report [filename]`
  If no filename given, show measurement report tab. Otherwise, setup measurement to create the HTML report `filename`. For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.
`profile`
  Setup profiling measurements (note that this will always use the current calibration if applicable, if you want to use linear calibration instead call `load 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]`
  Show profile information, optionally loading profile `filename`. Relative paths are possible e.g. for presets: `profile-info presets/photo.icc`
`refresh`
  Update the GUI after configuration changes via `setcfg` or `restore-defaults`.
`report-calibrated`
  Report on calibrated display. For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.
`report-uncalibrated`
  Report on uncalibrated display. For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.
`restore-defaults [category...]`
  Restore defaults globally or just for `category`. Call `refresh` after changing the configuration to update the GUI.
`setlanguage <languagecode>`
  Set language.
`setcfg <option> <value>`
  Set configuration `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>`
  Set the format for responses. The default `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]`
  Show synthetic profile creation window, optionally loading profile `filename`.
`testchart-editor [filename | create filename]`
  Show testchart editor window, optionally loading or creating testchart `filename`. Relative paths are possible e.g. for loading a default testchart: `testchart-editor ti1/d3-e4-s17-g49-m5-b5-f0.ti1`
`verify-calibration`
  Verify calibration. For non-virtual displays as well as pattern generators (except madVR), call the `measure` command afterwards to commence measurements.

### Interacting with UI elements

- Invoking a button: `interact [window] <button>` e.g. show profile name placeholders information: `interact mainframe profile_name_info_btn`
- Setting a value on a dropdown, text field, or slider: `interact [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)
- Setting a cell value on a grid: `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"`

### Caveats and limitations

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.

## User data and configuration file locations

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).

### Configuration

- Linux: `/home/Your Username/.config/DisplayCAL`
- Mac OS X: `/Users/Your Username/Library/Preferences/DisplayCAL`
- Windows Vista and newer: `C:\Users\Your Username\AppData\Roaming\DisplayCAL`
- Windows XP: `C:\Documents and Settings\Your Username\Application Data\DisplayCAL`

### Logs

- Linux: `/home/Your Username/.local/share/DisplayCAL/logs`
- Mac OS X: `/Users/Your Username/Library/Logs/DisplayCAL` and
  `/Users/Your Username/Library/Logs/0install`
- Windows Vista and newer: `C:\Users\Your Username\AppData\Roaming\DisplayCAL\logs`
- Windows XP: `C:\Documents and Settings\Your Username\Application Data\DisplayCAL\logs`

### Storage

- Linux: `/home/Your Username/.local/share/DisplayCAL/storage`
- Mac OS X: `/Users/Your Username/Library/Application Support/DisplayCAL/storage`
- Windows Vista and newer: `C:\Users\Your Username\AppData\Roaming\DisplayCAL\storage`
- Windows XP: `C:\Documents and Settings\Your Username\Application Data\DisplayCAL\storage`

### Incomplete/failed runs (useful for troubleshooting)

- Linux: `/home/Your Username/.local/share/DisplayCAL/incomplete`
- Mac OS X: `/Users/Your Username/Library/Application Support/DisplayCAL/incomplete`
- Windows Vista and newer: `C:\Users\Your Username\AppData\Roaming\DisplayCAL\incomplete`
- Windows XP: `C:\Documents and Settings\Your Username\Application Data\DisplayCAL\incomplete`

## Known issues and solutions

- General: Wacky image colors (swapped colors)
- General: Measurements are failing if using the “Allow skipping of spectrometer self-calibration” option and/or highres/adaptive mode
- USB 3.0 connectivity issues (instrument not found, access failing, or not working properly)
- Windows: “The process <dispcal.exe|dispread.exe|coloprof.exe|...> could not be started.”
- Photoshop: “The monitor profile […] appears to be defective. Please rerun your monitor calibration software.”
- MS Windows Vista: The calibration gets unloaded when a User Access Control prompt is shown
- MS Windows with Intel graphics: The Calibration gets unloaded after login/resume/User Access Control prompt
- MS Windows Vista and later: The display profile isn't used if it was installed for the current user
- MS Windows 7 or later: Calibration does not load automatically on login when not using the DisplayCAL Profile Loader
- MS Windows XP, multiple displays: One profile is used by all displays connected to a graphics card
- Mac OS X 10.11 “El Capitan”: If running via 0install, DisplayCAL won't launch anymore after updating to El Capitan from a previous version of OS X
- Mac OS X: “DisplayCAL.app is damaged and can't be opened.”
- Mac OS X 10.12 “Sierra”: Standalone tools silently fail to start
- Linux/Windows: No video card gamma table access (“Calibrate & profile” button grayed despite display and instrument detected)
- Linux: Instrument not working correctly/constantly disconnecting (conflict with libmtp)

General: Wacky image colors (swapped colors)
  Solution: This happens when you created a “XYZ LUT + swapped matrix” profile and is a way to alert you that the software you're using does not support XYZ LUT profiles and falls back to the included matrix (which generally means you'd loose accuracy). If you're having this situation only in some applications, creating a “XYZ LUT + matrix” profile will remedy it (but please keep in mind that those applications not supporting XYZ LUT will still fall back to the matrix, so results can be different from applications that support XYZ LUT correctly). If all colormanaged applications you use show swapped colors, you should create a matrix profile instead. Note that you do not have to re-run any measurements: In DisplayCAL, choose a profile type as suggested previously (you need to enable advanced options in the “Options” menu to show profile type choices on the “Profiling” tab), adjust quality and profile name if you want, then choose “Create profile from measurement data...” in the “File” menu and select the profile you had the issue with.
General: Measurements are failing (“Sample read failed”) if using the “Allow skipping of spectrometer self-calibration” option and/or highres/adaptive mode
  Solution: Disable either or all of the above options. The problem seems to mainly occur with the ColorMunki.
USB 3.0 connectivity issues (instrument not found, access failing, or not working properly)
  Such issues would usually manifest themselves through instruments not being found, or randomly disconnecting even if seemingly working fine for some time. From all information that is known about these issues, they seem to be related to USB 3.0, not related to software as the vendor software is also affected, and they seem to occur irrespective of operating system or device drivers.
  The underlying issue seems to be that while USB 3.0 has been designed to be backwards compatible with USB 2.0, some USB 2 devices do not seem to work reliably when connected over USB 3. As currently available instruments with USB connectivity are usually USB 2 devices, they may be affected.
  Solution: A potential solution to such USB 3.0 connectivity issues is to connect the instrument to a USB 2.0 port (if available) or the use of an externally powered USB 2.0 hub.
Windows: “The process <dispcal.exe|dispread.exe|coloprof.exe|...> could not be started.”
  Solution: If you downloaded ArgyllCMS manually, go to your Argyll_VX.X.X\bin directory, and right-click the exe file from the error message. Select “Properties”, and then if there is a text on the “General” tab under security “This file came from another computer and might be blocked”, click “Unblock”. Sometimes also over-zealous Antivirus or 3rd-party Firewall solutions cause such errors, and you may have to add exceptions for all involved programs (which may include all the ArgyllCMS executables and if you're using Zero Install also python.exe which you'll find in a subdirectory under C:\ProgramData\0install.net\implementations) or (temporarily) disable the Antivirus/Firewall.
Photoshop: “The monitor profile […] appears to be defective. Please rerun your monitor calibration software.”
  Solution: Adobe ACE, Adobe's color conversion engine, contains monitor profile validation functionality which attempts to filter out bad profiles. With XYZ LUT profiles created in ArgyllCMS versions up to 1.3.2, the B2A white point mapping is sometimes not particularly accurate, just enough so that ACE will see it as a problem, but in actual use it may only have little impact that the whitepoint is a bit off. So if you get a similar message when launching Photoshop, with the options “Use profile regardless” and “Ignore profile”, you may choose “Use profile regardless” and check visually or with the pipette in Photoshop if the inaccurate whitepoint poses a problem. This issue is fixed in ArgyllCMS 1.3.3 and newer.
MS Windows Vista: The calibration gets unloaded when a User Access Control prompt is shown
  Solution: (Intel and Intel/AMD hybrid graphics users please see “The Calibration gets unloaded after login/resume/User Access Control prompt” first) This Windows Vista bug seems to have been fixed under Windows 7 (and later), and can be remedied under Vista by either manually reloading calibration, or disabling UAC—but please note that you sacrifice security by doing this. To manually reload the calibration, either open DisplayCAL and select “Load calibration curves from current display profile” under the “Video card gamma table” sub-menu in the “Tools” menu, or (quicker) open the Windows start menu and select “DisplayCAL Profile Loader” in the “Startup” subfolder. To disable UAC[9] (not recommended!), open the Windows start menu and enter “msconfig” in the search box. Click on the Tools tab. Select the line “Disable UAC” and click the “Launch” button. Close msconfig. You need to reboot your system for changes to apply.
MS Windows with Intel graphics (also Intel/AMD hybrid): The Calibration gets unloaded after login/resume/User Access Control prompt
  Solution: The Intel graphics drivers contain several utilities that interfere with correct calibration loading. A workaround is to rename, move or disable (e.g. using a tool like AutoRuns) the following files:

      C:\Windows\system32\igfxtray.exe
      C:\Windows\system32\igfxpph.dll
      C:\Windows\system32\igfxpers.exe

MS Windows Vista and later: The display profile isn't used if it was installed for the current user
  Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select “Classic View” under Vista and anything other than “Category View” under Windows 7 and later to see it). Under the “Devices” tab, select your display device, then tick “Use my settings for this device”.
MS Windows 7 or later: Calibration does not load automatically on login when not using the DisplayCAL Profile Loader
  Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select something other than “Category View” to see it). Select the “Advanced” tab, then “Change system defaults...”, and finally tick the “Use Windows display calibration” checkbox. Note that the precision of Windows' built-in calibration loading is inferior compared to the DisplayCAL profile loader and may introduce inaccuracies and artifacts.
MS Windows XP, multiple displays: One profile is used by all displays connected to a graphics card
  Solution: The underlying issue is that Windows XP assigns color profiles per (logical) graphics card, not per output. Most XP graphics drivers present only one logical card to the OS even if the card itself has multiple outputs. There are several possible solutions to this problem:
  - Use different graphics cards and connect only one display to each (this is probably the preferable solution in terms of ease of use and is least prone to configuration error)
  - Install and use the Windows XP color control applet (note that the original MS download link is no longer available)
  - Some graphics cards, like the Matrox Parhelia APV (no longer produced), will expose two logical cards to the OS when using a specific vendor driver (some older ATI drivers also had this feature, but it seems to have been removed from newer ones)
Mac OS X 10.11 “El Capitan”: If running via 0install, DisplayCAL won't launch anymore after updating to El Capitan from a previous version of OS X
  Solution:
  1. Run the “0install Launcher” application from the DisplayCAL-0install.dmg disk image.
  2. Click “Refresh”, then “Run”. An updated library will be downloaded, and DisplayCAL should launch.
  3. From now on, you can start DisplayCAL normally as usual.
Mac OS X 10.12 “Sierra”: Standalone tools silently fail to start
  Solution: Remove the quarantine flag from the application bundles (and contained files) by opening Terminal and running the following command (adjust the path /Applications/DisplayCAL/ as needed):

      xattr -dr com.apple.quarantine /Applications/DisplayCAL/*.app

Mac OS X: DisplayCAL.app is damaged and can't be opened.
  Solution: Go to the “Security & Privacy” settings in System Preferences and set “Allow applications downloaded from” (under the “General” tab) to the “Anywhere” setting. After you have successfully launched DisplayCAL, you can change the setting back to a more secure option and DisplayCAL will continue to run properly.
Linux/Windows: No video card gamma table access (“Calibrate only” and “Calibrate & profile” buttons grayed, “Profile only” button available)
  Solution: Make sure you have not selected a display that doesn't support calibration (i.e. “Web @ localhost” or “Untethered”) and that you have enabled “Interactive display adjustment” or set the tone curve to a different value than “As measured”. Under Linux, please refer to the ArgyllCMS documentation, “Installing the software on Linux with X11” and “Note on X11 multi-monitor setups” / “Fixing access to Video LUTs” therein. Under Windows, please also see the solution posted under “The display profile isn't used if it was installed for the current user” if you are using Windows and make sure you have a recent driver for your video card installed.
Linux: Instrument not working correctly/constantly disconnecting (conflict with libmtp)
  Solution: There is a bug on some systems with libmtp that causes instruments to continuously switch between connected and disconnected state. This seems to be a bug in libmtp-runtime. You can work around it by renaming `/lib/udev/mtp-probe` or updating to libmtp 1.0.6 where the issue should be fixed.

## Get help

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:

- Help & support forum
- Contact me directly (but keep in mind other users may also benefit from exchanges, so I'm encouraging the use one of the above channels if possible)

## Report a bug

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:

- Try to give a short, but concise summary of the problem.
- Try to give some steps to reproduce the problem.
- Always attach logfiles if possible. They are usually automatically created by DisplayCAL as part of normal program operation. If you're having a problem with a particular instrument, it would be great if you could do a run with ArgyllCMS debug output enabled in the “Advanced” sub-menu under the “Options” menu to generate a more verbose debug log - note that you have to enable advanced options first.
  The easiest way to get a complete set of logfiles is to choose “Show log” from the “Tools” menu and then click the “Create compressed archive...” button on the log window (not the “Save as...” button as this will only save the session log). You can also find the logfiles here:
  - Linux: `/home/Your Username/.local/share/DisplayCAL/logs`
  - Mac OS X: `/Users/Your Username/Library/Logs/DisplayCAL` and
    `/Users/Your Username/Library/Logs/0install`
  - Windows Vista and newer: `C:\Users\Your Username\AppData\Roaming\DisplayCAL\logs`
  - Windows XP: `C:\Documents and Settings\Your Username\Application Data\DisplayCAL\logs`

  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.

## Discussion

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.

## To-Do / planned features (in no particular order)

- Add SMPTE 2084 to simulation profile tone response curve choices and add verification testcharts suitable for HDR display evaluation.
- Refactor 3D LUT, verification and synthetic ICC profile creator tone response curve selection UI implementation to share more code.
- On first launch, guide user through basic setup using a wizard (postpone DisplayCAL update check until after wizard has run?):
  - Check ArgyllCMS availability, if not available or outdated, offer automatic download & installation (consider 0install/native Linux distribution packages?) (implemented)
  - Windows only: Install instrument drivers if necessary (probably need to check if already installed)
  - Check available instruments and instrument capabilities
  - Do instrument specific first launch stuff:
    - Import OEM files (implemented)
    - Choose/create colorimeter correction if applicable
- When an instrument is first selected:
  - Check if OEM files from the vendor software have already been imported (if applicable); if not, offer to do it. (implemented in v2.1.1.3 Beta and newer, after detecting instruments)
  - Check colorimeter corrections if applicable (from respective vendor software and online database, skip the latter if a spectro is available), in case of no usable specific or generic correction, offer to create one if possible, preferably using spectro measurements as reference, EDID as user-selectable fallback? (Need to sanity-check EDID red/green/blue/white xy coordinates in that case! Possibly against sRGB and AdobeRGB as the most commonly cited gamuts for standard gamut and wide-gamut displays? As some cheaper panels and many of those found in Laptops/Notebooks are sometimes very limited in gamut, additionally a special “low-gamut RGB” may be needed)
  - Users need to be made aware of the implications their colorimeter correction choice has, e.g.
    - When using a correction created from spectral reference measurements of the specific display (user needs a spectro): Usually very good accuracy/match to user's specific display/instrument combination
    - When using a vendor-supplied generic correction: Good (?) (e.g. i1 DisplayPro, ColorMunki Display) to poor (?) (e.g. i1 Display 1/2/LT, Huey, ColorHug) accuracy/match to user's specific display/instrument combination, in case of CCSS considered preferable to corrections supplied by other users because of lab-grade equipment (high spectral resolution) used by vendor.
    - When using a correction supplied by another user for the same display/instrument combination: Good (?) (e.g. i1 DisplayPro, ColorMunki Display, DTP94) to poor (?) (e.g. i1 Display 1/2/LT, Huey, ColorHug) accuracy/match to user's specific display/instrument combination
    - When using EDID of the specific display as reference: Moderate (?) to poor (?) accuracy/match to user's specific display/instrument combination (could be ok match, could be awful, but should in most cases still be able to fix problems like e.g. ColorHug red sensitivity so may be ok as last resort)
- When trying to import colorimeter corrections or enable the Spyder 2, have automatic mode download the vendor software if needed. (implemented in v2.1.1.2 Beta and newer)
- (Long-term) improve UI.
- Better interface to GNOME Color Manager (implemented in v0.8.1.0+)
- Measure and report on screen homogenity / evenness of illumination
- Get rid of the terminal and implement a proper GUI for the interactive part of calibration (implemented in v0.8.5.6+)
- Better user interface for profile verification: If a test set contains multiple value formats (CMYK, RGB, XYZ, L*a*b*), allow selection which one(s) should be used in a “setup” window (“setup” window implemented in v1.5.6.9+, value format selection added in v1.6.3.5)
- Add gamut coverage percentages to the profile verification report if the test set contains reference values (not *.ti1): Calculate profiles from test set and verification measurements on-the-fly and create gamut volumes from test set profile, evaluated profile, and verification measurements profile using Argyll's `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).
- Complete the documentation in the README
- German language README (postponed)
- Profile verification (feed XYZ or L*a*b* to display profile, display corresponding RGB values, measure, output Delta E) (implemented in v0.3.6+)
- “Before” / “After” switch when calibration / profiling complete (implemented in v0.2+)
- Store all settings in profile, allow loading of settings from profile in addition to `.cal` file (implemented in v0.2+)
- Document the code (code documentation could still be enhanced, for now it'll do)
- Code cleanup (mostly done)

## Thanks and acknowledgements

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)

Recent contributors: Jussi Mäkelä, Blaž Miklič, Jong Soo Park, Greetums, Travis Hale, Frederick Mwangi, Michael O'Brien, Vaclav Vancura, Dave Docimo, Thomas Williams, Lars Woodhouse, Jim Blackie, Barbara Heise, Michael King, Thomas Fackler, Venugopal Jakhotia, Javier Roche Martinez, Ralf Daubner, 大颉 杨, Sam Lee, Maixent Kionghat Owon, Keith Hills, Ivan Blazhko, Dale Gould, Mart Viires, Joon Im, Aidan Mock, Preston Brown, Edward Roslak, Leslie B Bunch, Markus Zehnder, David Clark, Ulrike Dahlhaus, James Fraser, Thorsten Geisbe, Alexey Buteskul, Daniel Menzel, Tom Cattrall, P David Vanverst, Andreas Heim, Mark Cote, Benedikt Eisenreich, Riley Brandt Photography, Robert Matsunaga, Simplified Inside, more... Christoph Wurst, Michael Gleave, Manuel Diego Van Der Landen, Indramani Sharma, Aleksandar Mitov, Udo Bachmann, Brian Cairns, Christian Hodel, Michel Smolak, Ardhitama, Dominik Back, Alexandre Verstak, Nick Sarnie, Auguste Chery, Marvel Walls, www.biogon.co.uk, Stefan Weiße, Klaus Goerke, John Livy, Jason Clarke, Michael Cieslak, John Woodhouse, Steve Booke, Markus Roman, Darius Studer, David Pagès, Benjamin Chare, Gilles Ouellet, Ka Man Choi, Marc Lavine, David Dahlen, Ryan Johnson, Maximilian Pachmayr, Juan Cabello, Mark Calabretta, Kevin Poulain, Andreas Straub

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.

## Changelog

2017-10-18 17:34 (UTC) 3.3.5

  ### DisplayCAL 3.3.5

  #### Changed in this release:

  - [Enhancement] Updated french localization (thanks to Jean-Luc Coulon).
  - [Enhancement] When generating high resolution PCS to device tables for XYZ LUT profiles, round PCS candidate “fit” so a good match is not potentially needlessly discarded in favor of a match with lower effective usage of the available lookup table grid points (may speed up the process as well).
  - [Enhancement] Use single curve detection based on calibration accuracy for shaper tags of XYZ LUT profiles as well.

  #### Fixed in this release:

  - [Minor] When enabling the Spyder2, check if the spyd2PLD.bin firmware has actually been successfully extracted (taking into account the install scope) and fall back to alternate methods when using automatic mode if the firmware cannot be extracted from the vendor software present in the local filesystem (fixes inability to enable the Spyder2 under Mac OS X if the vendor software is installed).
  - [Minor] Windows: Make measurement report filename safe for filesystem encoding (works around encoding quirks with certain locales).
  - [Minor] Windows: Windows silently strips any combination of trailing spaces and dots in file and folder names, so do the same for the profile name.
  - [Minor] Profile loader (Windows): WCS can return no profile without error in some situations, but the no error case wasn't accounted for, resulting in an unhandled exception in that case.
  - [Minor] Profile loader (Windows): Get the process identifier before enumerating windows to prevent an unhandled exception if a madVR instance is already running before starting the profile loader.
  - [Cosmetic] Profile loader (Windows): Detect if the current display profile video card gamma table tag contains linear calibration when checking if madVR did reset the video card gamma table to linear to prevent the profile loader alternating between enabled and disabled state if using windowed overlay in madVR.

  2017-09-13 12:09 (UTC) 3.3.4.1

  ### DisplayCAL 3.3.4.1

  #### Fixed in this release:

  - [Moderate] Linux (profile installation and profile loading): Getting the fallback XrandR display device ID could unexpectedly return no result in some cases due to incorrect parsing, leading to potential application of a stale device to profile mapping or no profile at all (regression of SVN revision r4800).
  - [Minor] Linux, Mac OS X: The visual whitepoint editor was failing to update the test pattern area of a connected madTPG instance when madVR was selected as display device, due to an implementation bug related to setting the background color.

  2017-09-09 15:53 (UTC) 3.3.4

  ### DisplayCAL 3.3.4

  #### Added in this release:

  - Verification charts for ISO 14861:2015 soft proofing evaluation.

  #### Changed in this release:

  - [Enhancement] More even and consistent CPU utilization on multi CPU/multi core systems during high resolution device-to-PCS table generation.
  - [Enhancement] Multi-threaded gamut view calculation.
  - [Enhancement] Use an alternate way to generate the matrix for profiles created from the small testchart for matrix profiles (may improve accuracy on very linear displays) and use an optimized tone response curve if using a single curve and the measured response is a good match to an idealized parametric or standardized tone response curve.
  - [Enhancement] Uniformity report: No longer include (meaningless) correlated/closest color temperature. Use “traffic light” visual indicators in conjunction with unambiguous pass/fail messages to allow easy at-a-glance assessment of the results, and also include contrast ratio deviation to fully conform to ISO 12646:2015 and 14861:2015. You can update old reports via “Update measurement or uniformity report...” in the “Report” sub-menu of the “Tools” menu.
  - [Enhancement] Measurement report: Use the display profile whitepoint as reference white for the measured vs. profile white delta E calculation and use the assumed target whitepoint as reference white for the measured vs. assumed white delta E calculation to make the reported delta E more meaningful.
  - [Enhancement] Measurement report: Allow to use the display profile whitepoint as reference white when using absolute (not D50 adapted) values.
  - [Enhancement] Profile installation (Linux): Always do fallback colord profile installation using colormgr if available unless the ARGYLL_USE_COLORD environment variable is set.
  - [Enhancement] Profile loader (Linux): Include the profile source (colord or Argyll's UCMM) in diagnostic output and use the XrandR device ID as fallback when no EDID is available.
  - [Enhancement] Profile loader (Windows): Slightly improve encoding accuracy of quantizing to 8 < n < 16 bits.
  - [Trivial] Offer the complete range of input encodings for the eeColor 3D LUT format and do not force an identical output encoding.
  - [Trivial] Do not store calibration settings in a profile if calibration is disabled.
  - [Trivial] Revert the default profile type for the 79 patches auto-optimized testchart slider step to XYZ LUT + matrix.
  - [Trivial] Iridas cube 3D LUTs: Increase compatibility by stripping leading whitespace from text lines and adding DOMAIN_MIN/MAX keywords if missing.
  - [Trivial] Measurement report: Calculate true combined a*b* range for grayscale instead of summing separate ranges.
  - [Trivial] Measurement report: Automatically enable “Use absolute values” if using full whitepoint simulation (i.e. not relative to display profile whitepoint).

  #### Fixed in this release:

  - [Moderate] When cancelling profiling measurements with the testchart set to “Auto”, the testchart UI and the internal test chart setting were no longer in sync until changing the profile type or restarting the application.
  - [Moderate] Synthetic ICC profile creator: Unhandled exception when trying to create DICOM (regression of a change in DisplayCAL 3.1.5, SVN revision r4020) or SMPTE 2084 profiles (regression of multiprocessing changes in DisplayCAL 3.3).
  - [Minor] Protect against potentially clipping slightly above black values during high resolution device-to-PCS table generation (regression of a change in DisplayCAL 3.3.3, SVN revision r4705).
  - [Minor] Protect against enumerating displays and ports in response to a DISPLAY_CHANGED event when the main window isn't shown or isn't enabled which could lead to a hang due to a race condition.
  - [Minor] Verification using a simulation profile that defines an identity matrix in its 'chad' tag (e.g. ISOnewspaperv4) did not work correctly due to the matrix being mapped to “None” insatead of “XYZ scaling”.
  - [Minor] Verification using a CMYK simulation profile failed with a “Profile invalid” error if previously “Use simulation profile as display profile” and “Device link profile” were enabled but no device link profile selected.
  - [Minor] Remove separate videoLUT access support under Windows and Mac OS X (separate videoLUT access is only supported under X11).
  - [Minor] Downloaded files were not renamed from their temporary name if the server did not return a Content-Length header (this typically only happens for text files, not binary files). Fixes not being able to import colorimeter corrections from iColor Display.
  - [Trivial] Do not reflect the black point hue in tone response curves of single curve + matrix profiles when not using black point compensation.
  - [Trivial] Measurement report: Additional stats median calculation index was off by n+1.
  - [Cosmetic] Display model name and manufacturer description tags were missing from profiles created using the alternate forward profiler.
  - [Cosmetic] Measurement report: Eliminate “Use absolute values” having a side-effect on the RGB patches preview.
  - [Cosmetic] Windows: When closing some of the standalone tools when minimized, e.g. by right-clicking the taskbar button and choosing “Close” from the menu, or by using the taskbar preview close button, the application did not close until restored from its minified state (i.e. by clicking on the taskbar button or switching to it with the task switcher).

  2017-08-08 18:40 (UTC) 3.3.3

  ### DisplayCAL 3.3.3

  #### Added in this release:

  - Intermediate auto-optimized testchart step with 115 patches.

  #### Changed in this release:

  - [UI] [Cosmetic] Verification tab: Always show advanced tone response curve options when “Show advanced options” is enabled in the “Options” menu.
  - [UI] [Trivial] Verification tab: Don't reset the simulation profile tone response curve choice unless changing the simulation profile.
  - [Enhancement] [Trivial] When encountering an invalid peak white reading during output levels detection, advise to check if the instrument sensor is blocked.
  - [Enhancement] Visual whitepoint editor: Use whitepoint of currently selected profile (unless it's a preset or “<Current>”) instead of associated display profile.
  - [Enhancement] Blend profile black point to a*b* = 0 by default. This makes the visual appearance of black and near black response in Photoshop (which uses relative colorimetric intent with black point compensation for display by default) match the DisplayCAL perceptual table of XYZ LUT profiles (which means neutral hues gradually blend over to the display black point hue relatively close to black. The rate of this blend and black point hue correction are influenced by the respective calibration settings, which is another added benefit of this change).
  - [Enhancement] Measurement & uniformity report: Change average delta a, b, L, C, and H to be calculated from absolute values.
  - [Enhancement] Profile loader (Windows): Don't implicitly reset the video card gamma table to linear if no profile is assigned or couldn't be determined. Show an orange-red error icon in the latter case and display details in the left-click notification popup.
  - [Cosmetic] Windows: Log errors when trying to determine the active display device during profile installation.

  #### Fixed in this release:

  - [UI] [Cosmetic] Verification tab: Don't accidentally enable the simulation profile tone response curve black output offset (100%) radio button when switching tabs.
  - [Trivial] Show error dialog if not able to connect to instrument for single reading.
  - [Minor] Strip the “firmware missing” message from the Spyder2 instrument name if it was not yet enabled (makes the automatic popup to enable the Spyder2 work).
  - [Minor] Prisma 3D LUT upload with 1.07 firmware.
  - [Minor] More accurately encode the black point in the colorimetric PCS to device table by explicitly clipping below black values to zero.

  2017-06-29 15:10 (UTC) 3.3.2

  ### DisplayCAL 3.3.2

  #### Added in this release:

  - IPT and Lpt color spaces (profile information 2D and 3D gamut view, testchart editor 3D view).
  - ACEScg and DCDM X'Y'Z' source profiles.

  #### Changed in this release:

  - [Enhancement] Changed HDR 3D LUT SMPTE 2084 roll-off colorimetric rendering to do gamut mapping in ICtCp (slightly improved hue and saturation preservation of bright saturated colors).
  - [Trivial] Include output levels detection related files in session archives.

  #### Fixed in this release:

  - [Moderate] Unhandled exception when trying to set a white or black level target on the calibration tab via the newly introduced measurement buttons (regression of a change in DisplayCAL 3.3.x, SVN revision r4557).
  - [Moderate] Black point compensation for cLUT-type profiles in the advanced options did not work correctly (regression of a change in DisplayCAL 3.3.x, SVN revision r4538).
  - [Moderate] Unhandled exception when creating L*a*b* LUT profiles (regression of multiprocessing changes in DisplayCAL 3.3.x, SVN revision r4433). Note that creating L*a*b* LUT profiles is not recommended due to the limited ICC encoding range (not suitable for wide-gamut) and lower accuracy and smoothness compared to XYZ LUT.
  - [Minor] Output levels detection and alternate forward profiler were not working when using output levels quantization via additional dispread command line option `-Z nbits`.
  - [Minor] Do not create shaper curves for gamma + matrix profiles.
  - [Minor] Don't fall back to colorimetric rendering for HDR 3D LUT SMPTE 2084 roll-off when using luminance matched appearance or luminance preserving perceptual appearance rendering intents.
  - [Trivial] DIN99c and DIN99d white point misalignment (profile information 2D and 3D gamut view, testchart editor 3D view).
  - [UI] [Cosmetic] Change info panel text to use system text color instead of defaulting to black.
  - [Minor] Linux (0install): Prevent system-installed protobuf package shadowing 0install implementation.

  2017-06-04 16:04 (UTC) 3.3.1

  ### DisplayCAL 3.3.1

  #### Fixed in this release:

  - Unhandled exception if using CIECAM02 gamut mapping when creating XYZ LUT profiles from regularly spaced grid patch sets with the alternate forward profiling method introduced in DisplayCAL 3.3.

  2017-05-30 17:48 (UTC) 3.3

  ### DisplayCAL 3.3

  #### Added in this release:

  - Profiling engine enhancements:
    - [Feature] Better multi CPU/multi core support. Generating high resolution PCS-to-device tables is now taking more advantage of multiple (physical or logical) processors (typical 2x speedup on a i7 6700K CPU).
    - [Enhancement] Generating a simple high resolution perceptual table is now done by copying the colorimetric table and only generating new input curves. This markedly reduces the processing time needed to create the perceptual table (6x speedup on a i7 6700K CPU).
    - [Enhancement] Black point compensation now tries to maintain the whitepoint hue until closer to the black point. This makes curves + matrix profiles in the default configuration (slightly) more accurate as well as the default simple perceptual table of cLUT profiles provide a result that is closer to the colorimetric table.
    - [Enhancement] The curves tags of XYZ LUT + matrix profiles will now more closely match the device-to-PCS table response (improves grayscale accuracy of the curves tags and profile generation speed slightly).
    - [Enhancement] The curves tags of matrix profiles are further optimized for improved grayscale accuracy (possibly slightly reduced overall accuracy if a display device is not very linear).
    - [Enhancement] XYZ LUT profiles created from small patch sets (79 and 175 patches) with regularly spaced grids (3x3x3+49 and 5x5x5+49) now have improved accuracy due to an alternate forward profiling method that works better for very sparsely sampled data. Most presets now use 5x5x5+49 grid-based patch sets by default that provide a reduction in measurement time at about the same or in some cases even slightly better accuracy than the previously used small patch sets.
    - [Enhancement] Additional PCS candidate based on the actual measured primaries of the display device for generating high resolution PCS-to-device tables. This may further reduce PCS-to-device table generation time in some cases and lead to better utilization of the available cLUT grid points.
  - [Feature] Calibration whitepoint targets other than “As measured” will now also be used as 3D LUT whitepoint target, allowing the use of the visual whitepoint editor to set a custom whitepoint target for 3D LUTs.
  - [Feature] Automatically offer to change the 3D LUT rendering intent to relative colorimetric when setting the calibration whitepoint to “As measured”.
  - [Feature] Support for madVR's ability to send HDR metadata to the display via nVidia or Windows 10 APIs (i.e. switch a HDR capable display to HDR mode) when creating SMPTE 2084 3D LUTs. Note that you need to have profiled the display in HDR mode as well (currently only possible by manually enabling a display's HDR mode).
  - [Feature] Output levels selection as advanced option and automatic output levels detection. Note that this cannot detect if you're driving a display that expects full range (0..255) in limited range (16..235), but it can detect if you're driving a display that expects limited range in full range and will adjust the output levels accordingly.
  - [Feature] New experimental profiling patch sequence advanced options. “Minimize display response delay” is the ArgyllCMS default (same as in previous versions of DisplayCAL). “Maximize lightness difference”, “Maximize luma difference”, “Maximize RGB difference” and “Vary RGB difference” are alternate choices which 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.
  - [Feature] Optional alternate method for creating colorimeter correction matrices that minimizes xy chromaticity difference (four color matrix method).
  - [Feature] The curve viewer and profile information now have the ability to plot tone response curves of RGB device link profiles.
  - [Feature] The white and black level calibration target can now be set by measurement.
  - [Enhancement] The visual whitepoint editor is now compatible with Chromecast, Web @ localhost, madVR, Prisma and Resolve pattern generators.
  - [Enhancement] 3D LUT generator ReShade 3.0 compatibility.
  - [Feature] Support calibration from WCS profiles embedded in ICC profiles (like the ones created by the Windows Display Color Calibration Tool).
  - [Feature] Profile loader (Windows): Detect the Windows Display Color Calibration Tool.
  - [Feature] Profile loader (Windows): The quantization bitdepth can now be selected.

  #### Changed in this release:

  - [Enhancement] The visual whitepoint editor now uses the calibration of the currently active display profile as the initial whitepoint.
  - [Enhancement] Temporary files will no longer be removed if moving the files to the final location failed, and a non-empty temporary directory will no longer be removed on exit.
  - [Enhancement] Incomplete runs are now always saved to a folder named 'incomplete' in the parent directory of the 'storage' directory (previously when creating a profile from existing measurement data, a failed run could overwrite existing files in a source folder that did not reside in the 'storage' directory).
  - [Enhancement] Use a different (numbered) logfile name when starting additional instances of the standalone tools.
  - [Enhancement] When creating colorimeter correction matrices from existing spectral reference data, use the selected observer.
  - [UI] Hide the observer selector in the colorimeter correction creation dialog when creating a spectral colorimeter correction as observer isn't applicable in that case.
  - [UI] Remove the single “Browse...” button from the colorimeter correction creation dialog and add individual file pickers for reference and colorimeter measurement data files.
  - [UI] When creating colorimeter corrections for “virtual” display devices like madVR or Resolve, offer to specify the actual display model and manufacturer.
  - [UI] Use smaller increments when paging up/down the black point rate or testchart patches amount sliders.
  - [Cosmetic] Default whitepoint color temperature and chromaticity to 6500K and D65 respectively.
  - [Cosmetic] If you explicitly pause measurements prior to attempting to cancel them, and then dismiss the confirmation dialog, the measurements will no longer automatically resume (unpause) anymore.
  - [Enhancement] Linux: When installing instrument udev rules, backup existing rules to a timestamped backup directory ~/.local/share/DisplayCAL/backup/YYYYMMDDTHHMMSS instead of overwriting existing backups in ~/.local/share/DisplayCAL/backup, and automatically add the current user to the 'colord' group (which will be created if nonexistent) if not yet a member.
  - [Cosmetic] Mac OS X: Don't include ID in profile header (stops ColorSync utility from complaining).
  - [Enhancement] Profile loader (Windows): The selected calibration state will not be implicitly (re-)applied every three seconds, but only if a change in the running processes or video card gamma tables is detected. This has been reported to stop hitching on some systems using Intel integrated graphics, and works around an issue with the Windows 10 Creators Update and fullscreen applications (e.g. games) where the calibration state would not be restored automatically when returning to the desktop.
  - [Enhancement] Profile loader (Windows): The profile loader will check whether or not madVR resets the videoLUT and preserve calibration state if not.
  - [UI] [Cosmetic] Profile loader (Windows): Renamed “Preserve calibration state” menu item to “Load calibration on login & preserve calibration state” to reduce ambiguity.
  - [UI] [Cosmetic] Profile loader (Windows): The tray icon will animate when calibration is reloaded.
  - [UI] [Cosmetic] Windows 7 and newer: Show progress in the taskbar.

  #### Fixed in this release:

  - [Minor] Prevent ArgyllCMS from removing measurements with one or two zero CIE components by fudging them to be non-zero.
  - [Minor] In some cases the high resolution colorimetric PCS-to-device table of XYZ LUT profiles would clip slightly more near black than expected.
  - [Trivial] Save and restore SMPTE 2084 content colorspace 3D LUT settings with profile.
  - [UI] [Minor] Changing the application language for the second time in the same session when a progress dialog had been shown at any point before changing the language for the first time, resulted in an unhandled exception. This error had the follow-up effect of preventing any standalone tools to be notified of the second language change.
  - [UI] [Trivial] The “Install Argyll instrument drivers” menu item in the “Tools” menu is now always enabled (previously, you would need to select the location of the ArgyllCMS executables first, which was counter-intuitive as the driver installer is separate since DisplayCAL 3.1.7).
  - [UI] [Cosmetic] When showing the main window (e.g. after measurements), the progress dialog (if present) could become overlapped by the main window instead of staying in front of it. Clicking on the progress dialog would not bring it back into the foreground.
  - [UI] [Minor] 3D LUT tab: When selecting a source colorspace with a custom gamma tone response curve, the gamma controls should be shown regardless of whether advanced options are enabled or not.
  - [Trivial] Testchart editor: Pasting values did not enable the “Save” button.
  - [UI] [Minor] Untethered measurement window: The “Measure” button visual state is now correctly updated when cancelling a confirmation to abort automatic measurements.
  - [Minor] Windows: Suppress errors related to WMI (note that this will prevent getting the display name from EDID and individual ArgyllCMS instrument driver installation).
  - [UI] [Cosmetic] Profile loader (Windows): Changing the scaling in Windows display settings would prevent further profile loader tray icon updates (this did not affect functionality).
  - [Minor] Profile loader (Windows): Undefined variable if launched without an active display (i.e. if launched under a user account that is currently not the active session).
  - [Minor] Profile loader (Windows): Original profile loader instance did not close after elevation if the current user is not an administrator.
2017-02-18 15:52 (UTC) 3.2.4

  ### 3.2.4

  #### Added in this release:

  - Korean translation thanks to 김환(Howard Kim).

  #### Changed in this release:

  - Disable observer selection if observer is set by a colorimeter correction.
  - 3D LUT maker: Enable black output offset choice for 16-bit table-based source profiles.
  - Profile loader (Windows): “Automatically fix profile associations” is now enabled by default.
  - Build system: Filter out “build”, “dist” as well as entries starting with a dot (“.”) to speed up traversing the source directory tree (distutils/setuptools hack).

  #### Fixed in this release:

  - Could not create colorimeter correction from existing measurements for instruments that don't support alternative standard observers.
  - ColorHug / ColorHug2 “Auto” measurement mode threw an error if the extended display identification data did not contain a model name.
  - [Trivial] [Cosmetic] Testchart editor: When adding reference patches, resize row labels if needed.
  - Profile loader (Linux): When errors occured during calibration loading, there was no longer any message popup.
  - Profile loader (Windows): Filter non-existing profiles (e.g. ones that have been deleted via Windows Explorer without first disassociating them from the display device) from the list of associated profiles (same behavior as Windows color management settings).
  - Profile loader (Windows): When changing the language on-the-fly via DisplayCAL, update primary display device identfier string.
2017-01-04 14:10 (UTC) 3.2.3

  ### 3.2.3

  #### Changed in this release:

  - Updated traditional chinese translation (thanks to 楊添明).
  - Profile loader (Windows): When creating the profile loader launcher task, set it to stop existing instance of the task when launching to circumvent a possible Windows bug where a task would not start even if no previous instance was running.

  #### Fixed in this release:

  - When querying the online colorimeter corrections database for matching corrections, only query for corrections with a matching manufacturer ID in addition to a matching display model name (fixes corrections being offered for displays from different manufacturers, but matching model names).
  - Profile loader (Windows): Fix unhandled exception if no profile is assigned to a display (regression of a change to show the profile description instead of just the file name in DisplayCAL 3.2.1).

  2016-12-13 22:27 (UTC) 3.2.2

  ### 3.2.2

  #### Changed in this release:

  - Importing colorimeter corrections from other display profiling software now only imports from the explicitly selected entries in automatic mode.
  - Profile loader launcher (Windows): Pass through `--oneshot` argument to profile loader.

  #### Fixed in this release:

  - Visual whitepoint editor: Opening a second editor on the same display without first dragging the previously opened editor to another display would overwrite the cached profile association for the current display with the visual whitepoint editor temporary profile, thus preventing the correct profile association being restored when the editor was closed.
  - Mac OS X: Fall back to HTTP when downloading X3D viewer components to work around broken Python TLS support.
  - Windows: When installing instrument drivers, catch WMI errors while trying to query device hardware IDs for instruments.
  - Profile loader (Windows): Possibility of unhandled exception when resuming from sleep if the graphics chipset is an Intel integrated HD graphics with more than one attached display device (may affect other graphics chipsets as well).
2016-11-25 13:35 (UTC) 3.2.1

  ### 3.2.1

  #### Changed in this release:

  - Profile loader (Windows Vista and later): The profile loader process now auto-starts with the highest available privileges if installed as administrator. This allows changing system default profile associations whenever logged in with administrative privileges.
  - Profile loader (Windows Vista and later): If running under a restricted user account and using system defaults, clicking any of the “Add...”, “Remove” and “Set as default” buttons will allow to restart the profile loader with elevated privileges.
  - Profile loader (Windows): Show profile description in addition to profile file name in profile associations dialog.

  #### Fixed in this release:

  - Linux, Windows: Visual whitepoint editor was not working in HiDPI mode.
  - Windows: Irritating “File not found” error after installing a profile with special characters in the profile name (note that the profile was installed regardless).
  - [Cosmetic] Standalone executables (Windows): In HiDPI mode, taskbar and task switcher icons could be showing placeholders due to missing icon files.
  - [Minor] Profile loader (Windows): Enable the profile associations dialog “Add...” button irrespective of the current list of profiles being empty.
  - [Minor] Profile loader (Windows): Suppress error message when trying to remove a profile from the active display device if the profile is the system default for said device (and thus cannot be removed unless running as administrator) but not for the current one.
  - Profile loader (Windows): Do not fail to close profile information windows if the profile associations dialog has already been closed.
  - Profile loader (Windows): If logging into another user account with different DPI settings while keeping the original session running, then logging out of the other account and returning to the original session, the profile loader could deadlock.
2016-11-19 11:01 (UTC) 3.2

  ### 3.2

  #### Added in this release:

  - Visual whitepoint editor. This 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” on the “Calibration” tab 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.
  - Another “Auto” testchart slider step with 154 patches (equal to small testchart for LUT profiles) for XYZ LUT + matrix profile type.

  #### Changed in this release:

  - Menu overhaul. Menus are now better organized using categorized sub-menus and some menu items have been moved to more appropriate locations:
    - The “Options” menu no longer contains any functionality besides actual options. Advanced options have been moved to a sub-menu.
    - Profile creation from existing measurement files or EDID, profile installation as well as profile upload (sharing) functionality can now be found in the “File” menu.
    - Most functionality available in the “Tools” menu has been grouped into categorized sub-menus, with some of the less-used functionality now available under a separate “Advanced” sub-menu.
    - Measuring the selected testchart, enhancing the effective resolution of a colorimetric PCS-to-device table, loading calibration and resetting the video card gamma tables, detecting displays & instruments, as well as user-initiated spectrometer self-calibration functionality has been moved to the “Tools” menu and respective sub-menus where applicable.
  - Changed default curves + matrix profile testchart as well as first “Auto” testchart slider step back to pre-3.1.7 chart with 73 patches.
  - Better curves + matrix profiles as well as faster computation of XYZ LUT + matrix profiles. The matrix and shaper curves of gamma + matrix, curves + matrix as well as XYZ LUT + matrix profiles are now generated in separate steps which improves the shape and grayscale neutrality of the curves on less well-behaved displays. XYZ LUT + matrix profiles will compute faster, because the curves and matrix are created from a sub-set of the profiling patches, and take around the same time as XYZ LUT + swapped matrix profiles, resulting in a typical overall computation speed increase of around +33% (+100% if just looking at the time needed when not creating PCS-to-device tables) for a XYZ LUT + matrix profile computed from 1148 patches. XYZ LUT + matrix profiles computed from more patches should see a larger computation speed increase of up to +100% depending on patch count.
  - Resolve pattern generator and non-native madVR network implementation: Determine the computer's local network IP address in a way that is hopefully more reliable across platforms.
  - Profile loader (Windows): Detect and work-around buggy Intel video drivers which, despite reverting to linear gamma tables at certain points (e.g. UAC prompts), will effectively ignore attempts to restore the gamma table calibration if it is considered to be already loaded by the driver.
  - Profile loader (Windows): Replaced “Open Windows color management settings...” pop-up menu item with own “Profile associations...” implementation. This should work better with multi-display configurations in contrast to Windows' braindead built-in counterpart, i.e. display devices will be listed under their EDID name (if available) as well as their viewport position and size on the virtual desktop and not only their often meaningless generic driver name like “PnP-Monitor”. Also, there won't be multiple entries for the same display device or ambiguous “1|2” identifications if there are display devices that are currently not part of the desktop due to being disabled in Windows display settings. Changing profile associations around is of course still using Windows color management functionality, but the custom UI will look and act more sane than what Windows color management settings has to offer.
  - Profile loader (Windows): Clicking the task bar tray icon will now always show up-to-date (at the time of clicking) information in the notification popup even if the profile loader is disabled.
  - Profile loader (Windows): Starting a new instance of the profile loader will now always attempt to close an already running instance instead of just notifying it, allowing for easy re-starting.
  - Windows (Vista and later): Installing a profile as system default will now automatically turn off “Use my settings for this device” for the current user, so that if the system default profile is changed by another user, the change is propagated to all users that have opted to use the system default profile (which is the whole point of installing a profile as system default).

  #### Fixed in this release:

  - Spectrometer self-calibration using an i1 Pro or i1 Pro 2 with Argyll >= 1.9 always presented the emissive dark calibration dialog irrespective of measurement mode (but still correctly did a reflective calibration if the measurement mode was one of the high resolution spectrum modes).
  - User-initiated spectrometer self-calibration was not performed if “Allow skipping of spectrometer self-calibration” was enabled in the “Options” menu and the most recent self-calibration was still fresh.
  - Cosmetic: If an update check, colorimeter correction query or profile sharing upload returned a HTTP status code equal to or greater than 400 (server-side error), an unhandled exception was raised instead of presenting a nicer, formatted error dialog (regression of DisplayCAL 3.1.7 instrument driver installer download related changes).
  - Profile loader (Windows, cosmetic): Reflect changed display resolution and position in UI (doesn't influence functionality).
  - Resolve pattern generator: Unhandled exception if the system hostname could not be resolved to an IP address.
2016-10-24 10:13 (UTC) 3.1.7.3

  ### 3.1.7.3

  #### Fixed in this release:

  - 0install (Linux): `(un)install-standalone-tools-icons` command was broken with 3.1 release.
  - Profile loader (Linux): Unhandled exception if oyranos-monitor is present (regression of late initialization change made in 3.1.7).
2016-10-21 12:26 (UTC) 3.1.7.2

  ### 3.1.7.2

  #### Changed in this release:

  - Windows: Toggling the “Load calibration on login” checkbox in the profile installation dialog now also toggles preserving calibration state in the profile loader and vice versa, thus actually affecting if calibration is loaded on login or not (this restores functionality that was lost with the initial DisplayCAL 3.1 release).
  - Windows: The application, setup and Argyll USB driver installer executables are now digitally signed (starting from October 18, 2016 with SHA-1 digest for 3.1.7.1 and dual SHA-1 and SHA-256 digests for 3.1.7.2 from October 21, 2016).

  #### Fixed in this release:

  - Profile loader (Windows): User-defined exceptions could be lost if exiting the profile loader followed by (re-)loading settings or restoring defaults in DisplayCAL.
2016-10-18 10:00 (UTC) 3.1.7.1

  ### 3.1.7.1

  #### Fixed in this release:

  - Profile loader (Windows): Setting calibration state to reset video card gamma tables overwrote cached gamma ramps for the 2nd display in a multi-display configuration.
2016-10-04 20:49 (UTC) 3.1.7

  ### 3.1.7

  #### Added in this release:

  - 3D LUT sizes 5x5x5 and 9x9x9.
  - JETI spectraval 1511/1501 support (requires ArgyllCMS >= 1.9).
  - Profile loader (Windows): User-definable exceptions.
  - Profile loader (Windows): Added `reset-vcgt` scripting command (equivalent to selecting “Reset video card gamma table” from the popup menu).

  #### Changed in this release:

  - “Auto” resolution of PCS-to-device tables is now limited to 45x45x45 to prevent excessive processing times with profiles from “funky” measurements (i.e. due to bad/inaccurate instrument).
  - Automatically optimized testcharts now use curves + matrix profiles for preconditioning to prevent a possible hang while creating the preconditioned testchart with LUT-type profiles from sufficiently “badly behaved” displays.
  - 2nd auto-optimized testchart slider step now defaults to XYZ LUT profile type as well, and the previous patch count was increased from 97 to 271 (necessary for baseline LUT profile accuracy).
  - Adjusted curves + matrix testcharts to only include fully saturated RGB and grayscale to prevent tinted neutrals and/or “rollercoaster” curves on not-so-well behaved displays (also reduces testchart patch count and measurement time, but may worsen the resulting profile's overall accuracy).
  - Removed near-black and near-white 1% grayscale increments from “video” verification charts.
  - Use a 20 second timeout for unresponsive downloads.
  - Windows: Much easier ArgyllCMS instrument driver installation (for instruments that require it). No need to disable driver signature enforcement under Windows 8/10 anymore. Select “Install ArgyllCMS instrument drivers...” from the “Tools” menu, click “Download & install”, wait briefly for the download to finish (400 KB), confirm the User Access Control popup, done. Note that the driver installer executable is currently not digitally signed (obtaining a suitable certificate from a trusted authority is in progress), but the driver itself is signed as usual. The installer is based on libwdi.
  - Profile loader (Windows): Changed `apply-profiles` scripting command to behave excatly like selecting “Load calibration from current display device profile(s)” from the popup menu, i.e. not only load calibration, but also change the setting.
  - Profile loader (Windows): Also count calibration state being (re)applied when the profile loader state or profile association(s) changes.

  #### Fixed in this release:

  - Update measurement modes after importing colorimeter corrections. Fixes additional measurement modes for the Spyder4/5 not appearing until the program is restarted or a different instrument is selected first.
  - Trivial: Instrument setup was unnecessarily being called twice after downloading ArgyllCMS when the latter wasn't previously detected.
  - Mac OS X: Work around a wxPython bug which prevents launching the application from a path containing non-ASCII characters.
  - Mac OS X: Work around a configuration problem affecting ArgyllCMS 1.9 and 1.9.1 (fixes Spyder2 firmware, additional Spyder4/5 measurement modes, and imported colorimeter corrections not being seen by DisplayCAL if imported via ArgyllCMS 1.9 or 1.9.1).
2016-08-24 21:33 (UTC) 3.1.6

  ### 3.1.6

  #### Added in this release:

  - HDR/SMPTE 2084: Advanced options to specify maximum content light level for roll-off (use with care!) as well as content colorspace (affects perceptual intent gamut mapping, less so colorimetric).

  #### Changed in this release:

  - Increased timeout to launch ArgyllCMS tools to 20 seconds.
  - Show failed items when otherwise successfully importing colorimeter corrections, and detect updated CCSS files.
  - HDR/SMPTE 2084: Improve overall saturation preservation.
  - Linux/colord: When checking for a valid colord device ID, also try with manufacturer omitted.
  - Windows Vista and later: Use “known folders” API to determine path to “Downloads” directory.

  #### Fixed in this release:

  - HDR/SMPTE 2084: Slightly too light near-black tones when black output offset was set to below 100%.
  - Synthetic ICC Profile Creator: Undefined variable when creating synthetic profile with custom gamma or BT.1886 and non-zero black level (regression of HDR-related changes made in 3.1.5).
  - When loading settings from a profile created with DisplayCAL prior to 3.1.5 and custom 3D LUT tone curve gamma in DisplayCAL 3.1.5, the gamma and output offset controls wouldn't be shown if advanced options weren't enabled until re-selecting the tone curve choice.
  - Cosmetic (Windows 10): Banner would go blank under some Windows 10 configurations when showing the profile or 3D LUT installation dialog.
  - Cosmetic (Linux): Missing backgrounds and wrongly sized combo boxes when wxGTK is built against GTK3.
  - Linux: Profile loader autostart entry was installed under wrong (mixed-case) name if installing for the current user, which lead to the loader unnecesarily being run twice if DisplayCAL was installed from a RPM or DEB package. The superfluous loader entry will be automatically removed the next time you install a profile, or you can remove it manually by running `rm ~/.config/autostart/z-DisplayCAL-apply-profiles.desktop` in a terminal.
  - Linux/colord: Don't cache device IDs that are not the result of a successful query.
  - Windows: Make elevated subprocess calls synchronous. Fixes importing colorimeter corrections system-wide not listing all succesfully imported items on the first use.
2016-08-02 22:28 (UTC) 3.1.5

  ### 3.1.5

  #### Added in this release:

  - HDR: Allow specifying of black output offset for SMPTE 2084.

  #### Changed in this release:

  - HDR: Implemented SMPTE 2084 rolloff according to ITU-R BT.2390.
  - HDR: Implemented SMPTE 2084 3D LUT tone mapping (preserve hue and saturation with rolloff).
  - HDR: Improved SMPTE 2084 3D LUT perceptual intent rendering (better preserve saturation). Note that colorimetric intent is recommended and will also do tone mapping.
  - Linux/colord: Increase timeout when querying for newly installed profiles to 20 seconnds.

  #### Fixed in this release:

  - Minor: HDR peak luminance textbox was sometimes not able to receive focus.
  - Minor (Mac OS X): Don't omit ICC files from compressed archives (regression of adding device link profiles as possible 3D LUT output format in DisplayCAL 3.1.3).
2016-07-10 23:35 (UTC) 3.1.4

  ### 3.1.4

  #### Added in this release:

  - A fourth Rec. 709 encompassing color space variant as a profile connection space candidate for XYZ LUT profiles. May lead to better utilization of PCS-to-device color lookup table grid points in some cases (and thus potentially smaller profiles when the effective resolution is set to the default of “Auto”).
  - An option to include legacy serial ports (if any) in detected instruments.
  - SMPTE 2084 (HDR) as 3D LUT tone curve choice.

  #### Changed in this release:

  - Don't preserve shaper curves in ICC device link profiles if selected as 3D LUT output format (effectively matching other 3D LUT formats).
  - Removed “Prepress” preset due to large overlap with “Softproof”.
  - Changed “Softproof” preset to use 5800K whitepoint target (in line with Fogra softproof handbook typical photography workflow suggested starting point value) and automatic black point hue correction.
  - Synthetic ICC profile creator: Changed SMPTE 2084 to always clip (optionally with roll-off) if peak white is below 10000 cd/m².
  - Synthetic ICC profile creator: Changed transition to specified black point of generated profiles to be consistent with BT.1886 black point blending (less gradual transition, blend over to specified black point considerably closer to black).
  - Profile loader (Windows): If no profile assigned, load implicit linear calibration.

  #### Fixed in this release:

  - When loading settings from an existing profile, some CIECAM02 advanced profiling options were not recognized correctly.
  - Don't accidentally remove the current display profile if ArgyllCMS is older than version 1.1 or the ArgyllCMS version is not included in the first line of output due to interference with QuickKeys under Mac OS X.
  - Make sure the ArgyllCMS version is detected even if it isn't contained in the first line of output (fixes ArgyllCMS version not being detected if QuickKeys Input Manager is installed under Mac OS X).
  - When loading settings, add 3D LUT input profile to selector if not yet present.
  - Curve viewer/profile information: Fix potential division by zero error when graphing unusual curves (e.g. non-monotonic or with very harsh bends).
  - Profile information: Reset right pane row background color on each profile load (fixes “named color” profile color swatches sticking even after loading a different profile).
2016-04-11 10:50 (UTC) 3.1.3.1

  ### 3.1.3.1

  #### Changed in this release:

  - Updated traditional chinese localization (work-in-progress, thanks to 楊添明).
  - Windows: If madTPG is set to fullscreen and there's more than one display connected, don't temporarily override fullscreen if interactive display adjustment is enabled.

  #### Fixed in this release:

  - Windows: If interactive display adjustment is disabled and madTPG is set to fullscreen, show instrument placement countdown messages in madTPG OSD.
  - Windows: Restore madTPG fullscreen button state on disconnect if it was temporarily overridden.
  - Profile loader (Windows): Error message when right-clicking the profile loader task tray icon while DisplayCAL is running.
2016-04-09 12:16 (UTC) 3.1.3

  ### 3.1.3

  If you update from DisplayCAL 3.1/3.1.1/3.1.2 standalone under Windows using the installer, please close the profile loader manually (if it is running) before running setup - due to an unfortunate bug, the installer may not be able to close and restart the profile loader automatically, which may then require using the task manager to end the profile loader process. Apologies for the inconvenience.

  #### Added in this release:

  - Device link profile as possible 3D LUT output format.
  - French ReadMe (thanks to Jean-Luc Coulon).
  - Partial traditional chinese localization (work-in-progress, thanks to 楊添明).
  - When you change the language in DisplayCAL, the Windows Profile Loader will follow on-the-fly if running.
  - Synthetic ICC profile creator: Capability to specify profile class, technology and colorimetric image state.
  - Windows: When the display configuration is changed while DisplayCAL is running, automatically re-enumerate displays, and load calibration if using the profile loader.
  - Profile loader (Windows): Starting the loader with the `--oneshot` argument will make it exit after launching.

  #### Changed in this release:

  - Updated ReShade 3D LUT installation instructions in the ReadMe.
  - Improved “Enhance effective resolution of PCS to device tables” smoothing accuracy slightly.
  - Profile loader (Windows):
    - Detect CPKeeper (Color Profile Keeper) and HCFR.
    - Show any calibration loading errors on startup or display/profile change in a notification popup, and also reflect this with a different icon.

  #### Fixed in this release:

  - Added semicolon (“;”) to disallowed profile name characters.
  - ICC profile objects were leaking memory.
  - Windows: Made sure that the virtual console size is not larger than the maximum allowed size (fixes possible inability to launch ArgyllCMS tools on some systems if the Windows scaling factor was equal to or above 175%).
  - Windows (Vista and newer): Use system-wide profiles if per-user profiles are disabled.
  - Profile loader (Windows):
    - If Windows calibration management is enabled (not recommended!), correctly reflect the disabled state of the profile loader in the task tray icon and don't load calibration when launching the profile loader (but keep track of profile assignment changes).
    - Prevent a race condition when “Fix profile associations automatically” is enabled and changing the display configuration, which could lead to wrong profile associations not being fixed.
    - Sometimes the loader did not exit cleanly if using `taskkill` or similar external methods.
    - Prevent a race condition where the loader could try to access a no longer available display device right after a display configuration change, which resulted in no longer being able to influence the calibration state (requiring a loader restart to fix).
    - Profile loader not reacting to display changes under Windows XP.
2016-03-03 22:33 (UTC) 3.1.2

  ### 3.1.2

  #### Fixed in this release:

  - Profile loader (Windows): Pop-up wouldn't work if task bar was set to auto-hide.
2016-02-29 17:42 (UTC) 3.1.1

  ### 3.1.1

  #### Added in this release:

  - Profile loader (Windows): Right-click menu items to open Windows color management and display settings.

  #### Changed in this release:

  - Profile loader (Windows):
    - Detect f.lux and dispcal/dispread when running outside DisplayCAL.
    - Don't notify on launch or when detecting DisplayCAL or madVR.
    - Detect madVR through window enumeration instead of via madHcNet (so madVR can be updated without having to close and restart the profile loader).
    - Enforce calibration state periodically regardless of video card gamma table state.
    - Don't use Windows native notifications to overcome their limitations (maximum number of lines, text wrapping).
    - Show profile associations and video card gamma table state in notification popup.

  #### Fixed in this release:

  - Error after measurements when doing verification with “Untethered” selected as display device and using a simulation profile (not as target).
  - Windows: Sporadic application errors on logout/reboot/shutdown on some systems when DisplayCAL or one of the other applications was still running.
  - Standalone installer (Windows): Remove dispcalGUI program group entries on upgrade.
  - Profile loader (Windows):
    - Error when trying to enable “Fix profile associations automatically” when one or more display devices don't have a profile assigned.
    - Sporadic errors related to taskbar icon redraw on some systems when showing a notification after changing the display configuration (possibly a wxPython/wxWidgets bug).
  - Mac OS X: Application hang when trying to quit while the testchart editor had unsaved changes.
2016-02-01 00:32 (UTC) 3.1

  ### 3.1

  #### dispcalGUI has been renamed to DisplayCAL.

  If you upgrade using 0install under Linux: It is recommended that you download the respective DisplayCAL-0install package for your distribution and install it so that the applications accessible via the menu of your desktop environment are updated properly.

  If you upgrade using 0install under Mac OS X: It is recommended that you delete existing dispcalGUI application icons, then download the DisplayCAL-0install.dmg disk image to get updated applications.

  #### Added in this release:

  - Better HiDPI support. All text should now be crisp on HiDPI displays (with the exception of axis labels on curve and gamut graphs under Mac OS X). Icons will be scaled according to the scaling factor or DPI set in the display settings under Windows, or the respective (font) scaling or DPI system setting under Linux. Icons will be scaled down or up from their 2x version if a matching size is not available. Note that support for crisp icons in HiDPI mode is currently not available in the GTK3 and Mac OS X port of wxPython/wxWidgets. Also note that if you run a multi-monitor configuration, the application is system-DPI aware but not per-monitor-DPI aware, which is a limitation of wxPython/wxWidgets (under Windows, you will need to log out and back in after changing DPI settings for changes to take effect in DisplayCAL).
  - When having created a compressed archive of a profile and related files, it can now also be imported back in via drag'n'drop or the “Load settings...” menu entry and respective button.
  - ArgyllCMS can be automatically downloaded and updated.
  - A compressed logs archive can be created from the log window.
  - Windows: New profile loader. It will stay in the taskbar tray and automatically reload calibration if the display configuration changes or if the calibration is lost (although fullscreen Direct3D applications can still override the calibration). It can also automatically fix profile associations when switching from a multi-monitor configuration to a single display and vice versa (only under Vista and later). 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.

  #### Changed in this release:

  - Changed default calibration speed from “Medium” to “Fast”. Typically this cuts calibration time in half, while the accuracy difference is negligible at below 0.2 delta E.
  - Enabled “Enhance effective resolution of PCS to device tables” and smoothing for L*a*b* LUT profiles.

  #### Fixed in this release:

  - In some cases, importing colorimeter corrections from the vendor software CD could fail (falling back to downloading them from the web).
  - Moving the auto testchart patches slider to a value that changed the profile type did not update BPC accordingly (shaper+matrix defaults to BPC on).
  - Minor: Safari/IE messed up positioning of CCT graph vertical axis labels in measurement reports.
  - Minor: When clicking the “Install profile” button while not on the 3D LUT tab, and “Create 3D LUT after profiling” is enabled, don't create a 3D LUT.
  - Minor: When changing profile type, only change the selected testchart if needed, and default to “Auto” for all profile types.
  - Minor: 1st launch defaults were slightly different from what was intended (testchart should be “Auto”).
  - Minor: Use OS line separator when writing configuration files.
  - Linux: Text and icon sizes should be more consistent accross the application when the system text scaling or DPI has been adjusted (application restart required).
  - Linux: Fall back to use the XrandR display name for colord device IDs if EDID is not available.
  - Linux/Mac OS X: madVR test pattern generator interface was prone to connection failures due to a race condition. Also, verifying a madVR 3D LUT didn't work.

View changelog entries for older versions

## Definitions

[1] CGATS
  Graphic Arts Technologies Standards, CGATS.5 Data Exchange Format (ANSI CGATS.5-1993 Annex J)
[2] CMM / CMS
  Color Management Module / Color Management System
[3] GPL
  GNU General Public License — gnu.org/licenses/gpl.html
[4] GUI
  Graphical User Interface
[5] ICC
  International Color Consortium — color.org
[6] JSON
  JavaScript Object Notation, a lightweight data-interchange format — json.org
[7] LUT
  Look Up Table — en.wikipedia.org/wiki/Lookup_table
[8] SVN
  Subversion, a version-control system — subversion.tigris.org
[9] UAC
  User Account Control — en.wikipedia.org/wiki/User_Account_Control
[10] EDID
  Extended Display Identification Data — en.wikipedia.org/wiki/EDID
[11] PCS
  Profile Connection Space — en.wikipedia.org/wiki/ICC_profile
[12] UEFI
  Unified Extensible Firmware Interface — en.wikipedia.org/wiki/UEFI

DisplayCAL © 2008-2017 Florian Höch | Imprint | Privacy | Terms of Service