This page lets you send files with QR codes: one device plays the file as a fast-changing stream of codes, and the camera on the other device reads them and rebuilds the file. You can transfer files with QR codes between any two devices that have a browser, with no Wi-Fi, Bluetooth, cable or internet connection in between. Small files work best.
How to send files with QR codes
- Open this page on both devices. On the one that has the file, stay on Send a File and drop the file into the box, or click the box to browse. Any file type works, one file at a time.
- Pick a QR Density, an Error Correction level and a Frame Rate. The box below the settings shows the number of blocks, the data rate on screen, and a best-case and a realistic transfer time.
- Press Start Broadcasting, then Fullscreen if the code looks small.
- On the other device, open Receive a File and press Start Camera, then allow camera access. If the device has more than one camera, a Camera menu appears so you can switch.
- Hold the camera so the code fills the guide box. The progress bar, Blocks Recovered and Time Left update as frames come in.
- When File Received appears, press Download File. Images, audio and video also get a preview. Then press Stop on the sending device.
The order of the two devices doesn't matter. The broadcast loops until you stop it, so the camera can start before or after the codes begin.
QR density, error correction and speed
Each frame carries one block of the file. A denser code fits a bigger block, so the same frame rate moves more data, but the camera needs a sharper view to read it. These figures come from the tool's own planner with Low error correction:
| QR Density | Grid | Block per frame | At 10 fps | At 30 fps |
|---|---|---|---|---|
| Small | 49 × 49 | 175 bytes | 1.7 KB/s | 5.1 KB/s |
| Medium (default) | 65 × 65 | 345 bytes | 3.4 KB/s | 10.1 KB/s |
| Large | 81 × 81 | 558 bytes | 5.4 KB/s | 16.3 KB/s |
| Huge | 97 × 97 | 821 bytes | 8.0 KB/s | 24.1 KB/s |
| Extreme | 113 × 113 | 1,125 bytes | 11.0 KB/s | 33.0 KB/s |
Error correction trades data for tolerance. At Medium density a frame holds 345 bytes at Low, 268 at Medium and 186 at Quartile, so Quartile carries 46% less per frame but copes better with glare or a dim screen.
Example: a 150 KB PDF
A PDF that the tool lists as 150.0 KB (153,600 bytes) splits into 446 blocks at the default settings. The estimate box shows 3.4 KB/s on screen, 49s in the best case and 1m 2s realistically. Other settings change it like this:
| Density, error correction, frame rate | Blocks | Best case | Realistic |
|---|---|---|---|
| Medium, Low, 10 fps | 446 | 49s | 1m 2s |
| Medium, Medium, 10 fps | 574 | 1m 3s | 1m 20s |
| Small, Low, 10 fps | 878 | 1m 36s | 2m 3s |
| Large, Low, 15 fps | 276 | 20s | 26s |
Every 12th frame is a metadata frame with the file name, size and checksum, which is why the caption under the code sometimes reads metadata instead of a seed number. The receiver needs one of these before it can place blocks, and it holds on to early frames until one arrives.
When an offline file transfer makes sense
Many services that share files with QR codes upload the file to their server and put a download link in the code. Here the codes carry the file itself.
| Method | Network needed | Where the file goes |
|---|---|---|
| QR code with a download link | Internet on both devices | Uploaded to the service's server |
| Bluetooth or AirDrop | Pairing, or Apple devices at both ends | Straight between the devices |
| This page | None once both pages are loaded | From screen to camera, nowhere else |
Good fits are a config or key file for a computer that is kept off the network, a PDF going from a laptop to a phone when there is no cable around, or a photo passing between an iPhone and an Android phone. For anything over a few megabytes, a cable or a network beats trying to send files with QR codes.
Tips for a faster QR code file transfer
- Shrink the file first. At the default settings each kilobyte costs about 0.3 to 0.4 seconds, so a photo run through the image compressor arrives sooner.
- To send several PDFs in one go, combine them with Merge PDF, since the tool sends one file at a time.
- The page asks the browser to keep the screen awake while broadcasting or scanning. Some browsers can't, so raise the auto-lock time if the screen dims.
- Chrome on Android uses a built-in barcode detector, which reads frames faster than the decoder script used on iPhones. With one of each, let the Android phone receive.
- To receive another file, press Start Over on the receiving device instead of reloading the page.
For a code that people scan to open a link, use the QR code generator; the guide to adding a logo without breaking the scan explains the error correction levels it shares with this page. More tools like this one are in the developer tools collection.