How the QR scannability tester works
The QR scannability tester takes a QR code you upload, decodes it, then re-decodes it after each of 14 simulated conditions whose severity you control, and shows the stressed image side by side with the original so you can see exactly where and how it breaks.
Everything runs in your browser. The image is not uploaded, and the decoded payload is masked until you press Reveal.
What the QR analysis panel tells you
Before any stress test runs, the tool reads the uploaded image:
| Field | What it reports |
|---|---|
| Baseline | PASS if the code decodes from the original image, FAIL if not. A FAIL means the file itself is the problem; re-export it before testing. |
| Payload | The decoded content, masked; press Reveal to show it. |
| Matrix | The module grid size, e.g. 33 × 33. A denser grid means smaller modules at the same print size. |
| Image Size / Module Size | The pixel dimensions of your file and how many pixels each module gets in it. |
| Quiet Zone | Adequate, Possibly insufficient, or Missing / insufficient; measured from the decoded code's position in the image. |
| Error Correction Budget | An estimate, not a readout. A finished QR code stores its error-correction level in its format information, but this tool does not currently read that field. The tool shows "Level H recommended" only when it detects a central logo, and "Standard Budget" otherwise. |
Advanced details adds the detected version, an estimated skew angle, the quiet-zone width in modules, and the code's bounding box. All of it is heuristic image analysis, not a certification.
The stress suite, and how to push it
The 14 conditions span three groups (camera and optics, print and reproduction, placement and design), plus an auto-composed "Real-World Combo". Each is run at two to four rising severities, and the code is decoded again after every one. For the full breakdown of what each condition simulates, see the QR Code Validator guide, which shares the same engine.
Substrate presets
The five preset buttons retune every slider at once to match where the code will actually live:
| Preset | Leans on |
|---|---|
| Standard Studio | The default, balanced severities |
| Kraft Paper / Low Contrast | Reduced contrast and print noise, for unbleached card and recycled stock |
| Glossy Packaging (Glare & Curve) | Stronger glare and surface curvature, for film and coated boxes |
| Outdoor Billboard (Distance & Blur) | Heavier downscaling and blur, for codes read from far away |
| Low Light / Dim Venue | Lower light and more sensor grain, for bars, theaters, and events |
Advanced Settings
Open Advanced Settings to set the exact severity of every level of every condition with a slider, then Reset to defaults when you're done. Two things are fixed: the downscale target sizes (500 / 250 / 150 / 100 px, chosen to show the trend as an image shrinks), and the Real-World Combo, which is assembled automatically from your other settings.
Reading the results
The banner at the top gives an overall read (GOOD, NEEDS ATTENTION, or HIGH RISK) based on how many conditions failed outright versus weakened. Below it, the Simulation Score is the share of individual decode attempts that succeeded across the run (the baseline, the quiet-zone check, and 42 stressed decodes).
Each test row is PASS, WARNING, or FAIL. Click a row to open the comparison view: the original code beside the stressed version, a tab for each severity level, whether that level still decoded, and a Download Test Image button. The Recommendations panel lists a concrete fix for every condition that didn't pass.
Example: a logo code for kraft packaging
You upload a branded code with a logo in the middle, headed for a recycled-card carton. The QR Analysis panel reports Baseline PASS, an Adequate quiet zone, and, because it sees the logo, Error Correction Budget: Level H recommended. You click the Kraft Paper / Low Contrast preset and press Run Stress Test.
In this hypothetical walkthrough, suppose the result is: most rows PASS, but Central Obstruction and Low Contrast are WARNING, and the overall banner reads NEEDS ATTENTION. Opening the Central Obstruction row shows the code decoding at the Small patch size and failing at Medium and Large; the logo is eating into the margin the error correction needs. The recommendation: shrink the logo or raise the error-correction level to H.
You regenerate the code at level H with a smaller logo, re-upload, and re-run with the same preset. This time every row passes and the banner reads GOOD. That's the loop this tool is built for.
Scannability tester vs. QR code validator
| QR Scannability Tester | QR Code Validator | |
|---|---|---|
| Built for | Exploring one code and dialing in a design | A fast go / no-go verdict |
| Severity control | Every level adjustable, plus substrate presets | Fixed levels |
| See the stressed image | Yes, side by side, per level | No |
| Batch mode | No, one code at a time | Yes, up to 100 links |
| Output | Interactive results and a downloadable test image | Verdict, PDF report, CSV |
Use the validator to decide whether to print; use this tester when a code is borderline, or when you're still choosing a style, and you want to see the failure happen.
Who uses this
- Designers tuning a branded code: try a rounded module style or a brand color, then watch which conditions it costs you.
- Packaging teams: match the substrate preset to the real material (kraft, gloss, film) before signing off artwork.
- Anyone whose code failed elsewhere: a "Needs attention" from the validator tells you something is wrong; this tool shows you what and how far.
- People testing logo size: the Central Obstruction test finds the actual break point for your code instead of a generic rule.
Tips, limits, and common mistakes
- It's a simulation. The conditions approximate blur, glare, compression and the rest; a strong early warning, not a substitute for scanning a printed proof.
- The Error Correction Budget is a guess. The tool can't read the level from a finished code. If you know you generated at L or M, treat a logo or small-print warning more seriously.
- Upload the production file. Test the exact PNG or SVG going to print, not a screenshot or a re-exported JPEG that has already lost detail.
- The sample code is error-correction M. Results from "Try a sample QR code" reflect that level and a plain black-on-white style.
- The sliders can make it impossible. Push every severity to maximum and any code fails. Calibrate to conditions you'll actually meet, or use a substrate preset.
- One code at a time. For a whole batch, run them through the validator's batch tab and bring anything marginal back here.
Match the preset to the real surface
A code that's GOOD under Standard Studio can still fail on a glossy box under bright light. Pick the substrate preset that matches where the code will actually be scanned, and only trust a GOOD result from that.