Nodes/radiance/LUT Blend
ComfyUI Node

LUT Blend

Radiance LUT Blend — stop choosing between looks, blend two of them

By FXTD-Studios·Created 9 months ago·Updated 2 days ago· 249
LUT Blend
  • image
  • image
◄lut_a▾►
◄lut_b▾►
◄blend_factor0.50►
◄blend_modeLinear►
◄strength1.00►
◄clamp_outputfalse►
◄log_spacefalse►
◄log_encodingARRI LogC3►
◄interpolationTrilinear►
◄working_spaceLinear Rec.709 (sRGB)►

Once you have a couple of LUTs you like, the problem stops being "which one" and starts being "how do I get 40% of this film emulation and 60% of that teal-and-orange grade without Photoshop." That's Radiance LUT Blend. It takes two .cube LUTs, applies both, and blends their results - in four different ways - with a single blend_factor slider. It's the node you reach for when a look is almost right but needs a nudge from a second look.

The mechanism is the same engine as the pack's ◎ Radiance LUT Apply - same trilinear/tetrahedral interpolation, same log handling - but instead of one transform it resolves two and mixes the outputs. The blend is where the interesting choices live.

How it works

blend_factor runs 0.0 to 1.0: 0.0 is LUT A only, 1.0 is LUT B only, 0.5 is a perfect half. Then blend_mode decides what "half" means:

  • Linear - mix the two output pixel values directly. Simple, predictable, the default.
  • Luminosity - keep A's luminance structure but take B's color. This is the "B's grade, A's exposure" mode, and it's the one that keeps a moody LUT from brightening your frame.
  • Saturation - combine the saturation contributions while keeping the rest. Good for taking a look's punch without its cast.
  • Hue - keep A's hues and B's everything-else-ish. The mode you reach for when one LUT's colors are what you want but its contrast is wrong.

The optional strength then applies on top as a final master: at 1.0 the blended result comes through at full strength, at 0.5 it's half-applied to the original image. So you get two independent faders - the A/B mix and the overall amount - which is exactly the two-knob setup you want when dialing a look.

The inputs that matter

  • image, lut_a, lut_b - the inputs and the two LUTs, picked from the dropdown (same models/luts folder as LUT Apply).
  • blend_factor - the A/B mix. Start at 0.5 and move.
  • blend_mode - Linear / Luminosity / Saturation / Hue. The tooltip's framing is the right mental model: 0.0 = A only, 1.0 = B only.
  • strength - master amount of the blend.
  • log_space, log_encoding, interpolation, clamp_output - shared with LUT Apply. Log handling for log-space LUTs, trilinear/tetrahedral for accuracy, clamp off for HDR.

Output: the blended image.

Why you'd bother

Because a single LUT is a statement, and most finished grades are a negotiation between looks. The common workflow: a film emulation as the base (LUT A), a creative grade you made or downloaded (LUT B), blended at 0.2–0.4 so the creative look reads as a flavor instead of a costume. The Luminosity mode is the quiet MVP here - "B's colors at A's brightness" solves the classic problem where your favorite look makes everything two stops darker.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt   # or requirements_windows.txt / requirements_linux.txt / requirements_mac_silicon.txt

Or search Radiance in ComfyUI Manager, restart. Linux needs libopenexr-dev first.

Gotchas

Same family as LUT Apply: LUTs come from models/luts, so if the dropdowns say "No LUTs found" you haven't put files there yet. Log-space LUTs need log_space on or they'll look broken. And one blend-specific trap - blend_mode is not "which LUT is stronger," it's how they mix, so don't go looking for a volume knob in it. The volume knob is strength and the mix knob is blend_factor; the mode is the character. Learn that separation and you'll dial a look in half the time.

CategoryFXTD STUDIOS/Radiance/Color

Inputs (11)

NameTypeDefaultDescription
imageIMAGEImage to transform through both LUTs. Values outside each LUT's domain are clamped to its edge before lookup.
lut_aCOMBOFirst .cube LUT from models/luts. It is the base look: the non-Linear modes keep its luminance or chroma.
lut_bCOMBOSecond .cube LUT from models/luts, blended towards by blend_factor.
blend_factorFLOAT0.500–10.0 = LUT A only, 1.0 = LUT B only
blend_modeCOMBOLinearLinear: mix the two results. Luminosity: A's colour with mixed luminance. Saturation: mixed chroma at A's luminance. Hue: mixed chroma direction with A's chroma amount and luminance.
strengthoptFLOAT1.000–1Mix between the original image (0) and the blended LUT result (1).
clamp_outputoptBOOLEANfalseClamp to 0-1. Disable for HDR.
log_spaceoptBOOLEANfalseOn: the image is scene-linear (in working_space) and is encoded into log_encoding, the input both LUTs were built for, before the lookups. Off: the pixels go into the LUTs unchanged.
log_encodingoptCOMBOARRI LogC3The encoding both LUTs expect as input (camera log, ACEScct, sRGB, PQ...). Used when log_space is on.
interpolationoptCOMBOTrilinearLUT interpolation used for both lookups. Tetrahedral is more accurate but slightly slower.
working_spaceoptCOMBOLinear Rec.709 (sRGB)The linear space the image is in, used when log_space is on to reach the LUTs' input primaries.

Outputs (1)

NameTypeDescription
imageIMAGE—