QR Batch Generator turns a list of URLs, phone numbers, or other strings into a folder of QR codes in one pass. Each line of input becomes one code, and the optional second column after a comma becomes the filename label inside the ZIP. The tool is built around the qrcode npm library, the same generator used by countless Node.js services, so the output is byte-identical to what you would get from a server-side script — there is just no server involved.
Everything runs locally. When you click Generate, your list is parsed in JavaScript, each entry is rendered to an offscreen HTMLCanvasElement, the canvas is exported to a PNG data URL, and a parallel call to QRCode.toString produces an SVG copy. Codes are processed 10 at a time and the loop yields to the browser between chunks with await new Promise(r => setTimeout(r, 0)), which keeps the tab interactive even when you hand it 500+ entries.
The download bundle is built with JSZip in the browser. PNGs are stored as base64 entries, SVGs as plain text, and each filename is prefixed with a zero-padded index (001-, 002-, ...) so files sort naturally in Finder, Explorer, or print pipelines. Labels are sanitized to ASCII letters, digits, and underscores, then truncated to 40 characters to stay safe on Windows' 260-character path limit.
Error correction is configurable at L (recovers ~7%), M (~15%), Q (~25%), or H (~30%). Higher levels add redundant codewords, which makes the code more tolerant of dirt, glare, or print misregistration but also pushes it into a larger version with a denser module grid. For batch printing on labels or stickers, M or Q is the typical sweet spot; H is mainly useful when you plan to overlay a logo on top.
Payload format is whatever you put on the line — a plain URL, a tel: link, a mailto: address, an SMS link, a geo: coordinate, or a structured WIFI:T:WPA;S:Name;P:secret;; string. The example CSV in the textarea shows the WiFi syntax. The qrcode library auto-selects the most compact mode (Numeric, Alphanumeric, Byte, or Kanji) per entry, so a list of all-uppercase URLs will encode tighter than a list of mixed-case text strings of the same length.
The hard limit per code is the QR specification itself: 4,296 alphanumeric characters or 2,953 bytes at the minimum error correction. In practice anything beyond a few hundred bytes produces a version 20+ code with very small modules that consumer phone cameras struggle to lock onto. If a line exceeds capacity for the chosen error correction level, that row is flagged as "Invalid or too long" in the results column rather than failing the whole batch.
Because no upload step exists, your input list never leaves the browser tab. This matters when the URLs themselves are sensitive — pre-launch landing pages, internal dashboards, individualised tracking links — or when company policy forbids pasting customer data into third-party online tools.