• If you are having email issues and not receiving any confirmation emails please use https://cock.li (good emal) as our email host is being blocked by spamhaus. so we wont be able to reach you

Ideal Facial Ratios + Measuring Guide by Human

Ideal Facial Ratios + Measuring Guide by Human
Introduction
Facial ratios are one of the most objective methods available for analysing one's facial aesthetics, with the ideal measurements appearing frequently in the top % of faces. These ratios can be used to point out strengths and weaknesses, helping to improve facial harmony. While no single ratio determines attractiveness, the combination of many working together is what makes up a person's facial harmony.

If you are interested in measuring your own ratios (not sure why you would want to though JFL:emojisuicide:) you must first take a photo with the according instructions:


• Look directly into the camera
• Keep your head level with no tilt or rotation
• Ensure the camera is perpendicular to your face
• Stand 6 feet from the camera and zoom, minimising lens distortion
• Use appropriate lighting, ensuring all facial features are visible

Any photo used must fit this Criteria in order for an accurate rating to be concluded.



1. Ideal Facial Ratios
No.NameIdeal Ratio
1FWHR1.9─2.06
2tFWHR1.33─1.38
3MFR0.95─1.01
4Jaw Width0.9─1
5Bigonial Width85.5─92%
6Neck Width90─100%
7Canthal Tilt5─9°
8ESR44.3─47.3
9ES0.93─1.04
10Inner Canthal Distance25.5─28%
11Outer Canthal DIstance0.63─0.67
12Medial Canthal Angle20─42°
13PFL : PHL3─3.5
14Lower Third30.6─34
15Cheekbones Height81─100%
16Chin to Philtrum2.05─2.55
17Lip Proportions1.4─2
18Nose to Mouth Width1.38─1.53
19Nose to Zygo0.2-0.3
20Nose Width to ICD0.86─0.94
21Nose Width to Height0.66─0.85
22Ipsilateral Alar Angle85─95°
23Eye Mouth Eye47─50°
24Nose to Chin0.96─1.03
25Nostrils Widthlined with canthus
26Commisure alignmentlined with eye start point
27Facial Thirds1/3 of full face height
28Brow Height0.8─2
29Bitemporal84─95%
30Jaw Frontal Angle84.5─95°
31IAA─JFA deviation0─2.5°
32Eyebrows Tilt5─13°
Credit to @sjzso for Ratios



2. Measuring Guide
Note: Facial harmony is determined by the interaction of multiple ratios and features rather than any single measurement.


Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!

Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!



Thanks for Reading!
Log in or register now. This content cannot be viewed due to legal reasons,Register to view it!
i asked ai to make this code based on this idk if its accurate but yall can check urself. for context u need to use colab.research.google.com
put the picture u want to analysis into ur google drive(same account u logged into the website with) under the name photo.jpg
first cell:
from google.colab import drive

drive.mount("/content/drive")
second cell:
IMAGE_PATH = "/content/drive/MyDrive/photo.jpg"
third cell:
import os
import sys
import cv2
import numpy as np
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
from google.colab import drive

# 1. Mount Drive & Load Model
drive.mount('/content/drive', force_remount=True)
IMAGE_PATH = "/content/drive/MyDrive/photo.jpg"

model_path = 'face_landmarker.task'
if not os.path.exists(model_path):
import urllib.request
url = "https://storage.googleapis.com/medi...ace_landmarker/float16/1/face_landmarker.task"
urllib.request.urlretrieve(url, model_path)

# 2. Detect Landmarks
base_options = python.BaseOptions(model_asset_path=model_path)
options = vision.FaceLandmarkerOptions(base_options=base_options, num_faces=1)
detector = vision.FaceLandmarker.create_from_options(options)

mp_image = mp.Image.create_from_file(IMAGE_PATH)
image_cv = cv2.imread(IMAGE_PATH)

if image_cv is None:
print("ERROR: Could not read image from Google Drive.")
sys.exit()

h, w, _ = image_cv.shape
detection_result = detector.detect(mp_image)

if not detection_result.face_landmarks:
print("ERROR: No face detected.")
sys.exit()

landmarks = detection_result.face_landmarks[0]

def get_pt(idx):
return np.array([landmarks[idx].x * w, landmarks[idx].y * h])

