Optical file transfer · No network · No RF
Sometimes the best channel is the one nobody is listening on. SilentStream moves a file from one device to another using only a screen and a camera — animated QR codes, fountain codes, zero radio.
No Wi‑Fi. No Bluetooth. No pairing. No shared network. The payload travels as light. If you can see the screen, you can receive the file.
Why this exists
Conventional transfer assumes RF is available and safe. That assumption is not universal. Air-gapped machines, RF-hostile environments, and devices that simply refuse to join the same network still need a way to move small-to-medium files without inventing a new physical medium. In short - air-gapped file transfer.
For a more practical example of its use - look no further than the conflict between Russia and Ukraine. Both sides using RF detection against each other shows real need for alternate non-RF transfer methods such as this.
A phone already has a bright screen and a decent camera. That is enough.
Standing on other people’s weekends
SilentStream is not a lonely invention, it's not even my invention - I just took the idea and turned it into a Progressive Web App so as to make it available offline without need of an app store or compiled binaries. It is a pure-static, installable take on an idea that has been proven more than once.
Decimen Optical Transfer is the recent browser proof-of-concept that made the idea travel again. One device streams fountain-coded QR frames; the other reconstructs the file from light alone. Self-describing frames, mid-stream join, no back-channel. Built fast, open source, and honest about real-world rates on phones. SilentStream inherits that architecture and the insistence on “any frames, any order.”
divan/txqr (2018) did the hard thinking years earlier: animated QR as a transport, then Luby Transform fountain codes so dropped frames stop being fatal. The write-ups on animated QR and fountain codes remain the clearest explanation of *why* rateless coding beats naive “loop the chunks until everything arrives.” If you only read one prior-art source, read those posts.
Luby Transform / fountain codes are the mathematical reason this works without a reverse channel. The sender never needs ACK/NACK. The receiver collects until it has enough independent combinations, then peels the original blocks out. Missed frames cost time, not correctness.
Other projects explored the same physical channel — sequential QR streams, offline tools, experimental grids and denser encodings. The pattern is consistent: when RF is unavailable or undesirable, light is still there.
What SilentStream adds
- Pure static. This PWA has no moving parts. There is no reporting back to RicheyWeb or to any analytics/telemetry system.
- PWA. Install once from the browser; after that it works offline from the home screen.
- Single-file, KISS. Compress → fountain-encode → stream. Receive → reconstruct → verify → download.
- Filename in-band. The original name rides with the packets.
- WASM decode path with a pure-JS fallback, because phone cameras are the bottleneck and thermal throttling is real.
- Practical limits. Multi‑MB is possible; multi‑hundred‑MB is not the point. Soft ceiling around tens of megabytes under real lighting and stability.
What it is not
It is not a replacement for Bluetooth, AirDrop, or a USB cable when those are available and allowed. Optical throughput is modest. Alignment, brightness, and a steady camera matter more than marketing copy. Anyone with line of sight can intercept the stream — treat it as a visible channel, not a secret one.
Use it
Install the PWA on both devices from https://www.richeyweb.com/silentstream/ . One side Send, the other Receive. Prop the phone, raise the brightness, hold steady. Start with a small file until the link feels familiar.
Credit where it is due
- Decimen Optical Transfer — https://github.com/bashalarmistalt/decimen-optical-transfer
- TXQR — https://github.com/divan/txqr
- Animated QR / fountain codes write-ups — https://divan.dev/posts/animatedqr/ , https://divan.dev/posts/fountaincodes/
- Luby Transform / fountain codes — the rateless idea that makes a one-way optical link practical
- zxing-cpp / zxing-wasm — solid QR decode when pure JS starts to sweat
SilentStream is free, static, and installable. If it solves your problem, use it. If it does not, you lost nothing but a few minutes of light.