LUT Apply (.cube)
Drop a DaVinci look into ComfyUI with one node
- image
- image
The film and video world runs on .cube 3D LUTs - those little lookup files that turn one color into another. Every serious editor ships looks as LUTs, and until this pack came along, ComfyUI had basically no clean way to apply one. LUT Apply loads any .cube file and applies it with trilinear interpolation, which is just a fancy way of saying it reads the LUT's lattice of color mappings and interpolates between them for every pixel. Instant access to the entire world of downloadable and DaVinci-exported looks.
How it works
You give it an image and a lut_file path, and it parses the .cube, builds a 3D lookup table, and remaps each pixel's RGB through it. A strength slider (0–1, default 1.0) blends between the original and the LUT-graded result - that's your "how much of this look do I actually want" control, and it's worth using because a lot of downloaded LUTs are calibrated for video footage and hit stills too hard at full strength.
The node caches parsed LUTs by file path and modification time, so re-running a workflow doesn't re-read the file from disk every time. If you overwrite the .cube with a new version, the cache key changes and it reloads automatically - nice touch.
The output is a single image that wires straight into the rest of your grade or out to Save Image.
Where the .cube files come from
- Export from this same pack. The LUT Bake workflow (LUT Identity Generator → LUT Bake Inject → your grade → LUT Bake Extract → LUT Export) produces standard .cube files that LUT Apply can load right back in. The pack ships a ready-made
workflows/lut_bake_and_apply.jsonexample. - Export from DaVinci Resolve, Premiere, or Capture One. Same format, works as-is.
- Downloaded creative LUTs from the thousands of free packs online. This is where the magic is - one node and you've got every colorist's look.
- Even the pack's own Spectral Film Stock presets are pre-baked .cube files under the hood.
The inputs you actually set
lut_file- the path to the .cube. It's a plain string field; paste or type the path. "Can come from LUT Export output or any external .cube file," per the author's own tooltip.strength- the blend. Default 1.0 is full LUT; 0.5 is a half-strength look.
That's it. Two inputs, one output, zero knobs to fight with.
Gotchas
- A LUT is a per-pixel color transform. It has no idea about neighboring pixels, so anything spatial - grain, halftone, sharpening, noise reduction - cannot live inside a LUT. That's the whole "color-only rule" in the Darkroom README: only per-pixel transforms get baked into .cube files. If you want grain on top of a LUT look, apply it after, as a separate node.
- Mind the path. The field wants a real filesystem path to the .cube. Point it at a file that doesn't exist and you'll get a file-not-found on execution.
- LUTs can clip. Some downloaded LUTs push values past 0–1 and hard-clip highlights. If your whites are blowing out, back the strength off rather than re-grading the whole image.
Installing it
It's part of the full ComfyUI-Darkroom suite:
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom.git
pip install -r ComfyUI-Darkroom/requirements.txt
Or search "Darkroom" in ComfyUI Manager. Needs scipy, opensimplex, rawpy, exifread, Pillow. Restart, and it's under AKURATE/Darkroom/Pipeline. No API keys, no model files, works on CPU. LUT Apply is color-only, which also makes it one of the few nodes you can legally chain inside a LUT bake - so you can bake a LUT-on-LUT look into a single .cube if you ever need to.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| lut_file | STRING | Path to a .cube LUT file. Can come from LUT Export output or any external .cube file | |
| strengthopt | FLOAT | 1.000–1 | Blend between original (0) and LUT-graded (1) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |