Viola

Methodology

Every number on this site is computed from a shade's published colour value using standard colour science; this page shows exactly how. The classifications are colour-theory heuristics with fixed thresholds, and every threshold below is printed from the code that applies it.

Where the colour values come from

Each shade in the catalogue carries one published swatch colour, written as a hex value (#RRGGBB). Everything else is computed from that value in four steps.

  1. Hex to sRGB. The three hex pairs are the red, green and blue channels, 0–255. Each channel c is divided by 255 and linearised (IEC 61966-2-1): c ≤ 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055)^2.4.
  2. sRGB to XYZ. The linear channels go through the sRGB matrix for the D65 white point: X = 0.4124564 R + 0.3575761 G + 0.1804375 B, Y = 0.2126729 R + 0.7151522 G + 0.0721750 B, Z = 0.0193339 R + 0.1191920 G + 0.9503041 B.
  3. XYZ to CIELAB (D65). With the reference white Xn = 0.95047, Yn = 1, Zn = 1.08883 and f(t) = t^(1/3) when t > 216/24389, otherwise (24389/27 · t + 16) / 116: L* = 116 f(Y/Yn) − 16, a* = 500 (f(X/Xn) − f(Y/Yn)), b* = 200 (f(Y/Yn) − f(Z/Zn)). L* is lightness, 0 (black) to 100 (white).
  4. CIELAB to LCh. Chroma C* = √(a*² + b*²) is how far the colour is from grey; the hue angle h = atan2(b*, a*), in degrees from 0° to under 360°, is its direction: 0° points to magenta-red, 90° to yellow, 180° to green, 270° to blue.

Published values are rounded to two decimals. The undertone, depth, colour family and saturation are read from L*, C* and h with the rules below.

Worked example: Dior 999, hex #BE030E, is sRGB 190, 3, 14; L* 39.66, a* 64.02, b* 48.85; C* 80.53, h 37.34°. That makes it a neutral-toned red in the medium-deep range, vivid.

Undertone

A lipstick's undertone is read from its hue angle: hues on the blue side of red are cool, true reds are neutral, and hues on the orange side are warm. Ranges written [a, b) include a and stop just before b.

UndertoneHue rangeTypical shades
Cool h ∈ [290°, 28°) (wraps through 0°) blue-based reds, pinks, berries and plums
Neutral h ∈ [28°, 38°) true reds, between blue-based and orange-based
Warm h ∈ [38°, 110°] orange-based reds, corals, oranges, most nudes and browns
Neutral (fallback) h ∈ (110°, 290°), or C* < 2 rare greens, blues and near-greys, where a red-family hue does not apply

More on each: cool undertone, neutral undertone, warm undertone, blue-based red, warm red.

Depth

Depth is read from L* alone. Each band includes its lower edge; the light band also includes its upper edge.

DepthL* band
Deep L* < 35
Medium-deep 35 ≤ L* < 45
Medium 45 ≤ L* < 58
Light 58 ≤ L* ≤ 70
Very light L* > 70

Colour family

The colour family comes from hue, chroma and lightness together. The rules run top to bottom and the first one whose conditions all hold wins, so a light blue-red is caught as pink before the red rule is reached.

FamilyConditions (all must hold)
Other C* < 2 (too grey for a hue angle to mean anything)
Nude C* < 30, L* ≥ 45, h ∈ [15°, 85°]
Brown C* < 38, L* < 45, h ∈ [28°, 85°] (a warm family; deep wines at cooler hues stay red)
Mauve C* < 30, h ∈ [290°, 28°) (wraps through 0°)
Pink C* ≥ 30, L* ≥ 60, h ∈ [15°, 28°) (a light blue-red reads as pink)
Coral C* ≥ 30, L* ≥ 50, h ∈ [28°, 55°) (light warm reds: coral, watermelon, peach)
Red C* ≥ 30, h ∈ [15°, 38°)
Orange C* ≥ 30, h ∈ [38°, 110°]
Berry C* ≥ 30, L* ≤ 48, h ∈ [340°, 15°) (wraps through 0°)
Plum L* ≤ 55, h ∈ [290°, 340°)
Pink L* > 48, h ∈ [290°, 15°) (wraps through 0°)
Other anything not matched above

