Uploads
Drop logos, backgrounds, frames, the mosaic hero image and brand fonts here (PNG, JPG, OTF, TTF; 50 MB each). Names are cleaned to letters, digits, dashes, underscores and dots.
Card template assets/template/
The compositor reads assets/template/template.json on every card. Its paths are relative to that folder:
"background": "background.png" (under the photo), "overlay": "frame.png" (over it, transparent window),
"font": "fonts/Brand.otf". An upload can also be referenced in place: "../logo.png".
Use uploads in the card template copies background.png, frame.png and every font from Uploads
into the template folder, so the stock template.json picks them up with no edit.
Edit template.json
Export
The ZIP holds event.json, sessions.csv and sessions/<date>/<CODE>/. Clip frames are most of the bytes; the lighter ZIP leaves them out.
The guest-data CSV is the client's data capture: the form fields, opt-in, consent version and the share station's email/phone for the same code, one row per guest.
Live stats link for the client
Read-only, no PIN: the random token in the URL is the key. Photos today/total, per hour, shares, prints, stations, last capture; refreshes every 10 s. LAN only — for the client to open it from outside the venue the engine needs Tailscale (or a future Worker mirror). Open /slideshow/ on the TV.
Readiness
Event code
One code for the whole event, every booth. On the engine Mac: Pull by code in its admin (pick the booth), or start it with --event CODE --booth ID. It downloads that booth's config and the assets, runs it offline all day, and registers its LAN address here so the iPads can find it from the join page (scan the QR or type the code at /go). iPad-only booths join with the same code and get their own code prefix.
Devices
Client gallery
Archive
Moves to data/trash/<id>-<timestamp>. Nothing is deleted; it can be restored from the Archived list. The running event can't be archived: activate another one first.
Purge
Deletes the event folder with every photo, card and the session database. This cannot be undone. Type the event id to confirm.