3D QR code

Generates a printable QR code from a link or text: a plate with raised modules and the standard quiet zone. Designed for two-color printing.

Filament

Geometry is transferred as STL, without materials. The file stays in this browser for 24 hours.

To make it scan: print the plate in one color and swap filament at module height (contrast = readability). Test with your camera before gifting.

What this tool does

How it works

  1. 01

    Paste your link

    URL, WiFi, text — the QR regenerates live with every change.

  2. 02

    Set size and correction

    From 25 mm for a keychain to 120 mm for a sign; correction M or Q for worry-free printing.

  3. 03

    Print in two colors

    Light plate + dark modules (or a filament pause) and the contrast does the rest.

Frequently asked questions

Does the printed QR actually scan?

Yes, as long as there is contrast. A QR reader does not perceive relief: it perceives light and dark, so a code printed entirely in one colour will not scan no matter how perfect the geometry is. The usual solution is printing plate and modules in opposing colours with a filament pause, or painting the relief once it comes off the bed. The ilove3d 3D QR generator honours the four-module quiet zone the standard requires — the plain margin around the code — which is what lets a reader frame it at all. That is the most common mistake in printed QR codes: trimming that margin to save space and ending up with something no phone recognises, even though it looks complete and correct to the eye. If a printed code refuses to scan, contrast is the first suspect and the margin is the second; the geometry of the relief is almost never what is at fault, however it may look.

What's the minimum size that scans well?

For a short URL, from around 25 to 30 mm per side with modules of roughly 1 mm scans reliably with any modern phone at 10 to 15 cm. The real limit is not the plate size but the module size: below a millimetre, a 0.4 mm nozzle can no longer define the edge crisply and neighbouring modules blur into each other. Long URLs generate matrices with many more modules, so on the same plate each one ends up smaller: if your link is long, raise the overall size of the piece or run it through a shortener. The ilove3d 3D QR generator shows the module count, and that is the number worth checking before you print anything. It is also worth testing the scan on the first piece straight off the bed, before committing to a batch of fifty that may turn out to be unreadable at that size.

Which error-correction level should I pick?

Level M, which recovers up to 15% of a damaged code, is the right balance for 3D printing and the sensible default. Higher correction levels add redundant modules: Q reaches 25% and H reaches 30%, but they achieve it by densifying the matrix, so on the same plate every module gets smaller and harder to print cleanly. It is a genuine trade-off rather than a free upgrade. Step up to Q if the piece is going outdoors, if you expect abrasion, or if the code will be hand-painted and the edges may come out uneven. H is only worth it if you plan to cover part of the code with a logo. The generator recomputes the matrix as you change the level, so the effect is visible immediately. Whatever level you pick, the quiet zone stays the same width in modules, so a denser matrix means a physically wider plate for the same module size.

How do I get contrast without painting?

With a filament change by layer, which is the cleanest route and needs no multi-material printer. Print the plate in white, schedule a pause in your slicer at exactly the height where the plate ends and the raised modules begin, swap to black filament and carry on. The cut lands on a real layer boundary, so the border between the two colours comes out perfectly defined and the reader finds the contrast it needs. The alternative is printing everything dark and running a light marker across the recessed plate, or the reverse, but the result is never as even. The ilove3d 3D QR generator shows plate thickness and relief thickness separately, and those are the two numbers you need to place the pause. Choose both thicknesses as multiples of your layer height so the cut lands exactly on a boundary and the colour change does not end up halfway through a layer.