QRTX Early access
Optical file transfer

Send files between air-gapped machines with QR codes and get an answer back.

Two screens, two cameras, no network. QRTX streams a file as QR frames, and the receiving machine acknowledges each frame over the same optical link. The sender stops showing frames once they arrive and slows down when they don't.

Simulated transfer streaming
0/40Frames ACKed
1.00Frames / sec
0Missed reads
1Loop pass
An illustration of the protocol, not a recording. A video of the two-node test rig is coming soon.
How it works

Two nodes facing each other, each talking in one direction

Each node needs one display and one camera pointed at the other node's display. Payload frames travel one way and acknowledgements travel the other way, at the same time.

Node A → B

Sender

  1. Ingest and compress

    The file is LZ4-compressed and hashed with SHA-256 so the receiver can prove it got every byte.

  2. Chunk and encode

    Chunks are packed with msgpack and rendered as QR frames at error-correction level M. A manifest frame carries the filename, sizes and hash.

  3. Stream the loop

    Unacknowledged frames play on the display in a loop. Each acknowledged frame drops out, so every pass is shorter than the last.

  4. Adjust the frame rate

    If most frames get acknowledged, the sender speeds up. If few do, it slows down. The current range is 0.25 to 4 frames per second.

Node B → A

Receiver

  1. Watch the sender's screen

    The camera decodes payload frames as they appear. Duplicates and stale frames from earlier jobs are ignored.

  2. Acknowledge what arrived

    One bundled ACK frame lists every chunk received so far. The sender reads that single frame instead of hundreds of separate ones.

  3. Clear confirmed ACKs

    Signal frames from the sender confirm which ACKs it has seen, so neither side keeps repeating itself.

  4. Reassemble and verify

    When the last chunk arrives, the file is rebuilt, decompressed and checked against the SHA-256 hash from the manifest.

Payload frame
job    6f1c…e2a0
chunk  17 / 40
enc    raw | b64
data   ‹lz4 bytes›

Carries one slice of the compressed file. Most of the screen time goes to these.

ACK bundle frame
job    6f1c…e2a0
ack    [0–16, 18, 21–24]
mode   bundled

Small and quick to read. It replaces one ACK frame per chunk, which the sender's camera often missed.

Signal frame
job    6f1c…e2a0
seen   [0–16, 18, 21–24]
state  streaming

Housekeeping between nodes: which ACKs were received and where each job stands.

Compare

A QR loop that gets a reply

One-way QR streamers loop the whole file until someone stops them and can't tell what made it across. QRTX adds a return channel, so the sender knows what's still missing.

CapabilityQRTXOne-way QR streaming
DirectionFull duplex: payload one way, ACKs the otherSender to receiver only
Delivery confirmationPer chunk, via bundled ACK framesNone; an operator watches for completion
ResendsOnly frames not yet acknowledgedThe entire file, every loop
Frame rateAdapts to the measured read rateFixed, set by hand
IntegritySHA-256 check on reassemblyVaries by tool
Node authenticationHandshake with auth token, in developmentNone

● available now · ◐ in development · ○ not supported

Use cases

Where a cable or a network isn't allowed

QRTX moves files across a gap you can see. Nothing is plugged in, so there's no USB port or network interface to compromise.

Air-gapped networks

Move logs, reports and updates on or off an isolated system without removable media.

Industrial control systems

Pull configuration files and historian exports off OT and SCADA hosts that must stay unconnected.

Field and forensics work

Copy evidence or survey data from a sealed device using only its screen and a camera.

One-way policies with proof

The return channel carries only acknowledgements, so you get confirmation of delivery without opening a path for data.

Kiosks and locked terminals

Hand a receipt, ticket or document to a visitor's device without Wi-Fi, Bluetooth or pairing.

Demonstrations and teaching

Every frame is visible, which makes QRTX a clear way to show how chunking, ACKs and flow control work.

Roadmap

What works today and what's next

QRTX runs end to end on a two-node test rig. These are the pieces in place and the ones being built.

Working

  • ●
    Compression, chunking and QR encoding

    LZ4, msgpack framing, manifest frame with SHA-256.

  • ●
    Camera decoding on the receiver

    Live capture with zoom control and stale-frame filtering.

  • ●
    ACK return channel

    Sequential and bundled modes; bundled is the default.

  • ●
    Signal frames

    Node-to-node status and ACK clean-up.

  • ●
    Adaptive frame rate

    Speeds up and slows down based on the acknowledgement rate.

Next

  • ◐
    Handshake and authentication

    Splash frame, handshake request and auth token shared by both nodes.

  • ○
    Remote file requests

    Browse the other node's files and request one with a qrtx:// link.

  • ○
    Encryption and fountain coding

    Encrypted payloads, and erasure coding so lost frames needn't be resent.

  • ○
    Symmetric peers

    Either node can send or receive.

  • ○
    Python package

    Installable from PyPI.

Try QRTX on your own air gap

We're looking for early users with real air-gapped or OT environments. Tell us what you need to move and how your systems are set up.