Nodes/Virtuoso Nodes for ComfyUI/Hue/Saturation Advanced
ComfyUI Node

Hue/Saturation Advanced

Full-precision hue ranges in degrees

By chrisfreilich·Created 2 years ago·Updated about a year ago· 93
Hue/Saturation Advanced
  • image
  • IMAGE
  • MASK
hue_low0
hue_low_feather0
hue_high360
hue_high_feather0
hue_offset0.0
sat_offset0.0
lightness_offset0.0

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 than hue_low since 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.

CategoryVirtuoso/Adjustment

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
hue_lowFLOAT00–360
hue_low_featherFLOAT00–180
hue_highFLOAT3600–360
hue_high_featherFLOAT00–180
hue_offsetFLOAT0.0-180–180
sat_offsetFLOAT0.0-100–100
lightness_offsetFLOAT0.0-100–100

Outputs (2)

NameTypeDescription
IMAGEIMAGE
MASKMASK