The Bulk QR Code Generator creates up to 20 unique QR Code PNG files in the current browser tab by encoding one text or URL per line of input — no upload, no ZIP archive, and no server job required. Each line of your text list becomes its own scannable symbol with a deterministic filename and an individual download link, so the workflow for "multiple QR codes" reduces to paste, generate, verify, and save. Because the same qrcode 1.5.4 encoder that powers Lizely's single QR Code Generator is reused for the batch, the symbols share one codebase, one set of capacity rules, and one rendering path, and there is no second QR implementation that can drift out of step. The whole operation runs locally: payloads never leave the page, and nothing is shortened, tracked, or recorded. That combination of in-browser encoding, indexed filenames, and explicit per-image downloads is what makes the tool practical for SEO campaigns, directory pages, product labels, and any short list where you would otherwise generate, save, and re-scan each QR code by hand.

What the Bulk QR Code Generator Does
The Bulk QR Code Generator is a small in-browser batch tool designed to produce up to 20 unique QR Code PNG images from a plain text list. It reuses the qrcode 1.5.4 encoder that already powers the project's single QR Code Generator, so the symbols in a batch are produced by the same library, with the same codeword tables and the same encoding paths, as a single-user one-off. The page adds batch-oriented UI on top of that encoder: a multi-line input box, dedupe and trim logic, a small size selector, an error-correction selector, and one download link per preview. There is no ZIP archive, no second QR implementation, and no server-side job. As a result, the tool behaves predictably on phones, tablets, and ordinary laptops, and a successful batch always reports each symbol alongside its own PNG.
The Input Contract: How the Parser Treats Your Lines
The contract is intentionally narrow. Lines are split on newline characters; each entry is trimmed of surrounding whitespace; empty lines and exact duplicates collapse to the first occurrence; and the result is a list of unique values preserved in first-seen order. The batch limit is 20 unique values, and each line is limited to 2,000 JavaScript characters. Both caps exist to keep CPU, memory, layout work, and accidental multi-download volume bounded inside a normal browser tab — they are not a creative constraint you should try to bypass with workarounds. The same parser therefore applies to campaign URLs, plain English text, Wi-Fi strings, contact payloads, or anything else you can fit on a single line. If one payload exceeds QR capacity, the batch reports an error instead of presenting a partial set as complete, because a missing image in a printed bundle is far worse than a clear refusal up front.
The deterministic filename rule deserves attention. Generated filenames start with a two-digit batch position followed by a short ASCII stem derived from the content. A line such as https://example.com becomes 01-example-com.png; a line with no ASCII letters or numbers falls back to qr-code. The stem is a convenience label — it never alters the encoded payload — and it lets a campaign manager sort downloads by their original sequence even when files are dropped into a flat folder.
How to Generate Multiple QR Codes From a Text List
A complete batch run takes a few deliberate actions. The numbered order below is the sequence the tool expects; skipping the verification step is the single most common reason a finished PNG fails in production.
- Open the Bulk QR Code Generator and paste one text or URL per line into the input field, keeping the list at 20 unique lines or fewer. Each row becomes exactly one QR symbol; do not paste comma-separated payloads on a single line if you want them separate.
- Pick a pixel size (128, 256, or 512) and an error-correction level (L, M, Q, or H), then trigger the batch. Generation runs concurrently under an internal job identifier so an older batch cannot overwrite the results of a newer edit.
- Before downloading anything, scan each preview with the target phone, scanner, or application. Camera focus, glare, screen protector thickness, contrast, and reader-specific URL handling all affect success, and the only way to catch those issues is a real-world scan.
- Download each verified PNG individually using its own download link. Preserve the original quiet zone around the image, and do not recolor, crop, stretch, or cover the finder patterns after download.
If you change an input value, a size option, or an error-correction level after a batch has been generated, the previous batch is invalidated and only the new run is considered current. The job identifier does the work of keeping the canvas clear.
Choosing Pixel Size and Error-Correction Level
Pixel size and error-correction level sound like one combined knob, but they change different parts of the output. Pixel size (128, 256, or 512 pixels) is purely a rendering choice: a higher pixel count can sharpen a symbol when it is displayed or printed larger, but it does not increase the data capacity of the QR symbol itself. Capacity is governed by the QR version that the encoder selects from the payload length, and not by canvas width. If the same short URL is encoded twice — once at 128 px and once at 512 px — both PNGs carry the same number of codewords; the larger image simply spreads that grid over more pixels.
Error correction is the actual tradeoff. The four levels — L, M, Q, and H — are defined by DENSO WAVE as approximate codeword restoration thresholds, and a higher level forces a denser symbol for the same payload.
| Level | Approximate codeword restoration | Practical use |
|---|---|---|
| L | ≈ 7% | Smallest symbol for the same payload, clean environment |
| M | ≈ 15% | Default for ordinary clean display |
| Q | ≈ 25% | Labels and lightly worn materials |
| H | ≈ 30% | Outdoor, damaged, or partially covered surfaces |
Per the DENSO WAVE error-correction reference, level H is not automatically better — it improves recovery at the cost of available data capacity, and a longer payload can push the encoder into a higher QR version, which in turn packs more modules into the same surface. For ordinary clean display conditions, level M is the practical default; raise to Q or H only when the symbol's environment demands it. The single-image workflow at the project's single QR Code Generator uses the same level vocabulary, so the choice you make here is consistent with what you would pick for a one-off code.
Filenames, Quiet Zones, and What to Verify Before Use
Quiet zones are the blank margin required on every side of a QR symbol so scanners can lock onto the finder patterns. The generator renders with a margin of 2 modules, which is a fair starting point; the moment you save a PNG to disk, that margin becomes your responsibility. Stretching the image non-uniformly, recoloring the modules in low-contrast tints, layering text on top of a finder pattern, or trimming the white border will all reduce real-world scan success even when the underlying codewords are correct. If a campaign demands a non-default margin, regenerate rather than crop.
Verification is the second habit that separates a working QR campaign from a flaky one. A generated image is not proof that every scanner on every device will read the intended payload. Long UTF-8 text, emojis, print size, contrast, camera focus, glare, physical damage, and reader-specific behavior all affect success, and the underlying qrcode library documentation notes that full ECI support is not implemented. Always scan every final PNG with the target device and application before publishing, printing, labeling inventory, distributing event material, or replacing an existing code, and check the decoded payload character for character. Do not use an unchecked QR Code for payments, authentication secrets, safety instructions, or irreversible actions.
Privacy, Limits, and When a Re-Scan Beats a Pretty PNG
Privacy is a property of the implementation, not an afterthought. All payloads and PNG data URLs remain in the current tab; nothing is uploaded, shortened, tracked, or recorded. That posture is consistent with how a campaign manager can paste confidential booking links or internal short URLs without a server copy being created, and the broader posture matches Lizely's other in-browser tools. For a deeper read on the no-upload posture, see Generate QR Codes Instantly Without Uploading Data.
The limits that matter to keep in mind are the 20-unique-lines cap, the 2,000-character per-line cap, and the rule that duplicate trimmed lines collapse to the first occurrence. None of these is a hidden ceiling of the encoder — they are explicit batch knobs — and changing an input or an option invalidates the previous batch so an older generation cannot overwrite newer settings. When a payload is genuinely too large for QR capacity, the batch shows an error instead of presenting a partial set as complete, which is the safer failure mode for any campaign that plans to print or distribute.
If you're weighing options, Bulk URL Generator API Alternative for Browser-Side Lists covers this in detail.