Prettiest Little QR Code Ever

This is the chronicle of a misguided attempt to create a small, aesthetically pleasing QR Code.

The premise was absurd. The smallest QR Codes are 21 dots across. That's not enough room for any signifcant art, much less aesthetic beauty. Even worse is the fact that QR Codes compress information and support error correction. Well, that's great for the code, but bad news for the aesthetic.

Successful compression guarantees uniform density of information. There's visual noise everywhere. Art requires something else: sparcity, shape or symmetry. Beauty requires something to bring it out.

So, I was starting with guaranteed uniform noise, and I wanted shape, symmetry and sparcity.

Yeah, this was going to work.

So, why did I even decide to try?

Well, I'm really proud of the QR Code for http://dlma.com/. Because the link is so short, the QR Code that represents it is the smallest possible type, at 21 dots across.

dlma_com.gif

When I look at that image it's so obviously a combination of a dancing Rasta banana (dancing for tips in a hat), a jackhammer, and a Phoenix.

dlma_com_augmented.gif

You see it? Of course you do.

If I could get the awesome banana-jackhammer-phoenix without even trying, I bet I could make a bee-yoo-tee-ful QR Code if I asked the computer nicely. Or made it work really hard at it.

I took a quick stab at every possible 21x21 QR Code that'd direct to my domain, but they all sucked. If I allowed myself to paint on a 25x25 canvas (the next size up for QR Codes), that'd give me a lot more breathing room.

So here's what I did: Starting at 0, or 0000000000, I had the computer count up in base 36 numbers to about zzzzzzzzzz. (Yep, "zzzzzzzzzz" is a number in base 36, it is over 3.5 quadrillion.)

For each and every number, I had the computer create many possible URLs that goes to dlma.com, and for each one of those URLs, I had the computer do every possible QR Code encoding at 25 dots across. (There are about three or four encodings at different levels of error correction.)

For example, for the base 36 number "52gb", there are 32 different URLs at the domain dlma.com, like so:

URLs for 52gb
http://dlma.com/52gbhttp://dlma.com/52gb/http://dlma.com/52g/b
http://dlma.com/52g/b/http://dlma.com/52/gbhttp://dlma.com/52/gb/
http://dlma.com/52/g/bhttp://dlma.com/52/g/b/http://dlma.com/5/2gb
http://dlma.com/5/2gb/http://dlma.com/5/2g/bhttp://dlma.com/5/2g/b/
http://dlma.com/5/2/gbhttp://dlma.com/5/2/gb/http://dlma.com/5/2/g/b
http://dlma.com/5/2/g/b/http://5.dlma.com/2gbhttp://5.dlma.com/2gb/
http://5.dlma.com/2g/bhttp://5.dlma.com/2g/b/http://5.dlma.com/2/gb
http://5.dlma.com/2/gb/http://5.dlma.com/2/g/bhttp://5.dlma.com/2/g/b/
http://52.dlma.com/gbhttp://52.dlma.com/gb/http://52.dlma.com/g/b
http://52.dlma.com/g/b/http://52g.dlma.com/bhttp://52g.dlma.com/b/
http://52gb.dlma.comhttp://52gb.dlma.com/

If I were doing 5-digit numbers, then they'd generate 64 different URLs, and 6-digit numbers generate 128 different URLs. For each URL, the computer generated a few different QR Codes at different encoding rates, and for each of the QR Codes, they get rated for different visual attributes.

It can take nearly 10 seconds just to do 100 numbers. The program I used displayed 16 images at a time while it was doing the processing.

qr_app.gif
Mouse over the image to see categories.

Believe it or not, the codes above are the best of breed for certain categories of aesthetic of small QR Codes that lead to my domain. If you mouse over the image, a legend will appear that says to which category each one of those codes belongs. "Darkest" means "has the most black dots" and "lightest" means the opposite. "Least lines" could also be called, "has the most individual dots, making checkerboard patterns." So "most lines" would mean has the least individual dots, making it the "clumpiest" code of them all. Technically speaking, that is.

The program that did the analysis has a lot of great features. It was all written in Python, except for the QR Code generator, which is a C++ Python module. The UI is one thread, while the worker thread is another. Every once in a while, the worker thread phones home to a remote web service and reports its results. That way, I could have multiple computers running the same analysis and they wouldn't step on each other. Each one also kept track of the best fifty codes for each category, giving me the chance to review 800 interesting QR Codes. I let computers run the program for days.

The result?

Well, let just say that there aren't many naturally beautiful QR Codes of size 25 or less. I ended up picking out three codes: One that sorta resembles an electrified soot sprite from Totoro from the heavy-center category, one that resembles Cthulhu from the H Symmetry category, and another that looks menacingly like Skeletor.

skull_head3.png
Skeletor
qrface.png
Soot Sprite
cthluhu_code.png
Cthulhu

All those hours of computing, and this was the best the program could come up with. No beautiful butterfly, eerily symmetric pattern, or falling rain of Matrix codes. Ah, well. At least I have a nice framework for whatever project I start next.

5 Comments on "Prettiest Little QR Code Ever"

  1. Eric on November 17th, 2009

    Hello David,

    Very well done!
    Like this !

    Greetz, Eric ( QR-Art pool @ Flickr)

  2. Riviera Blog :: QTQR on February 16th, 2010

    ...and-lv-make-first-designer-qr-code/">attempts to make QR codes look pretty (I particularly like David Blume’s), and challenged by @danbri I wrote a little QR code (de)ge...

  3. trav on March 11th, 2010

    I think all technical speak should be phrased with words like "clumpiest". Great post and project, BTW. You really took the possibilities to places I didn't think about and kept it fun. I'm hoping to build a "family series" of QR codes for some of our branded imprints. It seems a bit tedious, but fun.

  4. Patrick Donnelly on April 10th, 2010

    David,

    I have been on the same mission, but from an artistic long painstaking process. Check out some of my QR art at www.qrarts.com

    Best,
    pd

  5. pfraterdeus on June 3rd, 2010

    Very cool analysis!!

Comments are closed.