Seasonal color analysis is usually explained with fabric drapes and words like "warm" and "soft". If you're a developer, it's easier to think about it as a small color-science problem. Disclosure up front: I'm part of the team that built DoColorAnalysis, a free online color analysis tool, so this is the mental model we found useful, not a sales pitch.
The four variables
Most 12-season systems reduce a person's coloring to four properties:
- Undertone (hue direction): is the skin leaning yellow/golden (warm), pink/blue (cool), or in between (neutral)?
- Value (lightness): how light or dark the overall coloring is.
- Chroma (saturation): are the hair, skin and eye colors clear and saturated, or muted and greyed?
- Contrast: the lightness difference between hair, skin and eyes.
The seasons are just regions in that space. Spring is warm and clear, Summer is cool and soft, Autumn is warm and muted, Winter is cool and high-contrast. The 12-season version splits each into three sub-types depending on which property dominates (for example Light Spring vs Warm Spring vs Bright Spring).
Why CIELAB beats RGB here
RGB values from a photo mix lightness and color together, so they are a poor fit. CIELAB (or its cylindrical form, LCh) separates them:
-
L*maps nicely to value -
C*(chroma,sqrt(a*² + b*²)) maps to chroma - the hue angle
hand the sign ofb*(yellow vs blue) give a hint about undertone
import math
def lab_to_lch(L, a, b):
C = math.sqrt(a * a + b * b)
h = math.degrees(math.atan2(b, a)) % 360
return L, C, h
Contrast can then be approximated as the spread of L* between sampled hair, skin and eye regions.
The hard part is the photo, not the math
Lighting shifts everything. Warm indoor bulbs push skin toward yellow, phone filters raise saturation, and shadows lower L*. That's why every serious guide asks for a front-facing selfie in daylight from a window, no filter and little makeup. White-balancing against something neutral in the frame helps a lot.
Try it without code
If you want to check your own season before writing any code, the free 12-question color analysis test on docoloranalysis.com asks about veins, tanning, gold vs silver and your natural hair and eyes, and returns a likely season plus a runner-up. It runs in the browser and needs no photo or account.
Curious whether others have tried modelling seasons with k-means or a simple classifier on LCh features. Happy to compare notes in the comments.
Top comments (0)