VitalTools

Color Palette Generator

Press generate (or the spacebar) for a fresh palette, lock the swatches you want to keep, preview them for colour blindness, check their contrast, and export in the format you need

5 of 10 colours. Press the spacebar to generate; harmonies start from your first locked swatch.
#264653
#2a9d8f
#e9c46a
#f4a261
#e76f51

Palette from an image

Export and share

Format
#264653
#2a9d8f
#e9c46a
#f4a261
#e76f51

Colour-blind preview

Protanopia (no red)

Deuteranopia (no green)

Tritanopia (no blue)

Achromatopsia (no colour)

A matrix simulation of how the palette reads with each condition. Useful for spotting colours that merge, not a clinical test.

Contrast matrix

Text on background#264653#2a9d8f#e9c46a#f4a261#e76f51
#264653-3.036.034.883.25
#2a9d8f3.03-1.981.611.07
#e9c46a6.031.98-1.231.85
#f4a2614.881.611.23-1.50
#e76f513.251.071.851.50-

Row is the text colour, column the background. Green passes WCAG AA for normal text (4.5:1).

Lock what you like

Lock any swatch and keep generating around it; the first locked colour seeds every harmony mode

Accessibility built in

Preview your palette as protanopia, deuteranopia, tritanopia and achromatopsia, and see the WCAG ratio for every pair

Palette from any image

Drop a photo and the dominant colours are extracted in your browser; the image is never uploaded

Frequently asked questions

Why do the generated palettes look balanced instead of garish?

Colours are built in OKLCH, where lightness and chroma track what the eye perceives, and each mode keeps them inside a moderate range. Random HSL colours swing wildly in brightness at the same nominal lightness; OKLCH does not. Any colour that would fall outside the sRGB screen gamut is pulled back by reducing chroma, so hue and lightness hold.

Is the exported hex exactly what I see on screen?

Yes. Every colour is a 6-digit sRGB hex the moment it is generated, and the swatch, the share link and every export format are all rendered from that same value, so nothing is rounded or converted on the way out.

How does the share link work?

The palette is stored in the URL after the # as dash-separated hex values. Because a hash is never sent to a server, nothing leaves your browser, and opening the link reproduces the palette exactly. A link that is malformed is ignored and you get a fresh palette.

Is my image uploaded when I extract a palette?

No. The image is drawn onto a small canvas (at most 100 by 100 pixels) in your browser and a k-means clustering finds the dominant colours there. Transparent pixels are skipped, and the same image always gives the same palette.