A static QR code is easy to scan because the same data stays on screen. File transfer changes the problem: the camera will miss frames, read duplicates, and see frames out of order.
Why numbered chunks are fragile
The obvious design splits a payload into numbered chunks and loops over them. It works until one chunk is repeatedly missed. The receiver can have nearly the entire file and still be unable to finish.
PixeDrop uses fountain-style repair blocks instead. Each frame carries a deterministic combination of source blocks. The receiver collects independent equations and progressively solves for the originals, so it does not need one specific missing frame.
What a frame needs to say
Each wire frame identifies the protocol, transfer, payload shape, and repair equation. A checksum rejects corrupted frames before they enter the decoder. The sender repeats indefinitely, and the receiver ignores duplicates that add no new information.
The format is binary rather than text-wrapped. Avoiding Base64 leaves more of each QR code available for payload and error correction.
Adapting to the camera
More bytes per QR frame reduce the number of frames, but denser symbols are harder to scan. Real-device testing therefore matters more than theoretical capacity. PixeDrop uses conservative blocks and lets people adjust playback speed when the display, distance, or camera needs it.
The app also reports visible progress from unique useful frames, not raw detections. A duplicate scan should not pretend that the transfer advanced.
Boundaries keep the design honest
Transfers are capped at about 1 MB. Images are resized and text is compressed before encoding. The limit keeps scan time understandable and prevents an optical side channel from masquerading as a general-purpose network.
The result is not the fastest way to move a file. It is a dependable one-way route for small content when accounts, cables, and network services are the wrong fit.