airgap light

The simplest optical link: one screen becomes a lamp that slowly changes color, and a camera only measures the mean color of what it sees. It can film the screen, or a wall lit by it. It is very slow, about a third of a byte per second, so it is for short messages. That is where the data fountain shines: packets are long and often lost, and the receiver still finishes, whenever it starts. Everything runs in this page: nothing is uploaded anywhere. Sound · Screen to camera · Pong (experiment).

What is a data fountain?

The file is cut into K blocks (16 bytes each here). 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 packets; it only takes a little longer. Details in docs/fountain-code.md in the repository.

Does it flash?

No. The four colors (amber, green, blue, mauve) have exactly the same brightness, and each fades into the next: only the hue changes, 2 to 8 times per second, never the amount of light, so it cannot trigger photosensitive seizures the way blinking can. A test checks every pace. Still, if colored light bothers you, look away: the camera does not need anyone to watch.

Dim the room. Point the camera at the other screen, or at a pale wall it lights up, and hold it still (rest the phone on something). The picture does not need to be sharp.

The colors the camera measured, one line per picture, kept only in this page (no picture). They help troubleshooting: replay them with airgap light decode FILE -v, or attach them to a bug report.

Frame log