What Is a .cube File? The 3D LUT Format Explained

The .cube file is the de-facto standard container for 3D LUTs, originally specified by Adobe and IRIDAS. If you've ever downloaded a “cinematic LUT pack”, you almost certainly received a folder of .cube files.

Despite carrying sophisticated color science, a .cube file is astonishingly simple: it's plain text you can open in any editor. This page covers what is inside one, the format's actual rules, what the size number means, and how it differs from the other LUT formats you'll run into.

Inside a .cube file

A .cube file starts with a tiny header and then lists color values, three floating-point numbers (red, green, blue, each 0–1) per line:

TITLE names the look. LUT_3D_SIZE declares the grid resolution — 33 means 33 steps per channel, so 33³ = 35,937 data lines follow. The lines run through every grid coordinate with red varying fastest, then green, then blue. DOMAIN_MIN and DOMAIN_MAX (usually 0 and 1) declare the input range.

  • ·TITLE "My Cinematic Look"
  • ·LUT_3D_SIZE 33
  • ·DOMAIN_MIN 0.0 0.0 0.0
  • ·DOMAIN_MAX 1.0 1.0 1.0
  • ·0.023529 0.043137 0.070588 ← the new color for pure black
  • ·… 35,936 more lines …

The .cube file format, precisely

The format is loose enough that most files parse anywhere, but a few rules matter when you are writing or debugging one. Lines beginning with # are comments. Blank lines are ignored. Keywords are uppercase and each appears at most once. Whitespace between values can be spaces or tabs, and quantity does not matter.

Only LUT_3D_SIZE is truly required — everything else has a default. Omit DOMAIN_MIN and DOMAIN_MAX and readers assume 0 to 1, which is right for almost every creative LUT. A file may legally declare a domain outside that range, which is how some log-footage transforms accept values above 1.0, but support for it is inconsistent enough that most tools quietly clamp.

The one thing you cannot get wrong is the ordering. Entries run red fastest, then green, then blue — so the second line is the output for one step of red with green and blue at zero, not one step of blue. Reverse it and the file still loads, still has the right number of lines, and renders with the red and blue axes swapped. It is the single most common way a hand-written LUT converter fails.

  • ·LUT_3D_SIZE n — required; n between 2 and 65
  • ·TITLE "…" — optional, ignored by most renderers
  • ·DOMAIN_MIN / DOMAIN_MAX — optional, default 0 and 1
  • ·LUT_1D_SIZE — a different, one-dimensional format; not interchangeable
  • ·# — comment to end of line

What the size number means, and why 33

A 3D LUT does not store an answer for every colour — there are 16.7 million in 8-bit alone. It stores answers on a regular lattice and interpolates between them. LUT_3D_SIZE is how many steps that lattice has along each axis, so the entry count is the cube of it.

33 became the default because it is what Adobe's documentation used in its examples and what most export dialogs offer first. It is also a sensible compromise: fine enough that creative looks show no banding, small enough that the file stays around a megabyte. 17 turns up in hardware — LUT boxes, on-camera monitors, game engines — where memory is tight. 65 is for transforms with abrupt behaviour, such as log-to-Rec.709 conversions or hard hue keys, where the space between 33 points is enough to lose the shape.

Larger is not better in itself. Resampling a 33³ LUT up to 65³ produces a bigger file describing exactly the same transform, because the new points are computed from the old ones rather than recovered from anywhere.

  • ·17³ = 4,913 entries — roughly 120 KB
  • ·33³ = 35,937 entries — roughly 900 KB
  • ·65³ = 274,625 entries — roughly 7 MB

Resize a LUT between 17, 33 and 65 points

Where .cube files work

Practically everywhere color is graded: Adobe Premiere Pro and After Effects (Lumetri), DaVinci Resolve, Final Cut Pro, Photoshop (Color Lookup adjustment layer), Affinity Photo, OBS for live streams, and many camera monitors for on-set preview.

Notably absent: Lightroom, which uses its own profile and preset formats instead — one reason it's useful to have a look in both .xmp and .cube form.

.cube, .3dl and .look — the other formats

A LUT you download might not be a .cube. The three you are most likely to meet hold comparable data and differ in how they write it down.

.3dl is Autodesk's, from Lustre and still used across Flame. It stores integers rather than decimals, does not record which bit depth those integers are on, and — the detail that catches people out — orders its entries with blue varying fastest, the exact opposite of .cube. Converting between the two requires transposing, not copying.

.look is Adobe SpeedGrade's, and it is not a lookup table at all: it is an XML document describing grading operations, closer in spirit to a preset than to a LUT. It cannot be converted to .cube by re-reading numbers; it has to be evaluated.

There is no .cube variant worth worrying about beyond this. The format has stayed stable for over a decade, which is most of why it won.

Making one, and changing one

You can write a .cube by hand for anything simple, and people do — a two-point file that inverts an image is eight lines. For real looks, the practical routes are exporting from a grading application, or converting a preset you already have.

Modifying an existing LUT is where the plain-text format pays off. Reducing a LUT's strength, changing its grid size, or converting it to another format are all just arithmetic on the numbers, and none of them require the application that made it.

Make a .cube from a Lightroom presetInspect what a .cube actually does

Frequently asked questions

How do I open a .cube file?

To inspect it, any text editor works — it is plain text, and the header tells you the size immediately. To use it, load it into your editor's LUT slot: Lumetri's Creative tab in Premiere, a Color Lookup adjustment layer in Photoshop, or a LUT node in Resolve. To see what it does to a photograph before committing, drop it into the RawCut CUBE viewer.

What exactly is the .cube file format?

A plain-text description of a three-dimensional colour lookup table. A short header declares the grid size and input range, then one line per lattice point gives the output colour as three decimals between 0 and 1. Entries are ordered with red varying fastest, then green, then blue. There is no binary section, no compression and no metadata beyond the title.

Why does my .cube file have 35,937 lines?

Because it is a 33-point LUT: 33 × 33 × 33 = 35,937, one line per lattice point. A 17-point file has 4,913 and a 65-point file has 274,625. If the line count is not a perfect cube of the declared LUT_3D_SIZE, the file is truncated or corrupt and most readers will reject it.

Are .cube files safe to download?

Yes — they are pure text data with no executable content. The worst a bad LUT can do is make your footage look ugly.

Can I convert a Lightroom preset to a .cube LUT?

Not in Lightroom itself. RawCut's XMP to CUBE tool does it: it renders the preset's global colour transformation through the same engine that draws the preview and bakes the result into a standard .cube. What cannot come across is anything spatial — masks, vignettes and grain have no representation in a LUT.

Can I change a .cube file's size or strength?

Yes, and neither needs the software that produced it. Strength is a blend between each entry and the input colour it came from, so a 50% version is arithmetic on the existing numbers. Size is a resample of the lattice. RawCut has a tool for each.

Is a .cube file the same as a preset?

No. A LUT is a finished transformation — a table of answers with no record of how they were reached. A preset is a set of instructions that remain editable. That is why a preset can be opened and learned from, and a LUT can be applied in software that has no idea what a shadow slider is.

Drop an .xmp sidecar and get a Resolve- or Premiere-ready .cube back, at any grid size from 17³ to 65³. Runs on your own machine; nothing is uploaded.

Turn a Lightroom preset into a .cube

Keep learning

Try it yourself