Methodology: how The Face Analysis measures a face

Method last changed 6 October 2026

Every measurement on this site is geometry computed from 478 points that a face-landmark model places on one photo, in your browser. The score is a weighted sum of four of those measurements, reported as a percentile against 102 adult faces from a public research set. It is not an attractiveness rating: tested against 2,513 people's ratings of the same faces, it did not predict them. Method last changed 6 October 2026; all 8 method changes and corrections are on the changelog.

What we measure, and what we don't

We measure proportions, angles and left-right balance of a face as it appears in one front-facing photo: face shape, eye shape and spacing, canthal tilt, nose and lip proportions, facial thirds, fWHR, midface ratio, pupillary distance, symmetry and fit to the golden ratio.

We do not measure attractiveness, health, age, ethnicity or anything about a person beyond the geometry of the photo. Nothing here is a diagnosis or a reason to have a procedure. The tools do not ask for sex, and no measurement uses it.

How a photo is measured

  • Landmarks. MediaPipe Face Landmarker places 478 points (468 face points and 10 iris points). It runs in the browser; for the measurement tools the photo does not leave the device.
  • Units. The model reports horizontal positions as a fraction of image width and vertical positions as a fraction of image height. Both are converted to the same unit before any distance is taken, so a 3:4 phone portrait measures the same as a square crop.
  • Ratios, not millimetres. Every reading is a ratio or an angle, so photo size and distance from the camera cancel out. The one exception is pupillary distance, which is scaled from the average iris diameter and is good to about ±3 mm.
  • One photo. Each reading describes that photo. Head turn, tilt, expression and lens distortion change it; a smile alone moves the 1-10 score's median on the reference set from 5.5 to 7.4.

The score formula

The composite is a 0-100 weighted sum: symmetry 40% plus three golden-ratio fits at 20% each — face length to width, eye spacing to nose width, and nose length to mouth width. Each fit is 100 at exactly 1.618 and falls with the distance from it. Symmetry compares the distance of six left-right landmark pairs from the facial midline.

The composite is then placed among the 102 reference faces as a percentile (ties count half, clipped to 1-99) and converted to 1-10 as 1 + 9 × percentile ÷ 100. A 5.5 is the middle of the reference set. The percentile step exists because the raw composite of real faces sits in a narrow band (68.6 to 76.8 on the reference set): divided by 10, it put 80% of real faces between 7.0 and 7.5.

The reference set

Percentiles and type counts come from the Face Research Lab London Set (DeBruine & Jones, 2017, CC BY 4.0): 102 adults, 49 women and 53 men, photographed under the same conditions in London in April 2012. The set includes 2,513 people's attractiveness ratings of every face. We ran the site's own measuring code on every neutral front photo; the results are on the face measurement statistics page and in machine-readable form.

102 people from one city describe these faces, not a population. No count is a prevalence and no median is a norm.

Does the score predict attractiveness? No

Spearman correlation between each measure and the average of 2,513 people's ratings of the same 102 faces:

Measureρ95% intervalReading
Overall composite score (the 1-10 score is its percentile)−0.07−0.27 to +0.12No relationship
Golden ratio fit−0.10−0.28 to +0.09No relationship
Left-right symmetry+0.09−0.12 to +0.28No relationship
Closeness to own-sex average (13 ratios)+0.21+0.01 to +0.39Weak, positive

The score is kept because it measures proportions repeatably and says where they sit among real faces. It is reported with this result on the attractiveness test page, not instead of it.

Where the thresholds come from

Some cut-offs were chosen from the reference set's own percentiles, because the conventional values did not fit faces measured this way. For these, the counts show how the detector divides faces, not how common a type is:

ReadingCurrent thresholdSource
Face shapee.g. oblong: length ÷ cheekbone width ≥ 1.229; round: ≤ 1.16 with jaw ≥ 0.791 of cheekbone width; heart: forehead ÷ jaw ≥ 1.239. Rules are checked in order; the full table is on each face shape pageReference-set percentiles
Downturned lipsmouth corners below −6.5°Reference-set percentiles (a neutral mouth measures about −3°)
Wide-set / close-set eyesinner-corner gap ÷ eye width above 1.27 / below 1.10About the outer 15% of the reference set each way
Long noselength ÷ base width ≥ 1.2885th percentile of the reference set
Canthal tiltnegative below 0°, neutral 0-5°, positive 5° and aboveConvention, set before the measurement

The other thresholds are conventions that were set before the reference measurement. When a threshold changes, the changelog records the old and new value and how many reference faces moved.

What a front photo cannot measure

  • Depth: orbital depth, nose projection, chin projection, cheekbone prominence.
  • A hidden eyelid crease: monolid, deep-set and protruding eyes cannot be told apart from the front.
  • The gonial (jaw) angle, which needs a side profile.
  • Skin, hair, expression and anything that changes from day to day.

We make no accuracy claim for any type label: there is no labelled set to measure accuracy against, and a different photo of the same person can move a borderline reading into the next type.

The AI features are not measurements

The 40 procedure simulations, the Face Report and the age and look-alike reads are produced by AI models on a server. They use credits, need an account and upload the photo the user chooses. A simulation is an illustration of one procedure on your photo, not a prediction of a surgical result, and none of them feeds back into the measurements or the score.

Changes and corrections

Every change to a threshold, formula, scale or reference figure, and every correction to a claim, is dated on the changelog with the numbers before and after, and published as changelog.json. Found an error? Write to us and we will check it against the same data.