Methodology
How our color analysis works
This page describes what the code does: the formulas, the cut points, the published work they rest on and the judgment calls that rest only on our own view. It also says what we haven't tested.
The short version
For the background, see how seasonal color analysis works and what software can and can’t read. Depth is placed on the Monk scale.
The scan makes a first guess from pixels. Then it shows you pairs of colors beside your photo, never drawn on your face, and your answers can overturn that guess. So the result is two kinds of evidence added together: a camera reading, corrected for the light as well as we can manage, and your own eyes, which is how draping has always worked.
- Find the faceMediaPipe Face Landmarker runs in your browser and places points on your face.Out: 478 landmarks
- Get a white referenceYour sheet of paper. Failing that, a pale wall, or an estimate the result trusts far less.Out: three gains, one exposure, a confidence
- Read the colorsSix frames on camera, one on a photo. Five skin regions, the iris, the white of the eye and the hair, all through the correction.Out: four colors in CIELAB
- Turn them into three axesTemperature, value and clarity, each with how sure it is. Unsure means unsure: skin with no chroma says little about warmth.Out: t, v, c from -1 to 1, each with a confidence
- Score the twelve seasonsHow far each season's prototype sits from your axes. An unsure axis barely separates them.Out: a starting belief, never shown
- Show you fabricFive to eight pairs, picked to separate what's still in play. Your choice moves the belief, and it can overturn the scan.Out: a new belief
- Say it plainlyThe top season, the runner-up, and whether it was clear, leaning or close. In words, never as a percentage.Out: season, runner-up, strength
One thing to hold on to while reading the rest. A season isn’t a measurable fact about a person. The system comes from a line of art teaching and styling that runs through Johannes Itten’s link between personal color and the four seasons, and nobody has an instrument that returns “Soft Autumn”. Our guide to the evidence goes through what research does and doesn’t support. What follows is careful arithmetic in service of a convention, and we’d rather you knew that.
Finding your face and sampling it
MediaPipe Face Landmarker, a Google model, estimates 478 three-dimensional points on your face. It runs on your device, in the browser. Those points say where to look, and nothing else: the model has no opinion about color. If the hair can’t be read from above the hairline, MediaPipe’s multi-class selfie segmenter marks which pixels are hair. Where your pictures go is on the privacy page.
Skin comes from five discs: both cheeks, the forehead and both sides of the jaw, sized from the distance between your outer eye corners. Each disc keeps the median of its pixels after cutting the brightest 15% and the darkest 15%, in CIELAB. Any disc more than 13 units from the cheeks, or too mottled, is dropped, so a fringe, a beard or a shadow doesn’t count as skin. The iris is read as a ring that stays off the pupil and the upper lid. The white of the eye is the brightest third of what’s left in the eye outline, skipping the very top, where reflections sit.
On camera this runs over six frames, 80 milliseconds apart, and takes the median across them, so a blink or an exposure flicker can’t decide. A photo gives one frame, and a reading that’s more exposed to whatever was going on when it was taken.
White paper, and why we ask for it
A camera reports what it thinks it saw. The same skin comes out differently under a lamp and by a window, because color balance shifts every pixel at once. A sheet of paper gives the code something it knows should be neutral, in the same light as your face. How far off the paper reads is how far off everything else is.
The search looks for a bright, even, low-saturation patch outside your face, covering at least about 1% of the frame, and rejects it if too much of it is clipped at the top of the range, since a channel at its ceiling has stopped reporting. It waits for eight frames in a row that agree. Then each channel gets a gain: the paper’s luma divided by that channel, clamped between 0.4 and 3.6. That’s the von Kries idea, and it’s what corrects the picture you see.
The reading itself goes through the same correction in Bradford’s sharpened cone space, because that measured better on most of what we tried. In the simulation described below, skin landed 4.51 CIELAB units from its neutral reading with Bradford and 6.28 with plain gains, across 54 illuminant-like casts. On 18 casts applied directly to the camera’s channels, Bradford lost: 5.61 against 4.81. Those first casts are diagonal in Bradford space, which flatters it, so that win is smaller than it looks.
The paper also corrects exposure, since auto exposure lifts deep skin and pulls light skin down. It assumes paper reflects about 85% of the light on it, then applies only the square root of the correction, between 0.7 and 1.45 times, because a held sheet doesn’t sit in the same plane as your face.
| Light | Paper as the camera saw it | Gains: red, green, blue | Skin before and after |
|---|---|---|---|
| Cool cameraWhite balance too blue | 29% too blue | 1.18 0.98 0.83 | off by 10.2, then 2.2 |
| DaylightThe reference, CIE D65 | 5% too warm | 0.99 1.00 1.05 | off by 0.0, then 0.0 |
| Warm LEDA warm lamp with a green leak | 66% too warm | 0.78 1.02 2.60 | off by 25.5, then 1.8 |
With no paper
Skipping the paper is allowed, and the reading trusts itself less. A large pale surface in the picture can stand in, with confidence capped at 0.6 and no exposure correction. With none of that, the code falls back to a gray-world estimate over the pixels outside your face, leaving out the darkest 15% and the brightest 10%, blended half and half with the white of your eye when that can be read. It applies only half of that correction, and backs off further if it would push skin to a hue no skin has. Confidence: 0.2 or 0.3. Skin is never the reference. Correcting skin toward an expected color would erase the undertone we’re trying to read, and it would do so unevenly across skin depths.
Confidence then does real work. Temperature’s trust is multiplied by 0.4 plus 0.6 times the calibration’s confidence, so with no reference at all it keeps less than half. Value and clarity lose up to a quarter.
Three axes, written out
Colors are read in CIELAB, where L* is lightness from 0 to 100, chroma is distance from grey, and hue is an angle. It isn’t perfectly even to the eye, so small gaps here mean little. Season analysts usually describe people on the three dimensions Munsell used for color: hue, value and chroma. We turn those into temperature, value and clarity, each from -1 to 1.
These formulas and cut points are conventions. We chose them from the traditional definitions and adjusted them on synthetic complexions and four fictional portraits. No study says hair should count 0.40 toward depth. They aren’t fitted to people’s answers, because we don’t have any. We print them so you can disagree with them. An automated test runs these exact rows against the engine on thousands of colorings, and fails if the page and the code part.
Temperature
| What it reads | Formula | Weight | What lowers it |
|---|---|---|---|
| Skin hue against the skin locus | (hue - locus hue) / 12 | 0.60 | Fades as skin chroma falls from 14 to 4 |
| Hair warmth | (warmth - 13) / 11 | 0.22 | Fades as hair L* falls from 26 to 12. Grey or white hair counts 0.3 |
| Iris warmth | warmth / 16 | 0.18 | Fades as iris L* falls from 38 to 24: a dark eye shows no temperature |
Weighted mean, clamped to -1 and 1. Warmth is chroma along the 65 degree direction in a* and b*. Confidence is the total weight over 0.6.
Value
| What it reads | Formula | Weight | What lowers it |
|---|---|---|---|
| Skin depth | (58 - L*) / 30 | 0.36 | On the dark side it counts 0.3 of itself, so deep skin alone can't decide Deep |
| Hair depth | (32 - L*) / 22 | 0.40 | Only with hair read |
| Iris depth | (38 - L*) / 20 | 0.24 | Only with an iris read |
Weighted mean, times 1.1, clamped. Positive is deep.
Clarity
| What it reads | Formula | Weight | What lowers it |
|---|---|---|---|
| Skin against hair | (gap - 0.55 L*) / (0.25 L* + 3) | 0.35 | Falls to 0.15 of itself as skin L* falls from 45 to 10 |
| White of the eye against iris | (gap - (42 + 8 depth)) / 14 | 0.30 | Needs both read |
| Lightness of the white of the eye | (L* - 65) / 8 | 0.25 | Times depth: it counts on deep skin and not on light skin |
| Skin chroma against the locus | (C* - locus C*) / (0.25 locus C* + 2) | 0.20 | Fades as skin chroma falls from 14 to 4 |
| Iris chroma | (C* - 12) / 8 | 0.15 | Only when iris L* is above 25 |
| Cleanness of the white of the eye | (11 - C*) / 5 | 0.10 | Noisy, so a small weight |
| Hair chroma | (C* - 12) / 9 | 0.10 | Only when hair L* is above 18 |
Weighted mean, times 1.2, clamped. Depth is (55 - skin L*) / 35, from 0 to 1. Each term is clamped first. Confidence falls by up to 35% on deep skin, because the term doing the work there rests on a few bright pixels.
Why hue is measured against a moving line
Fixed hue cuts assume one normal skin hue, and chroma falls on deep skin, so the same camera noise moves the angle further. So temperature compares your hue with what’s expected at your own lightness, and it says less when your chroma is low. The expectation rests on Wang and colleagues (2015), who measured 188 people with two instruments. They report mean hue angles of 60, 54, 60 and 53 degrees across four groups, with the darkest group near 53 and the other three ranging from 45 to 69 across body sites. We draw the expected hue at 53 to 55, the lower part of those means, and treat 12 degrees either side as the full range of temperature. Both are our readings of that paper, and that darkest group was only ten people.
From axes to seasons
Each of the twelve seasons has a hand-set prototype on the three axes. Each axis then takes points off that season’s score: the squared distance from the prototype, divided by twice sigma squared, where sigma is 0.5 plus 0.8 times how unsure the axis is. An axis we can’t read has a wide sigma, so it barely separates seasons. That’s deliberate. It hands the decision to the next step instead of inventing a certainty.
How your eyes move the result
Every color in a round comes from one of the palettes. For each season, the code works out how well that color suits it: zero if it’s in the palette, falling with its distance from the nearest palette color, lower again if it sits close to something on that season’s avoid list. A choice between two fabrics then becomes a likelihood per season through a logistic curve, with a 12% allowance for someone simply liking a color. Picking a fabric adds that to each season’s belief. “No difference” is mild evidence against the seasons for which that pair should have been obvious.
The next pair is whichever gives the most expected information about your season, the standard goal of Bayesian experimental design. Early rounds flatten the belief first, so the scan can’t narrow the questions too soon. Pairs must be comparable: no color twice, at least 12 units apart, and within 26 units of lightness unless the two seasons truly differ in depth. It stops at eight rounds, or from round five once one season has clearly landed.
Soft SummerSoft AutumnOther seasons
We tested whether the rounds can really move the answer: from a confident scan of each season, an imagined person who always picks by a neighboring season’s palette landed on that neighbor in all 36 cases. From no scan at all, the same person can reach any of the twelve. And so a very sure scan can’t drown out your eyes, it counts for 0.7 against the rounds: on 432 made-up runs, varied by skin, hair and eyes, someone always picking by one season’s palette landed on it 95% of the time, in about 6 rounds. That only shows the machinery works. It assumes someone choosing perfectly, and real people choose for all sorts of reasons. We don’t know how closely choices follow season, and the 12% is a guess.
The final word comes from a rule: “clear” when the top season holds at least 55% of the belief and three times the runner-up, “leaning” at 1.6 times, “close” below that. You see the word, not those numbers. The 3D color space then places you with one fixed map fitted from the prototypes to the palette centers, so your point is an estimate and can sit nearer another season’s cloud than your result.
The other tools
The quiz feeds the same axes from ten answers, with weights that are our judgment. It counts for 0.7 of a scan and its confidence is capped at 0.75, since no answer sees your actual skin. The undertone test adds up rounds, skin, jewelry and veins, and says when they disagree. The skin tone test finds the nearest Monk tone with lightness counted about four times as much as a* and b*, and gives the individual typology angle class beside it. Monk tones 1 to 3 sit at L* 92 to 94, far above what a camera reports for skin, so above L* 55 it first moves a reading up to the lightness of the swatch it looks like. Those points are our own judgment and nobody has tested them on real people. The foundation finder gives a depth family and an undertone code, and doesn’t match brand shades, since a camera can’t honestly do that.
The try-ons’ bounced light is a simulation
Real fabric throws colored light up onto your jaw. The try-ons imitate that, and the scan doesn’t use it at all: the reflected color is the fabric’s linear color minus a neutral 0.28, scaled by the kind of cloth (silk 1, linen 0.82, knit 0.72, metal 1.15), then multiplied onto your picture in linear light through the map on the right of Fig. 2. Under the chin takes most of it, the forehead none, and the eyes are left out so the whites never tint.
Those strengths are our own choice. We haven’t measured them against real cloth on real skin, and a room adds things no screen can reproduce. Your screen and your camera each bring their own color too. Colorwise has published a check of its own reflected-light model against measured skin spectra, which we discuss on our Colorwise page. We have nothing like that.
What the lighting simulation says
This is the only test of the scan under changing light we have, so here’s exactly what it is. It takes 4 fictional portraits, plus 2 of them darkened by code. It applies 9 simulated lights at 3 exposure settings, with sensor noise and a tone curve the code doesn’t quite undo. That’s 162 runs for each condition, read from 3 frames each. Each run asks whether the scan alone, with no color rounds, names the same season it named for that portrait in neutral light.
It is a simulation on fictional faces, not a test on people. It measures steadiness and not correctness: a tool that always said “Soft Autumn” would score 100%. In this simulation the paper always gets the same color of light as the face, which is kinder than a real hand in a real room. Numbers are from the test’s output on November 4, 2026.
| Simulated condition | Same season as in neutral light | Same or adjacent |
|---|---|---|
| All 162 runs | 28% then 69% | 76% then 94% |
| By light, 18 runs each | ||
| Cool shade, partly corrected | 61% then 89% | 94% then 100% |
| Cool shade, uncorrected | 56% then 89% | 94% then 100% |
| Tungsten, partly corrected | 39% then 83% | 78% then 94% |
| Warm white balance error | 44% then 78% | 67% then 94% |
| LED-like, partly corrected | 6% then 72% | 61% then 94% |
| Cool white balance error | 44% then 61% | 100% then 100% |
| Tungsten, uncorrected | 6% then 56% | 72% then 89% |
| Greenish fluorescent, uncorrected | 0% then 56% | 56% then 83% |
| LED-like, uncorrected | 0% then 39% | 61% then 89% |
| By fictional portrait, 27 runs each | ||
| Portrait 1 | 22% then 81% | 85% then 96% |
| Portrait 2 | 4% then 63% | 41% then 85% |
| Portrait 3 | 22% then 81% | 74% then 100% |
| Portrait 4 | 19% then 41% | 56% then 81% |
| Portrait 1, darkened | 56% then 93% | 100% then 100% |
| Portrait 3, darkened | 48% then 56% | 100% then 100% |
No correctionWhite paper
Across all 162 runs, with no correction the season held in 28% and stayed the same or adjacent in 76%. With the paper: 69% and 94%. Skin landed 15.3 CIELAB units from its neutral reading without the paper, and 4.0 with it. So the paper helps a lot, and it still leaves about three runs in ten on a different season. The hardest light, an uncorrected LED, held in 39% with the paper, and one portrait held in only 41%.
With no paper, the gray-world estimate held 52% and 77% on a plain grey backdrop, which is the friendly case. In front of an orange-beige wall, the hostile case, it held 31% and 61%. No correction at all there gave 19% and 68%, so the estimate gets the exact season more often and strays further when it misses.
Fairness across skin depth, and what’s weak
Early color systems were criticized for failing darker skin, and thresholds tuned on light skin can misread deep skin. The code takes four steps against that. Hue is read against the locus at your own lightness. Skin depth on the dark side counts for 0.3 of itself, so deep skin alone can’t decide “Deep”. Clarity adds the white of the eye against the iris, a contrast every face has, since hair and skin often sit close in L* on deep skin. And trust falls where the signal does. No input is ever a person’s ethnicity or anything standing in for it.
| Monk tone | Lands on Deep Autumn or Deep Winter, scan alone | Seasons reached, scan alone | With color rounds |
|---|---|---|---|
| 1 | 1% | 7 / 12 | 10 / 12 |
| 2 | 1% | 8 / 12 | 10 / 12 |
| 3 | 1% | 7 / 12 | 10 / 12 |
| 4 | 6% | 8 / 12 | 10 / 12 |
| 5 | 22% | 8 / 12 | 9 / 12 |
| 6 | 60% | 8 / 12 | 10 / 12 |
| 7 | 71% | 8 / 12 | 12 / 12 |
| 8 | 73% | 7 / 12 | 12 / 12 |
| 9 | 74% | 6 / 12 | 11 / 12 |
| 10 | 68% | 6 / 12 | 12 / 12 |
Here’s what that shows and where it’s weak, plainly:
- Nothing deeper than about Monk 6 in our portraits. The two “darkened” rows in Fig. 7 are lighter faces pushed dark in code, which isn’t how a deep-skinned person’s photo looks. They look steady because a darker picture gives the formula less to move, so don’t read them as good news.
- On deep skin the scan alone leans hard. With dark hair and eyes at Monk 7 to 10, it lands on Deep Autumn or Deep Winter in 68% to 74% of those combinations. Not one season, and cool and warm both stay reachable, but it’s a strong pull.
- Color rounds carry those cases. That’s the design: on deep skin the scan claims up to 35% less confidence on clarity, and your eyes decide more. It also means a deep-skinned person leans more on choices we’ve checked on just one deep fictional portrait and one darkened one.
- The reach has gaps at the other end too. From that same scan of black hair and dark eyes, Monk 1 to 6 reach 9 or 10 of 12. Soft Summer and Soft Autumn stay out of reach even if someone keeps choosing them, because a very sure high-contrast reading is the furthest thing from those two.
- The published anchor is thin there. Ten people in the darkest group of the paper the locus rests on, and the deep end of the chroma table is our own extension.
The palettes
Twelve palettes of 40 colors, 480 in all, chosen by hand. Automated tests check them against each season’s traditional traits in CIELAB: that a soft season really is lower in chroma, for instance. No color consultant has reviewed them. They’re a styling convention with arithmetic on top, and any number quoted about them on this site, such as a mean lightness, describes our palette, not people.
What we never claim
- An accuracy figure. We don’t have one, and there’s no agreed true season to score against. The percentages on this page are the simulation’s steadiness, labelled as such.
- That it has been tested on real people. It hasn’t. The test that counts is at least 20 consenting people in varied light, with and without paper, including deep skin, and a pass mark of the same or an adjacent season in 80% of runs. It’s still to do.
- That you “are” a season. We can tell you which colors won when you compared them beside your photo in that light.
- That we beat any other tool. Nobody has run a fair head-to-head that we could find.
- That a color on a screen is the same as cloth in a room. If you want a trained eye and real drapes, a person can do what this can’t.
How to check us
You can test the main claim yourself. Run the scan by a window with paper, then under a lamp with paper, then under the lamp without it. Note what moves. If the result surprises you, see which colors you chose, and try them in real life. If a number or a formula here doesn’t match what you see, or a source doesn’t say what we say it says, tell us. The about page explains how corrections work.
Sources
- Face landmark detection guide
- Image segmentation guide, multi-class selfie model
- Measuring human skin colour. Wang M, Xiao K, Wuerger S, Cheung V, Luo MR
- Munsell color system
- Color balance
- Chromatic adaptation
- LMS color space, Bradford's matrix
- illumgray: the Gray World algorithm
- Standard illuminant, for the simulated lights
- Monk Skin Tone Scale
- skinoptics.colors: the individual typology angle and its classes
- Bayesian experimental design
- Color analysis
The Full Color Report: $19one time
You in your best and worst colors, about 40 colors with hex codes, makeup, hair and a capsule wardrobe plan.
See a sample reportSee which colors are yours.
See your colors on your own face, compare seasons side by side, and get your season, your undertone and a starter palette.


