KBQR 01Text ↔ QR · offline

Carry text across the air gap.

Print a numbered set or play it on screen. Scan in any order to restore the exact text.

01 / Encode

0 bytes

No set generated yet.

02 / Restore

Point the camera at one code inside the square. Start anywhere in the sequence. Frame 0 identifies the label and byte length.

Camera access needs browser permission and usually localhost or HTTPS. With a local file, try the camera or use a cropped QR photo below.

Paste decoded frame text

Waiting for the first frame.

Format, print guidance & privacy

KBQR1 is a plain indexed format, not UR. Every frame includes the set id, frame number, count and whole-payload SHA-256. All frames including index 0 are required. A missing sheet cannot be reconstructed from other sheets; QR error correction only protects each individual code.

Default: 160-byte chunks, Q correction, 65 mm codes with a four-module white margin. Print at 100% on A4 with browser headers and footers off. Use black on white, ordinary quality or better, and test a complete restore on your actual inkjet before relying on the paper.

QR has mature browser encoders and jsQR camera decoding. Aztec and Data Matrix need different readers; qr-adapter.js is the explicit extension point. Neither is implemented here.

No uploads, analytics, external fonts, storage or network calls. The content security policy blocks connections. QR encoding is not encryption; printed codes and saved exports contain your input. The checksum detects corruption; it does not authenticate the sender. Validate KPOP backup content in KPOP after restoring it.

See README.md, FORMAT.md, PRIOR-ART.md and AGENT-HANDOVER.md in this folder.