Nodes/MachinePainting Nodes/πŸ‘Ύ LUT Apply
ComfyUI Node

πŸ‘Ύ LUT Apply

Cinematic color grading from .cube files, five LUTs included

By machinepaintingΒ·Created 10 months agoΒ·Updated 4 months agoΒ· 9
πŸ‘Ύ LUT Apply
  • image
  • image
β—„lut_filenoneβ–Ί
β—„intensity1.00β–Ί

The fastest way to make a render look "shot on a cinema camera" is a LUT - a lookup table that remaps every color in the image according to a canned grade. LUT Apply brings .cube and .3dl LUT support to ComfyUI, ships five grading LUTs out of the box, and lets you drop in your own files from a folder. If you've ever graded a video in DaVinci or Resolve-adjacent tools, you know the workflow; this is that workflow inside a node.

What it does under the hood

A LUT is just a giant table: for every possible RGB input, a predefined RGB output. The node parses .cube (3D LUT, usually 33Β³ or 65Β³ samples) and .3dl files, then maps your image through the table (with interpolation for the values between samples). The result is deterministic - the same LUT at the same intensity gives the same grade every time, which is exactly why people reach for LUTs over diffusion-based grading: zero model, zero drift, zero surprise. The trade-off is that it's "just pixel math on an 8-bit-ish sRGB image," as colorists will remind you - great for consistent looks, not a substitute for true wide-gamut grading.

The inputs

  • image (required) - your render.
  • lut_file - the dropdown lists every .cube/.3dl file found in your LUT folder, including the five bundled ones: Cinematic_Teal_Orange, Warm_Tone, Cool_Tone, Vintage_Fade, High_Contrast, plus none (no-op).
  • intensity (0–1, default 1) - blends the graded result back with the original, so you can feather a heavy LUT down to 30% for a subtle push instead of a full slap.

Output is a single IMAGE. Chain it right before a Save/Preview and you've got a one-node grade.

The folder system

LUTs live in ComfyUI/input/luts/. On first use the node creates the folder and auto-copies the five bundled LUTs into it, then rescans on node load - so adding your own is just dropping a file in:

# after install, put your own LUTs here
ComfyUI/input/luts/My_Log_To_709.cube

Restart or re-open the node and it appears in the lut_file dropdown.

Install

MachinePainting Nodes pack:

cd ComfyUI/custom_nodes
git clone https://github.com/machinepainting/ComfyUI-MachinePaintingNodes.git
pip install -r requirements.txt

or ComfyUI Manager β†’ "MachinePaintingNodes" β†’ install β†’ restart.

Gotchas

The bundled LUTs are authored for a roughly display-referred image, so don't feed a raw, log-encoded render in expecting magic - LUTs are sensitive to what gamma/color space their source expects. If a LUT looks "way too much," that's intensity's job. And if your own .cube doesn't show up in the dropdown, it's almost always the file extension (must be lowercase .cube/.3dl) or that the node loaded before you dropped the file - touch the node's inputs to trigger a rescan. Finally, "none" in the dropdown means identity: a useful quick check that your grade stage is actually wired rather than silently off.

CategoryMachinePaintingNodes/Color

Inputs (3)

NameTypeDefaultDescription
imageIMAGEβ€”
lut_fileCOMBOnone6 options: Cinematic_Teal_Orange.cube, Cool_Tone.cube, High_Contrast.cube, Vintage_Fade.cube, Warm_Tone.cube, none
intensityoptFLOAT1.000–1β€”

Outputs (1)

NameTypeDescription
imageIMAGEβ€”