Skip to content

Eye area

The eyes component analyses the periorbital region — the under-eye area and surrounding skin. It returns an aggregate severity score plus two sub-scores: eyebags (puffiness / under-eye edges) and dark circles (under-eye darkness). The sub-scores come back both globally (in sum_measures[]) and per eye (in measurement_locations[]), suitable for driving eye-cream and concealer recommendations.

component: eyes
request:
query: "components=eyes"
response_path: "results[].description == \"eyes\""
value_range: [0, 1] # aggregate = mean of the two per-eye scores
sum_measures:
- eyebags # 0..1
- dark circles # 0..1 (note: space, not snake_case)
measurement_locations:
- left eye # per-eye eyebags + dark circles, with mask shapes
- right eye
warnings: [] # the eyes metric emits no metric-specific status codes

Reference imagery for this metric is not yet published.

The two sub-scores are in sum_measures[] — note the descriptions are space-separated, not snake_case:

const eyes = response.results.find((r) => r.description === "eyes");
const eyebags = eyes.sum_measures.find((m) => m.description === "eyebags")?.value;
const darkCircles = eyes.sum_measures.find((m) => m.description === "dark circles")?.value;

For a per-eye breakdown, read measurement_locations[] — one entry per eye, each carrying its own eyebags and dark circles measures (and mask shapes for overlays):

const perEye = eyes.measurement_locations.map((loc) => ({
side: loc.description, // "left eye" | "right eye"
eyebags: loc.measures.find((m) => m.description === "eyebags")?.value,
darkCircles: loc.measures.find((m) => m.description === "dark circles")?.value,
}));

Surface the two sub-scores separately rather than as a single aggregate — users have very specific eye-area concerns and product preferences.

  • Glasses make this analysis unreliable. Eyeglasses are flagged globally in status[] as 314 (“Eyeglasses detected. Remove eyeglasses before taking the photo. Results are unreliable.”), not as an eyes-specific warning.

The eyes metric does not emit any metric-specific local_warnings[] codes. Watch the global status[] instead — in particular 314 (eyeglasses detected) degrades eye-area results. Note also that if you request skin_sagging, a failed eyebag analysis surfaces there as 3001 (“Cannot analyze skin sagging since eyebag analysis had failed.”), since sagging depends on the eye-area analysis.