// Stress Test

Test Your QR Code Before You Print It

Stress-test QR codes against camera shake, low light, glare, screen moiré, low contrast, distortion, downscaling, compression, corner damage, and other common real-world conditions — then see exactly what to fix before you commit to print.

14Stress Tests
100%Client-Side
0Images Uploaded
0Account Required

Upload your QR code

Drag & drop, click to browse, or paste an image (Ctrl/Cmd+V)

Supports PNG, JPG, WebP, and SVG.

Your QR image is processed locally in your browser and is not uploaded.

QR Analysis

Uploaded QR code preview
Payload
—
Matrix
—
Image Size
—
Module Size
—
Quiet Zone: Unknown
Error Correction Budget: Level M (15% Recovery)
Camera & Optics
Blur (× module size)
Motion Blur (× module size)
Low Light (intensity)
Glare (intensity)
Screen Moiré (intensity)
Print & Reproduction
Contrast (% of normal)
Compression (JPEG quality)
Print Noise (intensity)
Surface Curvature (% of image height)
Placement & Design
Rotation / Perspective (°)
Central Obstruction (% of symbol area)
Corner / Finder Damage (% of side)

Downscale target sizes (500 / 250 / 150 / 100 px) use fixed steps designed to show the trend as an image shrinks. Real-World Combo is composed automatically from the settings above, so it has no sliders of its own.

Starting…

GOOD

Simulation Score: 0%

This is a simulation covering 14 common real-world conditions across camera/optics, print & reproduction, and placement & design — not a guarantee of how any specific phone, printer, or lighting condition will perform.

Test Results

Recommendations

// How It Works

Upload → Test → Fix

Drag or Browse
01

Upload Your QR Code

14 Stress Tests
02

Run the Stress Suite

Fix & Retest
03

See What to Fix

QuickQRC
Technical Brief · No. 0004

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:

FieldWhat it reports
BaselinePASS 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.
PayloadThe decoded content, masked; press Reveal to show it.
MatrixThe module grid size, e.g. 33 × 33. A denser grid means smaller modules at the same print size.
Image Size / Module SizeThe pixel dimensions of your file and how many pixels each module gets in it.
Quiet ZoneAdequate, Possibly insufficient, or Missing / insufficient; measured from the decoded code's position in the image.
Error Correction BudgetAn 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:

PresetLeans on
Standard StudioThe default, balanced severities
Kraft Paper / Low ContrastReduced 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 VenueLower 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 TesterQR Code Validator
Built forExploring one code and dialing in a designA fast go / no-go verdict
Severity controlEvery level adjustable, plus substrate presetsFixed levels
See the stressed imageYes, side by side, per levelNo
Batch modeNo, one code at a timeYes, up to 100 links
OutputInteractive results and a downloadable test imageVerdict, 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.

References

// FAQ

Frequently Asked Questions

No. It simulates common real-world conditions and re-decodes the result with a browser-based decoder. It is a useful early-warning check, not a certification, and it cannot predict every phone, printer, or lighting situation.

No. Decoding, every simulation, the comparison images, and the analysis all run locally in your browser. The image is never uploaded, and the payload stays masked until you press Reveal.

The share of individual decode attempts that succeeded across the run: the baseline decode, the quiet-zone check, and 42 stressed decodes. It is a summary number, not a prediction of real-world scan reliability.

Each one retunes every severity slider at once to match a surface and setting: kraft card, glossy packaging, a distant billboard, or a dim venue. Start from the preset closest to where your code will be scanned, then adjust individual sliders if needed.

The validator gives a fast go/no-go verdict, a PDF report, and a batch mode for up to 100 links. This tester is for one code at a time: you control each condition's severity and see the stressed image beside the original. Use the validator to decide, this to investigate.

The blank margin around a code helps a scanner find where it starts and stops. Too little margin, or a code crowded by other graphics, can make an otherwise-fine code fail. The tool measures it from the code's position in your uploaded image.

Yes. The Central Obstruction test overlays progressively larger patches in the middle of your code and re-decodes after each, so you see the actual failure point for your specific code rather than a generic rule.