# QR Paper Backup

Encode text or pasted file bytes into a printable SVG sheet of numbered QR codes with restore instructions and checksummed chunk metadata.

## Run it

- **CLI:** `gizza tool qr-paper-backup "Recovery phrase, license key, or Base64 file bytes"`
- **Web:** https://gizza.ai/tools/qr-paper-backup/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/qr-paper-backup/tool.json

## Inputs

- `input` — Input text or encoded bytes _(field)_
- `input_encoding` — Input encoding _(field)_
- `chunk_bytes` — Bytes per QR code _(field)_
- `columns` — Columns _(field)_
- `error_correction` — QR error correction _(field)_
- `show_text` — Print payload text under each QR _(field)_

## Output

- Printable SVG sheet (svg)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `input` — Input text or encoded bytes
- `input_encoding` — Input encoding
- `chunk_bytes` — Bytes per QR code
- `columns` — Columns
- `error_correction` — QR error correction
- `show_text` — Print payload text under each QR

Example: `https://gizza.ai/tools/qr-paper-backup/?input=Recovery%20phrase%2C%20license%20key%2C%20or%20Base64%20file%20bytes&input_encoding=text&chunk_bytes=300&columns=3&error_correction=M&show_text=true`

---

## About this tool

QR Paper Backup turns text or pasted file bytes into a printable SVG sheet of numbered QR codes. It is meant for offline archival of secrets, recovery notes, tiny configuration files, license keys, or other small payloads that you want to store on paper rather than another drive.

Each QR code contains a self-describing line:

```text
QRB1|<index>|<total>|<id>|<base64-chunk>
```

The `id` is the first 8 hex characters of the SHA-256 digest of the complete original data, so every part can be tied back to the same set. To restore, scan all parts, sort them by index, concatenate the Base64 chunk fields, then Base64-decode the result.

## Worked example

Input:

```text
paper backup demo
```

Use **Input encoding = Text**, **Bytes per QR code = 300**, **Columns = 2**, **QR error correction = M**, and keep **Print payload text** on. The output is a deterministic SVG sheet with one QR code, a printed restore header, and the exact `QRB1|1|1|...` payload line under the code.

## Limits & edge cases

- This tool creates the backup sheet only; it does not scan photos or restore a backup from images.
- Paste file bytes as Base64 or hex. The page does not read local folders or upload files.
- `chunk_bytes` is clamped to 50–1200 raw bytes. Smaller chunks are easier to scan; larger chunks produce fewer QR codes.
- QR error correction protects each individual code. There is no erasure coding across missing pages, so print and store every part.
- The output is SVG. Use your browser's print dialog to print it or save it as PDF.

## FAQ

<details>
<summary>Can this encrypt my backup before printing?</summary>

No. Encrypt the data first with a separate encryption tool, then paste the ciphertext or its Base64 bytes here. Keeping encryption separate makes the printed QR format simple and auditable.

</details>

<details>
<summary>How do I restore the data later?</summary>

Scan every QR code, sort the lines by the numeric index field, concatenate the final Base64 chunk fields, and Base64-decode the combined text. The printed header repeats this process on the sheet.

</details>

<details>
<summary>What should I choose for bytes per QR code?</summary>

Use smaller chunks such as 100–300 bytes for reliable phone scanning on ordinary printers. Use larger chunks only when you have good print quality and want fewer codes.

</details>

<details>
<summary>Does losing one QR code make the backup unrecoverable?</summary>

Yes. QR error correction handles damage inside a code, but this tool does not add cross-code redundancy. Print all pages clearly and consider making multiple copies.

</details>

## Related tools

- [AES-CMAC Generator](https://gizza.ai/tools/cmac-generate/): Generate an AES-CMAC (NIST SP 800-38B / RFC 4493) of any message and key in your browser — AES-128/192/256 by key length, hex or base64 output. Free and private.
- [Hash All Generator](https://gizza.ai/tools/hash-all/): Hash text with every common algorithm at once — MD5, SHA-1, SHA-256/512, SHA-3, BLAKE3, RIPEMD-160, CRC-32 and more — free and private in your browser.
- [Text Hash Generator](https://gizza.ai/tools/hash-text/): Generate MD5, SHA-1, SHA-256/512, SHA-3, BLAKE2 or BLAKE3 hashes of any text in your browser, with hex or base64 output. Free, private, nothing uploaded.
- [HMAC Generator](https://gizza.ai/tools/hmac-generate/): Generate an HMAC of any message and secret key in your browser — HMAC-SHA256, SHA-1, SHA-512, SHA-3 or MD5, hex or base64 output. Free and private.
- [Keccak-256 Hash Generator](https://gizza.ai/tools/keccak-hash/): Compute the original Keccak-256 or Keccak-512 hash of any text in your browser — the exact hash Ethereum uses, not FIPS SHA-3. Free and private.
