Virtual try-on, with receipts

Don'tjusttryiton.Prove it works.

Other try-ons ask “do you like how this looks?” We ask “does this look actually do what you need?” We analyse your skin, build a look for your specific concerns, then re-analyse the result to measure the change.

  • Measured before/after
  • Honest about limits
  • Photos auto-deleted
Dark circles
62−53%
Redness
48−38%
Shine
55−38%
Baseline
Plan
Render
Verify
Quality gateBaseline analysisSkin-tone checkLook plannerMakeup renderVerificationDeterministic scoringOne refinementPlain-language verdictStage 2 proofQuality gateBaseline analysisSkin-tone checkLook plannerMakeup renderVerificationDeterministic scoringOne refinementPlain-language verdictStage 2 proof
The wrong question

Try-on tells you how it looks. Not whether it works.

A pretty filter can't tell you if the concealer actually hides your dark circles, or if that foundation just turned you two shades off. We close the loop with measurements.

Typical try-on
“Looks great!”
  • Answers: do I like it?
  • No idea if your concern improved
  • No shade-drift check
  • Buy first, find out later
Proof Beauty
Dark circles62 → 31 · −50%
Redness48 → 29 · −40%
Dark spots37 → 24 · −35%
  • Answers: does it do what I need?
  • Per-concern before/after, measured
  • Tone-drift and intensity penalties
  • Honest about what makeup can't fix
0+
candidate looks per run
0
rounds, hard-capped
0
skin concerns measured
0
medical claims made
The core loop

One selfie. Six steps. A verdict you can check.

Every YouCam call is async: upload, create a task, poll. The orchestrator chains five of them into a closed loop and caps it at two rounds to protect your budget.

01

Selfie + quality gate

Face detection, blur, brightness and head pose run client-side. A bad photo is rejected before it costs a single credit.

client-side · MediaPipe
Face detected
1 face · centred
Sharpness
Laplacian var 148
Lighting
mean 128 · 0.4% clipped
Head pose
yaw 3° · roll 1°

Bad photo? Rejected here, before any credit is spent.

02

Baseline analysis

Skin-analysis scores every concern, and tone analysis captures your skin, eye, lip and hair colours as the shade reference.

skin-analysis · skin-tone-analysis
Skin tone
#D9A98A · medium · warm undertone
Dark circles62
Redness48
Shine55
Dark spots37
Wrinkles· makeup won't fix24
03

Plan candidate looks

A rule-based planner turns your top concerns into K distinct, layered looks, with shades derived from your measured tone.

planner · concern → strategy rules
Precisionintensity 55
Under-eye correct
Balancedintensity 62
Under-eye correctCheek correctorSkin tint
Full coverintensity 78
Under-eyeCheek + noseSpot concealBaseT-zone powder

Rule table: dark circles → under-eye correction · redness → colour-correct · shine → T-zone powder

04

Render, then verify

Each look is rendered, then the same analysis runs on the render. Not a guess about the result: a measurement of it.

makeup-vto → skin-analysis
Before
Render
⇆
Dark circles
62 → 31
Redness
48 → 29
Tone drift
ΔE 1.8
05

Score, pick, refine once

Deterministic scoring weighs coverage against tone drift and over-application. Weak coverage triggers one refinement round, then it stops.

scoring engine · in code, never in the LLM
J = Σ w·reduction − λ·drift − μ·intensity
Balanced ★ bestJ 0.19
Full coverJ 0.13
PrecisionJ 0.08

Top-concern reduction under 20%? One refinement round with different patterns, then stop. Capped at two rounds.

06

Explain + shop

An explainer reads the numbers your code computed and turns them into plain language, plus shade-matched products to shop.

explainer · reads numbers, invents none
Balanced cut visible dark circles by 45% after noise shrinkage (raw 62 → 31), confidence: clear.
Makeup won't fix wrinkles. We left them out of scoring.
Tone drift ΔE 1.8: it should read as your skin, not a mask.
shade-matched products
The scoring engine

Don't compare one number. Weigh three.

Coverage, tone drift and intensity, with weights from what bothers you most. All deterministic and in code. Drag the controls and watch the winner change. This runs the real scoring function.

Controls
What bothers you most?
0.35

Punishes mismatched shades & mask-like finish

0.25

Stops the engine winning by over-covering

3.0

Test-retest noise: smaller changes count as zero

