Are these static QR codes?
Yes. The destination is encoded directly into the matrix, so a scan reads the URL with no third-party redirect in between. Once the code is printed, the URL is fixed; changing the destination means updating the page behind that URL or reprinting the code. Static codes work best with stable URLs on your own domain (`yourdomain.com/menu`, `yourdomain.com/landing/spring`) rather than a vendor redirect you do not control. Dynamic QR codes — editable destinations, scan analytics, and custom short domains — are a separate product class and are not delivered by this generator.
Can I customise colours and add a logo?
Yes to both. Foreground and background colours are exposed as colour pickers, and you can drop a logo image (PNG, JPG, WebP, or SVG) onto the workspace to centre it on the rendered code. Logo size is a slider (10–25% of the QR area) with an optional white halo behind the logo to keep it visually separated from the surrounding modules. When a logo is loaded the error-correction level promotes automatically to H, the QR level with the highest standard redundancy. The harness verifies the default synthetic-logo cases at 18% and 25%, but real logos, colours, lighting, and print surfaces still deserve a phone scan before a large print run. A badge near the ECC control explains the lock so the auto-promotion does not feel arbitrary; remove the logo and the control re-enables.
Why did my QR colour get rejected as low contrast?
It was not rejected — the warning is advisory, not blocking, and the download buttons stay enabled. The check uses the WCAG 4.5:1 contrast ratio between the foreground and background colour as a conservative readability proxy: below it, phone cameras may have trouble separating dark modules from light ones, especially under cool indoor lighting or at oblique angles. Some low-contrast pairs still decode in the `jsQR` verification pass, in which case the "decode failed" warning stays quiet. If both the contrast warning and the decode-failed warning are showing at once, the right move is to bump the foreground darker or the background lighter; the WCAG ratio is the fast proxy and the decode pass is the stronger signal.
What's the largest logo I can use?
The slider tops out at 25% of the QR area, which is this tool's ceiling for a centred overlay at ECC level H. Above 18% the tool surfaces a "logo too large" advisory: even at H, an 18%-plus overlay is close enough to the practical edge that phone-camera quality, lighting, print texture, and logo shape can decide whether it scans. The right move before printing is a physical-phone scan from the intended distance. The decode-failed warning will fire if the overlay actually breaks the rendered matrix, in which case the safest fixes are a smaller logo, a cleaner halo, or a simpler logo silhouette.
Why is my downloaded SVG smaller in pixel terms than the PNG?
Because SVG has no pixel resolution. The PNG download bakes the QR matrix into a fixed-pixel raster at whatever size the slider was on at download time (so a 512-px slider produces a 512-px PNG), and that pixel size is what the file's image-properties dialog reports. The SVG file, by contrast, encodes the QR matrix as a single vector `<path>` element with a `viewBox` tied to the module count and quiet-zone margin — its on-disk size is a few kilobytes regardless of how large you eventually render it, and the renderer (browser, print pipeline, design tool) decides the pixel size at render time. SVG is the right format for posters, packaging, vehicle wraps, and any print job where the final size is not known up front; PNG is the right format for slide decks, web pages, and mockups where the pixel grid is fixed.
What can I encode in a QR code?
Any short text or URL — most commonly links, vCards, Wi-Fi credentials, or UTM-tagged campaign URLs. The QR matrix grows denser as the payload grows longer (more modules per side at the same physical print size), and dense codes are harder to scan from a distance. As a rule of thumb, keep URLs short where possible — a long UTM-tagged campaign URL can benefit from a short URL on your own domain rather than a public shortener that introduces a redirect dependency you do not control. For non-URL payloads (Wi-Fi, vCard, geolocation, plain text), many current phone QR flows parse common payload formats and offer the appropriate action automatically.
What format are the downloads, and which should I pick?
PNG and SVG. PNG is raster, locked to a fixed pixel size, and the right choice when the QR is going into a slide deck, a web page, an e-mail signature, a mockup, or anywhere the final pixel grid is fixed. SVG is vector, scales to any size without re-rendering, and the right choice when the QR is going onto a poster, a vehicle wrap, packaging, signage, a business card, or any printed surface where the dpi at print time is not known when the file is generated. JPG is deliberately not offered — JPG's lossy compression can introduce ringing artefacts on the high-contrast edges of QR modules, and PNG covers the raster use case without that risk.
Will this tool stay free?
The basic workflow is designed to stay free. Paid upgrades later will focus on bigger limits, batch work, OCR, saved presets, and ad-free use.