LUT Blender
Dial a look back, or stack two grades into one table
- lut_a
- lut_b
- lut
So you found a LUT. It's gorgeous, and it's too much - it takes your image and turns it into the LUT's reference shot, skin tones and all. The obvious fix is to blend the graded result back over the original at 60%, and that works. The better fix is to blend the tables and hand the resulting LUT to Apply LUT, so the whole grade happens in one lookup and every frame of a sequence gets the identical treatment.
LUT Blender mixes two tables into one. lut_a is the base - at strength 0.0 that's what comes out unchanged - and lut_b is what you're mixing in.
The modes, and why there are so many
This is the part that looks like overkill and mostly isn't. Blending two colours is a solved problem except for the fact that the way you blend changes what the midpoint looks like.
linear is a straight average and the place to start. cosine and smoothstep ease that mix, so the ends hold longer. slerp turns hue the short way around the colour wheel instead of through grey, which is the difference between a believable halfway grade and a muddy one. lab and oklab mix in a perceptual space so a midway grade still looks like a grade rather than a wash. hsv pulls hue, saturation and brightness apart and mixes them separately. auto picks slerp where the two colours differ a lot and linear where they agree, which is a nice bit of laziness to lean on when you don't want to think about it.
Then three that aren't mixes at all: multiply darkens, screen brightens, and overlay does both depending on what it's sitting on - layer-style combinations rather than a blend, and worth reaching for when what you actually want is "this corrective table and this creative one, both applied".
strength runs 0 to 1 and is how far the mix travels from lut_a to lut_b: 0.5 is an even mix, 1.0 reaches lut_b. Except in multiply, screen and overlay, where the two tables combine rather than one replacing the other, and 1.0 doesn't mean "ignore the base".
output_size is the edge length of the resulting cube in samples, 17 to 65, default 33. Both inputs are resampled to it before mixing, so a 17-point table and a 65-point one combine without complaint - that resampling is the quiet reason this node doesn't throw errors at you. 33 is the industry standard; raise it toward 65 only when you can see banding across a steep grade, because you're trading file size and precision for smoothness.
One output, lut, which goes to Apply LUT to grade with, or to Save LUT (.cube) to keep.
What it's for
Dialling a strong look back toward neutral without losing its character - mix a heavy film LUT with a flat one, or with Custom from Load LUT, until it's usable. Cross-fading two grades when you can't decide. Stacking a corrective table under a creative one: fix the white balance or the exposure lift first, then pour the look on top, which is the order a colourist would do it in and the order this node's multiply/overlay modes are built for.
The one thing it won't do is tell you how much headroom a mixed table has. Blend two LUTs that both clip highlights and you get a table that clips highlights; the node is doing arithmetic on lookup tables, not protecting your image. Watch the waveform if you care.
Installing it
It ships in WAS Node Suite v3 - MIT, by WASasquatch, 468 nodes - so you install the pack, not the node:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
ComfyUI Manager's WAS Node Suite v3 entry is the recommended route. Needs ComfyUI 0.14.0+ and Python 3.10+; the pack installs no Python packages and fetches no files, and the LUT work runs on torch like the rest of the colour nodes. config.yaml and the pack's folders (including its luts directory) are written under <ComfyUI user dir>/was-node-suite/ on first start, so that first launch is a beat slower. The LUT nodes are in the extras feature group - enabled by default, but that's the setting to check if LUT Blender isn't in your Add Node menu.
You'll want the neighbours too: Load LUT to make a table from a .cube file, a built-in look or its own Custom grade controls, Apply LUT to use the result, and Save LUT (.cube) to write a blend you're happy with back out to disk, where it'll load in anything else that reads cube files.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| lut_a | LUT | The base table. At a strength of 0.0 this is what comes out unchanged. | |
| lut_b | LUT | The table mixed in. At a strength of 1.0 this is what comes out, except in the multiply, screen and overlay modes, which combine the two rather than replace one with the other. | |
| mode | COMBO | How the two tables are mixed. 'linear' is a straight average and the place to start; other modes ease it, mix perceptually, or combine the tables like layers. | |
| strength | FLOAT | 0.500–1 | How far the mix travels from lut_a to lut_b. 0.0 keeps lut_a, 0.5 is an even mix, 1.0 reaches lut_b. |
| output_size | INT | 3317–65 | Edge length of the resulting cube, in samples. Both inputs are resampled to it before mixing. 33 is the industry-standard size; raise it towards 65 only when banding shows on a steep grade. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| lut | LUT | The mixed table, for Apply LUT or Save LUT. |