---
id: ar-photo-booth
type: project
title: AR Photo Booth
url: https://auejin.com/en/projects/ar-photo-booth/
lang: en
alternate:
  ko: https://auejin.com/ko/projects/ar-photo-booth/
updated: '2026-08-11'
---

# AR Photo Booth

Sep 2024

- **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.

## Summary

**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.

Full portfolio: https://auejin.com/en/projects/ar-photo-booth/portfolio/
