Pick a design, send the link to whoever you want, and shoot together β with a real countdown,
live filters, stickers and a print-ready strip at the end.
Countdown timer
Live filters
Stickers & captions
Animated GIF
Print ready
QR invite
01
Pick a design
Fourteen illustrated booth templates β a rain-soaked deco city, an arcade cabinet, a rooftop at dusk, a tropical lagoon, Sunday funnies, a comic-cover team-up β plus the printed photo-strip frames in your photo folder.
02
Send the link
Every booth gets a code, a link and a QR. Friends open it and land in the same booth.
03
Shoot & print
Countdown, flash, six shots β then keep the good ones. Then download a PNG, an animated GIF, or send it to a printer.
Choose your booth
Tap a template. You can switch it later without losing your shots.
Nothing selected
You
Friend
Nice.
Camera unavailable
We couldn't open your camera.
0 / 4No filter3s Β· 2s gap
Drag a sticker to move it Β· pinch, scroll or drag the corner grip to resize Β· two fingers to twist Β· Γ to remove
Invite to this booth
Anyone with the link lands in the same booth with the same design. If both of you are online, your shots sync live.
β
Join a booth
Type the 6-character code your friend sent you.
Pick your keepers
Tap the ones you want on the card.
How it works
Start a booth and pick a design β fourteen drawn ones, plus any printed frames in the photo folder.
Invite β share the link or let them scan the QR. They get the same design automatically.
Shoot β one press takes six shots with a countdown between each. Nothing lands on the card yet.
Choose β all six come up together and you pick the ones you want. Tap a slot later to go back and swap.
Decorate β caption, date stamp, drag-on stickers. Pinch a sticker to resize it, or twist with two fingers.
Export β PNG, animated GIF, or straight to a printer.
Camera not working?
Browsers only allow the camera on https://, localhost, or a local file. If you opened this from a network drive, run start-server.bat in the project folder and use the address it prints.
Shooting together
Once your friend joins and both cameras are on, the stage splits in two β you on the left, them on the right β and you can see each other live.
The host counts down. Whoever created the booth presses SHOOT, and all six countdowns run on both screens at the same time so you're posing together.
You both take your own picture. Each phone shoots its own half at the same instant and sends it over, and the host stitches the two together. That means split screen works on its own camera quality, and it keeps working even if the live video between you never connected.
Pick how it's framed.Split screen puts both of you in one photo. Separate keeps one from each camera, so you get twelve takes to choose from.
The host builds the card. Whoever joined watches the takes arrive in a strip beside their camera β never in a dialog over it β and the host picks which ones make the card. One press puts them on both cards at once.
Not happy with any of them? Either of you can ask for another set of six.
The badge on the camera stage tells you whether the other person is actually connected. If it's amber and says waiting for a friend, nothing will sync yet β the link hasn't been opened on their device, or the network is blocking the peer-to-peer connection. net-test.html will tell you which.
The invite link has to be reachable from the other person's device, so a booth opened as a local file or on localhost can't be shared. Put the folder online first β any static host will do.
Whose controls are whose
One booth, one card, one set of rules. There is only ever a single card being made, and both of you are standing at it β so the theme, the countdown, the gap between shots, the framing, the live filter and the choice of keepers all belong to whoever opened the booth. None of those appear on the visitor's screen at all: not greyed out, not present. No controls that look adjustable but aren't, and no way for the two of you to end up looking at different cards while making one. The filter the host picks is pushed across before every shot so both halves of a split frame are graded the same. Sound, mirror and which camera you're using stay with each person, because those are about their own device.
Decorating together
When the host confirms, the chosen photos appear on both cards straight away β but nobody moves yet. The host presses Finish & decorate and both screens go through to the studio together, on the same card, with the link already live. The visitor has no button of their own to press; they get told what's about to happen instead, so there's never a version where one of you is decorating and the other is still looking at a camera.
From there it's one shared space. Stickers, captions, the date stamp and even the template are mirrored live β move a sticker and it moves on their screen, they resize one and it resizes on yours β and you can each save, print or share your own copy at any point. If you'd rather work separately for a moment, either person can flip Live shared edits off in the studio and the other side is told.
Your own frame designs
Anything listed in js/frames.js and present in the photo folder shows up as a template. These are printed photobooth frames β a finished design with blank windows β and the photos are laid into the windows so the artwork surrounds them. Open test.html to see every window highlighted on its design.
If a photo doesn't sit in its window properly, open frames-editor.html. Drag each box onto its window, pull the corner to size it, nudge it with the arrow keys. It saves as you go and the booth uses it from the next reload β no code, no waiting. The numbers it prints can be pasted into js/frames.js to make them permanent for everyone.
One catch: a browser won't let a page opened straight from your disk save a picture it has drawn from a file, so on these templates Download does nothing on a file:// page. Run start-server.bat, or use the published site, and it saves fine.
Live sync
Video and photos are peer-to-peer and free β nothing is uploaded to a server, and they never leave your devices except to go straight to each other. If the network blocks it, the booth still works perfectly on its own.
Different Wi-Fi, different countries, phone data β all fine. Two devices on the same network find each other easily; across two networks they have to negotiate past both routers. Home routers usually give way, but mobile carriers and a lot of school and office networks don't, and there the only route is a relay both sides connect out to. The booth is configured with several address-discovery servers and free public relays on ports 80, 443 and 443/TCP β the last of which gets through networks that block nearly everything, because it looks exactly like ordinary web traffic. The "Who's here" panel tells you which route you got.
Something not working?
Open test.html β it checks the encoders, every template and your browser's camera permissions, and tells you exactly what failed.
If a booth won't sync, open net-test.htmlon both devices. It reports whether each one can be reached directly, only through a relay, or not at all β and says what to do about it. It only takes one end failing to stop a booth working.