QR Beam

Move a file between a screen and a camera using nothing but flashing light.

Runs entirely in this tab — nothing is uploaded, and it works with the network off. How it works Flashing-light safety

Send a file

Best for documents, photos and keys. Large files take a while — a 1 MB file is roughly two minutes.

Receive a file
How it works

The sending screen flashes a stream of QR codes. The receiving camera reads as many as it can. When enough have arrived, the file is rebuilt.

Why you can miss frames

The obvious approach — chop the file into numbered chunks and cycle through them — needs the receiver to catch every single one, and a single missed frame means waiting for the whole loop to come round again.

Instead each frame carries a fountain-coded block: an XOR of a randomly chosen handful of the file's blocks, drawn from a robust soliton distribution. The receiver needs any slightly-larger-than-necessary number of frames, whichever ones happen to arrive. Nothing has to be caught in order, nothing is ever re-requested, and there is no back-channel at all — which is what lets a screen talk to a camera that cannot answer.

Interoperability

This page and the Android app implement the identical wire format, verified packet-for-packet, so either can send to the other.

Privacy

Everything happens in this tab. No file ever leaves your device, and the page works with the network disconnected.