ComfyUI Node

Sat vs Sat

Sat vs Sat — tame oversaturated AI colors by adjusting saturation against itself

By jeremieLouvaert·Created 5 months ago·Updated 2 days ago· 101
Sat vs Sat
  • image
  • image
presetCustom (manual)
low_sat_adjust0
mid_low_sat_adjust0
mid_high_sat_adjust0
high_sat_adjust0
strength1.00

Sat vs Sat is the rare grading node that works on saturation levels themselves rather than hues or luminance. Instead of asking "which colors are orange?" it asks "how saturated is this pixel?" and adjusts accordingly. That makes it the single most direct fix for the classic AI-image complaint: things come out of the sampler oversaturated, with neon reds and clashing blues that scream "generated." The standard post-processing advice is to pull saturation down 5–10%, but a plain global desaturation also drains the muted, pleasant colors. Sat vs Sat lets you compress the oversaturated zone while leaving - or boosting - everything else.

It's the same family as Darkroom's Hue vs Sat and Lum vs Sat, and it's the one I'd reach for first on a default-heavy model output. Four zones, a handful of presets, zero guesswork about hue ranges.

How it works

Each pixel's saturation is measured, then soft Gaussian masks split the range into four zones - near-desaturated (0–25%), low (25–50%), medium (50–75%), and highly saturated (75–100%) - with centers at 12.5/37.5/62.5/87.5% and overlapping shoulders so adjustments blend instead of banding. You push or pull each zone independently; the presets are just sensible combinations of those four knobs. Everything runs in linear light with a strength blend, like the rest of the pack.

The inputs

  • preset (enum, default Custom) - seven choices: Compress oversaturated, Boost muted tones, Uniform saturation, Hyper saturated push, Gentle mute, and Protect saturated, boost muted. The last one is my usual starting point on AI images - it's basically "fix the neon, keep the candy where it's good."
  • low_sat_adjust / mid_low_sat_adjust / mid_high_sat_adjust / high_sat_adjust (±100, default 0) - the four zone sliders. Negative compresses a zone, positive boosts it. You rarely need more than ±50; the extreme ends are for stylized work.
  • strength (0–1, default 1) - global blend between original and adjusted.

Output is image. It's color-only, so it's allowed in the LUT bake chain - a compressed-highlight saturation move bakes into a .cube cleanly.

Install & notes

Pack install as always: Manager → search "Darkroom", or git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom + pip install -r requirements.txt + restart. No GPU, no models, pure numpy.

Where people get burned: cranking the presets to full and getting a drained, plasticky image. The presets are strong by design; run them at strength 0.5–0.7 and let the zone sliders fine-tune. And remember the zones overlap - if you push high_sat_adjust down hard and the midtones mysteriously drop too, that's the Gaussian shoulder, not a bug. Dial it in with the strength blend and you'll barely feel it.

CategoryAKURATE/Darkroom/Grading

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
presetCOMBOCustom (manual)Select a saturation-based saturation preset or use Custom
low_sat_adjustoptFLOAT0-100–100Adjust nearly-desaturated tones (0-25% saturation)
mid_low_sat_adjustoptFLOAT0-100–100Adjust low-saturation tones (25-50% saturation)
mid_high_sat_adjustoptFLOAT0-100–100Adjust medium-saturation tones (50-75% saturation)
high_sat_adjustoptFLOAT0-100–100Adjust highly-saturated tones (75-100% saturation)
strengthoptFLOAT1.000–1Blend between original (0) and adjusted (1)

Outputs (1)

NameTypeDescription
imageIMAGE