Skip to content

Makeup

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: makeup
request:
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 unavailable
warnings: [1000, 1101, 1102, 1111, 1112, 1121, 1122, 1191, 1192, 1200, 1201]
Face shapeShape
1Diamond
2Heart
3Long
4Oval
5Round
6Square
Skin undertoneUndertone
-1Cool
0Neutral
+1Warm
Eye colorColor
-1Unavailable — eye-colour analysis did not complete
1Brown
2Blue
3Green
Skin Fitzpatrick typeType
1Always burns
2Usually burns
3Sometimes burns
4Rarely burns
5Very rarely
6Never 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.

// 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..6
const eyeColor = measure("Eye color"); // 1..3
const undertone = measure("Skin undertone"); // -1 | 0 | +1
const 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).

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,masks

Request 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.

  • 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.

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.