Eyewear & XR

Online Eyewear & VR/AR Headsets

Head and face fit engine — frame width routing, Asian-fit detection, VR strap sizing, and light-seal selection from 24 craniofacial dimensions.

Business Context

The Problem: Frame fit is the single largest return driver in online optical. Customers don’t know their face width, bridge size, or whether a temple length will pinch behind the ear — so they bracket-buy across sizes. On the VR/AR side, a strap that’s 10mm too tight causes pressure headaches, and a light seal that doesn’t match face depth leaks light and breaks immersion. Virtual try-on solves the aesthetic question; it doesn’t solve fit.

The Solution: Two numbers most customers already know — height and weight — captured at the point of size selection. DimensionsPot takes those two inputs and returns up to 24 precise head and face dimensions in under 10ms. No cameras, no scans, no PII. One API call tells you which frame front width fits the face, which temple length reaches behind the ears, and which headset strap size matches the customer’s head circumference.

The Customization Edge: The real margin move happens between order and dispatch. Route the order to the correct temple length SKU, select the Asian-fit or standard rim based on facial proportions, and ship the headset with the matching light-seal cushion already installed.


ParameterValueReason
anchorsbody_height + body_massPRIMARY_BOTH tier — skeletal HEAD_FACE BONE dims ~85 confidence
bundleHEAD_FACEReturns all 20 head and face dimensions
body_build_typeCIVILIANStandard population
confidence_score_threshold0Receive all 20 dims and filter client-side by use case
include_range_95trueRequired for boundary detection at frame size thresholds

Regional calibration is critical for head and face dimensions. East Asian and South Asian populations have measurably different head breadth, nasal bridge depth, and bizygomatic breadth relative to the ANSUR global baseline. Always set input_origin_region and target_region correctly.


Sample Request

curl -X POST "https://dimensionspot-bodysize-engine.p.rapidapi.com/v1/predict" \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: dimensionspot-bodysize-engine.p.rapidapi.com" \
  -d '{
    "input_data": {
      "input_unit_system": "metric",
      "subject": {
        "gender": "male",
        "exact_age": 35.0,
        "age_category": "ADULT",
        "input_origin_region": "ASIA_PACIFIC"
      },
      "anchors": {
        "body_height": 1740.0,
        "body_mass": 72.0
      }
    },
    "output_settings": {
      "calculation": {
        "calculation_model": "AUTO",
        "target_region": "ASIA_PACIFIC",
        "body_build_type": "CIVILIAN"
      },
      "requested_dimensions": {
        "bundle": "HEAD_FACE",
        "specific_dimensions": null
      },
      "output_format": {
        "unit_system": "metric",
        "confidence_score_threshold": 0,
        "include_range_95": true,
        "include_iso_codes": false
      }
    }
  }'

Key Dimensions for Eyewear & VR/AR

API KeyLabelTypeUse
head_breadthHead BreadthBONEFrame front width sizing; VR shell width
bizygomatic_breadthCheekbone BreadthBONEFrame front width selection; cheek clearance
face_lengthFace LengthBONEFrame vertical depth; lens height selection
head_circumferenceHead CircumferenceFLESHVR/AR headset strap size
head_lengthHead LengthBONEVR headset front-to-back depth
bitragion_coronal_arcBitragion Coronal ArcBONEOver-head strap length; VR head strap tensioning
bridge_widthBridge WidthBONEFrame bridge size — pad-corrected value
nasal_root_breadthNasal Root BreadthBONEAsian-fit vs standard routing; AR/VR nose-rest geometry
menton_sellion_lengthFace DepthBONEVR light-seal cushion depth
ear_protrusionEar ProtrusionBONEVR/AR ear cup depth clearance
ear_lengthEar LengthBONEEarbud and in-ear device sizing
tragion_top_of_headTragion-Top of HeadBONEVR headset vertical crown height

‡ FULL_BODY only. The four ear and head-height dimensions are not returned by bundle: "HEAD_FACE". To retrieve them alongside the 20 HEAD_FACE dimensions, either use bundle: "FULL_BODY" or list all needed keys explicitly in specific_dimensions.


Frame Size Recommendation Pattern

def recommend_frame(dims):
    head_breadth = dims["head_breadth"]["value"]
    face_length  = dims["face_length"]["value"]
    bizygomatic  = dims["bizygomatic_breadth"]["value"]
    bridge       = dims["bridge_width"]["value"]

    if bizygomatic < 130:
        width_cat = "narrow"
    elif bizygomatic < 142:
        width_cat = "medium"
    else:
        width_cat = "wide"

    if face_length < 112:
        height_cat = "short"
    elif face_length < 124:
        height_cat = "medium"
    else:
        height_cat = "tall"

    if head_breadth < 148:
        temple_mm = 135
    elif head_breadth < 158:
        temple_mm = 140
    else:
        temple_mm = 145

    return {
        "frame_width_category":         width_cat,
        "frame_height_category":        height_cat,
        "bridge_size_mm":               round(bridge),
        "recommended_temple_length_mm": temple_mm,
    }

Asian-Fit Detection Pattern

def detect_asian_fit(dims, input_origin_region):
    nasal_root    = dims["nasal_root_breadth"]["value"]
    regional_flag = input_origin_region in ("ASIA_PACIFIC", "INDIA")
    anatomical_flag = nasal_root < 32.0
    return regional_flag or anatomical_flag

asian_fit  = detect_asian_fit(dims, input_origin_region="ASIA_PACIFIC")
sku_suffix = "AF" if asian_fit else "STD"

VR/AR Headset Strap & Seal Sizing

HEADSET_STRAP_SIZES = [
    (0, 530, "S"), (530, 570, "M"), (570, 610, "L"), (610, 9999, "XL"),
]
LIGHT_SEAL_VARIANTS = [
    (0, 115, "slim"), (115, 128, "standard"), (128, 9999, "deep"),
]

def lookup(value_mm, table):
    for lo, hi, label in table:
        if lo <= value_mm < hi:
            return label
    return "Unknown"

def size_vr_headset(dims):
    head_circ_upper = dims["head_circumference"]["range_95"][1]
    face_depth      = dims["menton_sellion_length"]["value"]
    return {
        "strap_size":         lookup(head_circ_upper, HEADSET_STRAP_SIZES),
        "light_seal_variant": lookup(face_depth, LIGHT_SEAL_VARIANTS),
    }

Response Handling Tips

  • HEAD_FACE BONE dimensions (head_breadth, bizygomatic_breadth, face_length, head_length, menton_sellion_length) reach confidence ~85 at PRIMARY_BOTH tier. head_circumference (FLESH) reaches ~78.
  • Use range_95 for boundary detection. For VR straps specifically, always use the upper range_95 bound — a tight strap is a return; a loose one is adjustable.
  • nasal_root_breadth is the correct input for Asian-fit SKU routing logic. bridge_width (nasal_root_breadth − 4 mm) is the correct value to display in UI copy.
  • For platforms serving ASIA_PACIFIC, INDIA, or MIDDLE_EAST: always pass input_origin_region per customer. Regional calibration has a proportionally larger effect on head and face dimensions than on body dimensions.
  • Flag any dimension with biological_limit_status: "OUT_OF_BOUNDS" before using it in fit routing — out-of-bounds values should trigger a manual review prompt.