ꘇ top.hsv
Rotate hue, push saturation, and the 0.5 trick that inverts a colour
- image
- image
Hue, saturation, value: the three knobs everyone reaches for first and understands second. top.hsv gives you them in the flattering order - hue is an offset in turns that wraps, and saturation/value are multipliers rather than additive sliders, which is the difference between "punchy" and "washed out". Three fields, one output, alpha preserved.
The KB is blunt about this class of operation and it's worth repeating: hue and saturation are the blunt knobs. They're the right tool for stylising and the wrong tool for matching a composited subject to a new background - that job belongs to a statistics-based colour match. Reach here when you want to push a look, not reconcile two shots.
How it works
The image goes to HSV, the hue channel is offset by hue and wrapped, then saturation and value are multiplied. Because hue is measured in turns, hue = 0.5 is a 180° rotation, i.e. every colour becomes its complement: greens go magenta, blues go amber. That one setting is the fastest way to test whether a chroma key will separate cleanly, and it's genuinely fun on foliage.
saturation and value are gains, so 0 desaturates or blackens, 1 is untouched, and 4 is the stated maximum - well past the point of useful. Both stay in HSV space rather than being applied as RGB multiplies, which is why raising saturation doesn't drag bright areas around the way an RGB multiply does. Alpha is carried through untouched, and the RGB conversion is guarded against division blowups on near-grey pixels.
The inputs that matter
All three: hue (−1..1, wraps), saturation (0..4), value (0..4). If you only ever touch one, make it hue at small values - 0.02 is already a visible colour shift. Output is a single image.
Where it slots in a real workflow: a hue rotation is how you turn one keyed asset into a family (green screen plate → blue screen plate), and value at 0.5 is the lazy way to make a dark background version of a texture. For a graded look, run top.level afterwards - its gamma does the tonal work this node can't.
Install
ComfyUI Manager → search ꘇ Genereti → install, or from your ComfyUI directory:
git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Restart and refresh the browser. The requirements file is a single frontend pin; no models, nothing to download. The node is listed as ꘇ top.hsv in the Genereti / TOP category. The leading character is the pack's mark and it sorts to the bottom of the node search, so type genereti.
Traps
Blunt, as advertised. A saturation gain can't fix a colour cast and a hue rotation can't match two shots. If you're nudging repeatedly trying to make a composite agree with its background, that's the signal to switch tools - the KB points at colour-match/statistics nodes for exactly that.
Near-black pixels do strange things in HSV. A pixel with almost no chroma has an unstable hue, so a rotation there can produce noise in shadows. It's mild here, but if you see speckle in dark regions after a hue push, that's why.
Hue wraps rather than clamps. 1.0 and 0.0 are the same result, which is convenient, but it also means a slider you've driven past 1 has wrapped around rather than maxed out.
Live vs Queue. Live mode runs on the browser GPU (needs WebGPU) and Queue runs the PyTorch path. Live intermediate textures are 8-bit, Queue keeps float, so a heavy saturation push may differ marginally between the two.
Pack status: super-alpha, early classroom testing. Back up workflows you care about.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| hue | FLOAT | 0.00-1–1 | — |
| saturation | FLOAT | 1.000–4 | — |
| value | FLOAT | 1.000–4 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |