HomeAbout MeProjectsContactMeow

Toasting QR Codes onto Tortillas

06 Apr 2025

QR Show was a few weekends ago in NYC, and I got to show off two projects! I'll be writing about the other one soon, but for now I'm going to focus on how I toasted QR codes onto tortillas.

Wait, what?

Okay, I should probably give a bit more context. QR Show was a QR-code-themed art exhibit, where each piece was related to QR codes in some way. Some people submitted technical descriptions of how QR code actually worked, while others did more artistic things. One of my favourite examples was a QR code which was extruded and 3D-printed - it was visually obvious that it was a QR code, but no phone could scan it, because there was insufficient contrast. Of course, a human could manually write down the bits and decode the QR code if they want, which is the opposite of how QR codes are normally expected to be used.

My friend Nate Woods decided to make a QR-code themed breakfast, including a QR code made out of coffee beans, a QR code made out of cereal, and a QR code printed onto a donut. My favourite part was a QR code toasted onto a piece of bread. We had discussed how this would work extensively the week before, and I even had the luxury of watching a proof-of-concept be executed.

The idea was to take a piece of aluminium foil and manually cut a QR code out of it. Then, the aluminium foil would be placed onto a slice of bread, and the whole assembly would be placed in a toaster oven. Because toaster ovens use radiative heating, this only toasts the bread where there are holes in the aluminium foil.

I had a different idea to accomplish the same thing.

Cartesian toaster

So, my initial idea was to take a 3D printer, and physically move the hot-end to contact the bread in places where I wanted the darker pixels to be. I wrote a bit of code to take an image of a QR code and spit out G-code to control the printer. The code lives here and is pretty barebones, but lets you specify a few important parameters, such as toast time and bread height. Of course these are specified as constants in the code - let's not get too fancy with command-line arguments!

This actually worked pretty well, and I got some semi-workable QR codes out of this fairly quickly!

Bread kind of sucks

So I got some QR codes out of this setup pretty quickly, but there were all sorts of problems. To start, the QR code barely scanned - it was super finicky. I ran into a wall while trying to improve on this setup; no matter what I did, I couldn't get it to scan very reliably.

First of all, bread is very grainy. If you imagine the cone-shaped nozzle contacting the bread, it actually only touches a few grains at a time. This implies a lower bound on the resolution of the toast. The coned nozzle also makes the height critical, as it directly influences the size of each pixel. This is especially problematic because bread isn't as flat as you might think! I found many slices had a dip in the middle of around 1 mm compared to the edges. This was outside of the tolerance needed for good QR codes.

I imagine a cylindrical nozzle would do very well, as then the contact height would be far less critical. Unfortunately while trying to MacGyver a solution here, I nearly started a fire. I decided to not pursue this avenue further.

Another result of these problems was that I was unable to make QR toast very reproducibly. Every slice was a bit different - particularly in terms of height - and I found myself having to make a few pieces of toast just to get one that scanned. At about an hour per slice, this was not very time-efficient!

Upgrading from bread

Unfortunately I cannot order engineering-grade bread on McMaster-Carr yet. To be honest I don't know what they're doing over there - I guess I'm the only one doing real engineering these days.

Luckily I found a good substitute; Trader Joe's tortillas (thanks Jasmine Ren)! They're extremely flat and there is very little variance in height between two of them. Tortillas also give me a larger workable area than bread does. With a bit of tweaking I found that I could create QR codes that scan much easier. My success rate per-tortilla was also higher than per-bread.

The cone nozzle continued to bite me. Height was still fairly critical to within a fraction of a millimeter. Too high and the pixels would be too small; too low and the tortilla would get stuck to the nozzle, ruining it. I decided to cut off the end of the nozzle to create a flatter surface. This left a large hole, so I put a screw into that hole, cut off the screw, and hammered it flat. My friends have many OSHA-noncompliant pictures of me making these modifications. I will not be posting them.

The flat nozzle worked amazingly and my success rate continued to climb. I expect a call from Intel any day now; surely these skills will be useful to improving their own yield rates. Here are what some of the final tortillas looked like:

Oh, and I guess there's no reason you couldn't put a non-QR-code into the program:

:3