Best Monitor Profile Type for Use with darktable

In his YouTube video responding to Shane Milton’s open source software complaints, darktable developer Aurélien Pierre (@anon41087856 ?) states that LUT-based ICC profiles are not suitable monitor profiles for photography, because they are only valid for a certain level of backlighting.

I’ve always created the ICC profile for my monitors using an X-Rite device with DisplayCAL, which uses “XYZ LUT + matrix” as the default profile type. The developer of DisplayCAL appears to argue that this is the best choice for 99%+ of use cases, which presumably includes most digital photography.

  1. If AP doesn’t recommend a LUT-based monitor profile for use with darktable, what profile type does he recommend? Single curve + matrix? Curves + matrix?

  2. How do we reconcile these seemingly opposing views on optimal monitor profile type for digital photography?

Thanks for any input you have on this topic.

1 Like

I am not going to comment at the technical level that AP could, but I personally have calibrated my monitors using a Spyder device. It ensures the best consistency between monitors. I feel consistency is the big word here. Then when I print my photographs I ensure my printer settings give a resulting print consistent with the look on the screen. My background is that I was a professional photographer and photographic lab manager in the days of film. And in my opinion all that counts now that we have moved from analogue film to digital images is that the screen and the resulting print has a reasonably close relationship.

Good luck with your question here.

I believe a matrix profile is the most amenable with scene referred editing…ie no lit. but that is just may be an opinion

I found this in the DisplayCAL documentation, but it does not discuss the matter of whether an XYZ LUT is only valid at a single white level:

Generally you can differentiate between two types of profiles: LUT based and matrix based.

Matrix based profiles are smaller in filesize, somewhat less accurate (though in most cases smoother) compared to LUT based types, and usually have the best compatibility across CMMs, applications and systems — but only support the colorimetric intent for color transforms. For matrix based profiles, the PCS 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 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 type profiles, or certain variations of them). When choosing a LUT 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.

Lab or XYZ can be used as PCS, with XYZ being recommended especially for wide-gamut displays bacause their primaries might exceed the ICC Lab encoding range (Note: Under Windows, XYZ LUT 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).

Note: LUT-based profiles (which contain three-dimensional LUTs) might be confused with video card LUT (calibration) curves (one-dimensional LUTs), but they’re two different things. Both LUT-based and matrix-based profiles may include calibration curves which can be loaded into a video card’s gamma table hardware.

I’m also not sure if darktable is even using the LUT in the “XYZ LUT + matrix” default profile produced by DisplayCAL or if it’s falling back to the matrix. I will try to do some testing and report back.


Good questions, @inquisitivepanda!

Once upon a time, we had a very profiled forumer on board.
Her site is full of valuable information:

Have fun!
Claes in Lund, Sweden

1 Like

That is a great website. I read many of the articles… it shares an incredible amount of information reflecting a lot of time and thought on the topics esp around color management…

Based on my tests using the test profiles from DisplayCAL, darktable 4.0 does in fact support LUT-based ICC profiles for your display.

That has not been disputed. There was a period where certain display profiles with LUTs were not handled correctly and basically LUTS being a fixed table of values often can impose restrictions on data in situations like scene referred editing where values are going beyond 1 or 100 % of whatever device they are scaled for…

I have actually hacked the x-rite software for my spyderchecker color card and tried to get camera profiles from it. They never seemed to work. They were always really dark and then I realized when creating them from DT I had to use the unbreak profile to apply gamma to them. They actually looked pretty good once I did that. I don’t know if there is any data on the exact nature of those profiles but I think they have a LUT and they don’t look too bad actually. I never pursued it much beyond that and of course I am talking now about an input profile and not an output profile as you mention wrt your monitor…

I did some testing on my equipment and want to share my findings. TL;DR - I currently believe an XYZ LUT is the best ICC display profile type for darktable and other digital photo editing.


  1. Are LUT-based ICC display profiles only valid at one white level (i.e. backlight brightness)?
  2. Is the accuracy of matrix-based ICC display profiles more tolerant of white level changes than LUT-based profiles?


  1. A high quality LUT-based display profile does not show a significant change in accuracy when changing the display white level by ±70 nits and can therefore still be considered valid in that range. Average and max ΔE*00 remained at acceptably low levels (<2).
  2. The tolerance of matrix-based display profile accuracy to ±70 nits changes in display white level shows no significant improvement over a LUT-based profile, while having considerably worse overall accuracy, regardless of the display white level tested.

