๐ Vibrance & Saturation
Make colors pop without wrecking skin
- image
- IMAGE
There's a real difference between these two words, and it's the difference between a good color grade and a ruinous one. Saturation multiplies every pixel's color intensity equally - crank it and everything glows, including skin, which goes orange and plastic in seconds. Vibrance is selective: it boosts the dull colors more and leaves the already-vivid ones alone. This node gives you both, with a skin-tone guard that's on by default. It's the color-adjustment node you actually want at the end of a workflow.
It's from orion4d's Image Effects pack, in the Core Effects category alongside Levels, Curves, Color Balance, and Shadow/Highlight. Those nodes handle exposure and temperature; Vibrance is the "make it pretty" step that comes after. The photorealism literature keeps saying AI images come out oversaturated and need the saturation pulled 5โ10% - this node is equally happy doing that as it is pushing colors up.
How it works
It converts the image to HSV (hue, saturation, value), and then the two controls take different paths through that channel:
- vibrance (โ100 to 100) - computes a mask from
1 โ current_saturation, so undersaturated pixels get the biggest boost. This is the "smart" boost - it lifts a muted sky without turning a red dress radioactive. - saturation (โ100 to 100) - multiplies the saturation channel globally, like the classic filter. Negative values desaturate toward black-and-white.
- protect_skin_tones (default on) - detects skin-colored hues (roughly 0โ30ยฐ and 330โ360ยฐ in hue space) and halves the effect on them. Leave it on. It's the difference between "healthy glow" and "wax museum."
- strength (default 1.0, 0โ2) - a master multiplier applied to both adjustments, for when you've found a value you like but need to scale it down for a batch.
Output is a single IMAGE, so it slots anywhere in a chain - the README's own suggested order is Levels for exposure, Color Balance for temperature, then Vibrance for intensity.
Using it like a human
For a portrait, try vibrance +15 with saturation left alone - you get the punch without the orange skin. For that desaturated film look, take saturation to โ15 or โ25 instead of relying on brightness sliders; it reads much more "photographic." And since this is a subtle node, the pack-wide habits still apply: CPU-only, first-frame-only on batches. It's vectorized numpy, though, so it's effectively instant - no per-pixel lag like the deformation nodes.
Install
ComfyUI Manager: search ComfyUI-Image-Effects. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/ComfyUI-Image-Effects.git
cd ComfyUI-Image-Effects
pip install -r requirements.txt
Restart, then right-click โ Add Node โ Image Effects โ Vibrance & Saturation. No model downloads; it's plain numpy/OpenCV math. If you install dependencies by hand and skip the optional extras in requirements.txt, numpy opencv-python plus whatever ComfyUI already ships is plenty for this one.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | โ | |
| vibrance | FLOAT | 0-100โ100 | โ |
| saturation | FLOAT | 0-100โ100 | โ |
| protect_skin_tonesopt | BOOLEAN | true | โ |
| strengthopt | FLOAT | 1.000โ2 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |