◈ pocket photoPHOTO → QR

A little photo.
A whole QR.

Turn a moment into a code you can keep, print, or pass along.

Packaging mode
One photo. Packed inside.

Centered square · 256 × 256 · Grayscale

How it works

The photo is carried inside the URL, in the URL fragment (after #), so no server ever sees or logs it. The first character is the mode: #1 = WebP, #2 = a tiny 4-bit codec. Anyone with the code can see the photo.

Edit BASE_URL near the top of the app script to the final address of this HTML file. Leave it empty to use the current hosted address. A local file needs a hosting address before it can produce a useful QR.

Encoding starts at WebP quality 20 at 256 × 256, stepping down to quality 10; if it still won't fit, it retries at 128 × 128 down to quality 0. The complete ASCII URL must fit QR version 40 with error correction L (2,953 bytes). Base64url overhead and your hosting address both count. Some detailed photos cannot fit even at quality 0; try a simpler photo. Browsers may encode WebP differently.

Mode 2 uses a 4-bit grayscale 8×8 DCT, adaptive arithmetic coding, and a URL-safe base-78 alphabet to keep the code small.