Batch QR code generator
Forty table tents, one QR each, all pointing at different URLs. Doing that a code at a time in a single-URL generator is an afternoon; doing it here is one paste and one download. Add label | url on each line and the files come out named for the label instead of qrcode(7).png.
How to use
- Paste your URLs, one per line. To control the filenames, write
label | https://…— the label becomeslabel.png, cleaned of characters a filesystem would object to. - Set the size and error correction. For print, choose SVG instead: it scales to any size without the blur a resized PNG gets.
- Click Generate codes. Up to 200 codes per run.
- Check the grid — each code is shown with its label and target so you can confirm the pairing before printing 200 of them.
- Download all as ZIP. The archive is assembled in your browser.
Getting QR codes that actually scan
Keep the URL short. A longer URL needs a denser code, and density is what makes a code fail on a worn print or a cheap camera. A URL with a hundred characters of UTM parameters produces a visibly finer grid than a forty-character one. If you need campaign tracking, use a short redirect URL and put the parameters on the far side of it.
Do not skip the quiet zone. The blank margin around the code is part of the specification — scanners use it to find the code's edges. Two modules is the practical minimum, four is the standard. Printing a code flush against a border or a photo is a common cause of "it works on my phone but not theirs".
Contrast, and the right way round. Dark modules on a light background. Inverted codes (light on dark) are read by some scanners and not others, and a low-contrast pairing — grey on white, or two similar brand colours — fails under poor lighting even when it looks fine on screen.
Size for the scan distance. The rule of thumb is that the code should be about a tenth of the distance it will be scanned from: a poster read from two metres needs roughly a 20 cm code. For print, generate SVG and let the layout tool size it.
Error correction level H if you plan to place a logo over the middle, which is the only reason to accept the denser code it produces. Otherwise M is the right default.
FAQ
Is anything uploaded?
No. The QR library is fetched from a CDN the first time you generate, then everything — encoding, rendering, and the ZIP — happens in your tab. Your URLs are not sent anywhere.
Can it encode things other than URLs?
Any text works, so WIFI:, mailto:, tel: and vCard payloads all encode fine — write them out in full on the line. The mailto / tel / sms builder composes the trickier ones correctly.
Why is there a 200-code cap per run?
Rendering is synchronous work in the tab, and past a couple of hundred images the page becomes unresponsive. Run the list in batches — the cap is per run, not per session.
How do I check a code came out right?
The QR code reader decodes an image back to its text, locally. Worth doing on one code from every batch before a print run.