airgap screen to camera

File transfer from a screen to a camera, built on a data fountain: one screen shows the file as slowly turning tiles or a color mosaic, a phone camera films it, from any moment and whatever frames it misses. The picture never flashes: tiles only turn or fade, and all colors have the same brightness. Everything runs in this page: no file or picture is uploaded anywhere. Transfer by sound instead, or by the color of the light.

What is a data fountain?

The file is cut into K blocks. After a first pass over the blocks themselves, every packet sent is the XOR of a pseudo-random choice of blocks, a new one each time, like drops from a fountain. Any K packets, or very slightly more, rebuild the file, whichever ones they are: the progress bar counts the useful ones. So the receiver never asks for anything back, can start late and can miss frames; it only takes a little longer.

airgap is a teaching project built to show this idea at work. Try it: start the receiver in the middle of a transfer, or interrupt it for a few seconds, and watch the progress resume. Details in docs/fountain-code.md in the repository.

Need speed rather than calm? libcimbar (MPL-2.0, not related to this project) sends about 100 KB/s from a screen to a phone camera, roughly 100 times faster than this page at its fastest. Its picture changes entirely many times per second, so it is not a calm display.

Point the camera at the other screen so that the whole pattern and its four rings are visible, as large as possible. Hold still.

Log