
Genuary is an incentive to create generative art. They publish a prompt for every day of the month to serve as a starting point to build code that makes "beautiful things".
In January 2021 I (along with a big part of the world) had some extra time at home and decided to follow the prompts for Genuary 2021.
As an extra constraint, I decided to follow the prompts writting code for an ESP32 microcontroller to drive a 7-inch e-ink display. This meant all my entries had to use only two colors, and any animation would be really slow. All the code is available in a git repository, as usual.
Here are each of the Genuary 2021 prompts and a picture of the result on the e-ink display (you can jump to the end to see all of them in one picture):
-
Triple nested loop
For this one I implemented a circle packing algorithm.
-
Rule 30
-
Make something human
I was tired...
-
Small areas of symmetry
-
Do some code golf! How little code can you write to make something interesting?
This one was a bit hard because there's a lot of setup code needed for the display. Code is in the git repository.
The artifacts that look like JPEG compression issues are not: they show up in the display also because of the display resolution and the straight lines so close to each other.
-
Triangle subdivision
It had to be Sierpiński triangle.
-
Generate some rules, then follow them by hand on paper
Ran out of space on the paper.
-
Curve only
But with lines.
-
Interference patterns
-
TREE
A drunken turtle following rules generated by an L-System.
-
Use something other than a computer as an autonomous process (or use a non-computer random source)
-
Use an API.
I made a flow field with wind data from MetaWeather (which seems to be dead now).
-
Do not repeat
Bouncy ball that never goes over the same spot.
-
Subdivision
-
Let someone else decide the general rules of your piece
Bruno Gola had the excelent idea of basing the drawing the in the program that's executing in the ESP32 itself.
The code for this sketch reads each bit in the flash memory of the microcontroller and draws a black pixel if it's a 1, white if it's a 0.
-
Circles only
Perlin noise textures with halftone dithering.
-
Draw a line, pick a new color, move a bit
As I can only use two colors, lines are also halftone. The next color is also picked using perlin noise.
-
One process grows, another process prunes
-
Increase the randomness along the Y-axis
-
No loops
So it's recursion and trigonometry.
-
function f(x) { DRAW(x); f(1 * x / 4); f(2 * x / 4); f(3 * x / 4); }
-
Draw a line. Wrong answers only.
Trusting the normal distribution.
-
#264653 #2a9d8f #e9c46a #f4a261 #e76f51, no gradients. Optionally, you can use a black or white background.
My display is black and white. The colors turned into bitmasks for the lines I drew.
-
500 lines
-
Make a grid of permutations of something
I connected points in a circle and got an alphabet.
-
2D Perspective
-
Monochrome gradients without lines
-
Use sound
I was too lazy to use a microphone, so I used some out of phase sine waves.
-
Any shape, none can touch
-
Replicate a natural concept
-
Eno's oblique strategies ("twist the spine")