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.
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.
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.