Definitions of the families: nude, mauve, berry, plum.

Saturation

Saturation is read from chroma: how strongly coloured the shade is, regardless of hue.

SaturationChroma band
Vivid C* ≥ 38
Muted 25 ≤ C* < 38
Soft C* < 25

Distance and dupes

The distance between two shades is the CIEDE2000 colour difference, ΔE2000 (Sharma, Wu and Dalal, Color Research and Application, 2005), with the standard weights kL = kC = kH = 1. It combines the differences in lightness, chroma and hue, weighted to follow how the eye judges them; lower is closer. A ΔE2000 of about 1 is often treated as the smallest difference visible between two patches side by side. Distances are printed to one decimal, and each label is taken from the printed value.

LabelΔE2000
virtually identical ΔE ≤ 2.0
near-identical 2.0 < ΔE ≤ 3.5
very close 3.5 < ΔE ≤ 5.0
similar 5.0 < ΔE ≤ 8.0
different: not listed as a match ΔE > 8.0

For every shade the build keeps its 8 nearest shades across the whole catalogue. A close match is one of those from a different brand at ΔE ≤ 5.0; shades from the same brand within the same distance are listed separately. A dupes page is published when a shade has at least 3 close matches. On this site a dupe means the closest colour match only: it says nothing about price, formula, wear or ingredients.

Who it suits

The guidance is colour theory, not a rule about people: anyone can wear any shade. Undertone guidance pairs a shade with the skin undertones it harmonises with.

ShadeSuits skin undertones
Cool-toned shade cool and neutral
Neutral-toned shade cool, neutral and warm
Warm-toned shade warm and neutral

Depth guidance is about contrast. Skin-depth hub pages list a shade for the skin depths where its lightness gives a clear, deliberate contrast; medium shades appear on every one.

ShadeListed on hubs for
Deep shade medium, tan and deep skin
Medium-deep shade medium, tan and deep skin
Medium shade fair, light, medium, tan and deep skin
Light shade fair, light and medium skin
Very light shade fair, light and medium skin

A nude must also sit within ±18 L* of the skin depth's representative lightness, because a nude much lighter than the skin reads as concealer and one much deeper reads as a contour line.

Skin depthRepresentative L*
Fair skin 75
Light skin 65
Medium skin 55
Tan skin 45
Deep skin 32

Examples: nude for deep skin, red for fair skin, shades for cool undertones.

Which pages are published

Pages exist only where the data supports them, so no page is a list of one or two shades.

Shade page every catalogue shade with a valid hex value
Dupes page at least 3 close matches from other brands
Comparison page pairs drawn from each shade's closest matches, at most 2,500 pages in total
Colour family, skin-depth and finish hubs at least 12 shades qualify
Undertone hub always published
Brand page at least 3 shades in the catalogue

Limits

Anchor shades

The thresholds were calibrated against well-known reference shades. Hex values for shades outside the catalogue are approximate and serve only to test the rules; they are not product data. The table shows what the rules compute for each, next to the expected result.

Shade Values Result Expected
MAC Ruby Woo
#B61A3A
L* 39.6
C* 64.6
h 21.8°
red, cool red, cool
MAC Lady Danger
#E04A2D
L* 52.9
C* 74.6
h 40.4°
coral, warm red or coral, warm
MAC Velvet Teddy
#B07A68
L* 56.2
C* 26.2
h 44.3°
nude, warm nude, warm
MAC Whirl
#9E6B62
L* 50.3
C* 23.4
h 34.7°
nude, neutral nude, neutral
NARS Dragon Girl
#C2203A
L* 42.5
C* 68.0
h 24.4°
red, cool red, cool
Charlotte Tilbury Pillow Talk
#B97A7A
L* 57.7
C* 26.6
h 22.4°
nude, cool nude, cool or neutral
Dior 999 (catalogue hex)
#BE030E
L* 39.7
C* 80.5
h 37.3°
red, neutral red, neutral or cool

Last verified . How we measure.