FLASHBOX self test

Checks the two hand-written encoders and every booth template without leaving the browser. Open index.html for the actual photobooth.

Running…

QR encoder

Structural checks against the spec, plus a full decode of the generated matrix back into the original text. Point a phone camera at the code below as a final confirmation — it should offer to open https://example.com/flashbox.

Scan me

GIF encoder

Encodes synthetic frames, then hands the bytes to the browser's own GIF decoder. If the image below animates, the file is valid.

Decoded by the browser

encoded gif

Illustration kit

Every motif has to decode from its inline SVG before a template can stamp it, and no two of them may share an element id — they all end up in the same document, where url(#id) takes the first match.

Frame artwork

The designs in /photo are printed frames with photo windows, and every window below was lined up by hand against the artwork. The cards are drawn with each window filled in: if a coloured block sits neatly inside its window, photos land inside the frame. Nothing in the code adjusts these — a design says "as set" unless it has explicitly asked to be edge-traced. If a block sits wrong, open frames-editor.html, drag it onto its window, and paste the numbers it prints into js/frames.js.

Booth templates

Each template is rendered at preview size with a deliberately long caption, then checked for blank output, slots that fall outside the card, overlapping slots and a footer with room for two lines of type.

Environment