πΎ LUT Apply
Cinematic color grading from .cube files, five LUTs included
- image
- image
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/.3dlfile found in your LUT folder, including the five bundled ones:Cinematic_Teal_Orange,Warm_Tone,Cool_Tone,Vintage_Fade,High_Contrast, plusnone(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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| lut_file | COMBO | none | 6 options: Cinematic_Teal_Orange.cube, Cool_Tone.cube, High_Contrast.cube, Vintage_Fade.cube, Warm_Tone.cube, none |
| intensityopt | FLOAT | 1.000β1 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |