Nodes/CRT-Nodes/Colourfulness FX (CRT)
ComfyUI Node

Colourfulness FX (CRT)

Saturation that won't blow out your highlights

By PGCRT·Created 2 years ago·Updated 7 days ago· 129
Colourfulness FX (CRT)
  • image
  • IMAGE
colourfulness0.40
luma_limit0.70

There's a real difference between "saturation" and "colourfulness," even though they get used interchangeably. A plain saturation slider scales every pixel's color intensity uniformly, which means already-vivid areas get pushed hardest and can blow out into a flat, neon mess before the muted areas even look properly boosted. "Colourfulness" - the term comes from actual image-quality research, the Hasler-Süsstrunk metric specifically - is closer to what your eye perceives as vividness, and it's better behaved about not wrecking bright and dark regions in the process. This node is that: a smarter saturation boost with a built-in guard rail.

How it works

Two inputs do the real work. colourfulness is your main push - how much more vivid the image gets. luma_limit is the guard rail: it caps how strongly the effect applies to pixels above a certain brightness, which is what stops a colourfulness boost from turning your highlights into a blown-out mess the way a raw saturation slider would. Think of it as the same relationship Photoshop's Vibrance has to Saturation - Vibrance protects skin tones and already-saturated areas from over-processing, Saturation just scales everything indiscriminately.

Where this actually earns its place: a lot of diffusion output, Flux especially, comes out of the sampler looking a little flat or washed - the "plastic skin" complaint that's followed Flux since launch is partly a color problem as much as a texture one. A restrained colourfulness pass is a cheap, low-risk way to add some life back into that flatness without the harsh clipping a blunt saturation node gives you.

The inputs and output that matter

  • image - required, the image to grade.
  • colourfulness (-1 to 2, default 0.4) - the main dial. Negative values desaturate; 0.4 is a mild boost, values above 1 get aggressive fast.
  • luma_limit (0.1 to 1, default 0.7) - how far up the brightness range the effect is allowed to reach at full strength. Lower it if you're seeing blown-out highlights; raise it toward 1 if you want the effect to apply more uniformly regardless of brightness.

Output is a single IMAGE, ready to feed into another FX node (it pairs naturally with something like Technicolor 2 FX or Advanced Bloom FX in the same pack) or straight to a save node.

How to install it

Part of CRT-Nodes. Via ComfyUI Manager, search CRT-Nodes and install. Manually: git clone https://github.com/PGCRT/CRT-Nodes.git into custom_nodes, pip install -r requirements.txt, restart.

Common issues & troubleshooting

Highlights still blow out even with a moderate colourfulness value. Bring luma_limit down - that's the parameter actually protecting bright regions, and if it's set close to 1 it's not doing much limiting at all.

The effect looks too subtle to notice. colourfulness values under 0.5 are genuinely mild by design; push toward 1.0-1.5 if you want a visibly punchier result, and keep an eye on skin tones specifically since that's usually where over-processing shows up first.

Node doesn't appear after installing. As with the rest of the CRT-Nodes pack, that's almost always a shared dependency conflict in the pack's requirements.txt rather than anything specific to this filter - check your ComfyUI startup log for an import error on the CRT-Nodes package.

CategoryCRT/FX

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
colourfulnessFLOAT0.40-1–2
luma_limitFLOAT0.700.1–1

Outputs (1)

NameTypeDescription
IMAGEIMAGE