HSV Adjuster
Color-grade an albedo without nuking its brightness
- image
- image
Try to shift a color in RGB and you usually end up fighting three sliders that all move the brightness too. HSV Adjuster sidesteps that whole dance by operating in hue-saturation-value space, where "make it more red" is one slider and "don't touch how bright it is" is automatic. In a PBR pipeline it's the go-to for generating albedo variations from a single base material - same bricks, six hue shifts, and you've got a color palette for a whole street scene without regenerating anything.
It's part of the TextureAlchemy pack's Texture Alchemist/Color group, sits next to the bigger Levels and Color Ramp tools, and it is deliberately boring: three sliders, one output, no surprises.
How it works
The node converts the image from RGB to HSV in pure PyTorch, adjusts each channel, and converts back. The details matter more than they look:
- hue_shift (
-0.5to0.5) - adds to the hue channel and wraps around, so it's a rotation on the color wheel.0.5is a full 180° turn;0.25is a quarter turn. Because it wraps, you can go either direction to land somewhere - no dead zone at the ends. - saturation (
0to3) - a multiplier.0collapses the image to grayscale,1is the original, anything above1pushes toward vivid. This is the classic "punch up a washed-out albedo" control, and since it only touches saturation, brightness stays put. - value (
0to3) - the brightness multiplier.1leaves it alone; below1darkens, above1brightens, both clamped so you can't blow out into invalid colors.
The single output is image, same dimensions as the input. Feed it any IMAGE - the node will even promote a grayscale input to RGB for you.
Where it fits
The obvious use is material variation: take one extracted albedo, run it through HSV with different hue_shift values, and wire the results into your PBR combiner as separate materials. It also beats brightness/contrast nodes for fixing a color cast, because hue rotation doesn't drag the overall exposure with it - which is the README's own pitch, and it's correct. If you need per-channel surgical control, reach for Levels instead; HSV is the blunt-but-pleasant instrument.
Installing it
It ships with ComfyUI-TextureAlchemy, so you install the pack once. ComfyUI Manager → search "TextureAlchemy" → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy
Restart and look under Texture Alchemist → Color. No pip requirements, no model files - this runs entirely on torch's built-in tensor ops.
Common issues
- "It did nothing." All three defaults are neutral (hue 0, sat 1, value 1), so you have to actually move something. Also worth remembering the hue shift wraps - at the extremes it loops back, so a big shift can land you where you started.
- Colors look posterized after heavy saturation. That's the clamp at work, not a bug. Back off
saturationinto the 1.2–1.6 range for material work rather than maxing it. - You expected per-material consistency. HSV is global across the image. If you need to adjust only part of the albedo, mask it first (the pack has mask tools for exactly this).
It's not the fanciest node in the pack, but for "give me ten colorways of this one material" it's the one you'll actually reach for.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| hue_shift | FLOAT | 0.00-0.5–0.5 | Hue shift (-0.5 to 0.5, wraps around color wheel) |
| saturation | FLOAT | 1.000–3 | Saturation multiplier (0=grayscale, 1=normal, >1=vivid) |
| value | FLOAT | 1.000–3 | Brightness multiplier |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |