# Brand colour QR codes that still scan

> Take the brand hex, compute its luminance, and check the difference against white — 40 points is the floor, 60 the safe target. If the swatch fails, darken that hue for the modules only and keep the exact colour in the surrounding artwork. Colour the modules, never the background, and keep the eyes darkest.

Source: https://useqr.app/docs/design/brand-color-qr-codes-that-still-scan · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The three-step workflow

Brand colour requests fail predictably or succeed predictably; the deciding step is
measuring before designing.

**Step 1 — measure the swatch.** Compute the brand colour's luminance
(`L = 0.2126R + 0.7152G + 0.0722B`, as a percentage of white) and subtract from 100.
The [contrast minimum](/docs/design/qr-code-contrast-ratio-minimum) is **40 points**;
the print-safe target is **60**, meaning a module luminance of 40% or darker.

**Step 2 — if it fails, darken the shade, keep the hue.** Reduce the colour's
lightness until the arithmetic passes, and use that darker variant *for the modules
only*. The exact brand swatch stays in the frame, the label, the surrounding artwork —
where it belongs and where no decoder cares. A slightly darker green that scans
everywhere serves the brand better than the exact green on a support ticket.

**Step 3 — modules coloured, background white, eyes darkest.** Colouring the
background is where most branded codes die. And since the corner eyes must be found
before error correction helps anything, pin them at the darkest tone in the design.

## Worked examples

| Brand-ish colour | Hex | Luminance | vs white | Verdict |
|---|---|---|---|---|
| Crimson | `#e60023` | 20% | 80 | use as-is |
| Bright blue | `#1877f2` | 42% | 58 | use as-is |
| Indigo | `#6366f1` | 44% | 56 | usable; darken for print headroom |
| Bright green | `#25d366` | 65% | 35 | fails — darken |
| Amber | `#ffcc00` | 79% | 21 | fails badly — darken a lot |

The darkening step in action: the bright green `#25d366` fails at 35 points, but a
deepened variant such as `#1a9c4b` measures ~48% luminance — a 52-point difference
that passes with the hue intact. Ambers and yellows need more aggressive treatment
(toward olive or brown) because luminance weights green so heavily; sometimes the
honest answer is using the brand colour on the label instead, via the approaches on
[colours that scan](/docs/design/qr-code-colors-that-scan).

## Applying it in UseQR

Every colour is a URL parameter, so a passing brand style becomes a link the whole
team reuses:

```
fg=1a9c4b                    modules in the darkened brand green
eyefg=0f172a&ballfg=0f172a   eyes pinned near-black
bg=ffffff                    background stays white (the default)
```

Try it: [a branded code with dark eyes](/url?fg=1a9c4b&eyefg=0f172a). Two-tone brands
can run a [gradient between two passing stops](/docs/design/gradient-qr-codes), and
[eye styling](/docs/design/custom-eye-shapes) adds shape branding on top at no
contrast cost. Whatever the combination, the [validator](/validate) computes the real
contrast of the rendered pair and decodes the output — attach its pass to the brand
sign-off, and the "can we use our exact green?" conversation becomes a measurement
instead of a negotiation.

One deliberate omission: this page darkens colours rather than lightening them,
because the alternative — light modules on a dark brand ground — is a
[polarity failure](/docs/design/why-light-on-dark-qr-codes-fail), not a contrast
problem, and no shade adjustment fixes it.

## FAQ

### Can a QR code use our brand colour?

Almost always, on the modules. If the colour's luminance difference against white is
40 points or more it works as-is; lighter brand colours need a darkened variant of the
same hue for the modules, with the exact swatch kept in the surrounding design.

### Should the brand colour go on the modules or the background?

The modules, always, with the background left white. A coloured background subtracts
from the one luminance difference the decoder depends on, and it is the most common
reason branded codes fail.

### What about brand colours like yellow or orange?

They fail as module colours — their luminance is too close to white. Darken them
substantially (toward olive or rust) or keep them in the frame and label while the
modules use the brand's darkest neutral.

### Do the corner squares have to be the brand colour too?

No, and it is often better if they are not. Keeping the three eyes near-black gives
detection maximum margin while the data modules carry the brand hue — a combination
most scanners handle better than a uniformly mid-tone code.

## Try it

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