Five steps. One upload. Done.

01

Upload

Photograph a book cover. Drag in a brand asset. PNG, JPG, WebP. No size limits worth worrying about.

02

Auto-crop

Canny edge detection finds the subject. Perspective transform corrects the angle. Manual fallback when you need it.

03

Mask

Glare and shadow regions are detected via HSV and L-channel analysis, then excluded from clustering. Clean signal only.

04

Cluster

KMeans clustering in LAB color space. 8 initial clusters, merged by perceptual distance, reduced to 5 via farthest-point selection.

05

Assign roles

Lightness and saturation analysis maps each color to a role. Background, Ink, Accent, Support, Neutral. Ready to use.

Auto-crop detects the subject

Contour detection

Finds the dominant rectangle in the image. Books, magazines, cards, packaging — if it has edges, we find them.

Perspective correction

Shot at an angle. No problem. Four-point transform straightens the subject so color sampling is accurate.

Manual fallback

When auto-crop misses, drag the corners yourself. Rectangle mode and perspective mode. Corner-scaling, region drag.

LAB space. Perceptually uniform.

Most tools cluster in RGB. That is wrong. RGB is not perceptually uniform — two colors can be far apart in RGB space but look nearly identical to the human eye. We cluster in LAB, where distance maps to perceived difference.

We start with K=8 clusters using k-means++ initialization. Close clusters are merged by LAB distance. Farthest-point selection picks the final 5, maximizing perceptual distinctness. Roles are assigned by analyzing lightness and saturation distributions — the darkest high-contrast color becomes Ink, the lightest becomes Background, the most saturated becomes Accent.

A palette that ships

5 curated colors

Each with a semantic role. Not random swatches.

Hex + RGB values

Copy-ready. No conversion needed.

WCAG contrast ratios

AA and AAA scores for every meaningful pair.

Exportable tokens

CSS custom properties, Tailwind v4, SCSS, JSON.

Extract your first palette