# JDT pattern atlas

**216 distinct designs across 18 families. All open exactly https://jdt.engineering.**

Download the repository and open [gallery.html](gallery.html) for search, family filters, full-size previews and PNG/SVG downloads. It works offline without a server. On GitHub, use the family grids below.

[Fractal contact sheet](fractals-contact-sheet.png) · [Circular/radial sheet](radial-contact-sheet.png) · [Spiral/optical sheet](optical-contact-sheet.png) · [Nested QR experiments](nested/README.md)

## Spirals and optical

![Spirals and optical](optical-contact-sheet.png)

| Family | Designs | Browse |
| --- | ---: | --- |
| Archimedean spirals | 12 | [Image grid](families/archimedean/README.md) · [Sheet](families/archimedean/contact-sheet.png) |
| Lissajous knots | 12 | [Image grid](families/lissajous/README.md) · [Sheet](families/lissajous/contact-sheet.png) |
| Logarithmic spirals | 12 | [Image grid](families/logarithmic/README.md) · [Sheet](families/logarithmic/contact-sheet.png) |
| Perfect mazes | 12 | [Image grid](families/maze/README.md) · [Sheet](families/maze/contact-sheet.png) |
| Moiré interference | 12 | [Image grid](families/moire/README.md) · [Sheet](families/moire/contact-sheet.png) |
| Woven ribbons | 12 | [Image grid](families/weave/README.md) · [Sheet](families/weave/contact-sheet.png) |

## Fractals

![Fractals](fractals-contact-sheet.png)

| Family | Designs | Browse |
| --- | ---: | --- |
| Branching trees | 12 | [Image grid](families/branching/README.md) · [Sheet](families/branching/contact-sheet.png) |
| Hilbert curves | 12 | [Image grid](families/hilbert/README.md) · [Sheet](families/hilbert/contact-sheet.png) |
| Julia sets | 12 | [Image grid](families/julia/README.md) · [Sheet](families/julia/contact-sheet.png) |
| Mandelbrot islands | 12 | [Image grid](families/mandelbrot/README.md) · [Sheet](families/mandelbrot/contact-sheet.png) |
| Recursive squares | 12 | [Image grid](families/recursive-squares/README.md) · [Sheet](families/recursive-squares/contact-sheet.png) |
| Sierpinski carpets | 12 | [Image grid](families/sierpinski-carpet/README.md) · [Sheet](families/sierpinski-carpet/contact-sheet.png) |
| Sierpinski triangles | 12 | [Image grid](families/sierpinski-triangle/README.md) · [Sheet](families/sierpinski-triangle/contact-sheet.png) |

## Circular and radial

![Circular and radial](radial-contact-sheet.png)

| Family | Designs | Browse |
| --- | ---: | --- |
| Circular interference | 12 | [Image grid](families/circular-waves/README.md) · [Sheet](families/circular-waves/contact-sheet.png) |
| Concentric rings | 12 | [Image grid](families/concentric/README.md) · [Sheet](families/concentric/contact-sheet.png) |
| Kaleidoscopes | 12 | [Image grid](families/kaleidoscope/README.md) · [Sheet](families/kaleidoscope/contact-sheet.png) |
| Radial spokes | 12 | [Image grid](families/radial-spokes/README.md) · [Sheet](families/radial-spokes/contact-sheet.png) |
| Rosettes | 12 | [Image grid](families/rosettes/README.md) · [Sheet](families/rosettes/contact-sheet.png) |

## What is and is not symmetric

The target artwork can have circular or rotational symmetry. Required finder, timing, format and alignment patterns constrain symmetry across the complete QR. These designs use visual symmetry without claiming exact module-for-module rotational symmetry. All required QR patterns and the white quiet zone remain intact.

Fractal targets show finite-resolution approximations of mathematical self-similarity. They are not automatically smaller scannable QR codes. The separately labelled nested experiments test actual cropped child codes.

## Verification and every generated option

All **216 finalists** passed both ZXing-C++ and OpenCV at their supplied PNG resolution. All **2,088 pattern candidates** were reconstructed independently with qrcodegen, with exact matrix agreement. Every candidate, including rejected and superseded options, is retained in [the searchable archive](archives/pattern-search.zip). Nested candidates and their crop tests are in [the separate archive](archives/nested-search.zip). See [validation.md](validation.md) and [manifest.json](manifest.json).

The art uses noncanonical padding after the payload terminator; the decoded URL has no suffix. Reed–Solomon parity is recomputed and structural modules are preserved. Keep the white border. Camera and printed-size testing remain separate from these automated checks.

## Reproduce

Work on WSL native storage. Activate the existing `.venv` before any Python command. From the repository root:

```sh
node patterns/src/generate.mjs
node patterns/src/generate.mjs --rescue
node patterns/src/generate.mjs --outline
source .venv/bin/activate
python patterns/src/curate.py
node patterns/src/nested.mjs
node patterns/src/nested3.mjs
node patterns/src/nested3.mjs --shifted
python patterns/src/check_nested.py
python patterns/src/check_nested.py --triple-only
python patterns/src/build_catalog.py
python patterns/src/archive.py
python patterns/src/audit.py
```

Use the bundled engine; no npm install is needed for generation. [Core source and provenance](src/core/README.md). Targets and gallery are original MIT-licensed code. The older Go generator and every existing logo/portrait design remain unchanged.

Background: [Russ Cox’s QArt explanation](https://research.swtch.com/qart), [furious-qr pixel-art solver](https://github.com/zhengkyl/furious-qr).
