Nodes/ComfyUI-Curve/🎨 PS HSL
ComfyUI Node

🎨 PS HSL

Twenty-four color sliders that are actually manageable

By aiaiaikkk·Created about a year ago·Updated 10 months ago· 181
🎨 PS HSL
  • image
  • mask
  • IMAGE
red_hue0
red_saturation0
red_lightness0
orange_hue0
orange_saturation0
orange_lightness0
yellow_hue0
yellow_saturation0
yellow_lightness0
green_hue0
green_saturation0
green_lightness0
cyan_hue0
cyan_saturation0
cyan_lightness0
blue_hue0
blue_saturation0
blue_lightness0
purple_hue0
purple_saturation0
purple_lightness0
magenta_hue0
magenta_saturation0
magenta_lightness0
hue0
saturation0
lightness0
colorizefalse
mask_blur0.0
invert_maskfalse

HSL adjustment is the fine brush of color grading: instead of moving whole-image saturation, you reach into one color family and adjust only it. This node gives you Photoshop/Camera Raw-style selective HSL across eight color bands - Red, Orange, Yellow, Green, Cyan, Blue, Purple, Magenta - each with its own Hue, Saturation, and Lightness slider. That's 24 sliders before you even touch the global controls. It sounds like a wall of knobs, and it is, until you remember you'll realistically touch two or three.

Reach for it for the classic moves that no global slider can do cleanly. Skin tone work: nudge Red and Orange saturation down a touch and skin goes from flushed to natural without desaturating the whole image. Sky work: pull Blue and Cyan lightness down to deepen a washed-out sky. Foliage: Green and Yellow hue shifts to push leaves from yellow-green toward a richer green. A sunset grade is basically Orange and Magenta. These are the micro-adjustments that separate "bright image" from "considered image."

How it works

The node separates the image into color families and adjusts each independently - the same banded HSL model Photoshop's selective adjustments use, implemented with OpenCV color math. Values run -100 to +100 per slider. There are also three global controls (hue, saturation, lightness) that move everything at once, and a colorize toggle that's worth a detour: flip it on and the sliders behave like a tint/duotone tool, letting you push the whole image toward a single hue - handy for quick moody looks or sepia-ish treatments.

The double-click popup editor is the reason the slider wall works. Open it, pick a color band, drag the sliders, and the preview updates live - "slide, watch skin tone, slide back." When it looks right, hit Apply and the values sync back to the node's inputs. You never guess blind.

The inputs that matter

The full set is red_hue/red_saturation/red_lightness through magenta_* for all eight bands, plus:

  • hue, saturation, lightness - global adjustments, -100 to +100. Reach for these last; the banded controls are the point.
  • colorize - the tint/duotone toggle.

There's an optional mask / mask_blur (0-20) / invert_mask set so you can restrict the HSL work to part of the frame. One output, an IMAGE - note the pack doesn't give it a friendly return name, so it just shows up as "IMAGE" on the wire. Don't let that throw you; it's the processed image, wire it to Preview or Save.

Installing it

Standard ComfyUI-Curve install. ComfyUI Manager → search "ComfyUI-Curve", or:

cd ComfyUI/custom_nodes
git clone https://github.com/aiaiaikkk/ComfyUI-Curve.git

Restart ComfyUI. No models to fetch.

Where people get burned

Two traps. First, the per-band ranges are fixed and the bands don't overlap much - a "Red" adjustment catches reds but won't smoothly feather into orange, so edits can feel stepwise; that's the model, not a bug. Second, huge HSL swings push colors to band edges and can produce banding in smooth gradients (skies, bokeh), especially on 8-bit renders - if you see color stepping, dial the sliders back or grade at higher precision before saving. And remember the popup's Apply button; closing it without applying discards the session.

CategoryImage/Adjustments

Inputs (32)

NameTypeDefaultDescription
imageIMAGE
red_hueFLOAT0-100–100红色 - 色相调整 (-100 ~ +100)
red_saturationFLOAT0-100–100红色 - 饱和度调整 (-100 ~ +100)
red_lightnessFLOAT0-100–100红色 - 明度调整 (-100 ~ +100)
orange_hueFLOAT0-100–100橙色 - 色相调整 (-100 ~ +100)
orange_saturationFLOAT0-100–100橙色 - 饱和度调整 (-100 ~ +100)
orange_lightnessFLOAT0-100–100橙色 - 明度调整 (-100 ~ +100)
yellow_hueFLOAT0-100–100黄色 - 色相调整 (-100 ~ +100)
yellow_saturationFLOAT0-100–100黄色 - 饱和度调整 (-100 ~ +100)
yellow_lightnessFLOAT0-100–100黄色 - 明度调整 (-100 ~ +100)
green_hueFLOAT0-100–100绿色 - 色相调整 (-100 ~ +100)
green_saturationFLOAT0-100–100绿色 - 饱和度调整 (-100 ~ +100)
green_lightnessFLOAT0-100–100绿色 - 明度调整 (-100 ~ +100)
cyan_hueFLOAT0-100–100浅绿 - 色相调整 (-100 ~ +100)
cyan_saturationFLOAT0-100–100浅绿 - 饱和度调整 (-100 ~ +100)
cyan_lightnessFLOAT0-100–100浅绿 - 明度调整 (-100 ~ +100)
blue_hueFLOAT0-100–100蓝色 - 色相调整 (-100 ~ +100)
blue_saturationFLOAT0-100–100蓝色 - 饱和度调整 (-100 ~ +100)
blue_lightnessFLOAT0-100–100蓝色 - 明度调整 (-100 ~ +100)
purple_hueFLOAT0-100–100紫色 - 色相调整 (-100 ~ +100)
purple_saturationFLOAT0-100–100紫色 - 饱和度调整 (-100 ~ +100)
purple_lightnessFLOAT0-100–100紫色 - 明度调整 (-100 ~ +100)
magenta_hueFLOAT0-100–100品红 - 色相调整 (-100 ~ +100)
magenta_saturationFLOAT0-100–100品红 - 饱和度调整 (-100 ~ +100)
magenta_lightnessFLOAT0-100–100品红 - 明度调整 (-100 ~ +100)
hueFLOAT0-100–100全局色相调整 (-100 ~ +100)
saturationFLOAT0-100–100全局饱和度调整 (-100 ~ +100)
lightnessFLOAT0-100–100全局明度调整 (-100 ~ +100)
colorizeBOOLEANfalse启用彩色化模式
maskoptMASK可选遮罩,调整仅对遮罩区域有效
mask_bluroptFLOAT0.00–20遮罩边缘羽化程度
invert_maskoptBOOLEANfalse反转遮罩区域

Outputs (1)

NameTypeDescription
IMAGEIMAGE