ComfyUI Node

Lut

Color grade with real LUTs — .cube, HALD, reshade, even 3D LUTs

By TrophiHunter·Created about a year ago·Updated about a year ago· 5
Lut
  • image
  • IMAGE
lut_filepath
chroma_amount1.000
luma_amount1.000
lut_strength1.000
use_torch_optimized_interpolationfalse
interpolationbilinear
gaussian_interpolation_radius1
stochastic_interpolation_samples8
stochastic_interpolation_use_gaussiantrue
sigma0.50
lut_orderRGB
gamma_correctionfalse
opacity100

LUTs are the fastest way to make an AI image look like it went through a real colorist, and for a long time ComfyUI's options for applying them were thin. This Lut node is the reason a lot of people install the Photography Nodes pack at all. It's a full LUT player: it eats .cube files (the industry standard), .1dlut, .3dl, and PNG-based LUTs - both HALD CLUTs and reshade-style texture LUTs - and applies them with proper 3D interpolation. Give it a color grade, and it lands film emulations or a "Teal & Orange" look on a whole batch with the same repeatability the rest of this pack is built around.

How it works

A LUT (lookup table) is just a remapping of color values: for every input RGB triple, the table says what output color to produce. The node reads your file, builds the 3D lookup grid, then samples it for every pixel. Where the pack's Lut node gets fancy is how it samples - interpolation is the knob:

  • nearest neighbor - fastest, can show banding
  • bilinear - the default, smooth and cheap
  • tricubic - proper 3D cubic interpolation, smoother in gradients at the cost of speed
  • gaussian - blurs the lookup space before sampling (gaussian_interpolation_radius, sigma)
  • stochastic - samples multiple times with jitter and averages; this one's a de-noising trick for heavy grades (stochastic_interpolation_samples)

use_torch_optimized_interpolation switches to a vectorized torch path - the author notes it only applies to nearest neighbor and bilinear, but it's the mode you want if you're grading a big batch and the CPU-ish interpolation is the bottleneck.

Inputs that matter

  • lut_filepath - path to the LUT. Quotes around it are fine; the node strips them. The pack even ships a few starter files under assets/luts/ (Cyberpunk_Neon, Teal_Orange, VHS_Grade .cube files plus HALD and reshade PNGs) if you want to test without sourcing your own
  • lut_strength - exponentially scales the LUT values; 1.0 is identity, this is your "how hard does the grade hit" dial
  • chroma_amount / luma_amount - independently scale the chroma vs luma contribution of the grade. Dropping chroma to 0 with a strong LUT gives you the same look with muted color
  • lut_order - RGB or BGR. A swapped order is the most common reason a LUT looks catastrophically wrong; try this before debugging anything else
  • gamma_correction - for .3dl files written against a different gamma space
  • opacity - Photoshop-style effect strength, 0–100

Output is a single IMAGE. In the author's example workflow this node sits right after the color-correction chain (Contrast → Levels → Saturation) and before the optical effects, which is the order that makes a grade read as "from the camera" rather than "pasted on top."

Install

Same story as the rest of the pack - one install, no extra deps:

cd ComfyUI/custom_nodes
git clone https://github.com/TrophiHunter/ComfyUI_Photography_Nodes

Restart and look under TrophiHunter/Photography. ComfyUI Manager finds it as "Photography Nodes" too. The pack has no requirements.txt; it's all torch/PIL/numpy, so nothing else to install.

Where people get burned

LUTs are a crowded field - there are lightweight .cube-only nodes out there, and they're fine if that's all you need. This one earns its keep on the format breadth and the chroma/luma split. The classic traps: a LUT meant for a different color space (that's the gamma_correction and lut_order escape hatch), and expecting a huge lut_strength to just "turn it up" - values outside 0.5–1.5 make grades clip into posterization. Start at 1.0, dial opacity down instead of inflating strength, and save a workflow with your LUT path embedded so batch runs don't ask you to re-pick it.

CategoryTrophiHunter/Photography

Inputs (14)

NameTypeDefaultDescription
imageIMAGE
lut_filepathSTRING
chroma_amountFLOAT1.0000–2
luma_amountFLOAT1.0000–2
lut_strengthFLOAT1.0000.5–1.5
use_torch_optimized_interpolationBOOLEANfalse
interpolationCOMBObilinear5 options: nearest neighbor, bilinear, tricubic, gaussian, stochastic
gaussian_interpolation_radiusINT11–20
stochastic_interpolation_samplesINT81–200
stochastic_interpolation_use_gaussianBOOLEANtrue
sigmaFLOAT0.500.01–10
lut_orderCOMBORGB2 options: RGB, BGR
gamma_correctionBOOLEANfalse
opacityINT1000–100

Outputs (1)

NameTypeDescription
IMAGEIMAGE