Workflow: Upload or paste an image in the left column; the decoder uses the primary detected symbol. Edit Data in the middle column if needed. Generate refreshes the preview in the right column whenever you want, as long as Data is not empty. Re-decode sits on the upload area (bottom-right): it runs decode again on the current image without opening the file picker.
Code types: Compact buttons list symbologies. QR Code is rendered with Python qrcode. QR Code (ZXing) uses zxing-cpp (pip install zxing-cpp). The decoder often reports QRCODE for both; choose the encoder you want when regenerating. Linear types use width/height derived from Code size.
Code size (right): Output size in pixels. For QR this sets the bitmap side. For linear codes it is a maximum box: the barcode scales evenly inside it (under-bar text is not stretched wide).
Density: QR Model 2 version V → (21+4(V-1)) modules per side. Auto picks the smallest version that fits the payload.
ECC level: L / M / Q / H — stronger correction reserves more modules and changes the pattern.
Mask: Patterns 0–7 (or Auto) alter module placement for the same bytes; try different values to match another printed QR.
Linear barcodes: By default the PNG has no text under the bars. Check Show under text in image to draw it. Text font uses real .ttf files on the server (not browser/CSS names): DejaVu is bundled; Arial/OCR/Courier need system fonts or files you place in the project fonts/ folder (e.g. fonts/Arial.ttf, fonts/OCRAEXT.ttf).
Auto-refresh: When Data is not empty, changing Code types, Code size (slider after release), Density, ECC level, Mask, or linear under-bar options refreshes the preview the same way as Generate.
Sharp output: With a fixed density, set Code size to a multiple of (cells per side) when you can (assumes ISO 4-module quiet zone).
Pixel match: Payload must match byte-for-byte. Different libraries or settings can still produce visually different QR images.