What is a .cube LUT?
A .cube file is a plain-text lookup table that maps input RGB values to output RGB values. A 3D LUT samples colour space on an evenly spaced grid — commonly 17, 33 or 64 points per axis — and interpolates between those points. It stores a colour transformation only, with no spatial or image-specific information.
The file is just text
Despite the extension, a .cube file is not a binary format. Open one in a text editor and you can read the whole thing. It begins with a short header and then lists output colours, one per line.
TITLE "Warm Contrast"
LUT_3D_SIZE 33
DOMAIN_MIN 0.0 0.0 0.0
DOMAIN_MAX 1.0 1.0 1.0
0.000000 0.000000 0.000000
0.008722 0.007751 0.006134
0.017445 0.015503 0.012268Each of those three-number lines is an output colour, written as red, green and blue between 0 and 1. Their position in the file determines which input colour they correspond to — red varies fastest, then green, then blue.
What the grid size means
LUT_3D_SIZE is the number of sample points along each axis. A size of 33 means the LUT stores a value for 33 red levels × 33 green × 33 blue — 35,937 entries in total. Anything falling between those points is interpolated.
This is why the number matters: the LUT is a sampled approximation of a transformation, not the transformation itself. Common sizes and their costs:
- 17³ = 4,913 entries. Compact, and adequate for gentle looks.
- 33³ = 35,937 entries. The practical standard.
- 64³ = 262,144 entries. High fidelity, large file, occasionally justified.
Gentle grades survive small grids well. Aggressive ones — steep curves, hard saturation shifts — are where a coarse grid shows visible steps between sampled values.
1D versus 3D
A 1D LUT, declared with LUT_1D_SIZE, holds one curve per channel. It can change brightness and contrast per channel, but it cannot make a colour shift hue, because each channel is treated in isolation.
A 3D LUT maps whole colours to whole colours, so it can do things a curve cannot — turn one specific shade of teal into a different hue while leaving similar colours alone. Creative looks are almost always 3D for this reason.
Domain, and why log footage matters
DOMAIN_MIN and DOMAIN_MAX declare the input range the table expects, normally 0 to 1. What they do not tell you is what those numbers are meant to represent.
A LUT built for log footage assumes flat, low-contrast input. Give it a normal corrected image and the result will be wrong — usually washed out or strangely contrasted. Nothing in the file prevents this or warns you about it, which is why keeping conversion LUTs separate from creative looks matters so much in practice.
What a lookup table cannot do
A LUT answers exactly one question: given this colour, what colour should it become? It has no other information. It does not know where the pixel is in the frame, what surrounds it, or what the image is of.
So grain, bloom, vignetting, blur, sharpening and any masked adjustment are all outside what the format can express — not because of a limitation in the software writing the file, but because the question a LUT answers does not include them.
Where .cube files work
The format is widely supported: Photoshop reads them through Color Lookup adjustment layers, and Premiere Pro, After Effects, DaVinci Resolve, Final Cut Pro and most modern grading tools all accept them. That portability is the main reason to export a look as a .cube rather than keeping it as an application-specific preset — a preset stays where it was made, while a .cube travels.