dispcalGUI Display Calibration powered by Argyll CMS and Python

Versions:
 
 
 
 
0.2.6b3 (Linux)
0.2.6b2 (Mac OS X)
0.2.6b3 (Windows)
0.2.6b3 (Source)
Changelog
Updated:
2009-06-30
Author:
Florian Höch
License:
GPL Version 3

Bug reports, questions, comments, suggestions? Feel free to use the issue tracker, support and discussion forums, or drop me a mail: dispcalGUI ‹at› hoech . net

Table of contents

  1. About
  2. Disclaimer
  3. Download
  4. Quick setup guide
  5. Prerequisites
  6. Installation
  7. Basic concept of display calibration
  8. Usage
  9. Known issues / solutions
  10. To-Do / planned features
  11. Thanks
  12. Version history / changelog

About

dispcalGUI is a GUI frontend for several utilities from the open source color management system Argyll CMS by Graeme Gill, specifically dispcal, dispread, colprof and dispwin, which when used together allow you to calibrate and profile your display using a measurement device. Of course, you can do a lot more with Argyll CMS, but this is not the scope of this document—refer to the Argyll CMS documentation for in-depth information and usage scenarios.
dispcalGUI opens two windows when run, a terminal and the GUI. The terminal is used for status messages and keyboard input during calibration. The GUI is used to set options and access functionality.

Screenshots

Screenshot of dispcalGUI running under Linux with GNOME
Linux/GNOME
Screenshot of dispcalGUI running under Linux with KDE4
Linux/KDE4
Screenshot of dispcalGUI running under Mac OS X
Mac OS X
Screenshot of dispcalGUI running under Windows Vista
Windows Vista
Screenshot of dispcalGUI running under Windows XP
Windows XP

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.

dispcalGUI is written in Python and uses the 3rd-party packages appscript (AppleScript library, only on Mac OS X), demjson (JSON library) and wxPython (GUI toolkit). It also makes extensive use of several Argyll CMS utilities. The build system to create standalone executables additionally uses setuptools on all platforms, bbfreeze on Linux/Windows, py2app on Mac OS X, py2exe on Windows, or an included, modified version of pyinstaller trunk on Linux/Windows (see pyinstaller/README1ST.txt for a list of changes to the stock version). All of these software packages are © by their respective authors.

Download

Linux Autopackage

Universal install that should work on a multitude of distributions.

Autopackage (Python 2.5 and 2.6, x86 and x86_64)

Stand-alone executable

This is what you should get if you don't have Python installed or cannot satisfy all prerequisites. Linux users should preferably get the Autopackage install instead, unless they want to run dispcalGUI on a system where they can't install software, or from removable media (like an USB stick).

Linux (x86) Tarball
Mac OS X DMG
Windows Installer | ZIP

Source code

This is what you need to compile from source. You need to have a working Python installation and all prerequisites.

All platforms Tarball

Alternatively, if you don't mind trying out development code, browse the SVN repository of the latest development version (or do a full checkout using svn co https://dispcalgui.svn.sourceforge.net/svnroot/dispcalgui dispcalGUI). But please note that the code is in constant flow, things may break from one hour to the other. Use at your own risk.

Quick setup guide

This short guide intends to get you up and running quickly, but if you run into a problem, you should refer to the full Prerequisites and Installation sections.

  1. Get and install the latest release of dispcalGUI. It is recommended to first remove all previous versions.
  2. Download and unpack the Argyll CMS archive file: Linux | Mac OS | Windows. Put the extracted directory (Argyll_VX.X.X) in a convenient place on your harddisk.
    If you want to use the HCFR colorimeter on Mac OS X: Follow the instructions under Installing Argyll CMS on Mac OS X to enable it.
  3. Launch dispcalGUI. If it cannot determine the path to the Argyll CMS binaries, it will prompt you to select the location manually on first launch.
    If your measurement device is a Spyder 2: Choose “Enable Spyder 2 colorimeter...” from dispcalGUI's “Extra” menu, insert the driver CD that came with the instrument and select the setup executable to enable it.
  4. Connect your measurement device to your computer.
    Driver installation - Windows only: If you already have drivers for your measurement device installed, read “Adding Argyll drivers to existing drivers” or “Updating Argyll drivers” in Installing Argyll CMS on Microsoft Windows. If this is a fresh install, a “Found new hardware” dialog should appear:
    • Under Vista...
      • Select “Locate and install driver software (recommended)”.
      • If a “User Account Control” window pops up, select “Continue”.
      • Select “Don't search online”.
      • Select “I don't have the disc, show me other options”.
      • Select “Browse my computer for driver software (advanced)”.
    • Under XP...
      • In the window “Can Windows connect to Windows Update to search for software?” select “No, not this time” and “Next”.
      • Select “Install from a list or specific location (advanced)” then “Next”.
      • Select “Search for the best driver in these locations”, “Include this location in the search” and “Browse...”.
    • Under 2000...
      • Select “Next”, then “Search for a suitable driver for my device (recommended)”, and “Next” again.
      • Tick the “Specify a location” box, then select “Next”.
      • In the window “Insert the manufacturer's installation disk” select “Browse...”.
    • Locate the “argyll\libusbw” subdirectory in your Argyll_VX.X.X directory (under Windows 2000, you also need to select the .inf file that corresponds to your device, then select “Open” and “OK”). Select “Next”.
    • Under Vista, if a “Windows Security” dialog pops up, select “Install this driver software anyway”.
    • A window stating the successful installation of the driver should show. Click “Finish”/“Close”.
  5. The instrument should show up in the dropdown menu within about 10 seconds.
    If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot.
    Linux only: If that doesn't help, read Installing Argyll CMS on Linux: Setting up instrument access.
  6. Refer to the Usage instructions.

