AR Photo Booth
- What
- An unattended kiosk that composites a person in a full-body costume between illustrated character layers and prints the result on the spot.
- Why
- Convention booths have unreliable networks, and a costume's fur and trim make an outline that chroma keying cannot cut cleanly.
- How
- From a single webcam, SAM2 separates the person and Depth-Anything-V2 estimates depth, placing them between the illustration layers. Everything runs on the device.
- New
- No green screen and no server: the booth is self-contained. Run at seven conventions in South Korea between 2024 and 2026.

Role: product definition · CV pipeline design and implementation · AR asset creation · on-site operations — all solo Repository: https://github.com/auejin/mirror-selfie
Key numbers
| 7 events over 3 years · 703 photos | Aug 2024 – Apr 2026, seven consecutive conventions |
| 7h 53m longest single-day run | First-to-last capture. Median interval 2m 13s, 9.5–10.7 sessions/hour |
| 61 of 61 commits (100%) | All within a D-30 to D+7 window around an event. Four same-day/next-day hotfixes |
| 1,289 consent-sourced images | No scraping — collected through an open call in the community |
| Break-even at 547 prints · 5th event | Upfront investment recovered after 2 years 5 months; every event was cash-positive on its own |
| 6 → 9 characters | New character shipped 2 days before an event (2 PNGs + 3 config lines) |
Three technical highlights
1. Generating the prompts so no human has to SAM 2 is a promptable model — someone has to click. But participants are wearing costume heads and cannot see or operate a screen, and the operator is busy with the next person in line. I used monocular depth estimation (Depth Anything V2) as a prompt generator: it produces a coarse foreground mask and sampled points, which are fed to SAM 2.1 as a hybrid prompt. I added a model to the pipeline in order to remove the human from it.
2. Spending accuracy only where it matters in time A smooth preview and a pixel-accurate saved frame cannot both be optimized on the same path. Inference runs on a background thread and the preview composites from a cached mask; only when the shutter is pressed does the main thread join that thread and re-run inference synchronously on the current frame. Letting the preview mask lag by one frame is a cost I chose to pay.
3. Reversing my own hardware decision I added a depth camera to improve separation accuracy, then removed it four months later. Beyond transport, drivers, and keeping the rig aligned, it was a single point of failure that would take the entire booth down. I replaced it with monocular depth estimation and recovered the lost accuracy through hybrid prompting.
What this project demonstrates
This is live production, not a demo. Strangers are queuing, failures are visible immediately, and the system has to hold up for eight hours with almost no operator intervention. What follows in the detailed document is not benchmark scores — it is a record of finding where a system breaks in the field and closing those gaps structurally.
I worked in a domain where general-purpose models fail. A full-body fursuit is a naturally occurring adversarial sample for human matting: non-human silhouette, fur edges that are translucent at the pixel level, synthetic fur that reflects the background, and no skin or face cues at all. I solved it once with data (fine-tuning) and once with architecture (removing the "person" prior) — and I can explain why I chose the second.
The data was collected with consent. An open call in the community → stated purpose up front → opt-in submission by form. Participant photos are stored locally and never leave the machine. On-device inference was a latency and cost decision and a privacy design at the same time.
It sustained itself for three years without burning my own money. ₩5,000 (~$3.60) per print against ₩509 (~$0.36) in paper, a contribution margin of ₩4,491 (~$3.20). The ₩2.46M (~$1,750) upfront investment was recovered at the 5th event (2 years 5 months), leaving a three-year net of ₩507K–701K (~$360–500). Per-event recurring cost breaks even at 21 prints, so all seven events were profitable in isolation — a thin but durable structure. Priced at market labor rates it goes immediately negative, so read this as evidence of sustainability, not of a business.
Two stories hide in that spend. The single largest line item was the ₩1,000,000 (~$715) commissioned background artwork — 1.4× the entire AI hardware budget. In this project, the technology was the cheapest part. And ₩317,517 (~$225) was a depth camera I scrapped after four months. I left the cost of that misjudgment in the numbers.
I don't hide the failures. I collected donations from 21 people but lost 12 of them to the absence of a retention policy. The accurate diagnosis is that I had the ability to collect but no policy to preserve — and it is still unresolved.
Currency conversions use ₩1,400 ≈ $1 and are rounded, for reader intuition only.