Ramati Line Assemblage

2025

Ramati Animation

Overview

When I first encountered the visual scores of Roman Haubenstock Ramati, I was struck by how musical composition could be expressed entirely through form: intersections of line, shape, and space that evoked both movement and silence. It felt like blueprints for something more than sound. Inspired by that tension between control and chaos, I set out to make an animation that could capture a similar feeling. I was not interested in recreating his pieces but in building my own abstract scores that echoed his visual language—arrangements that speak in rhythm without notes.

This animation arranges lines, squares, and circles in sequences that shift subtly from frame to frame. Each layout is a new variation, randomized but patterned, like a system improvising within its own logic. I used probability to let the shapes decide where and whether to appear. The results feel balanced and deliberate, not because I placed each element by hand, but because the rules I set allowed them to emerge with a kind of visual rhythm.

Each vertical line is assigned an x position sampled from a normal distribution centered near the canvas midpoint. The y start and y end positions are drawn from separate normal distributions. This means a line's endpoints vary in height, giving the structure an unpredictable range. Circles appear with a 70 percent probability. Their radius is generated from a half normal distribution with scale equal to the square root of two times the line length, divided by the square root of two over π. This ensures radii are always positive and scale proportionally with the lines they relate to.

For squares, a separate process governs appearance. Each has a 50 percent chance to be drawn. Their size comes from a normal distribution and their placement is offset by values selected randomly within a local range. Every frame is built by sampling these distributions repeatedly, and since the code uses new values each time, the frames differ slightly while staying within the same logic. The output is generated through Python using Pillow for drawing and Torch to sample the random distributions, with each frame rendered into a GIF that cycles through twenty distinct compositions.