The Calibration Curves macOS Loads and Never Shows You

The Calibration Curves macOS Loads and Never Shows You

Short version: a display profile can carry per-channel calibration curves in a tag called VCGT. macOS loads them silently and never shows them to you. I built a free ICC profile inspector that runs in your browser, plots those curves, and tells you whether they are readable, missing, or damaged. Nothing uploads. Try it with your own profile → Its sibling, a free LUT converter, converts Cube, 3DL, and CSP files and reads the result back to prove it survived.

The curves macOS loads and never shows you

Every display profile on your Mac describes your screen. Most of the description is the part color-managed apps use: primaries, white point, and tone response curves (the TRC). But a profile can also carry a second set of curves with a different job, stored in a tag called VCGT, short for video card gamma table.

The TRC says “this is how the display responds.” VCGT says “adjust each channel like this first.” When the profile is in use, macOS normally loads the VCGT curves into the display’s gamma table, so every channel of the video signal gets adjusted before it reaches the panel. To find which profile your display is using, see how to inspect an ICC profile on Mac. It is an Apple-introduced private tag, not part of the core ICC specification, and calibration tools on macOS and Windows widely use it.

VCGT holds three independent 1D curves, one per channel, usually as a table of 256 entries, sometimes as a gamma formula with a minimum and maximum output. Three 1D curves can correct per-channel tone and white balance. They cannot fix cross-channel color errors, which is why a 3D calibration LUT only becomes VCGT when its red, green, and blue outputs behave independently.

Here is the part that trips people up. There are three different things, and reading a profile file tells you only the first:

  1. Profile contents: the curves stored in the .icc file.
  2. Assigned profile: the profile macOS currently uses for the display.
  3. Active curves: what is actually in the display’s gamma table right now.

The gamma table can change after the profile loads. Another application, a calibration tool, or a display reconfiguration can replace it. So a profile file with perfect VCGT curves does not prove those curves are active on your display. And none of the three states measures what the display actually shows. That still takes a meter and calibration software.

Three things the inspector shows that macOS doesn’t

macOS ships ColorSync Utility, and it will show you a profile’s tags and header values. What it will not do is interpret them. That is the gap. The inspector reads the same file and tells you what it means.

  1. The VCGT curves, plotted, with a verdict. Drop a profile on the inspector and it reports one of four states: no VCGT tag, readable curves, a form it does not read, or damaged data. Only readable curves get plotted, one curve per channel. A flat diagonal means the curves change nothing. Curves that bend, or end below the top, usually lower contrast or adjust white balance on purpose. ColorSync Utility lists the tag. It does not plot the curves, and it does not tell you when they are damaged, which is exactly when you most need to know.
  2. Primaries and white point as numbers you can check. The inspector recovers CIE x,y coordinates from the colorant tags with the chromatic adaptation matrix applied, and shows the tone response per channel: a gamma value, the sRGB curve, linear, a parametric curve, or a sampled table. You can compare the numbers against the standard you expect, sRGB or Display P3, D65 at about x 0.3127, y 0.3290. Raw tag values do not give you that comparison without doing the math yourself.
  3. The stored-versus-active distinction, stated plainly. The inspector says up front that it reads stored values only, and that it cannot tell you whether macOS loaded them or whether they are active on any display. If you want the live answer, the Display tab of the ICC profile tools in PatternSpace for Mac reads the active gamma curves back. A tool that shows you a file without that warning is how people end up trusting curves that are not running.

I couldn’t find another free browser tool that reads VCGT, which is why I built this one.

It runs in your browser. Nothing uploads.

This is the part I care about most, because the alternative is uploading a file that describes your display to someone else’s server. The inspector runs entirely on the page. Your profile never leaves your machine, there is no account, and there is nothing to install. The same applies to the LUT converter below. If a free web tool asks you to upload a calibration file, ask what it does with it after.

Its sibling: a free LUT converter that checks its own work

The inspector reads profiles. The converter moves LUTs between formats: Cube, Autodesk 3DL in mesh-header and vertex-list forms, and CineSpace CSP, in any direction. It handles grids from 2 to 33 points per axis and floating point values to 10 decimal places.

The part that matters is the verification. After writing the converted file, the converter reads it back with the same rules and compares every value against your LUT. If they do not match, it offers nothing. It refuses instead of guessing: 1D LUTs, 1D shapers, changed input ranges, values outside 0-1 headed for integer formats, and grids above 33 points are reported rather than altered. Converting to 3DL quantizes to the bit depth you choose, and it shows you the largest change next to the download, so you know what the rounding cost before you use the file.

One honest limit: changing the file format does not convert between color spaces or signal ranges. Load the converted file in the destination application and confirm its input and output encoding, range, and interpolation settings.

Try it here: Free Online LUT Converter: Cube, 3DL and CSP. The format differences are explained in Cube, 3DL and CSP: LUT formats explained.

When you need more than a web page

The inspector is for reading. PatternSpace for Mac does the rest of the profile workflow: build a matrix/TRC display profile from known primaries and tone response, or calibrate one from a .cube LUT; compare two profiles side by side; verify a transform offline against Apple’s ColorSync engines; assign a profile and read the active profile back. Building, inspecting, and comparing are free in the app. Exporting and assigning a generated profile, and temporary calibration, need Pro.

The full ICC profile tools guide covers the build, compare, verify and display workflow.

The LUT side is the same story. The free converter handles one file and four formats. The app’s LUT Tools handle the whole delivery: larger grids, CLF, Quantel, Truelight, Nucoda and IRIDAS Look files including 1D shapers, chain composition, ASC CDL adjustments, inversion, and verified export with a PDF delivery report in 2.4. Analysis and export preparation are free; writing LUT files needs Pro.

Start here: Free ICC Profile Inspector: Primaries, TRC and VCGT. If you want the background first, What is VCGT? explains the tag and why stored curves are not active curves. And if you want the app, PatternSpace is free on the Mac App Store.

If you drop a profile on the inspector and find something odd, a damaged VCGT tag, channels that disagree, primaries that do not match the standard you expected, I would like to hear about it. The tool gets better when it meets real profiles.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top