Every number FaceRuler produces comes from the formulas on this page. No hidden model re-weights your face after the measurement, no generative AI vibes a score — the detection model finds landmarks, and everything after that is geometry you can check by hand.
| # | Metric | Reads | Reference (target) | Tolerance | Dimension |
|---|---|---|---|---|---|
| 1 | Symmetry | Midline deviation over 8 paired landmarks, roll-corrected | 0% | 1.2% of face width | Symmetry |
| 2 | Facial Thirds | Max deviation of upper/mid/lower height from equal thirds | 33.3% each | ±4.5% | Proportions |
| 3 | Golden Ratios | Face h/w 1.46 · mouth/nose 1.55 · eye-int/nose 1.0 (3-way average) | As listed | 0.12 / 0.25 / 0.14 | Proportions |
| 4 | Eye Spacing | Interpupillary ÷ face width | 0.46 | 0.035 | Proportions |
| 5 | FWHR | Bizygomatic (pts 127/356) ÷ nasion(168)→upper-lip(0), roll-corrected | 2.75* | 0.22 | Structure |
| 6 | Jaw Width Ratio | Bigonial (172/397) ÷ bizygomatic width | 0.88 | 0.07 | Structure |
| 7 | Canthal Tilt | Outer-vs-inner corner angle, averaged over both eyes, roll-corrected | +6° | ±4.5° | Eyes |
| 8 | Eye Aspect | Eye height ÷ eye width, averaged | 0.33 | 0.06 | Eyes |
*FWHR is calibrated in MediaPipe normalized coordinates, where nasion-to-lip runs ~36% of bizygomatic width — so the population centers near 2.75. The academic photo-measurement value (~1.85) is a different ruler and not comparable. See the note on the PSL calculator.
| Dimension | Sub-metrics | Weight |
|---|---|---|
| Symmetry | symmetry | 20% |
| Proportions | thirds, golden, eye spacing (mean) | 25% |
| Structure | FWHR, jaw (mean) | 25% |
| Eyes | canthal tilt, eye aspect (mean) | 15% |
| Harmony | consistency of all 8 sub-scores | 15% |
Harmony is computed, not hand-waved: the standard deviation of the 8 sub-scores, mapped as max(0, 100 − 2.2 × σ). A face with one dragged metric loses harmony; a uniformly average face keeps it.
The weighted overall (0–100) maps onto 0–8 through a logistic function:
psl = 8 / (1 + exp(−(overall − 50) / 13))The slope (13) and the anchor (overall 50 → exactly PSL 4.0) are chosen so the population median sits at 4.0 and the practical top of the curve lands around PSL 7.7. Casual 1–10 conversion: min(10, 2.4 + psl).
Detection and measurement run entirely in your browser via WebAssembly. The photo is never uploaded — there is no server copy, nothing to leak, and calibration never receives individual data. This is not a policy promise; it is an architectural fact.