DrawBot is a powerful, free application for MacOSX that invites you to write simple Python scripts to generate two-dimensional graphics.” drawbot.com
In Spring 2020, I took Ben Kiel’s Programming Design class and finally explored the intersections of coding and design. I’m a Computer Science minor, and since taking CSE 131 (Intro to CS), I’ve been linking for ways to make fun stuff with code. I’ve found DrawBot to be the perfect tool, and have since used it to supplement my work and make fun side projects. This is one of them.
Something I love about programming is the random function. This is used in games (you’ll often hear the term RNG, random number generated) to introduce unpredictability. It’s called Math.random() in Java and random() in Python, and it’s so, so useful for visual exploration. When I first started using DrawBot, I experimented a lot with placing text (and images) on random parts of the canvas using random(). It’s fascinating to see where things end up! Some placements seem too good to be true.
Another cool thing about DrawBot is that it lets you save your canvas in lots of file formats, including PDF and SVG so you can edit each element later on. In other words, I can treat DrawBot as a stepping stone. No matter what it produces, I can leave it be or I can tweak it. I used DrawBot to quickly generate compositions with random shapes for a different project. I then lightly edited the images in Illustrator.
Continuing that experimentation, I used song lyrics as the input. As a Writing minor, I study mainly nonfiction and poetry (I know). But the cool thing about words is that they mean different things in different contexts. In different contexts, they are transformed. Putting lyrics through DrawBot not only transforms their meaning but visualizes them. Mitski’s “Pink in the Night” lyrics hit different when randomly placed.
Repeated lyrics like “I hear my heart breaking tonight,” “I could stare at your back all day,” “I love you,” “try again,” and “and again,” form over and over in different ways.
The code uses methods inside methods. lyrics(line) randomly places line somewhere on the canvas. canitryagain2() then applies lyrics() to the lines “can i,” “try again,” and “and again.” 

def lyrics(line):
    fill(0.9, random(), random(), 0.9)
    text(line, (random()*1000, random()*1000))
def canitryagain2():
    lyrics("can i")
    lyrics("try again")
    lyrics("try again")
    lyrics("try again")
    lyrics("and again")
    lyrics("and again")
    lyrics("and again")
    lyrics("and again")
    lyrics("and again")
    lyrics("and again")
All of the images for this project are unedited (so far).
In the near future, I’d love to make postcards out of these and sell them on Etsy. Interested? Email me!
You can see more of my DrawBot work at the links below.
DrawBot made by Just van RossumErik van BloklandFrederik Berlaen​​​​​​​
Lyrics written by Mitski
IBM Plex Mono designed by Mike Abbink, IBM BX&D, in collaboration with Bold Monday. I love that a monospace typeface has so many weights. I’ve developed a deep appreciation not only for Plex’s letterforms but also that IBM very intentionally made Plex open source! Do I use IBM Plex Mono too much? Let me know in an email!

More Work

Back to Top