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