Move a file between two phones with nothing but a screen and a camera.
One phone turns your file into a stream of QR codes. The other reads them with its camera and rebuilds it. That is the whole mechanism.
The link is one-way. The receiver has no way to say “resend that part”, so the sender simply loops until a human stops it — and that human is the acknowledgement.
About 10–20 cm apart. Hand-held works at low density, but propped is what makes it fast.
Pick a file and tap Send. On the other phone, tap Receive and fill the frame with the code.
The sending phone has no idea how far along the receiver is, so it keeps looping. You close the loop.
QR is a 10–25 KB/s channel and no amount of protocol tuning changes that. So every control in the app exists to help you find the fastest setup your two phones can actually manage.

Pick a role

Shrink before you send

Two codes, 24 per second
Numbers are the product here, so the app shows you the real ones rather than a spinner.
Re-encode a photo before sending and a two-minute transfer becomes a fifteen-second one. The app shows you the time saved, not just the bytes.
The receiver shows captured codes per second with a plain word attached, so you know immediately whether to move closer or drop the density.
Two stacked squares cover about 1.9× the area of one while each module shrinks only ~2%. Three would be worse on both counts, so it is never offered.
Fountain coding means missed frames simply do not matter. The sender keeps generating new ones until you have enough.
Every transfer carries a SHA-256 of the original. The receiver checks it and says plainly whether the file matches.
Density, slot rate and aim time are all adjustable — because a camera samples about 30 times a second and tears anything that flips mid-readout.
Not a figure of speech. QR Bridge ships with no HTTP client, no analytics SDK, no crash reporter and no network permission on either platform.