Inspiration
Every skincare routine is judged by photos: your own selfies week to week, a clinic's before and after, a brand's ad. AI skin analysis promised to make that judgement objective. But a skin scan reads the photo, not the face — so before building anything, I measured how far YouCam's AI Skin Analysis moves when the skin does not change at all.
What I measured first
- The scanner is exact. The identical photo scanned three times gave identical scores.
- The light is not. On the same photo, changing only the colour temperature moved the pore score from 96 to 85. Exposure ±20% moved skin age by three years. Three faces, every frame the same skin.
- Matching fixes most of it. Mapping the new photo's light back to the baseline before scanning cut the fake change across the four worst cases from 40 points to 13; wrinkle and texture drift went to zero.
- And it has limits. A before/after pair with a much larger light gap still left pores +6 after matching. So I calibrated the residual on 3 faces × 4 lights and only certify a change inside the range that was actually measured.
Every number is in the repository with the script that produced it.
What it does
Track a routine. Name what you're testing, take a baseline selfie (upload, or the YouCam JS Camera Kit in skincare mode, which waits for a steady, well-lit, frontal face). Each weekly check-in is compared with the baseline's light, matched to it, and only then scanned. Every concern — wrinkles, pores, texture, blemishes — gets a plain verdict: real improvement, real decline, within noise, can't certify (light gap larger than calibrated) or retake. One tap shows what a plain, unmatched scan of the same photo would have claimed. When a routine works, a proof card lists only the changes beyond the noise.
Check a before & after. Two photos from an ad, a clinic post or your camera roll. Same Light scans both, then scans the "after" again in the "before" photo's light, and shows for each concern how much of the claimed improvement the light alone explains.
Consumer and retail value
- Consumers stop paying for products on the strength of a warmer bathroom bulb, and see real progress when it is there — with a proof card they can share in a review.
- Retailers and brands get before/after evidence that survives a fair comparison: a claim-checker for their own ads before a customer or regulator runs one, and proof cards as user-generated evidence on product pages.
- Clinics get a like-for-like progress record instead of photos taken under different lights.
How I built it
- YouCam AI Skin Analysis V2.1 (SD, four concerns): file API → upload to the signed URL →
task → poll → result zip with
score_info.jsonand per-concern mask overlays (enable_mask_overlay), which are shown on every result. - Task delete right after the scores are read, so the photo does not stay on the scanner; history lives only in the browser.
- JS Camera Kit (
faceDetectionMode: 'skincare') for guided capture; API errors (error_src_face_too_small,error_lighting_dark,error_no_face, …) become one line of capture advice. - Light fingerprint and matching in Python/Pillow: per-channel mean and spread of the face region, drift described in words ("12% darker and cooler than your baseline"), histogram-free moment matching before the scan; noise bands and calibrated range from the experiments.
- Small standard-library server holds the key, runs the three pair scans concurrently, caps scans per visitor and keeps a unit reserve. Vanilla HTML/CSS/JS front end, no build step. 20 tests, CI on Python 3.10 and 3.13.
Challenges
The hardest part was not trusting my own fix. The first version certified a +6 pore change on an unchanged face because the light gap in that pair was twice what the noise bands had been measured on. Rather than widen the band until the demo looked good, I measured the residual across larger gaps and made the product refuse to certify outside them.
Accomplishments
A skin-analysis app that can say "nothing changed" and "I can't tell" — and shows the measurements behind both.
What's next
Calibrate across more skin tones, cameras and real (not simulated) bulbs; per-user noise bands from two baseline shots; HD concerns; and a brand-side API that returns a certified/not-certified stamp for before/after pairs.
Built With
- css3
- html5
- javascript
- pillow
- python
- render
- youcam
Log in or sign up for Devpost to join the conversation.