LUT Identity Generator
LUT Identity Generator — the blank canvas you need before baking a .cube
- identity_lattice
- lut_size
LUT Identity Generator produces the neutral identity lattice that the rest of the Darkroom bake pipeline turns into a .cube file. On its own it looks like nothing - literally, a gray grid image - and that's exactly the point. It's the calibration chart for the LUT bake. You feed it through your grading chain alongside a real photo, and whatever the chain does to every possible color also happens to the photo. One pass, one set of settings, and you get both the graded image and a LUT out the other side.
If you've ever built a LUT by hand, you know the pain this removes: run the grade on a photo, then re-run it on a synthetic lattice with settings duplicated across two chains, and hope they don't drift. Inject/Extract (the nodes this one pairs with) fixed that - the lattice rides the same chain as your photo, so there's no drift to worry about.
How it works
The lattice is a cleverly arranged image: size pixels wide and size × size tall. Red varies across the columns, green across the rows within a blue block, blue across the blocks - R changing fastest, matching .cube file ordering exactly. Every pixel is one unique RGB combination, so size³ color samples total. When your color nodes process it, the grid encodes exactly how that node transforms every possible color, which is precisely what a 3D LUT is.
The inputs
Just one:
- lut_size (enum, 17 / 33 / 65, default 33) - 33 is the standard for DaVinci, Premiere, and Photoshop, and it's what you should use unless you have a reason not to. 17 is lighter and applies faster but gives coarser color interpolation; 65 is maximum precision at a bigger file size. Most grading pipelines can't even push enough to see the difference between 33 and 65.
The outputs are identity_lattice (IMAGE) - feed it into LUT Bake Inject's identity_lattice input - and lut_size (INT), which you can wire straight through Inject → Extract → LUT Export so the size can never drift out of sync. That wiring is the whole trick: let the number travel down the graph instead of typing it in three places.
Install & the gotcha
Standard Darkroom install - Manager, search "Darkroom", or clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom, pip install -r requirements.txt, restart. No GPU, no model files, no API keys; this pack is pure numpy/scipy math.
The one real trap: the lut_size you pick here must match what LUT Export is set to, or Export throws a dimension error. That's why it's worth the two extra wires to route the INT output through the pipeline rather than retyping it. Set 33 once and never think about it again.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| lut_size | COMBO | 33 | LUT resolution — 33 is standard for most tools (DaVinci, Premiere, Photoshop). 17 is lighter, 65 is maximum precision |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| identity_lattice | IMAGE | — |
| lut_size | INT | — |