PostFx LUT
Drop a .cube in the folder and get a colourist's grade
- look
- look
A LUT is the one piece of professional colour grading that's genuinely portable: a small file that maps every colour in an image to another colour, made in Resolve or DaVinci or downloaded from a filmmaker's pack. ComfyUI's coverage of them is patchy - the film-emulation packs that show up in threads tend to bolt LUT support alongside log conversion and scopes - so a plain "point this at a .cube" node is a welcome thing to have.
What it is
Two required widgets and two optional inputs:
lut- a dropdown of.cubefiles found in the pack's ownluts/folder. Default isnone.intensity-0to1, blending the LUT with its input, so0is off and1is the full transform.lut_path(optional, STRING) - an absolute path to a.cube, which overrides the dropdown. This is how you keep a LUT library outside the node pack's folder.look(optional,POSTFX_LOOK) - a base look to layer the LUT on top of.
Output is a look on the POSTFX_LOOK socket, which lands on PostFx Apply.
Where the files go
The dropdown lists what's in:
ComfyUI/custom_nodes/ComfyUI-BCNodes/luts/
Drop your .cube files in there - the folder is gitignored precisely so your files don't get tangled in updates to the pack - then reload the browser tab so the node's option list is rebuilt. Or skip the folder entirely and put an absolute path in lut_path, which is the cleaner option if you already have a LUT library somewhere sensible.
How it behaves in a chain
Standalone, it's a full look on its own: LUT at intensity 1, straight to Apply. Two things change when you connect look:
- The LUT layers on top of the incoming look, so a theme's grade runs first and your LUT grades the result.
- The LUT applies mid-pipeline, which is the detail that keeps it from ruining everything else: grain, vignette and sharpen finish afterwards. Apply the same LUT at the very end of the chain instead and you'd be grading the grain, which looks exactly as bad as it sounds.
PostFx Theme (portra_400) -> PostFx LUT (kodak_2383.cube) -> PostFx Apply
Using it well
LUTs are not presets, and the difference matters. A LUT is a fixed mathematical transform built for a specific input - many film-emulation LUTs are designed to be applied to log footage from a specific camera, and applying them to an already-graded sRGB image still produces an effect, just not the one the colourist intended. Sometimes that's a happy accident. If a LUT looks like it's crushing everything to mud, that's usually why.
In practice: set intensity to somewhere between 0.5 and 0.8 the first time you try one, use a Signature Sheet or a before/after comparer to judge it, and only go to full strength when you've decided you like it. Full-strength LUTs on an image that's already punchy will clip.
And keep the ask honest. A LUT is a colour transform, not a look machine - it cannot add halation, grain or lens character. That's what the theme, the condition and the Custom Look node are for.
Installing it
The PostFx nodes need the postfx package:
cd ComfyUI/custom_nodes
git clone https://github.com/0xBeycan/ComfyUI-BCNodes
pip install -r ComfyUI-BCNodes/requirements.txt
With Manager, search ComfyUI-BCNodes; without postfx the pack still loads and only the PostFx nodes go missing. Restart, reload the tab, and find them under BCNodes/postfx.
Where people get burned
The dropdown says none and that's not a bug. The pack ships an empty luts/ folder, so until you add a file there is nothing to list. If you dropped files in and the dropdown is still empty, reload the page - the option list is built when the node definition loads.
.cube only. Not .3dl, not a hald-CLUT PNG, not a .cube 1D shaper file. If your LUT is in another format you'll need to convert it first.
Layering order is a decision, not a detail. LUT after theme is the sane default; LUT before theme means the theme's grade runs over the LUT's, which is a different (and usually muddier) image.
intensity at 0 is a silent no-op. Easy to leave behind after an experiment, and it doesn't look broken - the image just comes through as though the node weren't there.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| lut | COMBO | none | A .cube file from the pack's luts/ folder. |
| intensity | FLOAT | 1.000–1 | Blend the LUT with its input (0 = off). |
| lut_pathopt | STRING | Absolute path to a .cube (overrides the dropdown). | |
| lookopt | POSTFX_LOOK | Base look to layer the LUT on top of. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| look | POSTFX_LOOK | — |