Skip to content

Pore dilation

Pore dilation measures the visible size and density of skin pores — a function of sebum production, age, sun damage, and skin type. The metric is highly sensitive to image resolution; the model returns a status warning when the face area is too small to resolve individual pores reliably.

component: pore_dilation
request:
query: "components=pore_dilation,pore_dilation_visualization"
response_path: "results[].description == \"pore_dilation\""
value_range: [0, 1] # value is null when analysis is aborted (see below)
also_request:
- pore_dilation_visualization
warnings: [2000, 2001]
face_width_px:
minimum: 600 # below this -> 2000 (error), analysis aborted, value null
full_quality: 1200 # 600-1199 -> 2001 (warning); >=1200 -> no warning

Reference imagery for this metric is not yet published.

const pores = response.results.find((r) => r.description === "pore_dilation");
// The finding is present whenever requested, but `value` is null when the
// analysis was aborted (face under 600 px). Guard on the value, not the finding.
if (!pores || pores.value == null) {
// hide the pores card; surface the resolution warning (2000 / 2001) if present
}

The visualization channel returns polygon-area features with 2 intensity levels by default (the count follows your visualization_thresholds; default [0.0, 0.5]). Render them like any polygon-area metric — draw each feature’s coordinate path, low intensity to high. Paste-ready code: Rendering recipes → Polygon areas.

measurement_locations[] carries one entry per face zone — left cheek, right cheek, forehead left, forehead center, forehead right, nose, left lower face, right lower face, chin — each with its own value, AOI, and mask shapes. Note the global value is the average of only four zones (left cheek, right cheek, forehead left, forehead right); nose, chin, the lower-face zones, and forehead center are still returned but do not feed the headline score.

On faces analysed as male, the three lower-face zones — left lower face, right lower face and chin — are skipped and return value: null, since beard area can’t be measured reliably. The entries are still present, so guard per-region as well as at finding level. Note this is null, not the -1 that the pigmentation metrics use for an unavailable region.

  • Face width under 600 px → status 2000, analysis aborted, value: null; treat as “data unavailable” rather than zero.
  • Face width 600–1199 px → status 2001; scores are returned but flagged unreliable.
  • Smoothing / beauty filters applied client-side remove the fine detail the metric measures, so scores drop toward zero regardless of the user’s actual pores.
  • Heavy foundation fills and conceals pores, lowering the score.
  • 2000 (error) — face area resolution too low (face width under 600 px); pore analysis aborted, value is null.
  • 2001 (warning) — face area resolution low (face width 600–1199 px); results returned via an upsizing fallback and may be unreliable.

These are the only codes the metric emits. (The canonical 2000 text reads “…at minimum 1200 pixels wide,” which the spec marks as outdated — the effective floor is 600 px.)