# Halftone QR codes

> A halftone QR code subdivides each module into a 3×3 grid, keeps the centre subcell at the module's true dark or light value, and lets the outer subcells carry a photograph's tones. Decoders sample module centres, so the code still reads while the texture shows the image. Margin drops, so verify on real phones.

Source: https://useqr.app/docs/design/halftone-qr-codes · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## The 3×3 subcell trick

A halftone QR code exploits one precise fact about decoders: they sample luminance at
each [module](/glossary/module)'s **centre**, not across its whole area. So divide every
module into a 3×3 grid of subcells:

| Subcell | Carries |
|---|---|
| Centre (1 of 9) | the module's **true** dark or light value, untouchable |
| Outer ring (8 of 9) | the halftoned tones of your photograph |

The centre subcells, one-ninth of each module, keep the code machine-readable. The other
eight-ninths render the image as halftone dots, the way newspapers print photographs.
Viewed at arm's length the eye blends subcells into a picture; the decoder, sampling
centres, still sees a valid grid.

## Why this beats diffusion art for reliability

Unlike [AI-generated art codes](/docs/design/artistic-and-ai-generated-qr-codes), where
damage is diffuse and unbounded, halftoning is **structured, deterministic damage**: the
centre of every module is correct by construction, and only the surroundings carry noise.
A good halftone generator produces the same scannable output every time, no
generate-and-cull lottery. The finder patterns, [quiet zone](/glossary/quiet-zone) and
timing rows are typically left fully solid, so the code's structure stays pristine.

## The risk profile

The margin cost is real, and it concentrates in two places:

- **Blur mixes subcells.** Camera shake or a missed focus smears neighbouring subcells
  into the centre sample. A plain module survives blur well (its whole area is one
  value), but a halftone module's centre is surrounded by deliberately wrong luminance
  on eight sides.
- **Print must resolve subcells.** Each subcell is one-third of a module wide. A plain
  code is safe down to about **0.5 mm modules** at 300 DPI; a halftone module needs its
  subcells to hold that detail, so treat **~1.5 mm** as the halftone module floor, three
  times the usual. For a version 2 code (25 modules plus a 4-module quiet zone each side)
  that means roughly **5 cm printed width minimum**, versus the 2 cm floor for a plain
  code. The resolution arithmetic behind this is in
  [QR code DPI for printing](/docs/print/qr-code-dpi-for-printing).

Angle and distance also cost more than usual: at 10× width, modules span a few camera
pixels and subcell texture pushes centre samples toward grey. Keep halftone codes for
close-range scanning (hand-held cards, packaging, book covers), not posters across a room.

## Practical settings

Use error correction Q or H; the centre-sample trick carries most of the load, but
thresholding on textured modules is never as clean as on solid ones, and print and
lighting will take their share. Prefer high-contrast source images: a photo that is
mostly mid-grey halftones into visual porridge and helps neither the eye nor the decoder.
Then [verify the final artwork decodes](/validate) and test on phones at the distances the
piece will actually be scanned; the protocol in
[testing diffusion codes](/docs/design/stable-diffusion-qr-codes-do-they-scan) applies
unchanged.

## FAQ

### How does a halftone QR code work?

Each module is subdivided into a 3×3 grid. The centre subcell keeps the module's true dark
or light value, and the eight outer subcells display the halftoned image. Decoders sample
module centres, so the code decodes while the texture shows the photograph.

### Are halftone QR codes reliable?

More reliable than AI-generated art codes, because the damage is structured and every
module centre is correct by construction. They still carry less margin than plain codes,
particularly under blur and at distance, so verify with a real decoder and multiple phones.

### How big should a halftone QR code be printed?

Around three times the plain-code floor. Subcells are one-third of a module, so treat
1.5 mm as the minimum module size (roughly 5 cm total width for a version 2 code)
against the 2 cm minimum for a plain equivalent.

### What error correction level do halftone codes need?

Q or H. In principle the centre-sampling trick preserves every module, but textured
modules threshold less cleanly than solid ones, and printing, glare and camera angle
consume the remaining margin. H costs density, so shorten the payload first.

## Try it

- https://useqr.app/url
- https://useqr.app/validate
