Move a file between two devices in the same room.
Screen to camera, as QR codes. No network, no cable, no account. Nothing you send leaves the two devices holding it.
- Scan the code with their camera.
- Choose a file on this device.
- Point their camera at this screen.
- It verifies, then saves over there.
Link the other device
Scan this with the phone's camera app.
Start
Workspaces
Comms
Text and voice notes, carried by tones.
Share
Photos to every camera watching at once.
Dead drop
Sealed with a passphrase before it hits the screen.
Scatter
A picture out as noise, and a way back.
Vault
One zip, saved as a file, text, or frames.
Sound link
The audio channel, with a waterfall to watch.
Air-gapped keys
Payment codes, and a transaction to an offline signer.
- Start listening on both devices.
- Type a line; watch its airtime.
- Send. The tones play, they decode.
- Or record a voice note instead.
-
Nothing said yet.
Start listening on both devices and talk. There is no network and nothing to pair - the other phone only has to be within earshot.
Kept on this device only. Sound carries to everyone in earshot.
Sound link
Two lanes of sixteen tones, 17.0 to 18.6 kHz, 25 bytes a second. Nothing to pair; the other seat only has to be in earshot.
- Pick a band. Quiet is the default.
- Start listening, and allow the microphone.
- Watch the waterfall for stepping tones.
- Ping, to check the other device.
Off.
Everyone in earshot hears this. To talk, go to Comms.
Sense
What this device can work out about the room it is in, from physics alone. Nothing is sent anywhere and nothing is kept.
The read
Nothing measured yet.
Press Start sensing. It listens for about ten seconds and then says what it can.
What it concluded
What it could not tell
Is this room in the way of the sound link?
Start sensing to find out.
Reverberation time is the part a microphone can see, and it is not the part that decides. What breaks a frame is the ratio of direct sound to reverberant sound, and that depends on how far away the other device is as much as on the room.
Measured on this modem: the base rate carries a room with 2000 ms of reverberation at 6 dB direct-to-reverberant, and fails a 150 ms one at 0 dB. The long room is the easy one. Nothing here can measure that ratio from one microphone, so the rate this page recommends assumes 3 dB and is conservative by design.
The other thing reverberation does is notch tones. A random tail puts deep nulls every coherence bandwidth, and a four-tone lane loses a quarter of its alphabet to one null where a sixteen-tone lane loses a sixteenth. That is why the two fastest rates fail about one room in five for reasons no measurement predicts, and why they are offered rather than chosen.
What this room could carry
-
What this device admits to having
The microphone is off.
Sound
Around you
Chirps while you turn, and draws what came back.
Range is good to about six centimetres, which is the chirp's bandwidth and not something a faster sample rate would improve. Bearing is not: the speaker and the microphone are only roughly directional at 20 kHz, so every return is smeared across about sixty degrees and nothing here is drawn or named finer.
A blank sector means nothing came back, which is not the same as nothing being there. A wall is a mirror at these frequencies, so you hear it facing square on and miss it at an angle. Hatching is a sector never swept. The floor and the ceiling are subtracted by construction, along with anything at the same distance all the way round, and there is no height information in this at all.
Light
Motion
Field and power
Room
Platform
A browser cannot be calibrated, so some of these are relative rather than absolute. Each reading says which it is: measured is a real quantity, relative has no reference to compare against, and assumed rests on a stated constant.
Signals
A birdseye map of what actually reaches this spot, measured while you walk. Position comes from counting steps and a compass, so the map stretches and drifts; walk back to where you started and say so, and it corrects itself.
- Stand still. Press Start walking.
- Walk the space at a steady pace.
- Return to the start and close the loop.
- Read where the channel holds up.
Nothing walked yet.
Stride is guessed from your cadence and varies by tens of percent between people, so the scale of this map is the least certain thing on it. Closing the loop fixes the drift, not the scale.
Sync
Two phones, one clock, no network. A chirp there and back measures how far apart their clocks are; a few of them measure how fast the two are drifting away from each other.
- Link the two devices first.
- Open this page on both.
- Press Sync. They chirp at each other.
- Fire together, and film the proof.
Offset
not measured
Two timestamps cross the sound link. Nothing leaves the room.
The measurement
Same frame?
Fire together
Both screens go white at the same instant on the shared clock. Film the two phones with a third camera: if the sync is real they land in the same frame, and at 30 frames a second that frame is 33 ms wide. The offset above is measured through the microphones and owes nothing to the hardware. The flash has to go out through a screen, so it carries whatever the two display pipelines add - nothing on two of the same phone, tens of milliseconds across a phone and a laptop.
Map
Every device chirps in turn and the others answer, each in its own slot. One chirp gives one device its distance to everyone in earshot, and the distances draw the room.
- Link the devices, then open this page on each.
- Press Start on all of them.
- Watch the map fill in as they hear each other.
Not started.
The map
Distances
Distances fix the shape and nothing else. Where the room is, which way it faces, and whether it is the right way round are all unknowable from sound alone - a room and its mirror image measure identically - so this device is drawn at the centre and Flip swaps the handedness.
Floor plan
A chirp says how far away the nearest wall is. The compass says which way you were facing. Your steps say where you were standing. Put the three together from a few spots and the room draws itself.
- Stand still. Press Sweep here.
- Turn slowly, all the way round.
- Walk a few steps. Sweep again.
Not started.
The plan
The beam is 60 degrees wide, so one sweep from one spot draws arcs rather than walls: a return says something is three metres away somewhere in a wide cone. Sweeping from a second spot looks straight through the first spot's arcs and rubs out everything that was not really there. Metre-scale honest, centimetre-scale fiction, and it reaches seven metres.
Dead drop
The screen only shows ciphertext. A photograph of it gives nothing.
- Pick a passphrase both devices know.
- Add a message, or attach a file.
- Seal and send, or seal and save.
- They type the same passphrase.
Nothing sealed.
Split a picture
The passphrase above, made visible: the keystream, and the picture with that keystream subtracted from it. A demonstration only, and it goes one way. To send a picture somebody can open, use Scatter.
A picture becomes two planes.
Nothing split.
Opened here
Sealed arrivals land here.
Scatter
A picture out as noise, and a way back. The phrase is minted here, eighty bits. Send it separately from the picture.
- Choose a picture; it leaves as noise.
- Save the picture, copy the phrase.
- Send the two by different routes.
- They gather it with the phrase.
A picture leaves as noise.
Phrase
Eighty bits, kept nowhere. Lose it and the picture is gone.
Nothing scattered.
A scattered picture, and its phrase.
Nothing gathered.
Send the file, never a photo of it. A re-encode or a resize destroys it, and the app says so rather than hand back noise. What comes back is a dither, which is all three bits a pixel can hold.
Payment request
- Pick the chain and paste an address.
- Add an amount, if you want one.
- They scan the code, or copy the URI.
-
Air-gapped signing
- Paste the unsigned PSBT or transaction.
- Check the inputs, outputs and fee.
- Send to the signer, or show UR.
- The signed one comes back the same way.
- Kind
- -
- Inputs
- -
- Outputs
- -
- Sending
- -
- Fee
- -
Send
- Drop, paste, or choose a file.
- Point their camera at this screen.
- Hold still; the chunk map fills.
- It verifies, then saves over there.
Drop a file here, paste, or .
QR codes. Nothing uploads.
Before this starts
-
-
Checking it will make it
30 s
This screen
- Frame
- hello
- Version
- -
- Payload
- -
- Rate
- -
This camera
Back up
Everything you choose becomes one zip. That is what everything below works on.
- Choose files. They become one zip.
- Save it, copy it, or encode frames.
- Restore below, from text or frames.
- Files
- -
- Original
- -
- Container
- -
- Ratio
- -
No container yet.
Restore from frames
Exported frames, screenshots, or straight-on photos. Order and gaps do not matter. Angled shots are not read.
Restore from text
Save as a video
Any sufficient subset of frames rebuilds the file, so the reel survives a re-encode. Reading one back plays the whole video.
- Frames
- -
- Length
- -
- Per frame
- -
- Grid
- -
No container yet.
Frame lab
Verify reads each frame back out of canvas pixels, never from the arrays that drew it, then compares every byte. At 8K, 16 px cells: -
- TX
- 0
- RX
- 0
- Goodput
- -
- Chunk
- -
- Build
- -
Frames not decoding? Lower the version, or raise ECC.
Log
Everything measured on every page lands here. Copy or share it to get the numbers off the phone after a test - the last 2000 lines go, not just the ones still on screen.