# Photographic QR: stronger scan defaults

[Open gallery](gallery.html) · [New contact sheet](contact-sheet.png) · [Checks](reliability-audit.json)

The earlier tiny-dot photo renderings were reported unreliable when scanned. The gallery now defaults to **12 stronger designs**, selected from 576 rendering candidates. Each passes **ZXing and OpenCV in all 20 tested digital conditions**: 480 successful reads across the twelve designs. The previous twelve exports remain unchanged and reachable through separate Earlier tiny dots and Earlier references filters.

Click **Open large QR** to scan. Cards and the scan viewer use a whole number of pixels per QR module, keep the four-module white margin visible, and avoid shrinking a detailed image to an arbitrary thumbnail size. Phone confirmation of these new designs is still pending; passing digital decoders is not a promise about every camera.

## What changed

- Stronger tonal separation, larger opaque squares or larger circles replace the tiny center marks in the default collection.
- The search compares ECC L, M and H, two photographic targets and four masks, while retaining version 6 and its open interior. The selected correction level is recorded per image.
- All photo targets cover the whole QR field. All required structural pixels remain canonical black/white; no interior alignment grid or central picture insert is introduced.
- Original source photographs, earlier PNG/SVG exports, matrices and failed experiments are preserved. Sources are generated photographic images, with provenance in `sources/PROVENANCE.md`.

## Tests and limits

Each selected PNG was read with both decoders at native 980px, and at these square widths: **196, 245, 294, 343, 392, 441, 490, 539, 588, 637, 686, 735, 784, 272, 334 and 360px**. The remaining cases are a 0.65px Gaussian blur, a 12-degree rotated view and a perspective-warped view based on a 588px image. This includes the gallery's integer-module card/modal sizes and additional fractional sizes.

All twelve matrices independently reconstruct from their exact data and error-correction level. Module centers, every function-cell pixel and the white quiet zone are verified. Native SVG rasterization reproduces the exact PNG and also passes both decoders. SVG files embed a raster image; they are not vector photographs. The solver uses noncanonical post-terminator padding with recomputed parity and no intentionally changed matrix bits.

The main sample report is `manifest.json`, with individual evidence next to each export under `robust/`. `reliability-audit.json` records independent structure and matrix checks. `gallery-validation.json` records a minimal-DOM control test; it is not a browser or phone test. `src/verify-display.py` checks actual square browser captures of individual QR image elements. Do not treat detection of one code in a multi-code page screenshot as a pass for every card.

The earlier tiny-dot versions remain explicitly experimental because the user's physical scan result was worse than their native desktop decoder result. Their original records are retained in `earlier-manifest.json` and [earlier notes](EARLIER.md).

## Reproduce

Activate the existing Python virtual environment (or create and activate a new one), and install requirements there. Node 22+ and the pinned esbuild dependency rebuild the generator:

```sh
python src/prepare.py
node src/reliable-generate.mjs
python src/reliable-render.py
python src/reliable-render.py --lighter
python src/reliable-curate.py
python src/reliable-audit.py
node src/build-reliable-gallery.mjs
node src/test-reliable-gallery.mjs
```

To rebuild the standalone generator: `esbuild src/reliable-generate.ts --bundle --platform=node --format=esm --outfile=src/reliable-generate.mjs`. The corresponding sources and MIT notices are under `src/core`. The older experimental generation pipeline remains available separately.

The private repository retains `archives/experiments.zip` and `archives/reliability-trials.zip`. **Exclude archives and work from public hosting.** The public gallery links only curated exports, source images and their verification records. Panton fonts come from `../patterns/fonts`.
