The Face AnalysisDeveloper docs
Docs / Dataset / Face measurement dataset

Face measurement dataset

Updated 2026-10-17

Four files carry the statistics shown on the face measurement statistics page: percentiles of each measurement from 102 adult faces, the face, eye, lip and nose type rules, every classification threshold and the dated change history. Free to download and reuse under CC BY 4.0. No file contains a photo or a per-face value.

Files

FileContentsAddress
reference-set.jsonPercentiles of every measurement (all, women, men), all classification thresholds, the score formula, validity results against 2,513 raters, method notes, citation and license.https://thefaceanalysis.com/data/reference-set.json
types.jsonThe face, eye, lip and nose types: name, page, definition, measurement rule and count in the reference set.https://thefaceanalysis.com/data/types.json
face-measurements.csvThe percentiles in reference-set.json as a flat table: one row per measure and group, 21 rows.https://thefaceanalysis.com/data/face-measurements.csv
changelog.jsonEvery change to a threshold, formula or reference value: date, before and after, how many reference faces it affected.https://thefaceanalysis.com/data/changelog.json

All four are static, served with CORS open (Access-Control-Allow-Origin: *) and cached for an hour, so a browser app can fetch them directly. The same files ship in the npm package thefaceanalysis-data.

CSV columns

ColumnValues
measurecomposite, symmetry, golden, fwhr, midface, pd, tilt
unitpoints (0-100), percent, ratio, mm, degrees
groupall, female, male
nFaces in the group (102, 49 or 53)
p10, p25, median, p75, p90Percentiles
min, maxSmallest and largest value

One row per measure and group: seven measures and three groups make 21 rows.

reference-set.json structure

KeyContains
measurementsPercentiles keyed measure → group. The CSV is this block flattened.
thresholdsEvery cut-off the detectors use: face shape rules, eye, lip and nose thresholds, the pupillary distance model.
scoreHow the composite and the 1-10 score are built, with weights.
validitySpearman correlations between the measurements and 2,513 raters' attractiveness ratings, with 95% confidence intervals.
sampleHow many faces: 102 in total, 49 women and 53 men.
methodologyThe method page, when the method last changed and the revision count.
license, citeAs, sourceLicense, citation text and the source photo set.

Examples

Median fWHR across all 102 faces is 1.78. These four snippets all read it.

curl
curl -s https://thefaceanalysis.com/data/reference-set.json | jq '.measurements.fwhr.all.median'
# 1.78
JavaScript (npm)
import { referenceSet, median } from "thefaceanalysis-data";

median("fwhr");              // 1.78
median("midface", "male");   // 1.06
referenceSet.citeAs;         // citation text
Python (pandas)
import pandas as pd

df = pd.read_csv("https://thefaceanalysis.com/data/face-measurements.csv")
df[(df.measure == "fwhr") & (df.group == "all")][["median", "p10", "p90"]]
R
df <- read.csv("https://thefaceanalysis.com/data/face-measurements.csv")
subset(df, measure == "fwhr" & group == "all")

License and citation

The aggregate numbers are licensed CC BY 4.0. Cite The Face Analysis, link the statistics page and credit the photo set.

Cite as
The Face Analysis (2026). Face Measurement Statistics 2026: 102 faces measured with MediaPipe. Updated 6 October 2026. https://thefaceanalysis.com/face-measurement-statistics
Photos
DeBruine, L. & Jones, B. (2017). Face Research Lab London Set. figshare. doi:10.6084/m9.figshare.5047666.v5 (CC BY 4.0).

Limits

The photos are 102 adults photographed under the same conditions in London in April 2012. The numbers describe those faces, not a population. Face type splits show how the detectors divide these faces, not how common a type is, and no accuracy figure is claimed for any label. A different photo of the same person can move a borderline reading. Read the methodology before quoting a number as a norm.

Versions

The files change only when the measurement code or the reference data changes, and every such change is dated in the changelog. The npm package version follows: a changed threshold or number is a new version, so a pinned dependency never shifts under you. Current package version: 0.1.0.