Random art in Python

I get asked every so often to release the source code for my random art project. The original source is written in Ocaml and is not publicly available, but here is a simple example of how you can get random art going in python in 250 lines of code.

Download source: randomart.py

The idea is to generate expression trees that describe an image. For each point `(x,y)` of the image we evaluate the expression and get a color. A color is represented as a triple `(r,g,b)` where the red, green, blue components are numbers between `-1` and `1`. In computer graphics it is more usual to use the range `[0,1]`, but since many operations are symmetric with respect to the origin it is more convenient to use the interval `[-1,1]`. I kept the program as simple as possible, and independent of any non-standard Python libraries. Consequently, a number of improvements and further experiments are possible:

  • The most pressing problem right now is that the image is displayed as a large number of rectangles of size 1×1 on the tkinter Canvas, which consumes a great deal of memory. You will not be able to draw large images this way. An improved version would use the Python imagining library (PIL) instead.
  • The program uses a simple RGB (Red Green Blue) color model. We could also use the HSV model (Hue Saturation Value), and others. One possibility is to generate a palette of colors and use only colors that are combinations of those from the palette.
  • Of course, you can experiment by introducing new operators. If you are going to play with the source, your first exercise should be a new operator. Make sure it maps the range `[-1,1]` back to `[-1,1]`.
  • The program uses cartesian coordinates. You could experiment with polar coordinates.

11 thoughts on “Random art in Python

  1. Well, it’s fun because I was thinking that the interesting part in your random art is not the generation algorithm but the functions used and I see you released the algorithm and some functions but you keep the nicest functions.

    I guess this is normal as the functions are the “art” part of the project and your additionnal value over the plain theoric application.

    Nice work indeed !

  2. Your fans are dazed, confused and worried. Is Random Art gone for good? Will it be back again, perhaps, in a new improved version? When?
    Please, a few words of assurance or solace for your followers?

    1. It’s temporarily down because my server is getting flooded by Hacker News (a social bookmarking site read by too many people). I think the main wave is over, so I will turn on random art shortly. Sorry for the inconvenience.

  3. Thank you Andrej! I too have been bereft and worried. Look forward to being back to normal and making beautiful stuff again!

  4. In my opinion, there should be an added string where you follow the “randomart.py” command with text or a binary file, and art can be made from that.

    1. I agree. I tried to fiddle with the randomart.py and to some degree I managed to make the output depended on manually made input but… it’s far from perfect. Plus the output images do not align with those created by the generator on http://www.random-art.org

      I would appreciate some help too.

      1. I would love to continue building on your python code. Is this the help you are looking for ?

Comments are closed.