Colourfulness FX (CRT)
Saturation that won't blow out your highlights
- image
- IMAGE
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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| colourfulness | FLOAT | 0.40-1–2 | — |
| luma_limit | FLOAT | 0.700.1–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |