Open-source photo wall

Your moment on the big screen.

A live photo wall for one event. Guests scan the QR code on the screen and take a photo, a host approves it, and a second later it drops onto the wall as a polaroid. Native on Fire TV (Vega OS), the same wall in any browser, and you host it yourself: no account to sign up for.

Runs on Vega OS (Fire TV) · any browserSelf-hosted · MIT
The demo wall on a TV: a collage of polaroids from a hack night, a Scan to share QR code, a Who's here panel and a 'Demo wall, not affiliated with Amazon' announcement
Hackathon demo wallA real capture of the demo's config. Open the live demo

Our project for the Fire TV track of Build, Ship, Shape: Amazon Developer Hackathon.

How it works

Scan, snap, approve, and it's on the wall.

Open / on the display, share /snap with guests and keep /control on the host's phone or laptop.

  1. The guest page on a phone: Get on the wall, with Take a photo and Choose from gallery buttons

    01

    Scan

    Guests scan the QR code on the screen. It opens the guest page, /snap, in the phone's browser.

  2. The guest page with a photo, the caption 'Hi from the hackathon!' and category chips

    02

    Snap

    They pick a photo, add a caption, choose a category when required and tick the consent box.

  3. The Control panel: Pause slideshow, Close uploads, Start a photo call and one pending photo

    03

    Approve

    A host approves it in the Control panel. Manual approval is the default.

  4. The guest page after approval: You're live. Look up!

    04

    On the wall

    It drops onto the wall as a polaroid, with a badge and a moment full screen. The guest's page says so.

The TV shows the new photo full screen with its caption while the phone says You're live
A real arrival: the new photo full screen on the TV, and the guest's phone telling them to look up.

What you get

A TV app built for Vega OS, and the same wall in a browser.

One deployed stack runs one wall for a single host. Identity, branding and presentation live in one config file.

A photo call on the TV: a mission, a countdown at 0:29 with two new photos, and a big QR code

Photo call

Hold OK on the remote, or press Start a photo call in Control: a minute with a big QR code, a mission from your categories and a countdown, then a closing card with the photos it brought.

The same live wall in its four themes: universal, wedding, party and conference

Four themes, one config line

Universal, wedding, party and conference, each one line in the config: settings.theme. In demo mode the remote's Menu button flips through them.

The spotlight: one photo full screen with its caption, category and time

Remote and media keys

  • OKFull-screen spotlight
  • OK heldStarts a photo call
  • ⏯Pauses or resumes the slideshow
  • ⏮⏭Previous or next photo

The remote's media keys reach the wall through Vega Media Controls.

The guest page says Sent, waiting for approval, beside the Control panel with one pending photo

Approvals and privacy

  • Manual approval by default; guests confirm consent.
  • Guests can remove their photo from its confirmation screen; hosts can remove any photo.
  • Pending photos need signed media access; the passcode is rate-limited.
The wall on the TV: polaroids, a Get on the wall QR code and a live count per category

Live arrivals

One Durable Object pushes each approval to every screen. Eleven polaroids drift on the wall while it steps through every approved photo; new arrivals get a badge and a moment full screen.

Quick start

Your own wall on your machine, in one command.

No Vega SDK and no Cloudflare account needed. Add the Virtual Device when you want the TV app too.

On your machine

Starts the API and web app on your network address with approved demo photos, and prints the display, guest and Control addresses plus the local passcode.

Terminal
$ git clone https://github.com/ddedic/boothwall && cd boothwall
$ pnpm install
$ pnpm demo --lan

On the Vega Virtual Device

You need the Vega SDK with the Virtual Device, Node 24 and pnpm 10. pnpm try is pnpm demo --lan plus the TV.

Terminal
$ export PATH="$HOME/vega/bin:$PATH"
$ pnpm tv:vvd:start:1080   # the Virtual Device at 1920×1080
$ pnpm try

The full quick start, from the first run to your own deploy

Questions

Before you run it.

  • Is there an account to sign up for?

    No. You run your own copy for one wall. The Control panel is protected by the passcode set during setup, and repeated wrong attempts are rate-limited.

  • Where do the photos go?

    To your own deployment: photos in R2 and rows in D1 on your Cloudflare account, or on your machine with pnpm demo. Manual approval is the default, so a photo reaches the wall only once a host approves it, unless you explicitly configure autoApprove for a trusted event. Cleanup follows your configured retentionDays.

  • Do I need Cloudflare?

    Not to try it: pnpm demo --lan runs the API and web app on your machine with no Cloudflare account. The backend is a small Cloudflare one (Workers, R2, D1 and a Durable Object), and pnpm boothwall setup puts your own wall on Cloudflare's free tier in about 15 minutes.

  • Which TVs does it run on?

    The native TV app supports Vega OS on Fire TV; you build it yourself. The same wall runs in any browser, so a laptop, a projector or the TV's own browser works too.

  • Is it free?

    The code is MIT, and so is the default BoothWall artwork, including the demo photos.

  • Is there a hosted version?

    Yes: BoothWall Cloud hosts it for you.

Want it hosted? BoothWall Cloud hosts it for you: sign in, create a wall, connect the TV from your phone, and manage every wall from one place. This repo is the complete open edition.

BoothWall Cloud