Tools · Text · QR code generator · Guides · How to Make a QR Code and Pick an Error-Correction Level That Actually Scans

How to Make a QR Code and Pick an Error-Correction Level That Actually Scans

4 min read

Here's the actual process for making a QR code with QR code generator, and what the error-correction setting actually trades off.

Typed text turning live into a QR code, with color and error-correction options feeding the same preview A text-input box feeding directly into a QR code preview, with color pickers and an error-correction selector as side inputs into the same live render. Type text/URL colors + EC level PNG / SVG
The code re-renders on every keystroke - there's no separate "generate" step to click.

Step 1 - type or paste the content

A URL, plain text, an email address, anything up to 2,953 characters of ordinary text at the lowest error-correction level (4,296 only for digits-and-capitals-only text, and less at higher levels, since more of the code gets used for redundancy at those). The QR code appears the instant you start typing and updates on every keystroke - there's no separate generate button, because there's no discrete action to trigger; it's a live function of whatever's currently in the box.

Step 2 - pick colors that will actually scan

The foreground and background can be any colors, not just black and white - useful for matching a brand's palette. The tool checks the contrast between the two as you pick them and warns you if the pair is too close together to scan reliably. A QR scanner reads by distinguishing dark modules from light ones; low contrast between the two colors is the single most common reason a "correctly encoded" code fails to scan in practice.

Step 3 - choose an error-correction level

Four levels, labeled by how much of the code can be damaged, covered, or dirty and still scan: L (about 7% tolerance, the smallest resulting code), M (about 15%, the default and a reasonable middle ground), Q (about 25%), and H (about 30%, the most damage-resistant, at the cost of a denser pattern). This is the one real tradeoff in the whole tool: more error-correction redundancy means the code tolerates more real-world damage - a coffee ring, a fold crease, a logo overlaid in the middle - but it also makes the pattern itself denser and physically smaller-detailed at a given print size, which can make it harder for some cameras to resolve at a distance. For a code that will only ever be viewed on a clean screen, L is fine. For anything printed and handled - a flyer that'll get folded, a sticker on a product - M or higher earns its keep.

Step 4 - download

Set a download size from 200 to 1,000 pixels (the on-page preview always renders at a fixed size regardless - the download size is generated separately, at click time, so a large download doesn't require a large, awkward preview box). Download as PNG for a fixed-resolution image that works everywhere, or SVG for a vector file that scales to any size - a banner or a large-format poster - without ever going soft or pixelated. This guide covers picking between the two directly.

If the content is too long

Past roughly 2,953 characters of ordinary text (fewer at higher error-correction levels, since a stricter setting reserves more of the code's total capacity for redundancy rather than content) the tool can't fit the content into a valid QR code and says so plainly, rather than producing a broken one. Long text is rarely what belongs in a QR code anyway - the strength of the format is a short destination a camera can resolve quickly, not a full paragraph.

The code updates as you type, not after you finish

There's a short 150-millisecond pause built into the live re-render, so the code doesn't try to redraw itself on every single keystroke while you're still mid-word - it waits for a brief pause in typing, then updates. That's short enough to feel instantaneous but long enough to avoid needless redraw work while a longer piece of text is still being typed out. The same debounce applies to every option change - a color pick, a slider drag on error-correction or download size - so adjusting several settings in quick succession feels smooth rather than stuttering through a redraw after each one.

Nothing here goes to a server

Everything you type stays in the browser tab, the whole time - the code is drawn on a canvas locally, with no library call that sends the content anywhere. There's no account, no watermark, and no expiry, because the code encodes exactly what you typed, directly, with nothing dynamic sitting behind it.

For why a QR code beats a printed link in the first place, see the background. Or make a QR code now.

Try QR code generator for free QR code generator

Related tools