Creating Pixel Art
Legofy makes images look as if they are made out of 1x1 LEGO blocks.
I tested some settings and after 128px the image looks better dither set to "on".
Install legofy with pip:
pip install legofy
I tried the following 4 options:
legofy --size 32 --no-dither --palette all 0xfab1.png 0xfab1_lego32.png legofy --size 64 --no-dither --palette all 0xfab1.png 0xfab1_lego64.png legofy --size 128 --dither --palette all 0xfab1.png 0xfab1_lego128.png legofy --size 256 --dither --palette all 0xfab1.png 0xfab1_lego256.png
This gets big and expensive quickly; so lets check when the chosen picture looks good enough:
QR Code creation
To match the QR-Code pixels with a valid lego base plate size I tried a few options to find a match.
Possible lego base plates
14x14 → 14,28,42,56,70 16x16 → 16,32,48,64,72 24x24 → 24,48,72 32x32 → 32,64 48x48 → 48 50x50 → 50
Since a QR-Code has the same length as hight any of the above values would fit perfectly on a given lego base plate.
The initial idea of using the value
https://0xfab1.net/make/lego/qr-code and therewith referencing to this page doesn't result in a perfect match despite trying different paddings:
7% padding: 29x29 or *2 for double width = 58x58 15% padding: 29+29 or *2 for double width = 58x58 25% padding: 33x33 or *2 for double width = 66x66 30% padding: 37x37 or *2 for double width = 74x74
Luckily it didn't work out as the link has now changed an would have been invalid as i refuse to take care of redirects. The next attempt would to go for https://0xfab1.net. The results are:
7% padding: 25x25 or *2 for double width = 50x50 15% padding: 25x25 or *2 for double width = 50x50 25% padding: 25x25 or *2 for double width = 50x50 → best option 30% padding: 29x29 or *2 for double width = 58x58
50x50 is a valid lego base plate and a possible result for the QR-Code. I will go with the 25% padding option as this will lead to better scanning results without any downsides.
The value "https://0xfab1.net" as QR-Code.
I didn't find a cool way to automatically build the QR-Code in Bricklink Studio so I just opened the image of the QR-Codes shared above and rebuilt it using different flat tiles. Classic QR-Codes have black and white pixels so I went with that look and chose a white 50x50 baseplate and used different sized black tiles for the pixels.
The result is:
as well as this cool video:
Fortunately you can import *.io files in Bricklink directly. It will search for sellers based on your preference (e.g. currency, location). The outcome initially was this list since i used as little amount of plates as possible:
|3068b||306826||3068b||Tile 2 x 2 with Groove||11||0||Black||Solid Colors||38||48|
|69729||69729||Tile 2 x 6||11||0||Black||Solid Colors||76||135|
|87079||4560182||87079||Tile 2 x 4||11||0||Black||Solid Colors||38||9|
|3068b||306801||3068b||Tile 2 x 2 with Groove||1||15||White||Solid Colors||48||48|
|69729||69729||Tile 2 x 6||1||15||White||Solid Colors||49||135|
|4186a||4186a||Baseplate 50 x 50||1||15||White||Solid Colors||1||235|
|87079||4560178||87079||Tile 2 x 4||1||15||White||Solid Colors||44||9|
Turns out the 50x50 plate is not available and that the non 2x2 tiles are way more expensive.
So i ordered a 50x50 plate online somewhere else and changed the order to 2x2 tiles only, which reduced the price significantly (roughly 40% cheaper).
I went with 350 since 50x50/4 = 625 and I need roughly half black, half white tiles. Since i didn't re-do the build in Bricklink Studio based on 2x2 tiles I added a few safety tiles = 350 per color which was still cheaper than to original order.
|3068b||306801||3068b||Tile 2 x 2 with Groove||1||15||White||Solid Colors||350||48|
|3068b||306826||3068b||Tile 2 x 2 with Groove||11||0||Black||Solid Colors||350||48|
Delivery and building lego qr-code
All pieces finally arrived and putting it all together was easier and faster than expected. I hope i didn't mess up any pixel - well at least scanning the lego works ¯_(ツ)_/¯
This is the final result :)
Base keyboard is an EPOMAKER SKYLOONG SK64.
I purchased lego key caps from shapeways: