Makeup
Overview
Section titled “Overview”The makeup component bundles several categorical attributes useful for cosmetics personalization: detected face shape, skin undertone, the user’s foundation colour as RGB, Fitzpatrick skin type, and eye color. Most values come back via sum_measures[] rather than as a numeric value.
component: makeuprequest: query: "components=makeup"response_path: "results[].description == \"Makeup\"" # NOTE: request component is `makeup`, response description is `Makeup`value_range: null # composite — read sum_measures[]sum_measures: - Face shape # integer 1..6 - Eye color # integer 1..3, or -1 when unavailable - Skin undertone # integer -1, 0, +1, or null when unavailable - Skin foundation RGB # [[r, g, b], "<status string>"] - Skin Fitzpatrick type # integer 1..6, or null when unavailablewarnings: [1000, 1101, 1102, 1111, 1112, 1121, 1122, 1191, 1192, 1200, 1201]Value mappings
Section titled “Value mappings”Face shape | Shape |
|---|---|
| 1 | Diamond |
| 2 | Heart |
| 3 | Long |
| 4 | Oval |
| 5 | Round |
| 6 | Square |
Skin undertone | Undertone |
|---|---|
| -1 | Cool |
| 0 | Neutral |
| +1 | Warm |
Eye color | Color |
|---|---|
| -1 | Unavailable — eye-colour analysis did not complete |
| 1 | Brown |
| 2 | Blue |
| 3 | Green |
Skin Fitzpatrick type | Type |
|---|---|
| 1 | Always burns |
| 2 | Usually burns |
| 3 | Sometimes burns |
| 4 | Rarely burns |
| 5 | Very rarely |
| 6 | Never burns |
Skin undertone and Skin Fitzpatrick type come back as null when the analysis they depend on did not complete — guard for that rather than assuming a number is always present.
Rendering notes
Section titled “Rendering notes”// Request component is `makeup`, but the response finding's description is "Makeup".const m = response.results.find((r) => r.description === "Makeup");const measure = (d) => m?.sum_measures.find((s) => s.description === d)?.value;
const faceShape = measure("Face shape"); // 1..6const eyeColor = measure("Eye color"); // 1..3const undertone = measure("Skin undertone"); // -1 | 0 | +1const fitzpatrick = measure("Skin Fitzpatrick type"); // 1..6
// "Skin foundation RGB" is [[r, g, b], "<status string>"] — check the status first.const [fdnRgb, fdnStatus] = measure("Skin foundation RGB") ?? [];const fdnUsable = fdnStatus !== "Foundation rgb is invalid.";Match foundation by combining RGB and undertone; match lipstick by undertone + Fitzpatrick; match brow products by hair colour (request hair separately).
measurement_locations[] are mask carriers
Section titled “measurement_locations[] are mask carriers”The finding returns nine cosmetic-application areas — Lips, Liplines, Eyelines, Eyeshadow, Eyebrows, Nose, Left cheek, Right cheek, Skin. They carry no score: value is null on all of them and there are no AOI coordinates. Their only content is mask_shapes, which is returned solely when you also request the masks component:
?components=makeup,masksRequest makeup on its own and the nine entries still appear, but stripped of their shapes — empty by design, not a fault. If you aren’t drawing the areas, read sum_measures[] and ignore measurement_locations[] entirely. See Masks.
Edge cases
Section titled “Edge cases”- Existing makeup affects the output — the values are sampled from the visible skin surface, so if foundation is worn the sampled shade reflects the product rather than the user’s bare skin. The component does not detect or report whether makeup is present.
local_warnings[]
Section titled “local_warnings[]”Skin tone input:
1000(error) — skin tone input not defined. Unable to proceed.
Eye area — eye state:
1101(error) — eyes look too much closed. Keep eyes open. Eye color analysis aborted.1102(warning) — eyes look quite closed. Keep eyes open.
Eye area — lighting:
1111(error) — eyes region is too dark. Improve lighting on the eyes. Eye color analysis aborted.1112(warning) — eyes region is quite dark. Improve lighting on the eyes.
Eye area — color cast:
1121(error) — eyes whites have a heavy color cast. Correct white balance settings on the camera. Eye color analysis aborted. (obsolete)1122(warning) — eyes whites have a significant color cast. Correct white balance settings on the camera.
Eye color processing errors:
1191(error) — eye color detection processing error 1. Eye area has no color information.1192(error) — eye color detection processing error 2. Eye area is too dark.
Foundation color:
1200(warning) — color balance not corrected due to eye area low image quality. Skin foundation color analysis might be unreliable.1201(warning) — skin foundation estimation failed. Foundation rbg output is invalid.