ComfyUI Node

PostFx LUT

Drop a .cube in the folder and get a colourist's grade

By 0xBeycan·Created 23 days ago·Updated 4 days ago· 2
PostFx LUT
  • look
  • look
◄lutnone►
◄intensity1.00►
◄lut_path►

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 .cube files found in the pack's own luts/ folder. Default is none.
  • intensity - 0 to 1, blending the LUT with its input, so 0 is off and 1 is 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.

CategoryBCNodes/postfx

Inputs (4)

NameTypeDefaultDescription
lutCOMBOnoneA .cube file from the pack's luts/ folder.
intensityFLOAT1.000–1Blend the LUT with its input (0 = off).
lut_pathoptSTRINGAbsolute path to a .cube (overrides the dropdown).
lookoptPOSTFX_LOOKBase look to layer the LUT on top of.

Outputs (1)

NameTypeDescription
lookPOSTFX_LOOK—