How Stained works
Real colour science to narrow the field, your own eye to pick the winner, and a ranking engine that learns, all running privately in your browser.
Reading your skin tone
Three ways in, one honest result. Snap a photo for on-device analysis, tap the Monk-scale swatch closest to you, or answer a short questionnaire. Pick whichever you trust most, they all resolve to the same thing.
The photo path uses an in-browser face model to find clean cheek and forehead patches, corrects for your lighting with a gray-world white-balance pass, then averages the skin colour. Every method lands on a single CIE Lab profile: your undertone is read from the b* axis, your depth from the ITA angle.
- Photo, on-device AI, never uploaded
- Monk swatch, tap to match
- Questionnaire, Fitzpatrick-based
Matching by colour science
Shades are scored against your profile in Lab space using CIEDE2000, the same perceptual colour-difference metric the industry uses, so “close” means close to the human eye, not just close in numbers.
On top of distance, Stained weighs undertone affinity and gives you four colour-theory lenses: your nudes, complementary contrast, analogous harmony, and bold statement. Every match tells you why it scored the way it did.
- CIEDE2000 ΔE
- Undertone affinity
- Four colour-theory lenses
An Elo that learns your taste
Colour science narrows the field; your eye picks the winner. Rank shades two at a time, “which would you wear?”, and a Glicko-lite rating system turns each choice into a score with a confidence band, exactly like a chess ladder.
It propagates what it learns to similar shades so you don’t have to rate everything, and it gently decays over time so your leaderboard can evolve as your taste does.
- Pairwise duels
- Rating + confidence
- Learns, propagates, decays
Private by design
There is no server to send your face to. The face model, the fonts, the colour maths, and the ranking engine are all served from this site and run in your browser. Photos never leave the page.
No accounts, no tracking, no cookies, and no third-party font, logo, or analytics requests. Your skin profile, taste ratings, and saved shades live in local storage, and you can export, restore, or wipe them from the Profile page anytime.
- No analytics
- On-device photo analysis
- Export or delete local data
The data
Stained covers 1,125 shades across 35 brands, from drugstore to luxury. 973 shades have sourced catalog colour data, while 152 curated shades are marked as approximate in the interface.
Every shade has a product link, and 415 shades show a real product photo (self-hosted, never fetched from the original brand site) alongside the colour swatch. Current sources: 973 makeup-api, 152 curated.
- 35 brands
- 1,125 shades
- 86% sourced colour
- 37% image coverage
- 1,125 product links