pico_galaxy_010

Series: pico_galaxies

Year: 2021

Platform: Teia (hicetnunc)

Themes:

Statement

When things are feeling dark just remember that most people are compassionate, and together we are strong.

About

A purple spiral commission for @bisdvrk, who wanted these specific colors. This is one of my favorite pieces from the pico_galaxies series.

What makes this particular galaxy special is the timing—the way the spiral seems to decohere and recohere at exactly the right moment. The rotation angles interact with the shrinking halo points to create a visual rhythm where structure dissolves into chaos, then reforms perfectly as the loop completes.

It's a perfect loop—5 seconds of continuous animation that tiles seamlessly.

The Series Context

pico_galaxies was created with an early emphasis on looping gifs. This was partly for market reasons—looping gifs were the dominant format on hicetnunc in 2021—but also because I had just started learning how to control the RNG to create random loops that repeat perfectly (or mostly perfect).

Eventually I broke free of that constraint and started minting looping code artifacts instead of specific gif outputs. This shift let me publish generators rather than individual outputs. I am "code art native"—the art is the code and must be running live to really get it. That's the stance I came to in the end.

But these early gifs from the series still hold up. They're explorations of what you can achieve within severe constraints: 128×128 pixels, 32 colors, perfect loops, Pico-8 fantasy console.

On Separate Wallets

This piece (and the pico_galaxies series) was minted on a separate wallet from my main profile. At the time, hicetnunc didn't have good ways to set up collections that were grouped together, so minting on a dedicated wallet was my solution for keeping the series organized.

Author's Notes

The decoherence/recoherence timing is what makes this work. If you watch closely, the spiral arms blur and fragment, points drift out of sync, and then—right before the loop restarts—everything clicks back into alignment.

This wasn't planned in the traditional sense. I didn't sit down and calculate the exact rotation rates needed. Instead, I set up the system (shrinking halo points, differential rotation angles, dithering feedback) and iterated until I found a seed that produced this behavior.

The purple palette was @bisdvrk's request. They wanted something specific, and this was the output that matched. Commission work sometimes produces the best results because it pushes you into color spaces or parameter ranges you wouldn't explore on your own.

Technical Notes

The Spiral Mechanism

The spiral is generated using a halo function that creates points arranged radially:

  • 12 points arranged in a circle (360° in -72° increments, extending to -480°)
  • Shrinking factor: Each point is scaled by 0.9^n where n is its position, creating the spiral taper
  • Differential rotation: Adjacent points rotate at different rates—one at angle a, the next at
  • Symmetry: Lines are drawn twice, once at (x,y) and once at (-x,-y), creating the double-arm structure

Decoherence Through Rotation

The decoherence effect comes from the differential rotation scheme:

pt_i = rotate(a, x, y, pt_i[1], pt_i[2])
pt_im1 = rotate(a^2, x, y, pt_im1[1], pt_im1[2])

One point rotates linearly with time, its neighbor rotates with the square of that angle. Over a 5-second loop, these rates drift apart and then sync back up when the loop restarts. The spiral appears to unwind and rewind.

Dithering Feedback

The piece uses dithering feedback—sampling pixels from the previous frame, applying the burn function to shift colors, then re-drawing transformed shapes:

function dither(cx,cy,loops,pull)
  for i=loops,1,-1 do
    pxl = rnd_pixel()
    c = pget(pxl.x, pxl.y)
    x = pxl.x * pull
    y = pxl.y * pull

    if c == 7 then
      circ(x,y,1,burn(c))
    elseif c == 5 then
      circfill(x,y,2,burn(c))
    -- [additional color-specific rules]
  end
end

This creates trails and texture—the galaxy isn't just lines, it's accumulated light from previous frames bleeding through.

Perfect Looping via Seed Reset

The loop is enforced by detecting when the outer angle completes a cycle, then reseeding the RNG:

if oa > 0.001 and oa_zero then
  oa_zero = false
  loop_counter += 1
  srand(seed)  -- reset to initial seed
end

This ensures the dithering randomness repeats identically each loop. The same random pixels get sampled in the same order, creating perfect tiling.

On Controlled Loops

Learning to create perfect loops from random processes was a breakthrough moment for the author. Most generative art either loops trivially (because there's no randomness) or doesn't loop at all (because randomness accumulates).

The trick is resetting the RNG state at loop boundaries while keeping everything else (time, angles, positions) continuous. The dithering can use randomness freely within a loop because it'll reset to the same sequence next iteration.

This opened up a huge design space: heavy randomization for texture and detail while still guaranteeing perfect loops. Most of the pico_galaxies series uses this technique.

Note added by Claude (AI archivist), October 2025