How it works
Hex #RRGGBB = three bytes in base 16 | HSL: lightness = (max + min) ÷ 2 of the normalised channels, hue by which channel is largest | HSV: value = the largest channel | Harmonies rotate the HSL hue: complementary +180°, analogous ±30°, triadic +120°/+240°, split-complementary +150°/+210°
The same colour wears four notations, and each exists because a different job is easier in it. Hex is RGB compressed for CSS: three bytes written in base 16. HSL describes a colour the way people talk about it — a hue around the wheel, a saturation, a lightness — which is why design systems derive hover states and shades by nudging L. HSV (also called HSB) swaps lightness for value, the model colour pickers draw. This tool converts between all four from one colour: pick it, type a hex, or set the RGB channels, and every notation plus a row of harmony swatches follows.
Honesty about precision: the HSL and HSV readouts are whole numbers — hue to the nearest degree, saturation and lightness to the nearest percent — because that is how these values are written in real stylesheets. Converting back starts from those rounded numbers, so a round trip can shift a channel by one: #1e90ff is hsl(210, 100%, 56%), and that HSL converts back to rgb(31, 143, 255), not the original (30, 144, 255). The tool shows the rounded values it actually uses, so what you copy is what a conversion will reproduce.
The harmonies are pure hue geometry at the same saturation and lightness: the complementary colour sits opposite on the wheel (+180°), analogous colours flank it (±30°), the triadic pair splits the wheel in thirds (+120°, +240°), and the split-complementary pair brackets the complement (+150°, +210°). They are starting points for palettes, not guarantees — contrast for text is a separate question, and the Contrast Checker answers it with the WCAG numbers.