Skip to content
Mobile

Viola — AR lipstick try-on, 100% on-device

Solo-built iOS app that renders real lipstick shades on your face in real time using ARKit's face mesh — no servers, no accounts, no data collection. Reverse-engineered the canonical 1,220-vertex face topology to make the makeup placement work on every face.

1,670
real shades, 35 brands
100%
on-device — zero servers
1,220
mesh vertices mapped
0
data collected
SwiftARKitCore ImageMetalTypeScriptReact NativeExpoSQLite
Viola — AR lipstick try-on, 100% on-device

The product

Viola answers one question women ask at every makeup counter: "would this shade actually suit me?" Point the front camera at your face and real lipstick shades — 1,670 of them, from 35 real brands — render on your lips in real time. Swap shades live, compare against your bare face with one tap, save the looks you love, and scan any real-world color with the back camera to find its closest match in the catalog.

The entire app runs on-device. There is no backend, no account, no analytics, and no tracking — the camera feed never leaves the phone. That's not a compliance checkbox; it's the architecture.

The hard part

Rendering believable lipstick at 60fps means knowing exactly which pixels are lips — on every face, at every angle, through every smile and word. Apple's ARKit gives you a 1,220-vertex face mesh with guaranteed-constant topology… and no documentation whatsoever about which vertex is what.

I reverse-engineered the lip region from the canonical topology itself:

Color you can trust

The "scan a shade" feature reads real-world colors with the back camera — and naive pixel sampling lies (specular highlights, shadows). Viola samples a centered region every frame and takes a trimmed mean by luminance, dropping the brightest and darkest fifths, under continuous auto white balance. The result is a stable, honest color read that maps to the nearest catalog shade by perceptual distance.

Engineering discipline

Impact

Shipped to the App Store as a solo project — product, design, native engineering, and the research that made universal face-fitting possible. The same canonical-topology dataset and validation rig now live in the repo as reusable infrastructure for any future face-AR work.


Next: BenchApp →

Want a result like this on your product?

Start a project →
Next projectBenchApp