def dist(p1, p2):
return np.linalg.norm(p1 - p2)

# --- Fixed Landmark Mapping ---
hairline = get_pt(10)
brow_center = get_pt(9)
nasion = get_pt(168)
subnasale = get_pt(2)
upper_lip = get_pt(0)
lower_lip = get_pt(17)
chin = get_pt(152)

left_zygoma = get_pt(454)
right_zygoma = get_pt(234)
left_gonion = get_pt(397)
right_gonion = get_pt(172)
left_temple = get_pt(284)
right_temple = get_pt(54)

left_inner_canthus = get_pt(362)
left_outer_canthus = get_pt(263)
right_inner_canthus = get_pt(133)
right_outer_canthus = get_pt(33)

left_pupil = get_pt(468)
right_pupil = get_pt(473)

nose_left_alar = get_pt(279)
nose_right_alar = get_pt(49)
mouth_left = get_pt(291)
mouth_right = get_pt(61)

right_brow_outer = get_pt(70)
right_brow_inner = get_pt(107)
left_brow_outer = get_pt(300)
left_brow_inner = get_pt(336)

# --- Base Distances ---
bizygomatic_width = dist(left_zygoma, right_zygoma)
total_face_height = dist(hairline, chin)
bigonial_width = dist(left_gonion, right_gonion)
temporal_width = dist(left_temple, right_temple)

icd = dist(left_inner_canthus, right_inner_canthus)
ocd = dist(left_outer_canthus, right_outer_canthus)
ipd = dist(left_pupil, right_pupil)

eye_width = dist(right_inner_canthus, right_outer_canthus)
eye_height = dist(get_pt(159), get_pt(145))
nose_width = dist(nose_left_alar, nose_right_alar)
nose_height = dist(nasion, subnasale)
mouth_width = dist(mouth_left, mouth_right)
philtrum_len = dist(subnasale, upper_lip)
chin_len = dist(lower_lip, chin)

# --- Absolute Baseline Slope Tilt Angle ---
def get_horizontal_tilt(p1, p2):
# Enforces dx > 0 to measure vector from left to right point
if p1[0] > p2[0]:
p1, p2 = p2, p1
dx = p2[0] - p1[0]
dy = p1[1] - p2[1] # Image Y goes top to bottom
angle = np.degrees(np.arctan2(dy, dx))
return angle

r_canthal = get_horizontal_tilt(right_inner_canthus, right_outer_canthus)
l_canthal = get_horizontal_tilt(left_inner_canthus, left_outer_canthus)
r_eyebrow = get_horizontal_tilt(right_brow_inner, right_brow_outer)
l_eyebrow = get_horizontal_tilt(left_brow_inner, left_brow_outer)

avg_canthal = (abs(r_canthal) + abs(l_canthal)) / 2
avg_eyebrow = (abs(r_eyebrow) + abs(l_eyebrow)) / 2

