[Howto] color calibration with argyllcms + X11 + Spyder 5 Pro

posted in: computer | 0

ArgyllCMS is the preferred Color-Managment-System for Linux.


Short summary:

1) xset dpms 0 0 0                           #disable energy-saving
2) dispcal -yl -qm -t6500 -G2.2 -F file      #create calibration-file
3) dispwin file.cal                          #active calibration-file
4) dispread -yl -F -r                        #test calibration result (if bad, adjust step 2)
5) targen -d3 -f1000 file                    #create RGB color test-values
6) dispread -k file.cal file                 #measure test-values
7) colprof -qm -as file                      #create profile
8) dispwin file.icc                          #activate profile in X

Attention:  if you use more than one display, you have to choose the wanted one via the display-parameter “-d” (for help type: dispcal -h)


*.cal file, which includes the values to reach the calibration-state
*.ti1 file, which includes test-values
*.ti3 file, which includes test-values and the measured values
*.icm, *.icc file-extensions for profiles
calibration process to reach the desired calibration-state
profiling documentation, which colors are displayable and which calibration-data is needed for
profile-types matrix/shader-profile or LUT-based-profile (more accurate)
Video-LUT Video Lookup-Tables are software-filters located in the monitor-hardware, which contain correction values and which are processed before displaying the pixels



1.) disable energy-saving functions (screensaver, standby and poweroff)

#permanent in configuration file (xorg.conf)
Section "Monitor"
  Option "DPMS" "true"

Section "ServerLayout"
  Option "StandbyTime" "0"
  Option "SuspendTime" "0"
  Option "OffTime"     "0"


#interactivly via console
xset +dpms

xset dpms 0 0 0


#check the current configuration
xset -q


2.)  install argyllcms

apt-get install argyll


3.) install the required Spyder5-Pro firmware in argyllcms

#extract the firmware from the windows-setup-file
oeminst -v Spyder-Setup-file.exe


4.) Warm up Monitor and Spyder5 (30 minutes)

Warm up the TFT monitor, because the brightness is temperature-dependent.
Warm up the sensor lying on the monitor, because the dark-noise of the sensor is temperature-dependent.

with cold TFT: Gamma=1.98, contrast=563:1, daylight-temperature=6608K
with warm TFT: Gamma=2.20, contrast=637:1, daylight-temperature=6444K



you can choose between 3 variants:

  1. Adjusting + Calibration
  2. Adjusting + Calibration + Profiling (can only create a matrix/shader-profile)
  3. only Profiling (can create matrix/shader- or LUT-based profiles, *.cal-file is recommended)


Working schema:

monitor file.cal file.ti1 file.ti3 file.icc calibrated and profiled monitor
(dispcal) (targen) (dispread)  (colprof) (dispwin)


A.) Adjusting + Calibration (duration: 2-3 hours for quality=medium)

it configures and calibrates your monitor to desired values:

  • desired brightness (e.g. 200 cd/m²)
  • desired white-point (e.g. 6500 K)
  • desired response-curve (e.g. Gamma=2,2)

(Info: the default values are the actual monitor settings.)

#create the calibration file file.cal (v=verbose, yl=led-monitor, qm=quality medium, t6500=whitepoint, G2.2=Gamma-value, F=black background)
dispcal -v -yl -qm -t6500 -G2.2 -F file
(choose "checkall" --> "continue to calibration")

#activate the calibration file (=load it into the monitor LUT)
dispwin file.cal


Check the current monitor settings, run:

#with LUT (=enabled calibration)
dispcal -v -F -r

#without LUT (=disabled calibration)
dispcal -v -F -R

It is important to check, because the resulting values are often not the desired one’s. So you have to return the calibration-step with adjusted desired values. For example:

desired “t=6500K and G=1.75” results in measured “t=6447K and G=2.20”


If your monitor drifts, you can update your calibration file: (Update-process is based of you old calibration file and takes less time than a new calibration)

dispcal -u file


B.) Adjusting + Calibration + Profiling

info: profiles contain the calibration file data in the vctg-flag (read argyllcms online documentation for details)

#create calibration file (file.cal) and matrix/shader-profile (file.icc)
dispcal -v -yl -qm -o file

#activate the profile (=loads the calibration data into the monitor LUT)
dispwin file.icc


C.) only Profiling (duration: 1h for 1000 patches)

it is recommended, that you use a calibrated monitor to create your profile (=*.cal-file loaded into Video LUT)

#create test-values for your desired color-range (it creates the ti1-file, d3=video-rgb colorspace)
targen -v -d3 -f1000 file

#display the test-values and measure the monitor (it reads file.ti1-file, loads the file.cal and writes file.ti3-file)
dispread -v -k file.cal file

#create a matrix/shaper-profile (it reads file.ti3-file and writes file.icm)
colprof -v -qm -as file

#or create a LUT-based-profile (it reads file.ti3-file, swop.icm-file and writes file.icm)
colprof -v -qm -S swop.icm -cpp -dmt file


Profile Installation:

#load calibration into LUT
dispwin file.cal

load the profile
dispwin file.icc

#(un)install profile as default profile
dispwin -I file.icm
dispwin -U file.icm

#load the calibration from installed default-profile
dispwin -L

#clear the Video-LUT (loads a linear LUT)
dispwin -c

#verify, if the loaded Video-LUT is the same as the specified cal-File
dispwin -V file.cal

#test, if Video-LUT is loadable
dispwin -r