Hue Saturation Light Levels
Krita's color-correction trio, as one ComfyUI node
- image
- mask
- IMAGE
Hue, saturation, and light levels - the three dials of every photo editor - bundled into one ComfyUI node with a choice of what "light" even means. If your generation came out with a green cast, or oversaturated, or just a touch too bright, this is the single node that fixes all three without you hunting for three separate color nodes. It's the second half of this pack's Krita-inspired post-processing pair, alongside BurnImage.
Why you'd reach for it
Color grading after generation is half the battle of making a raw render look finished. This node's three inputs map to three honest operations: hue rotates the hue (a ±180° shift - push it +30 and every color rotates), saturation multiplies color intensity (0 = unchanged, positive = richer, negative = desaturated), and light brightens or darkens. The light_type dropdown is the interesting part: it decides what "light" operates on, and the three options are real, meaningful choices.
How it works
The implementation converts to HSV and adjusts. The light_type variants differ in how they define lightness:
- value - uses the HSV
Vchannel (max of RGB). Simple, fast, and what most people expect. - intensity - uses the mean of RGB, scaling the whole image by that ratio. A different feel on colors.
- luma - uses the Rec.601 luma weighting (0.299 R + 0.587 G + 0.114 B), the closest to how brightness is actually perceived.
All three apply a multiplicative gain derived from your light value, then clamp to valid range. Hue and saturation are applied the same way regardless of light type. The optional mask restricts everything to a region, which is where this node earns its keep - color-grade just the sky, or just the character's hair, in one pass.
The inputs that matter
- image (IMAGE) - the input.
- hue (INT, -180 to 180, default 0) - hue rotation in degrees.
- saturation (INT, -100 to 100, default 0) - saturation gain. Negative desaturates.
- light (INT, -100 to 100, default 0) - lightness gain.
- light_type (enum:
value,intensity,luma) - what "light" means. Default isvalue; trylumafor perceptually correct brightness tweaks. - mask (MASK, optional) - limit the adjustment region.
- IMAGE - the color-corrected result.
Installing it
Same pack, same kornia caveat as BurnImage. The pack has no requirements.txt, so kornia needs installing for the image modules to load:
cd ComfyUI/custom_nodes
git clone https://github.com/LaVie024/comfyui-lopi999-nodes
pip install kornia
Then restart ComfyUI. ComfyUI Manager also finds it as "comfyui-lopi999-nodes."
Common issues
The light_type confusion is the classic gotcha - changing light values and seeing "wrong" brightness is usually a matter of which definition you picked; luma is the one that matches how the eye reads brightness. Also, saturation and light are multiplicative gains, so extreme values clip (the node clamps to 0-1 rather than rolling over). And remember the mask semantics mirror BurnImage: masked areas get adjusted, unmasked stay original. If the node won't appear at all, check kornia first.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| hue | INT | 0-180–180 | — |
| saturation | INT | 0-100–100 | — |
| light | INT | 0-100–100 | — |
| light_type | COMBO | 3 options: value, intensity, luma | |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |