Optical Link

A file crosses the gap as light. No radio, no cable, no network.

What to send
Link settings

Three codes ride in one image, one per colour channel, so every frame carries three times the data. Turn colour off if the receiving camera reads badly under artificial light.

The code appears here. Fill the receiving camera with it — closer is better than bigger.
Frame
0
Stage
idle
Per frame
--
Top speed
--
Code size
--
Chunks
--
Payload
--
Checksum
--
One clean pass
--

The first pass sends every chunk once. After that it keeps going with mixed frames, so anything the camera missed can still be worked out. Leave it running until the receiver says it is done.

Camera
Or read a recording — no camera permission needed

If the browser will not hand over the camera, film the sending screen with the phone's own camera app and load the clip here. Nothing is granted and nothing is served. A second clip can fill any gaps the first one left.

nothing loaded

Live view
stopped
Chunks recovered
recovered still missing
Recovered
0 / 0
Chunks
--
File size
--
Rate
--
Time left
--
Codes read
0 /s
Camera frames
0 /s
Lanes seen
--
Session
--
Decoder
--

Hold steady, fill the frame with the code, and let the camera focus. Missed frames cost nothing — the sender keeps producing new combinations until every chunk is filled in. Watch codes read per second: if it sits well below three times the camera frame rate, the codes are too fine for this distance.

Measure the link without a camera

This paints real colour frames, puts them through a simulated camera — lens blur, 4:2:0 chroma subsampling, sensor noise, gamma shift — then decodes them exactly as the camera path does and compares the result byte for byte. Use it to settle bytes per code and error correction before a real run. It reads the settings from the Send and Receive tabs.

Not run yet.

Created by Sanaur Rahman