Dull skin and radiance
Overview
Section titled “Overview”Dull skin measures the absence of natural luminosity. The score is derived from the shine analysis.
components: - dull_skin - radiance - radiance_adjustedrequest: query: "components=dull_skin,radiance,radiance_adjusted"response_path: - "results[].description == \"dull_skin\"" - "results[].description == \"radiance\"" - "results[].description == \"radiance_adjusted\""value_range: [0, 1] # dull_skin can be -1; radiance / radiance_adjusted can be null when unavailablewarnings: [] # these metrics emit no metric-specific codesWhen to use which
Section titled “When to use which”dull_skin— diagnostic UIs (“here’s what’s reducing your glow”).radiance— improvement-tracking UIs (“your radiance is up”).radiance_adjusted— cross-user analytics or cohort studies.
Rendering notes
Section titled “Rendering notes”const dull = response.results.find((r) => r.description === "dull_skin");const radiant = response.results.find((r) => r.description === "radiance");These metrics don’t have a visualization channel — they’re whole-face scores. Surface as a single dial or score, not a heatmap.
When the underlying shine analysis is unavailable, these fall back to a sentinel instead of a real score: dull_skin returns -1, while radiance and radiance_adjusted return null. Guard for both (e.g. dull.value >= 0, radiant.value != null) and show an “n/a” treatment rather than a bogus dial.
Edge cases
Section titled “Edge cases”- Foundation and finishing products change how much light the skin surface returns, so they move these scores — the reading reflects the product on the skin as much as the skin itself. Ask users to capture bare-faced for trend tracking.
local_warnings[]
Section titled “local_warnings[]”These metrics emit no metric-specific local_warnings[] codes; they inherit the global image-quality codes.
Related
Section titled “Related”- How metrics connect —
dull_skinis derived fromshine;radiancecombinessmoothness+shine. - Visualization data — Cat A (no spatial output). Same category as
skin_firmness. The metric is a derived/inverted whole-face score; no per-feature data, no AOIs, no mask shapes. UI should be a single dial / number, never a face overlay.