ComfyUI Node

LUT Blend

Stack up to three .cube LUTs without a grading app

By criskb·Created 7 months ago·Updated 5 months ago· 0
LUT Blend
  • image
  • mask
  • image
  • mask
  • lut_blend_info
lut_aNone
mix_a1.00
lut_bNone
mix_b0.00
lut_cNone
mix_c0.00
blend_mode
intensity1.00
mask_feather12.0
invert_maskfalse

LUTs are the fastest way to move an image toward a look - a .cube file is just a color transform table, and applying one is a lookup, not a model run. But if you've ever wanted to combine LUTs - 60% of this teal-and-orange plus 40% of that film emulation - you know the pain of chaining lookup nodes and hand-tuning opacity between them. LUT Blend is the MKRShift node that does it in one place: up to three .cube LUTs, each with its own mix weight, blended together with a real blend mode and a master intensity.

It's in MKRShift Nodes/Color/LUT, the pack's grading lane. The KB's post-processing doc makes the case for LUTs as the canonical deterministic color tool - a lookup table does in milliseconds what a re-roll does in minutes, with zero seed lottery. This node is that idea with a mixer on it.

How it works

The dropdowns (lut_a, lut_b, lut_c) list every .cube file the pack can find, each with its own mix_a/mix_b/mix_c weight (0–1). Each selected LUT is applied via trilinear lookup - the standard interpolation through the cube's grid - then the three results are combined with blend_mode: normal (weighted mix), screen/add (LUTs that lift and glow), or overlay/soft_light (LUTs that texture and grade). intensity (default 1.0) is the master strength on top of everything - think of it as one global opacity knob for the whole stack.

The gotcha that trips everyone up

The LUT dropdowns are empty until you provide LUTs. The pack ships with zero .cube files - the folder only has a README. So your first run will show only "None" as an option. Fix it by dropping your LUTs in either of two places:

  • ComfyUI/custom_nodes/MKRShift_Nodes/luts/ (the pack's own folder), or
  • ComfyUI/input/luts/ (the pack also scans the standard input directory).

After adding files, refresh ComfyUI's node list (the dropdown populates at load). Subfolders are fine - the node labels LUTs by their relative path.

That's also the honest workflow note: this node is only as good as your LUT library. If you have no .cube files, grab some free LUTs (film emulation packs, Kodak/Fuji print looks) and drop them in - then the mixers finally have something to blend.

Outputs and wiring

image is the graded result, mask reflects the effect, and lut_blend_info tells you which LUTs resolved and which warnings came up (it'll flag a LUT it couldn't find). The optional mask input scopes the blend to a region.

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

then restart, or search MKRShift_Nodes in ComfyUI Manager. No pip requirements, no model downloads.

One workflow tip: LUTs are designed to be the last step, applied to a properly-exposed image. If you run a LUT before correcting exposure, you're grading through a filter - the LUT's contrast range is fixed, so your later corrections fight it. Apply LUT blend after your curves and you'll get the look the LUT author intended.

CategoryMKRShift Nodes/Color/LUT

Inputs (12)

NameTypeDefaultDescription
imageIMAGE
lut_aCOMBONone1 options: None
mix_aFLOAT1.000–1
lut_bCOMBONone1 options: None
mix_bFLOAT0.000–1
lut_cCOMBONone1 options: None
mix_cFLOAT0.000–1
blend_modeCOMBO5 options: normal, screen, overlay, soft_light, add
intensityFLOAT1.000–1
mask_featherFLOAT12.00–256
invert_maskBOOLEANfalse
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
lut_blend_infoSTRING