A 3D printed QR code is a scannable object only if a camera can distinguish the dark modules from the light ones. Geometry is the easy part.
Contrast Is the Whole Problem
Scanners do not see height. A phone camera sees a flat image and looks for a grid of dark and light squares, so a single-colour raised QR code relies entirely on shadow to create that difference — and shadow depends on lighting you cannot control.
This is why a code that scans on your desk fails under a ceiling light: the raking light that created the shadows is gone, the surface reads as uniformly grey, and there is nothing to decode.
The reliable answer is two colours. Print the base plate in a light filament and the raised modules in a dark one, and the code works under any lighting because the contrast is in the material, not the shadow.
If you must print in one colour, invert the design instead: recess the modules into a lighter plate rather than raising them. Recessed cavities hold shadow more consistently than raised bumps, which catch highlights on their top faces.
Colour pairing matters:
Black on white is ideal. Dark blue or dark green on white also work. Avoid red on black, dark grey on black, or any pairing where the two filaments have similar brightness — cameras convert to greyscale before decoding, so two colours that look different to you can be identical to a scanner.
Module Size and Nozzle Width
A QR code is a grid of modules — the individual squares. Everything about print size follows from how large each module ends up.
Aim for a module of at least 2 mm. With a 0.4 mm nozzle that gives roughly five extrusion widths per module, enough for a crisp square edge. At 1 mm per module you are down to two or three passes and the squares start rounding off, which blurs the boundary a scanner depends on.
That sets your minimum overall size. A basic URL at low density produces a 25×25 module grid; at 2 mm per module that is a 50 mm plate before the quiet zone. Encode more data and the grid grows — a long URL can push past 45×45 modules, which at the same module size needs a 90 mm plate.
The quiet zone is not optional. QR specifications require a clear margin of four modules on every side, and scanners genuinely fail without it. Do not trim the border to make the part smaller; make the modules smaller or shorten the data instead.
Use Error Correction Deliberately
QR codes carry redundancy, selectable at four levels: L recovers about 7% of lost data, M about 15%, Q about 25% and H about 30%.
Higher levels sound strictly better, but redundancy is stored as extra modules — raising the level increases the grid size for the same content, which means either a larger print or smaller modules.
For 3D printing, M or Q is the sweet spot. It absorbs the small imperfections printing introduces — a slightly blobby corner, a module that over-extruded — without inflating the grid the way H does. Reserve H for codes that will be handled, scuffed, or printed at genuinely small sizes.
Printing It
Print flat, modules facing up. This gives every square a clean top surface and avoids supports entirely.
Keep the module height modest — 0.8 to 1.5 mm above the plate is plenty. Taller modules cast longer shadows, which sounds helpful but actually hurts: at a shallow camera angle, tall modules shadow their neighbours and the scanner sees dark where a light module should be.
Use a fine layer height for the top surface, around 0.15 mm, so the module edges stay square. And slow the outer perimeter down; sharp corners on 2 mm squares are exactly where speed-induced ringing shows up, and rounded corners are the first step toward an unreadable code.
Test before printing a batch. Print one code, then scan it from about 30 cm in ordinary indoor light, at an angle rather than straight on. If it reads reliably in those conditions, it will read anywhere.
What to Encode
QR codes hold more than URLs, and the format you choose changes how a phone responds.
- URL. The most compact and most universal. Keep it short — every character adds modules. A link shortener genuinely helps here.
- Wi-Fi credentials. Encodes network name, password and security type, and phones offer to join directly. Popular for guest-room and workshop signs.
- vCard. Contact details that save straight to the address book. Bulky: a full vCard easily doubles the grid size compared with a URL.
- Plain text. Displays without any action. Useful for machine settings, part numbers or short instructions.
One practical warning: whatever you encode is permanent once printed. If the destination might move, point the code at a URL you control and redirect from there, rather than at the final address.
Make a scannable code
Encode a URL, Wi-Fi network or vCard and export STL, OBJ or 3MF.
Open QR Generator