Skip to main content

brickmos is a humble Lego mosaic generator.

Project description

brickmos

brick-mosaic

pypi_versionbuild

This is a simple tool for converting images to Lego mosaics such that their parts can be ordered quite easily from bricklink (https://www.bricklink.com/). I wrote this for myself for a birthday present I worked on, but wanted to leave it here for others to re-use or as inspiration.

process-steps

(ltr: original image, pixelated image with original color, image with colors mapped to given Lego colors; image source)

Motivation & alternatives

This is a rather simple script which worked well for me, as I went back and forth between my image editing tool and modifying the color pallet. I really like this continuous process of shaping the result while keeping colors/brick types and their prices under control. I even ended up replacing one 1x1 plate with a 1x1 tile, since the respective color was too expensive on bricklink. Furthermore, I was only interested in full 1x1 mosaics, similar to the Lego mosaic art product line. I also ended up buying the frame parts used for the Lego art frame, as it is extendable and easily wall-mountable (see here).

However, if you are more interested in a GUI application, different workflow or automatically chosen larger than 1x1 pixels, you may want to have a look at the following alternatives (if I forgot an alternative here, let me know):

  • Bricklink studio (full-blown brick set designer with a mosaic feature, (see here)
  • PicToBrick (specifically made for brick mosaics, see here)

Quickstart

The following should get you started.

Dependencies

Main dependencies are:

  • Python (I used python 3.8)
    • opencv-python (the version I used is defined in requirements.txt)

If you run into problems missing libGL.so, install the following:

sudo apt update
sudo apt install libgl1-mesa-glx

Installation

Install via PyPi

pip install brickmos --upgrade

Process an image

Convert an image by invoking the script as follows:

brickmos --image_file data/iron-man-portrait.jpg --output_directory="temp"

Or alternatively clone this repo and run it directly:

python run.py --image_file data/iron-man-portrait.jpg --output_directory="temp"

Repeat the process while modifying the original image (change colors in areas not working well, change colors overall, etc.) and limiting / extending the colors (add useful ones, remove expensive ones) until you are satisfied with the outcome (and price ;) ).

Import parts to bricklink

  1. Login at https://www.bricklink.com/
  2. Go to Want > Upload (see here)
  3. Choose Upload BrickLink XML format
  4. Copy & paste (ctrl-a, ctrl-c, ctrl-v) the XML output of the tool into the window
  5. Proceed to verify items and add all to a wishlist (please double-check the items, before ordering)

Further information

Find some further definitions below.

Parameters

Find a short explanation of the parameter arguments below.

Required arguments

  • --image_file, -i: the path to the (original) image to process, can be a .jpg or .png file

Optional arguments

  • --color_file: the csv-file defining the brick-colors to be used (if not given, colors.csv at script location is attempted), see format description below
  • --output_directory, -o: the directory the output image and BOM is written to (default is current working directory)
  • --spares: the number of spares to add per color/brick (in bricklink BOM), just in case of loosing some bricks
  • --size: the width/height of the image in 1x1 bricks (default is 48x48 - same as current Lego art)
  • --grid_cell: the size of one cell in the helper grid (e.g.: 4x4), the helper grid is useful as a guide when finally placing the bricks, it can be deactivated by specifying none

Color definition

The set of available colors is defined by the csv-file (--color_file, see above). The following information is required.

rgb         ; Bricklink Color Name ; Bricklink Color ID ; Bricklink Part ID
255,255,255 ; White                ; 1                  ; 3024
175,181,199 ; LightBluishGray      ; 86                 ; 3024
89,93,96    ; DarkBluishGray       ; 85                 ; 3024
33,33,33    ; Black                ; 11                 ; 3024

This is an example set of colors for a 4 'color' black & white picture using 1x1 plates. The example is already in expected format. The format requires a header line and semicolons as column delimiters. The values used here should be aligned with the definitions on bricklink for the export to work properly (see https://www.bricklink.com/catalogColors.asp).

More details about each column:

  • The first column is the RGB value of the corresponding color. There is no official definition of these from Lego, thus, use something as close as possible you can find. I picked the colors defined on the bricklink page.
  • The second column is just a recognizable name for the color. Using the bricklink name seems reasonable.
  • The third column is the bricklink color ID (see page mentioned before). This is important for the XML-export to function properly.
  • The fourth column is the bricklink brick type ID. You can find these in bricklinks database. Since the script only considers 1x1 parts, only these should be used. The 3024 from the example is the 1x1 plate (see here). Other options include, but are not limited to, 1x1 tiles (3070b, see here) or 1x1 plate round (4073, see here). Note that prices vary a lot with color AND brick type. For my own mosaic I used 1x1 plates, but replaced an expensive color with a much cheaper 1x1 tile.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

brickmos-0.1.1.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

brickmos-0.1.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file brickmos-0.1.1.tar.gz.

File metadata

  • Download URL: brickmos-0.1.1.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for brickmos-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2ac910b97666c084dc1c2f86f145a0accbdd412bc912a0dcd724bffb12db4702
MD5 683ffdbb2360cfd8d6f1e975c3bd5d4b
BLAKE2b-256 84790eeece05ebc813c7135c59364c174cddee5b8bd6e39a9754caaa3c913fe3

See more details on using hashes here.

File details

Details for the file brickmos-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: brickmos-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for brickmos-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d8494c6595dd58d4a06ced1f7711b2109526ce6cf085763b8e8b22f8d1aad367
MD5 1550cde8f8bb435ae964ba7f29207379
BLAKE2b-256 d29aebdfd7b6a5ee61f070ee92949d9b299d52fe4f03f45ea9240b83e48719fc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page