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