Hue/Saturation Advanced
Full-precision hue ranges in degrees
- image
- IMAGE
- MASK
This is the full Photoshop-parity version of the pack's Hue/Saturation tool. The simpler Hue/Saturation node makes you pick from six named colors and preset width/feather options; this one hands you exact start and end points on the 360° color wheel plus independent feathering on each edge. If you need to isolate, say, "everything between 20° and 50°" rather than "roughly around yellow," this is the node - more typing, more control.
How it works
You define a hue range with hue_low and hue_high in degrees, with hue_low_feather and hue_high_feather independently softening each edge of that range into the unselected area. Because the color wheel wraps around, hue_high can legitimately be a smaller number than hue_low - the README calls this out directly, since a range like "350° to 30°" (spanning across the red/magenta boundary) is a valid selection, not an error. Once the range is set, hue_offset, sat_offset, and lightness_offset apply the actual adjustment within it - same as the simpler node. And the same caution applies: the author's README warns Stable Diffusion output has "pretty brutal color compression," so this node is best used for subtle pushes rather than dramatic ones.
The inputs and outputs that matter
image- the image to adjust.hue_low(0–360, default 0) - start of the fully-selected hue range.hue_low_feather(0–180, default 0) - how many degrees the low edge takes to feather from selected to unselected.hue_high(0–360, default 360) - end of the fully-selected range. Can be lower numerically thanhue_lowsince the wheel wraps.hue_high_feather(0–180, default 0) - feather on the high edge.hue_offset(-180 to 180, default 0) - rotates the hue of selected pixels around the wheel.sat_offset(-100 to 100, default 0) - saturation push within the selection.lightness_offset(-100 to 100, default 0) - lightness push within the selection.
For reference, the color wheel positions per the README: red at 0°/360°, yellow at 60°, green at 120°, cyan at 180°, blue at 240°, magenta at 300°.
Two outputs: IMAGE, the adjusted result, and MASK, the hue-selection mask - check this to confirm the range you set is actually catching what you think it is.
How to install it
ComfyUI Manager: search Virtuoso Nodes for ComfyUI, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/chrisfreilich/virtuoso-nodes
pip install -r virtuoso-nodes/requirements.txt
Restart, find it under Virtuoso/Adjustment. No downloads needed.
Common issues & troubleshooting
Selection isn't catching a range that wraps around red (like "orange-red" through "pink-red"). Set hue_high lower than hue_low deliberately - that's how you express a wraparound range on this node, not a limitation to work around some other way.
Adjustment introduces banding or weird artifacts. Same root cause as the simpler node - AI-generated images have compressed color gradients, and this node lets you push harder and more precisely, which means it's also easier to overdo. Keep sat_offset and hue_offset modest and check the MASK output to make sure you're not selecting a wider range than intended.
You don't need this much precision. If you're fine picking from six named colors and a preset width/feather, the plain Hue/Saturation node does the same underlying job with a lot less typing.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| hue_low | FLOAT | 00–360 | — |
| hue_low_feather | FLOAT | 00–180 | — |
| hue_high | FLOAT | 3600–360 | — |
| hue_high_feather | FLOAT | 00–180 | — |
| hue_offset | FLOAT | 0.0-180–180 | — |
| sat_offset | FLOAT | 0.0-100–100 | — |
| lightness_offset | FLOAT | 0.0-100–100 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |