Saturation / Chroma Tool

Hue-selective colour strength: a draggable curve over the hue wheel scales saturation (HSV) or chroma (CIELAB) per hue, so you can lift one colour and calm another independently. Split before/after preview; nothing touches the image until Apply.

1. Using the tool

The curve runs left-to-right across the hue wheel (0°–360°, with the colour strip beneath it); its height is a per-hue multiplier — 1× is neutral, above 1 boosts that hue, below 1 mutes it, 0 removes its colour. Drag the curve where a hue lives to target it.

Shaping the hue curve

Mode & controls

ControlWhat it does
ModeSaturation (HSV) adjusts HSV colour purity; Chroma (CIE Lab) adjusts perceptual colour strength with less hue shift (see §2.2–2.3).
Global strength (0–3)Scales the whole curve at once, so you can dial the overall effect up or down without reshaping it.
Respect active maskConfine the change to the document's active mask.
Live preview / PreviewUpdate the split preview automatically (debounced) or on demand.
Split previewDrag the yellow split line to compare before/after; wheel to zoom, drag to pan, double-click (or Fit) to reset the view.
Apply to Document / CancelCommit a “SatChroma” step (computed full-resolution on a worker thread) or close without changes.
Grip (bottom-left)Drag to the canvas to mint a SatChroma shortcut with the current mode, curve, strength and mask setting, or drop on an image to apply headlessly.

2. Technical details

A hue→multiplier curve drives a per-pixel scaling of either HSV saturation or CIELAB chroma. Everything runs on float RGB in [0,1].

2.1 The hue-selective multiplier

The control points are interpolated with a monotone PCHIP spline into a 4096-entry lookup table over normalised hue h ∈ [0,1] (= 0°–360°). The global strength scales it, giving each pixel's hue a multiplier:

m(h)=\mathrm{strength}\cdot\mathrm{LUT}[h]\,,\qquad m\in[0,3]

Because the two end control points are the same hue, the curve is periodic around the wheel — no seam at red.

2.2 Saturation mode (HSV)

The image is converted to HSV; each pixel's saturation is scaled by the multiplier for its hue and re-clamped:

S'=\mathrm{clip}\!\left(S\cdot m(h),\;0,\;1\right)

This is fast and intuitive, but HSV saturation is not perceptually uniform — large boosts can drift hue and lightness. For clean colour work, prefer Chroma mode.

2.3 Chroma mode (CIELAB)

The image is converted to CIELAB. sRGB is first linearised,

\mathrm{lin}=\left(\frac{c+0.055}{1.055}\right)^{2.4}\ (c>0.04045),\qquad \mathrm{lin}=\frac{c}{12.92}\ (\mathrm{else})

then taken to XYZ (D65) and to Lab with

L^{*}=116\,f\!\left(\frac{Y}{Y_n}\right)-16
a^{*}=500\left(f\!\left(\frac{X}{X_n}\right)-f\!\left(\frac{Y}{Y_n}\right)\right),\qquad b^{*}=200\left(f\!\left(\frac{Y}{Y_n}\right)-f\!\left(\frac{Z}{Z_n}\right)\right)
f(t)=t^{1/3}\ (t>0.008856),\qquad f(t)=7.787\,t+\frac{16}{116}\ (\mathrm{else})

The pixel's hue is the angle of its colour in the a*–b* plane, and the multiplier scales the chroma radius while leaving lightness and hue untouched:

h=\frac{1}{2\pi}\,\mathrm{atan2}(b^{*},a^{*})\ \ (\mathrm{mod}\ 1)
(a^{*},b^{*})\;\to\;(a^{*},b^{*})\cdot m(h)

Because only the radius changes, Chroma mode boosts colour strength without the hue drift or lightness shift that HSV saturation can introduce — the reason it's the better choice for strong, clean saturation moves.

2.4 Masking

With Respect active mask on, the result is blended back against the original over the mask:

\mathrm{out}=\mathrm{mask}\cdot\mathrm{out}+(1-\mathrm{mask})\cdot\mathrm{src}

2.5 Notes