Prerequisites

Argyll CMS

To use dispcalGUI, you need to download and install Argyll CMS (>= v1.0.0).

If you do not know Argyll CMS yet, be sure to look at the documentation, specifically the list of supported instruments and installation instructions (also, please pay attention to the installation instructions for your measurement device).

Checking instrument access

After installing Argyll CMS, you should make sure that your display(s) and measurement device are recognized by Argyll. To do that, connect the instrument, open a shell and enter:

dispcal

You should get several lines of usage information. Look at the first few lines, under the options -d and -c the detected displays and measurement devices will be listed.

If you see your display and instrument, you can proceed to checking video LUT access.

Otherwise, review the Argyll CMS installation instructions. Under Windows 2000 and XP, if you have an USB instrument with already installed vendor drivers, you might get it to work with Argyll by installing the libusb filter drivers—but please note that the recommended way of enabling your instrument is the one outlined in the Argyll CMS documentation under Installing the software on Microsoft Windows. If you really want to try and use your existing drivers along with the libusb filter, make sure to get the correct file, it will have a name similar to libusb-win32-filter-bin-<version>.exe

Checking video LUT access

Then, you should make sure that the Argyll utilities can access the video LUTs (Look Up Tables). From a shell, enter:

dispwin -c
dispwin -r

It will give back some status information wheter video LUT access was successful or not. Again, refer to the Argyll CMS documentation for troubleshooting, and under Linux, specifically to Installing the software on Linux with X11 and “Fixing access to Video LUTs” therein.

Additional prerequisites for unattended calibration and profiling

Normally, the Argyll command line utilities require keyboard input before any measurements. Starting from dispcalGUI v0.2.5b, when using an instrument that is supported by the new unattended feature (see below), it is no longer necessary to press a key after calibration to start the measurements for profiling. Under Linux, xautomation is needed to simulate keyboard input. Mac OS X and Windows do not require external utilities (under Windows you just need to make sure to keep the terminal window active).

Unattended calibration and profiling currently supports the following instruments:

  • X-Rite ColorMunki *
  • X-Rite DTP94
  • X-Rite/GretagMacbeth i1 Display 2
  • X-Rite/GretagMacbeth i1 Monitor & Pro *
  • X-Rite/GretagMacbeth Spectrolino/Spectroscan(T) *
  • Datacolor/ColorVision Spyder 2
  • Datacolor/ColorVision Spyder 3 *

* only when using Argyll CMS >= 1.1.0 Beta

Additional prerequisites for using the non-standalone release and source code

You can skip this section if you downloaded a standalone executable of dispcalGUI for your operating system and do not want to install any of the python package releases or compile from source.

All platforms:
- Python >= v2.5 < v3.0 (2.6 is the recommended version. Mac OS X users: If you want to compile dispcalGUI yourself, it is advisable to first install XCode and then the official python.org Python)
- wxPython GUI toolkit

Mac OS X:
- py-appscript

Windows:
- SendKeys
- pywin32

Optional for all platforms:
- NumPy (when installed, it enables the LUT Viewer)

Additional prerequisites for compiling

You can skip this section if you downloaded a python package of dispcalGUI for your operating system and do not want to compile from source.

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.
- bbfreeze if you want to build a standalone executable (optional), alternatively you can use the included pyinstaller (see installation from source, additional setup.py commands)

Mac OS X:
- XCode
- py2app if you want to build a standalone executable

Windows:
- a C-compiler (e.g. MS Visual C++ Express or MinGW. I'd recommend Visual C++ Express as works out of the box)
- py2exe if you want to build a standalone executable, alternatively you can use the included pyinstaller (see installation from source, additional setup.py commands)

You can run directly from (compiled) source without installation if you want. To do this, you need to build the extension modules “in-place”:

  1. Open a shell.
  2. cd into the source directory (dispcalGUI-<version>).
  3. Run python setup.py build_ext -i

You can then run python dispcalGUI/dispcalGUI.py in the same directory.

Installation

It is recommended to first remove all previous versions.

Linux Autopackage (.package)

Before installing the autopackage, first install wxPython (on some systems called python-wxGTK) using your system's package management software. To install the autopackage, follow “How to install Linux autopackages in 4 easy steps” (off-site link).

Standalone executable

Linux

Unpack and then simply run dispcalGUI from the created folder. You can optionally run the included install.sh shellscript from a terminal to install files to appropriate places on your system and also add a menu entry for dispcalGUI to the desktop menu under the “Graphics/Other” category. You may also use your own prefix by giving it as option to install.sh, e.g. ./install.sh --prefix=/usr. The default prefix is /usr/local if installing as superuser or using sudo, and ~/.local if installing as normal user. Installing as superuser or using sudo is required to set up instrument access (if you didn't do it when installing Argyll CMS).

Mac OS X

Mount the disk image and drag the application icon to your “Applications” folder, then simply run it from there.

Windows (Installer)

Launch the installer which will guide you trough the required setup steps.

Windows (ZIP)

Unpack and then simply run dispcalGUI from the created folder.

Source code (all platforms)

Starting with dispcalGUI 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

bdist_appdmg (Mac OS X only)
Creates a DMG of a previously created (by the py2app or bdist_standalone commands) application bundle.
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).
bdist_pyi (Linux or Windows)
Uses pyinstaller to create a standalone executable. It has the ability to generate single-file executables (by specifying the -F option) which do not need to be shipped with external files. The drawback is a longer startup time, because the files are extracted to a temporary directory at runtime. Normally, you want to use bdist_standalone instead.
bdist_standalone
Creates a standalone executable 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, py2app is 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 py2app 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 py2exe to acces all its files.
inno (Windows only)
Creates an Inno Setup install script for an executable created with the py2exe or bdist_standalone commands.
purge
Removes the build, dispcalGUI.egg-info and pyinstaller/bincache* directories and 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.
--use-distutils
Force setup to use distutils 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 (default). This is actually a switch, use it once and the choice is remembered until you specify the --use-distutils switch (see above).

Basic concept of display calibration and profiling

If you have previous experience, skip to Usage. 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 called LUT curves [LUT = Look Up Table]) 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 graphics card via LUT curves, to get the best results.

Second, the calibrated displays behavior is measured and an ICC profile describing the response of the display 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 (currently, the only OS that applies calibration curves out-of-the-box is Mac OS X), while applications using the profile to do color transforms usually rely on the calibration being already loaded. 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.

Usage