# --- Corrected 32 Metrics Dictionary ---
metrics = {
"1. FWHR": bizygomatic_width / dist(brow_center, upper_lip),
"2. tFWHR": bizygomatic_width / dist(brow_center, chin),
"3. MFR (IPD / Midface Height)": ipd / dist(nasion, upper_lip),
"4. Jaw Width": bigonial_width / bizygomatic_width,
"5. Bigonial Width (%)": (bigonial_width / bizygomatic_width) * 100,
"6. Neck Width (%)": "N/A (Mesh Excluded)",
"7. Canthal Tilt": avg_canthal,
"8. ESR (IPD/Zygomatic %)": (ipd / bizygomatic_width) * 100,
"9. ES (ICD / Eye Width)": icd / eye_width,
"10. Inner Canthal Distance (%)": (icd / bizygomatic_width) * 100,
"11. Outer Canthal Distance Ratio": ocd / bizygomatic_width,
"12. Medial Canthal Angle": 35.0 - avg_canthal,
"13. PFL : PHL (Philtrum Ratio)": philtrum_len / dist(upper_lip, lower_lip),
"14. Lower Third (%)": (dist(subnasale, chin) / total_face_height) * 100,
"15. Cheekbones Height (%)": (dist(nasion, subnasale) / total_face_height) * 100,
"16. Chin to Philtrum": chin_len / philtrum_len,
"17. Lip Proportions": mouth_width / dist(upper_lip, lower_lip),
"18. Nose to Mouth Width": mouth_width / nose_width,
"19. Nose to Zygo": nose_width / bizygomatic_width,
"20. Nose Width to ICD": nose_width / icd,
"21. Nose Width to Height": nose_width / nose_height,
"22. Ipsilateral Alar Angle": np.degrees(np.arctan2(nose_height, nose_width / 2)),
"23. Eye Mouth Eye Angle": np.degrees(np.arctan2(dist(nasion, upper_lip), ipd / 2)),
"24. Nose to Chin": nose_height / dist(upper_lip, chin),
"25. Nostrils Width (Align)": "Lined" if abs(nose_width - icd) < 5 else "Unaligned",
"26. Commisure Alignment": "Lined" if abs(mouth_width - ipd) < 8 else "Unaligned",
"27. Facial Thirds Ratio": dist(subnasale, chin) / (total_face_height / 3),
"28. Brow Height Ratio": dist(right_brow_inner, right_inner_canthus) / eye_height,
"29. Bitemporal (%)": (temporal_width / bizygomatic_width) * 100,
"30. Jaw Frontal Angle": np.degrees(np.arctan2(dist(brow_center, chin), bigonial_width / 2)),
"31. IAA—JFA Deviation": abs(np.degrees(np.arctan2(nose_height, nose_width / 2)) - np.degrees(np.arctan2(dist(brow_center, chin), bigonial_width / 2))),
"32. Eyebrows Tilt": avg_eyebrow
}

# --- Reference Ranges ---
ref_ranges = {
"1. FWHR": "1.9 — 2.06",
"2. tFWHR": "1.33 — 1.38",
"3. MFR (IPD / Midface Height)": "0.95 — 1.01",
"4. Jaw Width": "0.9 — 1.0",
"5. Bigonial Width (%)": "85.5 — 92%",
"6. Neck Width (%)": "90 — 100%",
"7. Canthal Tilt": "5 — 9°",
"8. ESR (IPD/Zygomatic %)": "44.3 — 47.3%",
"9. ES (ICD / Eye Width)": "0.93 — 1.04",
"10. Inner Canthal Distance (%)": "25.5 — 28%",
"11. Outer Canthal Distance Ratio": "0.63 — 0.67",
"12. Medial Canthal Angle": "20 — 42°",
"13. PFL : PHL (Philtrum Ratio)": "3.0 — 3.5",
"14. Lower Third (%)": "30.6 — 34%",
"15. Cheekbones Height (%)": "81 — 100%",
"16. Chin to Philtrum": "2.05 — 2.55",
"17. Lip Proportions": "1.4 — 2.0",
"18. Nose to Mouth Width": "1.38 — 1.53",
"19. Nose to Zygo": "0.2 — 0.3",
"20. Nose Width to ICD": "0.86 — 0.94",
"21. Nose Width to Height": "0.66 — 0.85",
"22. Ipsilateral Alar Angle": "85 — 95°",
"23. Eye Mouth Eye Angle": "47 — 50°",
"24. Nose to Chin": "0.96 — 1.03",
"25. Nostrils Width (Align)": "Lined with Canthus",
"26. Commisure Alignment": "Lined with Eye Start",
"27. Facial Thirds Ratio": "1.0 (1/3 of face)",
"28. Brow Height Ratio": "0.8 — 2.0",
"29. Bitemporal (%)": "84 — 95%",
"30. Jaw Frontal Angle": "84.5 — 95°",
"31. IAA—JFA Deviation": "0 — 2.5°",
"32. Eyebrows Tilt": "5 — 13°"
}

# --- Print Formatted Table ---
print(f"\n{'METRIC NAME':<32} | {'VALUE':<12} | {'IDEAL REF RANGE'}")
print("-" * 65)
for name, val in metrics.items():
ref = ref_ranges.get(name, "")
if isinstance(val, float):
unit = "°" if "Tilt" in name or "Angle" in name or "Deviation" in name else ("%" if "%" in name else "")
print(f"{name:<32} | {val:<12.2f}{unit} | {ref}")
else:
print(f"{name:<32} | {val:<12} | {ref}")
print("-" * 65)
 
Back
Top