Here is the URL to the course repo: https://github.com/rethread-studio/algorithmic-art-course
rust >= 1.83.0
To run the different art experiments:
cargo run --release --bin <bin-name>
where <bin-name>
is one of:
birds
cloud
mandelbrot
particles
triangles
This experiments simply models the flocking behaviour of birds.
S
Key → Save the current frameQ
Key → Quit
You may run the experiment using the following command:
cargo run --release --bin birds
This experiments is a simple particle simulator featuring non-elastic collisions. Each particle has a mass that changes its color and size.
S
Key → Save the current frameQ
Key → Quit
You may run the experiment using the following command:
cargo run --release --bin particles
![]() |
![]() |
![]() |
![]() |
For this experimentation, I drew inspiration from two main sources.
The first was Nikolaus Gradwohl and one of his experimentations. I was captivated by the mesmerizing quality of his animations, especially the way he uses computational techniques to create organic forms and fluid movements.
The second source of inspiration came from January 13th's prompt for Genuary 2025, created by Heeey: "Triangles and nothing else."
I started with a single triangle as the primitive shape and explored its possibilities by manipulating its position, shape, rotation, and roll using Perlin noise. Inspired by Nikolaus's approach, I introduced the concept of slowly fading triangles to black as more are drawn, and incorporated light, translucent shapes layered over a black background to enhance the ethereal quality of the animation.
A simple, interactive menu that allows for live tweaking of the various noise multipliers and constants used in the code was also implemented, making it easier to explore and experiment with randomness. The menu includes a "Save settings" button, which prints all the current settings to the terminal for easy reference and reuse.
S
Key → Save the current frameQ
Key → Quit
You may run the experiment using the following command:
cargo run --release --bin triangles
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
For this experiment, I drew inspiration from a simple but profound mathematical theme: recursion. The Mandelbrot set is the ultimate recursive fractal; each point in the complex plane is tested against a rule that feeds back into itself, again and again, to determine its fate.
From a single formula, an infinite landscape emerges. This experiment is an invitation to explore recursion visually, to get lost in the infinite depth of the Mandelbrot set, and to uncover new patterns hidden within the chaos.
This experiment is an attempt to not only visualize this fractal but to explore it interactively, manipulating its parameters in real-time and experimenting with alternative ways to render its intricate structure. The project also expands on traditional Mandelbrot rendering by introducing "subtrajectory" visualization, a technique that maps each iteration of a complex series back to screen-space, revealing the path of individual points as they evolve.
Another key feature is the ability to selectively render either the points inside or outside the set, offering a different perspective on the fractal’s structure.
- Arrow Keys → Move the viewport
+
/-
→ Zoom in/out- Mouse Scroll → Zoom dynamically
S
Key → Save the current frameReturn
Key → Force redrawQ
Key → Quit
You may run the experiment using the following command:
cargo run --release --bin mandelbrot
The next step would be to write a shader to compute the mandelbrot set for the screen. Right now, the render is only real-time for a low iteration count and low sub-pixel count. Computing the set on the GPU would make the code a lot faster.
![]() |
![]() |
![]() |
![]() |
This experiment is a point cloud renderer that utilizes techniques inspired by ray tracing to visualize 3D point clouds on a screen. The simulation introduces destructive forces through a Perlin noise wind, which can dynamically sync with the bass of an audio track. This synchronization is achieved by computing the FFT (Fast Fourier Transform) of the audio buffer in real-time and extracting the amplitude of frequencies below 80Hz. That amplitude multiplies the intensity of the wind.
The noise wind influences the point cloud’s structure, but a spring-like restorative force counteracts the displacement. This force is determined by the distance between a point’s displaced position and its original location, causing the cloud to behave similarly to a tree swaying in the wind.
The rendering of points and displacement of points caused by the noise wind is done on the GPU using wgpu
and wgsl
shaders. This allows a fluid experience.
Point clouds can be imported from an e57
scan, a widely used format for 3D scanning. On iPhones, the 3d Scanner App can be used to generate such scans. Otherwise, multiple sites provide e57
scans for free, such as the "Union Station" scan by Trimble Inc available on SketchUp
The experiment is greatly inspired by nakade, a collaboration between Léa Demeule and Victor Ivanov.
The application supports keyboard controls for navigating the environment. The following keys are available for interaction:
- Mouse → Move the camera
WASD
or Arrow Keys → Move cameraE
Key or.
Key → Move upQ
Key or,
Key → Move downSpace
Key → Toggle binding the cursor to the windowZ
Key → Save the current frameX
Key orEsc
Key→ Quit the application
You may run the experiment using the following command:
cargo run --release --bin cloud