Developer Tools

Optical File Transfer: Send Files with QR Codes

Send files with QR codes from one screen to another device's camera. No Wi-Fi, Bluetooth, cable or upload, and a checksum confirms the copy.

Choose a File
Drag & drop a file here
or click to browse · any file type
Nothing is uploaded — the file never leaves this device
️ Stream Settings
Faster is quicker but harder for the camera to keep up. Drop it if the receiver stalls.
Scan the Stream

Point this device's camera at the broadcasting screen and hold it steady so the QR code fills the guide box. Decoding happens entirely on this device.

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

  1. 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.
  2. 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.
  3. Press Start Broadcasting, then Fullscreen if the code looks small.
  4. 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.
  5. Hold the camera so the code fills the guide box. The progress bar, Blocks Recovered and Time Left update as frames come in.
  6. 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 DensityGridBlock per frameAt 10 fpsAt 30 fps
Small49 × 49175 bytes1.7 KB/s5.1 KB/s
Medium (default)65 × 65345 bytes3.4 KB/s10.1 KB/s
Large81 × 81558 bytes5.4 KB/s16.3 KB/s
Huge97 × 97821 bytes8.0 KB/s24.1 KB/s
Extreme113 × 1131,125 bytes11.0 KB/s33.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 rateBlocksBest caseRealistic
Medium, Low, 10 fps44649s1m 2s
Medium, Medium, 10 fps5741m 3s1m 20s
Small, Low, 10 fps8781m 36s2m 3s
Large, Low, 15 fps27620s26s

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.

MethodNetwork neededWhere the file goes
QR code with a download linkInternet on both devicesUploaded to the service's server
Bluetooth or AirDropPairing, or Apple devices at both endsStraight between the devices
This pageNone once both pages are loadedFrom 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.

Frequently Asked Questions

How does sending a file over QR codes work?
The file is split into small blocks and shown as an endless stream of animated QR codes. The first pass shows each block once, in order. After that, every frame carries the XOR of a pseudo-random set of blocks, so the receiving camera can miss frames, join late or lose focus and still rebuild the file from the frames it does catch. This is called fountain coding.
Do I need internet, Wi-Fi, or Bluetooth?
Not for the transfer itself. The file is never uploaded, and the only thing travelling between the two devices is light from one screen into the other camera. Both devices need the page loaded first, and the sending side then works offline. A receiving browser without a built-in QR detector downloads a small decoder script when its camera starts, so start the camera once while still online if you plan to disconnect.
How fast is it?
At the default settings (Medium density, Low error correction, 10 frames per second) the screen carries about 3.4 KB of the file per second, and the realistic time the tool shows allows for frames the camera misses. Larger QR densities and faster frame rates raise that, up to about 33 KB per second at Extreme density and 30 frames per second, if the camera can keep up. It suits small files such as a document, a photo, a config file or a short audio clip.
How do I know the file arrived intact?
Every frame carries its own CRC-16 checksum, so a misread frame is thrown away. The sender also includes a CRC-32 checksum of the whole file. When all the blocks are rebuilt, the receiver recomputes it and shows Checksum verified if it matches, or a warning that suggests sending again if it doesn't.
Why is my transfer slow or stalling?
Usually the camera can't keep up with the frame rate, or the QR is too dense for it to read. Lower the frame rate, which you can also change while broadcasting, choose a smaller QR density, raise the error correction to Medium or Quartile, hold the camera so the code fills the guide box, and make sure the sending screen is bright and free of glare.
Is there a file size limit?
Yes. The format allows at most 65,535 blocks, so the largest file depends on the settings: about 22 MB at the default Medium density with Low error correction, and about 74 MB at Extreme. Time is the practical limit. A 1 MB file at the default settings needs 2,899 blocks, which the tool estimates at 5m 16s in the best case and 6m 46s realistically. The estimate appears as soon as you choose a file, and the Start button stays disabled when a file needs too many blocks.
Which browsers and devices work?
Current versions of Chrome, Safari, Edge and Firefox, on phones and desktops. The receiving device needs a camera, and browsers allow camera access only on pages served over HTTPS. The sending device only needs a screen that can show the page.