Before and after

Teal and orange

The scene before the transform.
Before 57600
The scene after the transform.
After 0.00%
driven to white driven to black a channel at an endpoint it did not start on
What it moved
mean ΔE₀₀
0.00
95th percentile
0.00
largest
0.00
clipped
0.00%
the old test said
0.00%

The last card is the predicate this page used to ship: it tested the output alone, so it counted every saturated pixel in the picture whether or not the transform had touched it. Both run on every pixel, so the difference is a number rather than an argument.

Where it moved things to
A circle of constant lightness, with each sample joined to where the transform moved it.
hollow: before · filled: after · angle: CIELAB hue · radius: chroma
largest hue shift
0.0°
mean hue shift
0.0°
largest L* shift
0.0
clipped on the circle
0 of 72

The circle is a constant L* 60, C* 40 ring in CIELAB. sRGB cannot hold all of it, so samples that fall outside are pulled in along the radius until they fit — 0 of 72 of them here. Reporting a hue shift without saying which samples had to be moved first would credit the transform with a displacement the gamut caused.

What each look is

—

—

Withdrawn

What stays

The .cube reader and writer, the trilinear interpolator and the 1D path are the job this tool exists to do, and they do it correctly. Everything above is about claims made around them.

What each number rests on

—

The file, as it will be written
—

The header carries the transform, the sample order and the number of levels the pipeline actually has. A .cube states no precision of its own, so a table written from 8 bits looks exactly like one written from 32 — six decimals either way.

Sources

—

—