Extract palettes from any image
Photograph a book cover. Upload a brand asset. Get a curated palette in under 5 seconds.
Five steps. One upload. Done.
Upload
Photograph a book cover. Drag in a brand asset. PNG, JPG, WebP. No size limits worth worrying about.
Auto-crop
Canny edge detection finds the subject. Perspective transform corrects the angle. Manual fallback when you need it.
Mask
Glare and shadow regions are detected via HSV and L-channel analysis, then excluded from clustering. Clean signal only.
Cluster
KMeans clustering in LAB color space. 8 initial clusters, merged by perceptual distance, reduced to 5 via farthest-point selection.
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.