Bulk QR code generator
Paste one value per line or choose a real CSV column, then receive one crisp QR PNG per row in a single ZIP.
- SECURE
- NO UPLOADS
- NO SIGNUP
- BROWSER BASED
- FREE
- FOREVER.
Support us with a link or a share
Higher levels still scan through dirt and print damage; L fits the longest values.
The first finished images and the ZIP receipt will appear here.
A bulk QR code generator starts with rows, not repeated forms
One destination per line is the shortest path from a plain list to a folder of images. Paste URLs, identifiers or text exactly as each scanner should return them. Empty lines are ignored and counted before generation. Duplicate values are kept and counted, because a repeated destination can be intentional when two labels belong on different objects. The tool never silently deduplicates the payload list.
For structured data, CSV mode treats the input as an actual table rather than splitting every comma. Pasted text with a header row such as label,url switches to CSV mode on its own, and the tool picks the first column whose cells are web addresses as the payload and a filled text column as the file name, then says which columns it used and lists the first rows with their file names. Change either column, or read the text as plain lines instead, if the guess is wrong. A quoted label such as North, entrance stays one field. Doubled quote marks and line breaks inside quoted fields remain part of their cells. If the columns need inspection first, the CSV viewer exposes the same delimiter and row-shape problems before any images are made.
File names are labels; QR contents stay untouched
The selected value is encoded byte for byte as UTF-8 text. A file-name label is handled separately: directory segments and characters that Windows refuses are cleaned, and repeated names receive a suffix inside the ZIP. That hygiene prevents an archive entry such as ../../label.png from becoming a path. It does not rewrite the destination stored in the code.
Without a label column, names are stable sequence numbers such as qr-001.png. The number reflects output order after blank values have been removed. If row 8 has no selected value, there is no empty QR placeholder for it; the preflight summary tells you that one row was ignored. Source-row numbers remain attached during generation so an item that exceeds QR's real capacity can be reported as the row to repair.
Real progress and cancellation for large QR batches
Each matrix and PNG is encoded in a worker away from the page's controls. The progress bar advances only after a PNG file has finished, not according to a timer guessing how long the batch should take. Cancel stops the worker and leaves the source and column selections in place. You can repair a value or choose a different correction level without uploading or parsing the file again.
There is no arbitrary file-size or row-count rejection. A large source still receives a warning because the browser must hold generated PNG data while it assembles the ZIP. Memory is the practical limit: if a tab runs out, the browser may reload it. Close other memory-heavy tabs before a very large run, and divide the source when that is more reliable for your device. The source remains accepted either way.
The archive uses ZIP's store method. PNG is already compressed, so deflating it again usually saves little while spending more CPU and memory. The classic ZIP format has its own four-gigabyte structural ceiling without ZIP64. If generated output reaches that format boundary, the tool says to divide the batch instead of writing a corrupt archive that only fails after download.
Damage tolerance changes capacity and matrix size
M is the balanced default. L leaves more room for long payloads when the files remain clean digital images. Q and H add more recovery data for codes that may be scratched or imperfectly printed, but that redundancy can increase matrix dimensions and reduce payload capacity. The batch tool uses conservative black modules, a white field and a complete four-module quiet zone. It does not place hundreds of unverified logos over the center. The PNG size setting is an upper bound: every module gets a whole number of pixels, so a short URL at the 512 px setting comes out a little under 512 px and a dense code stays sharp rather than being resampled. The receipt reports the pixel sizes read back from the finished files.
When one code needs colors, a logo and a visible raster round trip, use the single QR code generator. It renders the design, decodes the resulting pixels and withholds downloads when the exact original value does not come back. Bulk and design are separate destinations because the decisions are different: this page optimizes consistent rows and one archive; the other optimizes inspection of one final artwork.
What to test after the ZIP is downloaded
The previews show the first twelve finished PNG files with the value each one encodes; select one to see it full size. The ZIP contains every generated row. Use the QR code scanner to decode samples from the beginning, middle and end, especially when values contain Unicode or long query strings. Then test the artwork after it passes through the system that will use it. A document editor may resample an image; a label printer may soften module edges; a marketplace may add margins or recompress uploads.
This batch creates QR only. If the receiving specification names ECC 200 rather than QR, use the Data Matrix generator and keep that format's finder pattern and ECI behavior intact. Two symbols can both be square while remaining incompatible with each other's scanners.
A successful scan proves the symbol returns a string. It does not prove that a URL is safe, that a coupon is authorized or that a product record exists. For many retail or internal identifiers expected by a linear scanner, use the bulk barcode generator; for one symbol and a closer checksum inspection, use the single barcode generator.
The table and every image stay local
Text reading, CSV parsing, QR encoding, PNG compression and ZIP writing all happen in this browser tab with code served from CreatorValet's own origin. No row is posted to a QR API, no label is logged and no analytics request carries the destination. The generated object URLs exist only in local memory and disappear when the page reloads.
That privacy promise covers processing, not publication. Anyone who receives the ZIP or sees a printed code can recover its payload. Review the selected column before generation, especially when a spreadsheet places private notes beside public URLs. Choosing the wrong column produces perfectly readable codes containing the wrong material.
Questions
Does the CSV parser handle commas inside values?
Yes. Quoted delimiters, doubled quote marks, UTF-8 text and line breaks inside quoted fields are parsed as CSV rather than split with a simple comma or newline rule. The selected value column becomes the QR payload and an optional label column becomes the file name.
What happens to blank and duplicate rows?
Rows whose selected value is entirely empty are ignored and counted before generation. Duplicate values remain separate and are counted too, because two labels may intentionally point to the same destination. File names are made unique inside the ZIP without changing any payload.
Is there a batch-size limit?
One ZIP can contain at most 65,535 PNG files because this local writer uses the widely supported ZIP32 format rather than ZIP64. Split a larger source into batches. The tool does not impose a separate source-byte limit: it warns before reading a heavy text file, and large generations run off the main thread with real progress and a Cancel button.
Are the CSV values uploaded?
No. Parsing, QR encoding, PNG compression and ZIP packaging all happen in this browser tab with self-hosted code. The source text, labels and generated images are not sent to a QR service or stored after you leave.