⏻
HELGE SVERREAll-stack Developer
Bergen, Norway • v13.0
est. 2012  |  197 repos  |  12.8k+ contributions
Tools  |   Theme:
Make me some neat fractal things
October 10, 2026

I asked my coding agent to make me some neat fractal things in Sema. Then: make them move, make them loop, add bloom, and try three wildly different designs. Here's what it made.

Glowing gold, cyan, and lilac ribbons twisting into a three-dimensional loop
Kinetic Loom
A luminous grid rising and falling as waves travel across its surface
Wave Atlas
Hundreds of coloured lights tracing short curved trails through a dark field
Comet Ballet
Nested gold, cyan, and lilac octahedral cages rotating and expanding
Prism Engine

These ended up as parametric animations rather than fractals. Kinetic Loom has 84 woven ribbons; Wave Atlas adds three travelling waves into a moving landscape; Comet Ballet sends 270 lights along different orbits; Prism Engine rotates 25 nested octahedra.

The GIFs are smaller 20 fps previews. Each full render is a six-second, 1920×1920 MP4 at 60 fps, with 360 frames.

A little Sema

The wave surface is just a few sine and cosine terms. This is the actual height calculation from Wave Atlas:

(define (surface u v)
  (let* ((r (sqrt (+ (* u u) (* v v))))
         (height (+ (* 34 (sin (- (* 7 r) phase)))
                    (* 25 (sin (+ (* 4 u) (* 3 v) (* 2 phase))))
                    (* 17 (cos (- (* 5 v) (* 3 phase))))))
         (x (* u 310)) (y (* v 310)))
    (list (+ 600 (* 0.82 (- x y)))
          (+ 610 (* 0.39 (+ x y)) (* -2.0 height)))))

To make it loop, time runs around a circle. All the temporal frequencies are integers, so the geometry returns to its starting state after one turn:

(set! phase (* tau (/ (mod frame frames) frames)))

Sema calculates the geometry, writes SVG paths, and coordinates rendering and verification. rsvg-convert rasterizes each frame at 3840×3840; FFmpeg downsamples and encodes the video. The glow comes from three layers of blurred SVG geometry, combined in linear RGB.

Try it

The source and rendered animations are on GitHub. With Sema, rsvg-convert, and FFmpeg on your PATH:

git clone https://github.com/sema-lisp/sema-fractals.git
cd sema-fractals/evolving-scenes
sema --no-llm animate.sema        # Kinetic Loom
sema --no-llm animate-three.sema  # the other three, concurrently

Rendering the full-resolution bloom takes a while. For a single still, run sema --no-llm render.sema from the same directory, or from one of the three scene directories.

Individual scene files: Kinetic Loom, Wave Atlas, Comet Ballet, and Prism Engine.

I started with “make me something cool” and ended up watching a Lisp interpreter render glowing geometry for half an hour. Pretty happy with that.




<!-- generated with nested tables and zero regrets -->