Candidate rankingJ = Σw·r − λ·drift − μ·intensity
Balanced
targets + skin tint · top concern −45%
0.19
J score
coverage
+0.35
tone drift
−0.04
intensity
−0.13
2
Full cover
max coverage · top concern −60%
0.13
J score
coverage
+0.54
tone drift
−0.20
intensity
−0.22
3
Precision
light, targeted · top concern −29%
0.08
J score
coverage
+0.14
tone drift
−0.00
intensity
−0.07

Sample numbers for illustration. In the app, every value comes from analysing your own render. Notice how “Full cover” reduces the most but loses once you care about shade match.

The score can be fooled

A try-on that only watches the number can't tell the difference.

We tested it on a real photo. A foundation a few shades too light scored about as well as a real concealer on dark circles, because it simply made the whole face lighter. Same number, very different result. So every run includes that shortcut as a control, and the shade check is what tells the two apart.

Score-only try-on
Dark-circle score+6.0
→your face got lighter · ΔE 6.2

A good score, for the wrong reason. The under-eye wasn't treated; the whole face was brightened. A number-chasing try-on would happily recommend this.

Proof Beauty
Dark-circle score+5.0
→still your skin · ΔE 3.2

Nearly the same score, and we can stand behind it: a real concealer treated the under-eye and the shade stayed close to your skin. We recommend this one, and say plainly that the effect is modest.

One real photo, one run, YouCam's raw skin-analysis score. The one-point gap between them is inside the measurement noise, and that is the point: the score can't separate them. In the app the control runs on your photo every time, and we only say it “fooled” a score when it beats our pick by more than the noise.

Honesty is a feature

We'll tell you what makeup can't do.

Every concern is mapped to a strategy, or flagged as something makeup won't fix. Wrinkles and eyelid sagging are never scored, so we never pretend a filter solved them.

Dark circles

Under-eye
Makeup can help

Under-eye correction + concealer.

Redness

Cheeks & nose
Makeup can help

Colour-correcting base on cheeks and nose.

Dark spots

Full face
Makeup can help

Spot concealing + even base.

Acne & marks

Full face
Makeup can help

Spot concealing + even base.

Shine

T-zone
Makeup can help

Setting powder across the T-zone.

Visible pores

Nose & cheeks
Partly

Blurring base can soften the look. Makeup can blur pores optically, but it can't change them.

Uneven texture

Full face
Partly

Smoothing base. A smoothing base softens the look; heavy layers can emphasise texture.

Eye bags

Under-eye
Partly

Highlight + conceal to flatten shadow. Makeup can only reduce the shadow an eye bag casts, not the puffiness.

Wrinkles

Forehead, eyes, mouth
Makeup won't fix this

Makeup tends to settle into lines. Skincare or a professional is the right lever.

Eyelid sagging

Eyes
Makeup won't fix this

Eyelid structure isn't something makeup changes.

Closing the loop

Predicted is a promise. Measured is proof.

Re-analysing a synthetic render measures the render, not your real skin. So there's a second stage: apply the look for real, take a selfie, and we run the same analysis and show predicted vs. actual.

Reduction in visible concernPredictedMeasured
Dark circlesgap -8pt
−49%
−41%
Rednessgap -4pt
−40%
−36%
Dark spotsgap -7pt
−19%
−12%

Illustrative numbers. In the app, every value is computed from your own photos.

Apply it for real

Use the recommended look, take a fresh selfie in similar lighting.

Same analysis, again

The identical concern set runs on your real face, no simulation.

Calibration, over time

Aggregated across users, the predicted-vs-actual gap becomes a signal that sharpens the model. That's the roadmap.

Predicted applied measured calibrated
Trust

Built to be honest with you.

Judges, and users, respect limits that are stated over biases that are hidden.

Consent first

Nothing is uploaded until you explicitly agree, and you can see exactly what happens to your photo.

Short-lived storage

Photos and renders auto-delete after a short window. Only hashed analysis results are ever cached.

One-tap delete

Delete my photos wipes your session and cached analyses immediately. No account needed.

Keys stay server-side

A thin proxy holds the YouCam key, so your browser never sees it.

Cosmetic, not medical

Results are cosmetic visibility estimates. Never a diagnosis, never dermatological advice.

Skin-tone caveats

If verification may be less reliable on deeper tones, we say so in your results instead of hiding it.

Stop guessing.
Start proving.

One selfie, about a minute, a measured before/after for the concerns you actually care about.

Open the studio