Upon launching dispcalGUI, you will see two windows: A terminal and the GUI. The terminal is mostly used for status information, and for the interactive part of display calibration. Through the GUI, you can choose your settings. Closing either window will quit the application, but I strongly recommend closing the GUI window first so the cleanup routines can run. On most systems, the terminal window will close automatically afterwards (if you were not running from a manually opened terminal to begin with).
Here's a caveat for Linux systems: Because even though this is a GUI application, it still needs a terminal window for the interactive part of display calibration. If not launched from a terminal or a .desktop shortcut with Terminal=true, it will try to find one (currently, it'll search for Terminal, gnome-terminal, konsole and xterm). If that fails, you will get a message box informing you about that. You can then either launch a terminal and run dispcalGUI from there or (preferably) create a .sh script or .desktop file to launch your desired terminal with dispcalGUI (refer to your system's documentation to find out how to do that). Also, feel free to mail me the name of your terminal application if dispcalGUI didn't detect it, so I can add it to the list of terminals that dispcalGUI will search for.

Settings file

Here, you can load a .cal or .icc/.icm file from a previous run (the dropdown box will remember up to 15, including the presets). This will set options to those stored in the file and also load calibration curves (if any) into the video card. If the file contains only a subset of settings, you will get a message showing which settings were loaded.

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 will be used as the base when “Just Profiling”.
The chosen settings file will stay 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 LUT will be restored (if present, otherwise it will reset to linear).

When a calibration file is loaded or present, the “Update calibration” checkbox will become available, which takes less time than a calibration from scratch. If an ICC profile with the same base name as the settings file exists in the same directory, the “Update profile” checkbox will also be available. If you place a check in that box, all options and the “Calibrate & profile” and “Just profile” buttons at the bottom will get grayed out, but don't worry, the “Calibrate” button takes care of the profile in that case.

Predefined settings (presets)

Starting with dispcalGUI 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.4 been chosen for the presets?

Many displays, be it CRT or LCD type, have a default response characteristic close to a gamma of approx. 2.4 (for CRTs, this is the actual native behaviour; and LCDs 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 graphics card's LUT 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.4 for other reasons.

Choosing the display to calibrate and the measurement device

Those can be selected through the drop-down boxes at the top. If you launch dispcalGUI without an instrument connected, you can connect the device afterwards and it should show up in the drop-down box after a few seconds. If this doesn't work, there's also a menu item “Detect displays and instruments” in the “Extra” menu, but normally you shouldn't need this (if you can't seem to get your instrument to appear in the dropdown, please make sure that Argyll recognizes your instrument before filing a bug report. See Prerequisites).

Calibration settings

This should be fairly straightforward, at least if you have calibrated a display before. You can also refer to the Argyll CMS dispcal documentation, and you are encouraged to experiment if you have some time to spare. I will only explain the not-so-obvious options below.

Tone curve / gamma

(Please also refer to the comprehensive Argyll CMS documentaion for information about the different tone curves. The following has been quoted from it and slightly altered to fit dispcalGUI's behavior and notation)

Relative: 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.

Absolute: 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.

Black output offset

(Quoted from the Argyll CMS documentation and slightly altered to fit dispcalGUI's behavior and notation)

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 0% black output offset) 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. The other alternative is to allow for this at the output of the ideal response curve, by offsetting and scaling the output values. This will probably give a less progressive response from black, but may better match the responses that other systems provide. A further 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 a percentage of 0% accounts for it all as input offset, and 100% accounts for all of it as output offset.

Black point correction

(Quoted from the Argyll CMS documentation and slightly altered to fit dispcalGUI's behavior and notation)

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

Interactive display adjustment
You will normally want to keep this checked, to be able to use the monitor controls to get closer to the chosen target characteristics.

Profiling settings

Testchart file
You can choose the test patches used when profiling the display here. There are some pre-built ones in the ti1 folder (which are automatically chosen based on display type and profile type), but you can also use and create your own.
Profile type
LUT based = larger, more accurate, but also less compatible (some applications might not be able to use LUT type profiles). L*a*b* is used as PCS (Profile Connection Space), this corresponds to the -al option of dispcal.
Matrix based = smaller, somewhat less accurate. This corresponds to the -as option of dispcal (shaper curves and matrix, the default for dispcalGUI as of v0.2b).
When choosing LUT-based as profile type, some advanced gamut mapping options become available.
Note: LUT-based profiles might be confused with video card LUT curves, but they're two different things. Both LUT-based and matrix-based profiles can include video card LUT curves.
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 (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/dispcalGUI/storage
Profile name: mydisplay

The following folder will be created: ~/.local/share/dispcalGUI/storage/mydisplay

During calibration & profiling the following files will be created:
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.all.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.cal
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.colprof.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispcal.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispread.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispwin.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.icc
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti1
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti3

(the .sh files can be used to re-run without GUI but same settings from a shell)

Calibrating / profiling

After you have set your options, click on one of the three buttons at the bottom to start the actual calibration/profiling process. The GUI will hide during measurements, and should pop up again after they are completed (or after an error). Pay attention to the output printed to the terminal, it will give you status information and prompt for keyboard input to start measurements and select calibration options (you can always cancel out of running measurements by pressing ESC or Q).

When creating or updating a profile, a shortcut to load its LUT curves automatically on login will be created in your user startup directory (on Windows and Linux, Mac OS X does not need a loader).

Known issues and solutions

Issue: Under Windows Vista, the installed display profile calibration cannot be loaded.
Solution: Open the Windows start menu, select “Control Panel”, then “Color Management”. Under the “Devices” tab, select your display device, then tick “Use my settings for this device”.

Issue: Under Windows Vista, the calibration gets unloaded when a “User Access Control” prompt is shown.
Solution: This is really a Windows Vista bug that hopefully gets fixed at some point, and can be remedied 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 dispcalGUI and select “Load LUT curves from current display profile” in the “Extra” menu, or (quicker) open the Windows start menu and select “dispcalGUI Calibration Loader (Display <number>)” in the “Startup” subfolder. To disable UAC, 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.

Issue: Under Mac OS X, the brush cursor in Photoshop CS3 looks funny (box around brush).
Solution: This seems to be a Photoshop bug which shows with LUT-type profiles that have only one rendering intent. To overcome it, select “Advanced...” next to the profile type dropdown, select an existing ICC profile (probably the CMYK press profile you use most often) and tick at least one of the “Apply gamut mapping to” checkboxes before profiling. To fix an existing profile, choose “Create profile from measurement data...” from the “Extra” menu.

Issue: Under Linux, when opening a file selector, “Gtk-Message: ...” strings appear in the terminal.
Solution: These messages are generated from GTK, I have no influence on them, but they can be safely ignored if the full message is something like “Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `GtkTreeView::odd-row-color'”. If they really bother you and you don't mind using the shell and editing files by hand, you can get rid of these messages by changing the involved GTK theme file:

  1. Open a shell and type export GTK_DEBUG=1
  2. Run dispcalGUI and open a file selector.
  3. In the familiar message, the path to the involved theme file should now be displayed.
  4. Open that theme file in a text editor (you might need elevated rights to be able to edit it) and navigate to the line that was also shown in the message.
  5. Replace the color value so that it is no longer a function call, e.g. if the old line was:
    GtkTreeView::odd-row-color = shade(0.9, @base_color)
    then change it to (look up a suitable color value in the file or specify your own):
    GtkTreeView::odd-row-color = "#eeeeee"
  6. Save the theme file & exit the text editor.
  7. Restart dispcalGUI and open a file selector to check if the message is gone.
  8. Open a shell and type unset GTK_DEBUG

Issue: Some text is still in english, even though another language is selected in the menu.
Remark: All output from the Argyll utilities is always english, and on Mac OS X, also the menuitems in the application menu. This is not changeable by me.

Issue: The application does not look native under Linux with KDE.
Solution: You need the GTK-Qt Theme Engine for native KDE look. Most Linux distributions offer ready-made packages through their packaging systems, search for “gtk-qt” (there will likely be separate packages for KDE3 and KDE4).

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

Thanks

I would like to thank the following people:
Graeme Gill, for creating Argyll CMS.
Loïc Guégant (french translation).
Roberto Quintero (spanish translation).
Tommaso Schiavinotto (italian translation).
And everyone who sent me feedback or bug reports, suggested features, or simply uses dispcalGUI.

Version history / changelog

2009-07-16
  • Fixed a glitch in the Linux Autopackage installer where it would install even if required libraries were missing.
2009-06-30 0.2.6b3
  • fix (Windows): Fixed a critical bug in the Windows codepath which tried to access non-existent paths when certain settings were used.
2009-06-26 0.2.6b2
  • fix: Only look at <major>.<minor> during the Python version check (fixes a critical error on Ubuntu 9.10 Beta, where the Python revision number has an unexpected value).
  • fix: The LUT Viewer is now also able to plot curves from *.cal files.
  • fix (Linux): If launched on an X display which is not the first display, the measurement window's location no longer determines the display which is used for measurements. This allows non-Xinerama multiscreen configurations to work with dispcalGUI. Note: You need to launch dispcalGUI on the display you want to measure, e.g. `DISPLAY=:0.1 dispcalGUI`.
  • fix (Linux): Get the profile from the correct display when loading a display's LUT curves into the LUT Viewer.
  • fix (Linux, cosmetic): Suppress CUPS warnings encountered on some systems when using the LUT Viewer.
  • fix (Mac OS X): Do not offer 'Network' scope during profile installation if /Network/Library/ColorSync/Profiles does not exist.
  • fix (Windows, cosmetic): Made sure the message "Debug: src/helpers.cpp(140): 'CreateActCtx' failed with error 0x0000007b (the filename, directory name, or volume label syntax is incorrect.)" is not shown when launching the standalone Windows executable, by changing the way *.pyd files are bundled (they are now copied to the executable's directory and are no longer part of the executable itself).
  • chg: The LUT Viewer resets to linear if a display without associated profile is selected.
2009-06-22 0.2.6b
  • fix: calibration preview checkbox in the “install profile” dialog should now correctly toggle between previous and new calibration.
  • fix: profiling failed when creating a profile on top of an existing calibration.
  • fix: correctly decode environment variables (should fix a failure when trying to create a profile and the username contains non-ASCII characters).
  • fix: automatic restoration of defaults before loading settings from a profile or cal file should no longer restore “do not show again” dialogs.
  • fix (Windows): several errors related to character encoding.
  • chg: unattended calibration and profiling: wait 10 seconds instead of 5 after calibration before trying to start profiling measurements (some instruments seem to need longer to initialize than others, e.g. Spyder 2).
  • chg (Python packages and source): instead of requiring wxPython 2.8.x specifically, only ensure a minimal version of 2.8.
  • add: LUT viewer.
2009-06-11 21:33 (UTC)
  • Added Linux Autopackage download.
  • Renamed 55-Argyll.rules to 92-Argyll.rules, so it can work on Debian too.
  • Removed “Creating a standalone executable from source” section from the ReadMe (the topic is still handled under “Installing from source” / “Additional setup.py commands”).
2009-06-07 0.2.5b4
  • fix: “TypeError: coercing to Unicode: need string or buffer, instance found” when calling any of the get*Description() methods of an ICCProfile instance, which caused profile creation from existing profile to fail.
  • fix: (Windows Vista) application exit on launch if autostart directory did not exist.
  • fix: (source, Debian and RPM packages) use the correct wxPython version
  • fix: tab-key traversal of calibration settings controls.
  • fix: automatically scroll into view focused calibration settings controls if scrollbars are shown.
  • fix: properly clean & remove temporary directory.
  • fix: (cosmetic) added some padding to calibration settings right-hand side so scrollbar won't overlap if shown.
  • chg: (cosmetic) enable auto-sizing (fit to contents) for colortemp locus, trc type and profile type selectors.
  • chg: (cosmetic) do not show vendor name in instrument select dropdown (conserve some space).
  • chg: (cosmetic) made the instrument selector a little narrower (needs less space now to display instrument name because the vendor name is stripped) and the measure mode selector a bit wider (to accommodate for projector mode).
  • chg: only try to re-start within terminal if running as standalone executable.
  • chg: show application restart request in the chosen language after changing it.
  • chg: allow resizing/maximizing of main window (a minimal size is forced to prevent layout glitches).
  • chg: (Linux) install from source or package will try to automatically setup access to your instrument. Some services (PolicyKit/HAL or udev) may need to be restarted to get the updated configuration recognized. If in doubt, a reboot should work in all cases.
  • add: french translation (by Loïc Guégant, thanks!)
  • add: bdist_deb command and --cfg option for setup.py
2009-05-16 0.2.5b3
  • Fixed calibration loader autostart entry creation (“access denied” error) under Windows Vista and later with User Account Control enabled.
2009-05-07 0.2.5b2
  • Fixed “error: nothing to repeat” when using a spectrometer.
2009-05-05 0.2.5b
  • fix: encoding-related issues on all platforms and strange Unicode-related problems with AppleScript and Terminal on Mac OS X 10.4 (Details).
  • fix: (Windows) several actions unexpectedly failing under Windows 7 (dispcalGUI created temporary files via system calls on several occasions, but on Windows, this does not create the file in the user's temp directory as one would expect, but in the ROOT directory e.g. C:\ - a sane method is now being used instead).
  • fix: bug in sorting function caused leading and trailing zeroes of numbers in testchart filenames to get lost, thus failing to load such files.
  • fix: (Linux) “No module named _md5” error with the standalone executable on some Linux distros (apparently an OpenSSL-related issue, because normally it wouldn't fall back to the legacy _md5 module which is not even built by default in recent Python versions). The fallback _md5 module is now included.
  • fix: calibration was not automatically added & selected in the dropdown menu when only calibrating.
  • fix: dropping a profile which was not created in dispcalGUI onto the application window no longer results in an unhandled error.
  • fix: when trying to load LUT curves from a profile which actually does not contain any, an error message is now shown instead of resetting the LUT to linear and erroneously stating the curves were succesfully loaded.
  • fix: add display device name as device model description when profiling.
  • fix: when creating a new profile from an existing profile, use that profile's device model description if present.
  • fix: also create .app/.sh/.cmd files when creating a new profile from existing measurement data.
  • fix: restore advanced gamut mapping options to default if selecting a profile which does not contain those settings.
  • fix: allow free selection of source and target viewing conditions in advanced gamut mapping options for LUT profiles regardless of source profile type.
  • fix: if the screen or instrument that was selected in a previous session is not available, select an available one.
  • fix: (Mac) the “enable spyder 2” menu item would not allow to select files other than “setup.exe”.
  • fix: [src] (Mac) if dispcalGUI was installed as application and then run from (separate) source, multiple copies were launched at certain occasions.
  • fix: selecting a different Argyll binary directory than the previous one now actually works.
  • chg: the previously empty entry at the top of the settings dropdown (settings which are not associated to a profile or .cal file) is now named “<current settings>”.
  • chg: changed settings which are associated to a profile or .cal file are now marked with a leading asterisk in the settings dropdown.
  • chg: default to a gamma of 2.4 (Argyll default).
  • chg: warn before changed settings are discarded.
  • chg: new default profile naming scheme.
  • chg: new default file locations on all platforms.
    - On Linux, dispcalGUI now adheres to the XDG Base Directory Specification—the configuration file is saved as $XDG_CONFIG_HOME/dispcalGUI/dispcalGUI.ini ($XDG_CONFIG_HOME defaults to ~/.config if not set), all files created during calibration/profiling go into $XDG_DATA_HOME/dispcalGUI/storage/ ($XDG_DATA_HOME defaults to ~/.local/share if not set) by default, and logfiles into $XDG_DATA_HOME/dispcalGUI/logs/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/.dispcalGUI and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Mac OS, the configuration is saved as ~/Library/Preferences/dispcalGUI/dispcalGUI.ini, all files created during calibration/profiling go into ~/Library/Application Support/dispcalGUI/storage/ by default, and logfiles into ~/Library/Logs/dispcalGUI/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/Library/Preferences/dispcalGUI Preferences and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Windows, the configuration file is saved as %APPDATA%\dispcalGUI\dispcalGUI.ini, all files created during calibration/profiling go into %APPDATA%\dispcalGUI\storage\ by default, and logfiles into %APPDATA%\dispcalGUI\logs\
    Any old (pre v0.2.5b) configuration data is retained in the registry key HKEY_CURRENT_USER\Software\dispcalGUI.
  • chg: [build/src] (Windows) removed MS Visual C++ 2008 Redistributable DLLs from the source package. Users who build under Windows will have them anyway as they are installed with Python 2.6, so they are now copied directly from %SystemRoot%\WinSxS (Windows side-by-side assemblies) if possible.
  • chg: [build/src] SendKeys is now a dependency on Windows when running or building from source.
  • chg: [build/src] made dispcalGUI a distutils package, so it can be built/installed via setup.py.
  • chg: default locations are now also searched for resource files ($XDG_DATA_HOME/dispcalGUI, $XDG_DATA_DIRS/dispcalGUI on Linux, ~/Library/Application Support/dispcalGUI, /Library/Application Support/dispcalGUI on Mac OS X, %APPDATA%\dispcalGUI, %COMMONAPPDATA%\dispcalGUI and %COMMONPROGRAMFILES%\dispcalGUI on Windows) in addition to the current working directory (which is always searched first if it differs from the executable directory) and the executable directory (which is always searched last).
  • chg: better error handling. For unhandled exceptions, a message box is shown and an entry is written to the logfile.
  • chg: (Linux) the calibration loader will no longer try and handle gnome-screensaver quirks - it was working too unreliably, and should really be fixed in gnome-screensaver. The current recommendation is to not use a screensaver at all if possible, and instead rely on the system's energy saving options.
  • chg: (Linux) there's no longer an installer for the Linux version.
  • chg: cancelling of certain operations like profile calculation and testchart generation is now also supported when using Python 2.5
  • chg: when searching for Argyll executables, also search for files with “argyll-” prefix or “-argyll” suffix (thanks to Mark Whitis for report).
  • chg: disable measurement mode selection when using a spectrometer.
  • add: logging (also see the change related to file-storage). Logfiles are created per-date. A maximum of 5 old ones is being kept as backup.
  • add: placeholders like display name, measurement device, whitepoint etc. can now be used in the profile name.
  • add: unattended calibration and profiling for some instruments, meaning it is no longer necessary to press a key after calibration to start the measurements for profiling (needs xautomation under Linux).
  • add: settings and related files can be deleted.
  • add: (Linux, Mac, Vista) profile install scope can be selected (note: local system scope install is broken with current Argyll versions under Linux).
  • add: version and translation information in the about window.
  • add: projector mode when using Argyll 1.1.0 Beta or newer with the X-Rite ColorMunki.
2009-01-01
Linux and sourcecode bugfix update: Creation of the autostart entry failed when the autostart directory did not yet exist.
2008-12-24 0.2.1b
  • fix: video LUT access check always returned false when no display profile was set.
  • chg: (Linux) dispcalGUI now uses the autostart specification from freedesktop.org for the profile loader under Linux when installing profiles. NOTE for users: This also means you should manually remove any autostarts from previous versions, e.g.
    rm ~/.gnome2/dispwin-*.sh
    rm ~/.kde/Autostart/dispwin-*.sh

    and then re-install your current profile so the new loader is created. The new loader will be created in $XDG_CONFIG_HOME/autostart/ (if set) or ~/.config/autostart/ (if not set), with the filename dispcalGUI-Calibration-Loader-Display-x.desktop, where x is the display number.
  • chg: the calibration loader will check if gnome-screensaver is running and if so, exit it before loading the calibration, then start it again to prevent resetting the calibration when activated.
  • chg: .sh/.cmd file in profile folder is no longer created when just installing a profile.
  • add: message box when selecting LUT as profile type with recommendation to use more samples for higher quality profiles.
  • add: default to english locale if translation doesn't exist.
2008-12-18 0.2b
  • fix: no longer possible to introduce invalid value types through a malformed config file (which could lead to dispcalGUI not launching).
  • fix: windows can no longer be moved permanently out of the visible screen area.
  • fix: spaces and special chars in the profile name should work now (should have from the start, but I had some superfluous code which broke it).
  • fix: spaces in the path to dispcalGUI should work now under Linux and Mac OS X too (Windows had no problem)
  • fix: measurement file no longer gets deleted after successful measurement if profile generation fails (was a simple oversight on my side).
  • fix: [cosmetic] logo header now always spans the whole width of the window.
  • fix: [cosmetic] (Mac OS X) on first launch, a second, unused, terminal window is no longer opened.
  • fix: windows will now try to adjust its height to fit on small screens (scrollbars might appear).
  • chg: “Calibration file” renamed to “Settings” and moved to the top, is now a dropdown box remembering the last 10 used files. Settings are stored in and loaded from profiles.
  • chg: renamed “Display type” to “Measurement mode” and moved over to measurement device selector.
  • chg: default to “LCD” for measurement mode.
  • chg: default testchart file names are now localized.
  • chg: new default testcharts, four flavours: matrix default (91 patches), LUT default (127 patches), large (512 patches) and massive (3012 patches).
  • chg: testchart selector is now a dropdown box, shows all testchart files in chosen directory plus the default testcharts.
  • chg: [build/src] new and improved build system.
  • chg: [build/src] Python 2.6 is now the recommended version to run and/or build dispcalGUI. Python 2.5 is still supported, but you will not be able to cancel profile or testchart creation through the GUI.
  • chg: (Linux) externally installed wxGTK is no longer a dependency for executables.
  • chg: [build] Executables are now completely self-contained. The following paths are searched for additional language files: <user home directory>/dispcalGUI/lang, <dispcalGUI root directory>/lang
  • add: all settings now stored in profile whenever possible.
  • add: “Install” button next to settings dropdown to install selected profile.
  • add: dropdown to choose the display to use for LUT access if all of the following applies:
    - more than one display connected
    - one of those displays seems to have non-working LUT access (detected on startup)
    - one of those displays seems to have working LUT access (detected on startup)
  • add: show patch count of selected testchart next to dropdown.
  • add: ability to select an icc profile (if it contains appropriate data) or measurement data file (.ti3) as testchart (converted on-the-fly).
  • add: testchart generator with editing cabability (experimental)
    - 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, double-click a row label
    - to delete patches, select them, then hold CTRL or CMD and hit DEL or BACKSPACE (will always delete whole rows even if only single cells selected)
    - CTRL-C/CTRL-V/CTRL-A = copy/paste/select all
  • add: advanced gamut mapping options for LUT-type profiles, can also be used to overcome an apparent Photoshop CS3 bug under Mac OS X where the brush cursor shows strange artifacts when using LUT-profiles with only one intent (thanks to Klaus Karcher for reporting this).
  • add: ability to generate profile from existing measurement data, even from an existing profile (if it contains appropriate data).
  • add: drag and drop calibration files (.cal), profiles (.icc/.icm), testcharts (.ti1) and measurement data files (.ti3) to the main window to process/select them (does not work very reliably on Mac OS X depending on where you drop the files, and you also get no optical feedback during the drag operation like the changed mouse cursor on Linux/Windows. Your best bet when dropping any files is perhaps the unoccupied area below “Settings”).
  • add: fully movable/resizable measurement window.
  • add: profile and testchart creation can be aborted (when running from source only if using Python >= 2.6).
  • add: “Before” / “After” switch when calibration / profiling complete.
  • add: menu item to enable Spyder 2 from within dispcalGUI.
  • add: italian and spanish GUI translations (thanks contributors!)
  • Numerous other small fixes/changes.
2008-08-21
Executable-only update for Linux (thanks to Patrice Vetsel for bug report): dispcalGUI is now built against wxGTK 2.8.7.1, which becomes a dependency.
2008-08-18 0.1b
First public release.