Decimen Optical Transfer: fountain-coded QR file transfer Send a file between two devices using nothing but a screen and a camera. One page…
Decimen Optical Transfer: fountain-coded QR file transfer Send a file between two devices using nothing but a screen and a camera. One page…
Mid-transfer: a phone pulling a file out of the air at 130 KB/s.
Neither mode is encrypted: whatever is on the sending screen is readable by any camera pointed at it. The property this gives you is no network, not confidentiality — see [privacy](docs/user/privacy.md). ## Measured speed One record run per device pair. Sustained is whole-transfer goodput; peak is the best ≥1 s window inside that same run. Every row links to the full diagnostics run report that produced it ([how these are measured](docs/technical/diagnostics.md)). | pair | sustained | peak | transfer | codes | devices | when | receipt | |---|---|---|---|---|---|---|---| | desktop → phone | **418.5 KB/s** | **601.5 KB/s** | 1.0 MB in 2.5 s | 4 | Odyssey G9 49″ → iPhone 17 Pro Max | 2026-08-09 (v0.4.0) | [run](benchmarks/runs/2026-08-09T04-12-41-run.json) | | phone → phone | **199.2 KB/s** | **340.8 KB/s** | 1.0 MB in 5.1 s | 2 | iPhone 17 Pro Max → iPhone 17 Pro Max | 2026-08-09 (v0.4.0) | [run](benchmarks/runs/2026-08-09T04-49-39-run.json) | ## Documentation **Using it** — [quick start](docs/user/quick-start.md) · [sending](docs/user/sending.md) · [receiving](docs/user/receiving.md) · [troubleshooting](docs/user/troubleshooting.md) · [install & offline](docs/user/install-and-offline.md) · [privacy](docs/user/privacy.md) **How it's built** — [architecture](docs/technical/architecture.md) · [protocol](docs/technical/protocol.md) · [platform quirks](docs/technical/platform-quirks.md) · [build & release](docs/technical/build-and-release.md) · [localization](docs/technical/localization.md) The short version of the protocol: a screen-to-camera link has no back-channel, so the sender streams fountain-coded frames ([Luby transform](https://en.wikipedia.org/wiki/Luby_transform_code)) — the receiver collects *any* ~K·1.15 distinct frames in any order and peels the file out. Dropped frames cost time, never correctness. ## Run it yourself ``` … ``` Open `https://localhost:5173/send/` on the sending device and the printed `Network` URL on the receiving phone (accept the self-signed certificate once). Walkthrough: [quick start](docs/user/quick-start.md). ## Similar projects The concept here was arrived at independently. It turns out several people have had similar ideas, and their takes are all worth a look: - [mohankumarelec/airgapped-qr-code-transfer](https://github.com/mohankumarelec/airgapped-qr-code-transfer): browser-based QR file transfer with compression and sequential chunking. Discovered after publicly demoing this project; convergent evolution in action. - [divan/txqr](https://github.com/divan/txqr) (2018): animated QR plus fountain codes in Go, with two excellent write-ups on why fountain coding beats sequential looping. - [sz3/libcimbar](https://github.com/sz3/libcimbar): goes past QR entirely with a custom high-density color code purpose-built for this channel. ## Project Creator/Maintainer Built by [Evan Crawley (Bash Alarmist)](https://www.linkedin.com/in/evan-crawley), with [node-qrcode](https://github.com/soldair/node-qrcode) and [decimen-codec](https://github.com/bashalarmistalt/decimen-codec), a custom [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp) build. ## License [AGPL-3.0-or-later](LICENSE), as of v0.4.0. Releases up to and including v0.3.0 were MIT-licensed and remain available under those terms. Portions were contributed under MIT, and the vendored [decimen-codec](https://github.com/bashalarmistalt/decimen-codec) decoder (AGPL-3.0-or-later) incorporates [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp) under Apache-2.0 — see [NOTICE](NOTICE).No open issues yet, or sync has not completed.