Lum vs Sat
Desaturate the highlights like film does, or punch the midtones
- image
- image
Film's saturation isn't uniform across brightness - shadows and highlights lose color before midtones do. That's why a film-still looks "graded" and a straight digital frame looks flat: the digital one is saturated everywhere at once. Lum vs Sat is the control that fixes exactly this, letting you raise or lower saturation per luminance zone. Desaturate the highlights for the film look, punch the midtones for pop, and leave the rest alone.
It's one of the grading nodes in ComfyUI-Darkroom, and it's the unsung partner to Hue vs Sat. Hue vs Sat decides which colors are saturated; this decides which brightness. Together they're how you build the "film look" without a film stock.
How it works
The luminance range is split into five zones - blacks (0–10%), shadows (10–30%), midtones (30–70%), highlights (70–90%), whites (90–100%) - and each zone gets its own saturation adjustment. Because the zones blend at their boundaries, you don't get visible seams. The presets encode the useful shapes: "Film look - desat highlights" is the classic one (highlights lose saturation, mids keep it), "Punch midtones" does what it says, "Bleach bypass - heavy desat" is the extreme, and "Rich shadows" gives shadows some color depth back.
The inputs that matter
- preset - 8 choices. "Film look - desat highlights" is the one to start with.
- blacks_saturation / shadows_saturation / midtones_saturation / highlights_saturation / whites_saturation - the five zone sliders, −100 to +100.
- strength - the global blend over all five zones.
Output is image - same size in, same size out.
Install and gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom
pip install -r ComfyUI-Darkroom/requirements.txt
Or search "Darkroom" in ComfyUI Manager and restart. It's under AKURATE/Darkroom/Grading.
The gotcha is the same one that bites every luminance tool: "highlights" here means image luminance, not "bright regions of the subject." A white sky counts as highlight; a bright yellow shirt sitting in midtones does not. So the "desat highlights" preset will drain a sky - which is usually what you want - but it won't touch a neon shirt, and that's correct behavior, not a bug.
Stacking tip: run Hue vs Sat after this for a full "film" saturation pipeline, or use it inside a LUT bake chain (it's a per-pixel transform, so it's allowed). The .cube you export keeps your highlight/midtone saturation character in any NLE. Start with strength ~0.6 on the film-look preset - the full 1.0 can leave an image looking a little anemic before you add grain back.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| preset | COMBO | Custom (manual) | Select a luminance-based saturation preset or use Custom |
| blacks_saturationopt | FLOAT | 0-100–100 | Saturation of darkest tones (0-10%) |
| shadows_saturationopt | FLOAT | 0-100–100 | Saturation of shadows (10-30%) |
| midtones_saturationopt | FLOAT | 0-100–100 | Saturation of midtones (30-70%) |
| highlights_saturationopt | FLOAT | 0-100–100 | Saturation of highlights (70-90%) |
| whites_saturationopt | FLOAT | 0-100–100 | Saturation of brightest tones (90-100%) |
| strengthopt | FLOAT | 1.000–1 | Blend between original (0) and adjusted (1) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |