QR Code Stencils and Spray Paint: Solving the Island Problem — featured illustration
Best Practices

QR Code Stencils and Spray Paint: Solving the Island Problem

6 min read
Create a QR code

You cut the stencil on a vinyl cutter, peel the sheet off the mat, and the middle of each corner square drops onto the bench. Three islands of material, no longer part of anything. That is not a cutting error. It is what the file told the machine to do.

A stencil is one connected sheet, so every part you keep has to hold on to the rest of it. A QR symbol is full of light areas with dark on all sides, and a light area with dark on all sides is a piece of sheet attached to nothing. A naive QR stencil is not difficult, it is impossible, and the whole craft is in what you do about that.

The finder patterns are the part that ruins it

Work out what the holes are first. You spray through them, so the holes are the dark modules and the sheet is the light ones. Now look at a finder pattern, one of the three big corner squares: a dark ring one module thick, a light ring one module thick, then a solid 3 by 3 dark block. The anatomy of those patterns sets out why all three matter.

The light ring between the outer frame and the inner block is a closed loop of sheet with a hole on both sides of it. Nothing holds it. When it falls out, the outer ring and the centre block merge into a single 7 by 7 opening, and you spray a solid dark square.

That is the failure nobody expects, because it does not look like damage. It looks like a tidy black square. A decoder hunting for three finder patterns finds three solid blocks with no ring structure, never locks onto the symbol, and reports nothing at all. Not a partial read. Nothing. Error correction cannot help either, because Reed-Solomon repairs the data region and never touches the finders.

So every finder needs bridges before the file goes near a cutter, and where you put them matters more than anywhere else in the symbol.

What a bridge actually does to the code

A bridge is a thin strip of sheet connecting an island to the body of the stencil. Sheet means no paint, so a bridge leaves a thin light line running across a dark module.

Whether that matters depends on where the line lands. A decoder samples near the centre of each module and takes one dark or light decision from it. A light line through the middle of a dark module pushes that sample toward light, which is a flipped bit. The same line hugging the boundary between two dark modules takes a bite out of both and leaves both centres dark, which usually decodes fine.

That gives you the one rule worth memorising: run bridges along module boundaries, not through module centres. In the finder pattern, put them at the midpoint of each side of the light ring, crossing it at a right angle, two at minimum and four if the material is floppy. Then touch the gaps in with a brush after lifting the stencil, because the finder is the one place where hand work is not optional.

Error correction is the budget the bridges spend

Out in the data region, every bridge is damage, and the expensive kind. A decoder does not know which codewords a bridge ruined, so it pays roughly twice per error what it would for a loss it knew about. The level comparison has the arithmetic; the short version is that L, M, Q and H recover about 7, 15, 25 and 30 percent of a symbol's codewords.

Level H is the only sensible choice here, and it is what the generator on this site renders, hard-coded, with no option to lower it. What it buys is a bridge budget, spendable only in the data region. The finders, the timing rows of alternating modules between them and the alignment patterns in larger symbols are all outside the repair zone, so a bridge crossing one of those is a repair you owe yourself with a brush.

Count the bridges before cutting. If a small symbol needs dozens in the data region, the answer is a bigger code, not a braver one.

The size where a stencil starts to work

Two numbers set everything: the narrowest bridge your material and cutter can hold, and the module width. Keep a bridge to roughly a third of a module or less, so the light line it leaves does not reach the module centre. Then:

  • Laser-cut mylar, bridges around 1 millimetre: modules from about 3 millimetres up. A 29 module symbol plus four modules of quiet zone each side is 37 modules, so roughly 11 centimetres square.
  • Vinyl-cut card or stencil film, bridges nearer 2 millimetres: modules from about 6 millimetres, and the same symbol lands around 22 centimetres.
  • Hand-cut cardboard, where a bridge must survive being taped up, carried and peeled: 4 to 5 millimetres of bridge, so modules of 12 to 15 millimetres and a code 45 to 55 centimetres across.

Measure your own minimums rather than trusting those, and shorten the payload first. Every character you cut pulls the symbol toward a lower version, and each step down widens every module at the same overall size. A short redirect on a domain you own is worth more here than any cutting technique.

Overspray closes the light gaps

The other thing that kills sprayed codes has nothing to do with bridges. Paint creeps under the stencil edge and drifts as a mist, so every dark module comes out slightly larger than the hole that made it. Light modules narrow, and a one-module light gap between two dark modules can close completely. Once it does, the two read as one and the grid is wrong.

What helps, in rough order:

  • Get the stencil flat against the surface. A sheet standing a millimetre off a rough wall leaks under its whole perimeter, and adhesive film beats tape on anything textured.
  • Spray perpendicular, from the distance on the can, in thin passes. Angled spray pushes paint sideways under the edge.
  • Stop before it looks solid. The second coat is where gaps close.
  • Go up in size rather than compensating in the file. Hand-eroding modules in a vector editor is how people break a working code.

Surface decides the rest. Smooth plaster, plywood, a painted roller shutter, a concrete slab: all fine. Brick and rough render are not a plane, and the mortar lines eat module edges in a pattern that does not care about your grid. Pavement is scanned at a steep angle and walked on. And the obvious one: painting a surface you have no permission for is vandalism, whatever the code points at.

Producing the file

No generator hands you a stencil-ready QR code, ours included. You build it:

  1. Download the code as SVG with a generous quiet zone. The slider here runs from zero to eight modules and defaults to two, so raise it to four or more before exporting, for the reasons in the quiet zone.
  2. Open it in a vector editor and drop the background rectangle so only the dark modules remain as shapes.
  3. Draw the bridges as thin rectangles on module boundaries and subtract them from the module shapes.
  4. Check connectivity. Easiest way: rasterise the result, flood fill from a point outside the code, and look at what did not fill. Everything unfilled is an island that will fall out.
  5. Cut one in cardboard and spray it before touching the real material.

Then scan the test spray from the distance and angle the real one will be read at, on two phones. If it struggles, decode a photo with the online scanner to learn whether the data survived or the pattern needs repair. Broader craft notes are on the handmade QR codes page.

One last thing, since it decides whether any of this was worth doing: paint cannot be edited, so the destination has to be one you can repoint. Encode a path on your own domain with a redirect behind it. Codes built here are all dynamic and resolve through a redirect we host, free to build and style with no login, a free account to download, editing and scan counts on the paid plan. Either way, the wall stays and the link moves.

Share this article