Pick a color to convert it across HEX, RGB, HSL and OKLCH, build harmonious palettes, pull colors out of an image, and verify WCAG contrast. Everything runs locally.
Exports use every valid colour in My palette, including its names. ASE is an Adobe Swatch Exchange binary file; GPL opens in GIMP, Inkscape and compatible editors; Tailwind CSS is an @theme static file for Tailwind 4 — import it after @import "tailwindcss".
Each cell shows the WCAG contrast ratio and the normal-text AA verdict. Rows are text colours; columns are backgrounds.
Showing the first 12 valid saved colours so this comparison stays responsive; exports still include every token.
My palette stores raw colours. Tokens give them a job: background, text, primary action and so on. They are exported as CSS variables or JSON for use in an interface.
Auto-map uses the lightest/darkest saved colours for light and dark backgrounds/text. The current converter colour ({{hex.toUpperCase()}}) becomes Primary. It does not silently change tokens when you edit My palette, so a deliberate override is never lost — click Auto-map again to refresh all roles.
Use this only when a role needs an exception. Pick a saved palette colour, use the current converter colour, or enter an exact HEX value.
:root for light and [data-theme="dark"] for dark mode. Set the direction, then add current colours or tune a stop’s colour and position. The preview and exported CSS use the same ordered stops.
Color math runs on HSL for the harmony palettes (rotating and adjusting hue/saturation/lightness) and on the OKLCH color space for a perceptually-uniform readout — unlike HSL, equal steps in OKLCH look like equal steps to the eye.
Image color extraction uses a median-cut-style bucket quantization on a downscaled copy of the image, entirely on an in-page <canvas>. WCAG contrast follows the standard relative-luminance formula from the WCAG 2.1 spec.
Everything runs locally in your browser. "My palette" is saved to this browser's localStorage only — nothing is uploaded.