back to the list

Engineering Stability for Brow Magic. A Hands‑On Look at the Code and Hardware.

August 19, 2025

When our team joined the Brow Magic project, the handheld eyebrow printer still struggled with reliability. Long scan times, inconsistent brow measurements, and frequent SDK crashes stood between L’Oréal and a public demo. The goal was clear: make the technology dependable in weekly sprints, without rebuilding the entire app.

The challenge

We uncovered three main blockers:

  1. Unstable brow length: Earlier builds took brow points from ARKit’s default mesh, leading to uneven results.
  2. Slow scans: Processing full‑frame depth data for every capture took up to 40 seconds, far too long for a consumer product.
  3. Virtual try‑on lag: The Modiface overlay stuttered when users adjusted control points, reducing the sense of quality.

Edge cases, like glasses, dim lighting, and sudden SDK crashes, needed solutions as well.

Key decisions

1. Replace mesh sampling with custom math We converted 2D brow landmarks from Modiface into precise 3D points using camera intrinsics and depth data. This removed guesswork and smoothed measurements.

2. Switch to side‑face captures Seven photos from each side locked the outer brow tip in place, improving accuracy even though the total photo count remained similar.

3. Process only essential pixels Rather than rebuilding the full depth map, we handled only the eight brow points per frame. Scan time dropped from around 40 seconds to roughly 3-4 seconds.

4. Trim the Bluetooth payload The printer needs only a vector outline, not the selfie. Sending this lightweight file through Prinker’s SDK reduced latency and protected privacy.

5. Stabilise the Modiface pipeline We cached static layers and requested only delta updates, eliminating most of the drag‑and‑drop lag.

6. Maintain a weekly proof cycle Every sprint ended with one approved build and a plain‑text changelog, keeping design and engineering in sync and avoiding unnecessary churn.

Results

  • Scan time: Cut from about 40 seconds to under 3 for a full scan.
  • Algorithm stability: Brow length stayed within a half‑millimetre tolerance in QA tests.
  • Virtual try‑on performance: Drag latency became imperceptible on mid‑range iPhones.
  • Crash rate: Modiface‑related crashes fell sharply after error handling improvements.
  • Privacy: Selfies stay on device; only the brow outline travels over Bluetooth.

Takeaway

By focusing on targeted fixes, owning the critical math, trimming data processing, and simplifying communication with hardware we turned an almost‑ready prototype into a demo‑ready product. The foundation is now solid for future feature work.

voices from the Field

client:
L’Oreal (Augmented Beauty)
timeline:
7 weeks, start‑to‑finish
team:
1 designer, 2 devs, 1 pm
results:
scan time cut from 40 secs to 3 secs
schedule a free call with us

FAQ

Why side scans instead of more front scans?

Side angles stabilise the outer brow tip, the spot most prone to error.

What tech stack runs the app?

Native iOS (Swift), ARKit, Modiface SDK, and the Prinker printing SDK over Bluetooth.

Is the Bluetooth payload encrypted?

t currently contains only vector data, but lightweight encryption is on the roadmap.

How do you handle glasses or poor lighting?

The app logs lighting conditions and prompts users when quality drops; glasses detection is in evaluation.

How big is the codebase?

About six thousand lines of Swift plus vendor SDKs.

Biggest lesson?

Own the critical algorithm instead of relying on defaults.

Next sprint focus?

Smarter lighting detection and broader color options in Modiface.

Interested? schedule a free call with us