Colour harmonies — complementary, triadic, analogous and more from one colour

Pick one base colour and see all six classic colour-wheel harmonies plus a monochromatic set, worked out on either the HSL wheel or the perceptual OKLCH wheel.

Live demo · real result from this tool
Hue wheel

Press Generate to create a result.

Processed on your device — nothing is uploaded.

How to use the colour harmonies tool

  1. Choose a Base colour with the picker or type any CSS colour.
  2. Pick the Hue wheel: HSL (classic) or OKLCH (perceptual).
  3. Read the seven sets. Each swatch is labelled with its hue offset, and the base is marked Base.
  4. Click or copy the swatches you want to use.

What it does and when to use it

Colour harmonies are fixed angle patterns on the colour wheel. They are a fast starting point when you have one brand or photo colour and need partners for accents, charts or illustrations. This tool shows every common pattern at once, so you can compare them side by side instead of rotating a wheel by hand.

The sets and their angles:

Harmony Hue offsets
Complementary 0°, 180°
Analogous −30°, 0°, +30°
Triadic 0°, 120°, 240°
Split-complementary 0°, 150°, 210°
Tetradic (rectangle) 0°, 60°, 180°, 240°
Square 0°, 90°, 180°, 270°

If you only need the opposite colour, the complementary colour finder also shows the RGB complement and the inverse. To turn a harmony into a full set of UI roles, use the UI colour scheme builder. For random palettes built on these patterns, try the palette generator.

How it works

On the HSL wheel the tool converts your colour to hue, saturation and lightness, adds the offset to the hue (wrapping at 360°) and converts back. On the OKLCH wheel it does the same with OKLCH hue, keeping OKLCH lightness and chroma. A rotated OKLCH colour can fall outside what a normal screen shows; it is then gamut-mapped by lowering chroma, so some partners come out a little less vivid than the base.

Worked examples

These are the tool’s own outputs.

Pure red on the HSL wheel. Complementary: #ff0000 and #00ffff. Triadic: #ff0000, #00ff00 and #0000ff, the three primaries of light.

Rose #e11d48, HSL versus OKLCH.

Harmony HSL wheel OKLCH wheel
Complement #1de1b6 #009195
Triadic #48e11d, #1d48e1 #2c9500, #0074fb
Analogous #e11daa, #e1541d #d12894, #cf4d00

Both monochromatic sets are #5a0c1d, #9e1433, #e21d48, #eb617f and #f3a5b6.

Limits and tips

  • Angles are a starting point, not a rule. Adjust lightness so one colour leads and the others support it.
  • Greys have no hue, so every rotation of a grey returns the same grey.
  • Preview the set with the colour blindness simulator: red and green partners from a triad can merge for many viewers.
  • It runs in your browser; nothing is uploaded.

Frequently asked questions

What is the difference between the HSL and OKLCH wheels?
HSL is the classic digital colour wheel. Rotating hue keeps HSL saturation and lightness numbers but not how light the colour looks, so a yellow partner can look far brighter than a blue base. OKLCH keeps perceived lightness and chroma while rotating, so partners look closer in weight.
Why does the OKLCH complement look darker than the HSL one?
Because it matches the base colour's perceived lightness. The HSL complement of rose
Which harmony should I use?
Analogous sets are calm and safe. Complementary pairs give strong contrast for a call to action. Triadic, tetradic and square sets are lively and work best with one dominant colour and the others as small accents.
How is the monochromatic set made?
It keeps the base colour's HSL hue and saturation and sets lightness to 20%, 35%, 50%, 65% and 80%. It always uses HSL, whichever wheel you pick.
Do harmonies guarantee readable text?
No. Harmony is about hue relationships, not contrast. Check any text pair with the contrast checker before using it.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close