Extract a .cube LUT
You have an image you graded and no record of how. Drop the original and the graded version of the same frame and this works backwards to the mapping between them, writing it out as a .cube file you can load into Resolve, Premiere, Final Cut, Lightroom, OBS — or the LUT applier here — and apply to everything else you shot.
Drop two images: the original first, then the graded one
Same frame, same pixel dimensions — the order matters
How it works
A 3D LUT is a table: for every input colour, the colour it becomes. Two versions of the same frame
give you one observation of that table per pixel — this pixel was (120, 80, 60) and is
now (140, 74, 52). A million pixels is a million observations. They are dropped into a
grid over the RGB cube, averaged per cell, and written out in .cube order.
Averaging is what makes it robust: JPEG artefacts, sensor noise and dithering all disagree slightly about what a colour became, and the mean of a few thousand samples is a far better answer than any single pixel.
The part that decides whether the LUT is any good
A photograph does not contain every colour. It contains a thin shell of the RGB cube — the skin tones, the sky, the wall — and nothing at all in most of the rest. So most grid cells are never observed, and the tool has to decide what a colour it has never seen should become.
Unobserved cells take the shift of the nearest observed cell rather than its value, weighted down by distance, falling back to identity when there is nothing nearby. A look is a displacement, not a destination, and copying the displacement extrapolates far better than copying the colour.
The status line reports what percentage of the cube was genuinely observed. Read it. A LUT extracted from a single moody night shot might see 3% of the cube — it will reproduce that shot perfectly and do something arbitrary to a bright daylight frame. If the LUT has to travel, extract it from something with range in it.
Getting a good extraction
- Use the widest frame you have. A colour chart is ideal, a varied scene is good, a monochrome close-up is close to useless.
- Same frame, same size. This is a per-pixel comparison. A crop, a resize or a different take between the two images produces a LUT of nonsense, so a size mismatch is refused rather than guessed at.
- Export both from the same point in the pipeline. If the graded version also had sharpening, a vignette or grain applied, those are not colour transforms and cannot be represented in a LUT — they will smear into it as noise.
- Order matters. Original first, graded second. Backwards gives you the inverse grade, which is occasionally what you want and usually a surprise.
Grid size and strength
33³ is the industry default and the right answer almost always: 35 937 entries, about 700 KB, smooth enough for skin tones. 17³ is a tenth the size and slightly softer in the transitions. 65³ is precise to the point of reproducing your source's noise, and only worth it when the extraction covered a lot of the cube.
Strength blends the whole table back towards identity before writing. At 50% the LUT applies half the look. It is easier to dial it down here than to fight it in a grading application later.
What a LUT cannot carry
- Anything that depends on position. Vignettes, gradients, split toning by region, dodge and burn — a LUT maps colour to colour and knows nothing about where a pixel is.
- Anything that depends on neighbours. Sharpening, blur, noise reduction, halation.
- Anything that is not a function. If the grade turned two different source colours into the same output, the inverse is ambiguous; if it turned one source colour into two different outputs depending on context, the average is what you get.
Privacy
100% client-side. Both images are decoded and compared in your browser and the .cube is assembled there. Nothing is uploaded — which matters more than usual here, because the input is unreleased footage.