Absent convincing evidence to the contrary, I will continue using an XYZ LUT-based ICC display profile for use with darktable, since it gives better color accuracy, even at varied white levels. I see no downside on an SDR monitor. As mentioned before, according to DisplayCAL’s developer this is the recommended profile type for 99%+ of scenarios.


  • To create my LUT profile, I used the “very large testchart” in DisplayCAL, which has nearly 5,000 color patches and takes about two hours to profile. Yes, it’s annoying to have to wait that long, but I think this is necessary to get a high-quality LUT profile. My conclusions may not be valid if you use DisplayCAL’s much smaller default set of only 175 patches.
  • LUT-based display profiles have the potential to create color casts in dark greys and/or banding in a variety of dark tones. While both my LUT and matrix profiles introduce some minor color cast in dark greys on my display, I actually find the LUT profile to be more neutral in this regard. Banding was about equal between the two. This is highly specific to your display, so I suggest you observe a grey/brightness ramp and color ramp using both types of profiles to determine if the LUT profile introduces artifacts on your display you find unacceptable compared to a matrix.
  • I have no idea what happens on an HDR monitor where you could potentially change the display brightness by ±500 or more nits.


I created two ICC display profiles with DisplayCAL, an “XYZ LUT + matrix” profile and a “Single gamma + matrix” profile, both created with relative colorimetric rendering intent and with my display white level set to 160 nits and a target white point of D65. My understanding is that all matrix profiles must at least have a single gamma function for them to function properly. There is no “matrix only” profiling option offered in DisplayCAL. Also note that “XYZ LUT + matrix” is effectively a LUT profile with a separate matrix fallback profile, in case your software doesn’t support LUT’s; the LUT and matrix aren’t used simultaneously.

Based on the excellent information regarding ICC display profiles on (big thank you to @Claes for providing the link), I used the “Very large testchart for LUT profiles” as my profiling testchart in DisplayCAL to create the XYZ LUT display profile, since LUT profiles apparently need lots of patches for the best results. For the single gamma + matrix profile, I left the testchart setting at the default “Auto-optimized.”

For each ICC display profile created I then used the verification tool in DisplayCAL with the “XXXL verification testchart” to measure the ΔE’s with my display set to 90 nits, 160 nits, and 230 nits (a control measurement and ±70 nits measurements, which captures most of the usable brightness range at which my display can maintain a white point reasonably close to D65).

My display is a VA type panel with a W-LED backlight. It provides about 120% coverage of sRGB and 90% coverage of DCI-P3.


XYZ LUT + matrix display profile @ 160 nits - control measurement

  • Whitepoint ΔE*00 - 0.91
  • Average ΔE*00 - 0.33
  • Maximum ΔE*00 - 1.4

XYZ LUT + matrix display profile @ 90 nits

  • Whitepoint ΔE*00 - 1.65 (0.74 increase versus control)
  • Average ΔE*00 - 0.48 (0.15 increase versus control)
  • Maximum ΔE*00 - 1.82 (0.42 increase versus control)

XYZ LUT + matrix display profile @ 230 nits

  • Whitepoint ΔE*00 - 1.03 (0.12 increase versus control)
  • Average ΔE*00 - 0.34 (0.01 increase versus control)
  • Maximum ΔE*00 - 1.41(0.01 increase versus control)

Single gamma + matrix display profile @ 160 nits - control measurement

  • Whitepoint ΔE*00 - 1.22
  • Average ΔE*00 - 1.9
  • Maximum ΔE*00 - 4.11

Single gamma + matrix display profile @ 90 nits

  • Whitepoint ΔE*00 - 1.76 (0.54 increase versus control)
  • Average ΔE*00 - 1.8 (0.1 decrease versus control)
  • Maximum ΔE*00 - 4.14 (0.3 increase versus control)

Single gamma + matrix display profile @ 230 nits

  • Whitepoint ΔE*00 - 1.25 (0.03 increase versus control)
  • Average ΔE*00 - 1.99 (0.09 increase versus control)
  • Maximum ΔE*00 - 4.13 (0.02 increase versus control)
1 Like