How Fazly scores a face

Every threshold, every tolerance, every weight. Read from the same constants the scorer runs on.

Fazly scores a face from eight measurements taken off a 478-point landmark mesh that runs in your browser. Each measurement is compared to a stated target, and the score falls linearly from 100 at the target to 0 at a stated tolerance — no curve, no bell, nothing that flatters a number near the middle. The eight scores are then combined by fixed weights into a composite out of 100, and the composite is labelled with one of four bands. This page publishes all of it: every target, every tolerance, every weight, the band cutoffs, and the three-term rules behind each of the six face shapes. The numbers are read at render time from the same constants the scorer uses, so this page cannot describe a version of the arithmetic that is not running. None of it is a finding about attractiveness, and the last section says exactly what it is not.

What happens to your photograph

  1. 1

    The model loads before you choose anything

    MediaPipe's FaceLandmarker is fetched as WebAssembly and warmed during idle time, so the file is already in memory when you pick a photo. It is about 16 MB, cached by the browser after the first visit.

  2. 2

    The image is decoded in the page

    It is read with the EXIF orientation applied and drawn to a canvas at a maximum edge of 1024 pixels. Nothing is uploaded: there is no endpoint that accepts an image, which you can confirm in your browser's network tab while you use any tool on this site.

  3. 3

    478 landmarks come back, and get straightened

    The mesh returns normalized coordinates, which are scaled to the image's real pixel dimensions and then de-rolled — rotated so the eye line is horizontal — because every angle below is measured against the frame rather than against the head.

  4. 4

    Eight measurements, then one composite

    Each measurement is a distance, an angle, or a ratio between two of them. Each is scored against a target, weighted, and summed. Every number in that chain is in the tables below.

The eight measurements and their thresholds

The target is the value that scores 100. The tolerance is the distance from the target at which the score reaches 0. Where a measurement is scored on two rules — jawline is the only one — the published score is the mean of both.

MeasurementWhat is measuredTargetToleranceWeight
Symmetrymean deviation of 24 mirrored landmark pairs, as a fraction of interpupillary distance0.00±0.3026%
Golden ratioeach of four classical φ proportions1.62±0.5018%
Jawlinegonial angle at the jaw corner120.0°±25.0°16%
jaw width ÷ cheekbone width0.80±0.25
Canthal tiltmean of the two eyes' inner-to-outer corner angle+6.0°±10.0°14%
Facial thirdsmidface height ÷ lower-face height1.00±0.5012%
fWHRbizygomatic width ÷ upper-face height1.90±0.457%
Eye spacingintercanthal distance ÷ mean eye width1.00±0.604%
Lip ratiolower lip height ÷ upper lip height1.62±0.903%

The falloff is linear, deliberately. A bell curve or an exponential looks more considered and behaves worse at the two places anyone actually looks: near the target it is almost flat, so two visibly different faces get the same score, and far out in the tail it flattens again, so a wildly off measurement and a slightly off one both read the same. A straight line spends its resolution evenly and the number moves when the face moves.

How the eight become one

The composite is the weighted sum of the eight scores. Symmetry carries the most because it is the measurement with the least contested link to how faces are actually rated, and because it is the one this pipeline measures most reliably: it compares mirrored pairs of points against the face's own midline rather than comparing a ratio to an invented target. The weights are a judgement. They are not derived from a dataset, and no honest set of weights in this category is.

The four bands

A composite is labelled by which floor it clears. The cutoffs are round numbers chosen to be legible, not thresholds discovered in data — there is no data in which they could be discovered.

The six face-shape rules

Each shape is three conditions that must hold together, and the three are combined by geometric mean rather than by adding them. That difference is not cosmetic: a sum lets a face win a shape on two terms while failing the one that defines it, and a deliberately short wide test face scored 'oblong' that way, because its jaw and forehead ratios matched an oblong face exactly and the zero it earned on 'longer than wide' was simply outvoted. A geometric mean makes a zero on any defining term fatal, which is what AND means. The shape reported is the highest-scoring rule, and the confidence figure is how far clear it finished from the runner-up — not a probability.

ShapeWhat is measuredTargetTolerance
Ovalface length ÷ bizygomatic width1.50±0.40
jaw width ÷ cheekbone width0.80±0.20
jaw angle at the mandible corner126.0°±30.0°
Roundface length ÷ bizygomatic width1.20±0.35
jaw width ÷ cheekbone width0.88±0.20
jaw angle at the mandible corner134.0°±30.0°
Squareface length ÷ bizygomatic width1.30±0.35
jaw width ÷ cheekbone width0.95±0.18
jaw angle at the mandible corner114.0°±24.0°
Heartforehead width ÷ cheekbone width0.93±0.12
jaw width ÷ cheekbone width0.70±0.16
face length ÷ bizygomatic width1.45±0.40
Oblongface length ÷ bizygomatic width1.80±0.42
jaw width ÷ cheekbone width0.85±0.22
forehead width ÷ cheekbone width0.86±0.16
Diamondforehead width ÷ cheekbone width0.78±0.12
jaw width ÷ cheekbone width0.72±0.16
face length ÷ bizygomatic width1.55±0.40

What none of this tells you

Where these numbers live

Every figure on this page is read at render time from the constants the scorer itself uses — SCORING, SHAPE_RULES, COMPOSITE_WEIGHTS and BAND_FLOORS in the face metrics module. There is no second copy of any threshold in this page's text, which is why this page cannot describe a version of the arithmetic that is not the one running on your photograph.

Questions

Where do the targets come from?
Three sources, and they are not equally strong. Two ratios are anchored on published anthropometric norms; fWHR's target is a population mean from its own literature; the rest are set from the measured spread across test photographs, which means they describe what these measurements actually do rather than what they ought to be.
Why publish the thresholds at all?
Because a score you cannot check is a slot machine, and every other tool in this category is one. Publishing the arithmetic invites the argument, and the argument is the product: a reader who can see that their face missed 'oval' by 0.03 has learned something, and a reader given only the word has not.
Can I reproduce these numbers myself?
Yes, and that is the point. Every quantity in the table is two identifiable points on a face and one division. A photograph, a protractor and an hour will get you close enough to tell whether we are measuring what we say we are.

Now go and disagree with a number:

open the free tools