A QR code is a drawing of data. Redraw it in your brand and it stays data — up to the exact point where it doesn't. The failures are not mysterious; they come from four measurable places, and every one of them can be checked by a machine before anything is printed.
First, know what the scanner needs
A decoder does three things in order: it finds the code by the three big corner squares, it fits a grid using those corners plus the timing and alignment marks, and only then does it read the data. Design failures map onto that order — a code with a styled-to-death corner square is never found at all, which looks identical to “broken” even though every data module is perfect.
Contrast is not negotiable
Scanners binarise the image: every module becomes either ink or paper. Brand-coloured modules are fine when they stay dark against a light background — navy on cream scans all day. What fails is tone-on-tone: a gold code on white looks premium on a screen and reads as blank paper to a sensor in a dim restaurant. Aim for the darkest module colour your brand allows, and never invert casually — light modules on dark grounds work, but only when the whole grid, quiet zone included, is inverted consistently.
The quiet zone is part of the code
The empty margin around the grid — four modules wide — is how a scanner finds the edges. Designers crop it because it looks like wasted space. It is the opposite: artwork, borders and text placed inside it don't decorate the code, they amputate it. The second-order version of the same mistake is printing a clean code against a busy background — the margin exists in the file and dies in the layout.
Logos eat error correction
A centre logo works because QR codes carry redundancy — up to 30% of the grid can be damaged and still decode at the highest correction level. But that budget is shared with the physical world: creases, glare, ink spread, a thumb over one corner. A logo covering a quarter of the grid on top of a stylised dot pattern and a scuffed print leaves nothing in reserve. The rule: if there's a logo, generate at level H and keep the logo under a quarter of the area. Our builder enforces both automatically, and the longer version of this arithmetic has its own post.
Fancy modules fail at the eyes first
Rounded dots, diamonds, stripes — most survive, because the format was designed for damaged industrial labels. The sensitive parts are the three finder squares and, less obviously, the small alignment and timing marks the grid-fit depends on. A sparse dot style that starves those marks of ink doesn't fail loudly; it makes every other module sample slightly off-centre, and small dots start vanishing wholesale. This is why our renderer quietly draws the function patterns at full weight even in the sparsest styles — the style stays, the geometry the decoder fits against does not thin out.
Verification beats taste
None of these rules require judgement — they require a test. Every pattern and corner style PIXELQODE ships is decoded by machine before release, and codes with logos are re-verified at export resolutions. That's the whole trick: not braver design, but design with a pass/fail gate.
- Designing from scratch? Every free generator shows a live scannability verdict as you style.
- Auditing finished artwork — yours or an agency's? The scannability checker decodes it at shrinking sizes and tells you the real safety margin.
- Sizing for a distance? The print-size calculator does the arithmetic from your actual content.