Should have been here yesterday

I recently completed a challenging and exciting commissioned project for my dear friend and musician, Christos DC. Over the last few years, I have enjoyed a few opportunities to create artwork for his special projects that include a tribute album to Joseph Hill and a creative blending of traditional Chinese instruments and reggae.

The new project was part of his ongoing collaboration with the French reggae group The Ligerians. He asked me to create an animated version of his old favorite, Should Have Been Here Yesterday, which features a striking image of a wave formed with lines and earthen-tone tiles.

Should Have Been Here Yesterday (R code; 10/04/2025)

The new project builds on a previous music video for their song Shadow of Perception, where I animated another generative artwork, titled Icarus. For that project, I used flow fields to guide tile movement and incorporated swinging motions in sync with the song’s BPM.

For Should Have Been Here Yesterday, I started with inspiration from a kinetic artwork I created earlier. That piece featured an hourglass-shaped wireframe that dispersed tiles to the right, mimicking the effect of wind blowing. I thought a similar approach could bring the wave to life, with tiles flickering along its contours to simulate movement.

The first step was designing the wave’s wireframe. I used a sine wave to shape its form as it wound around over time. Next, I added the tiles, scattered randomly across the wave. While this approach was straightforward, the randomness created a noisy, chaotic effect that didn’t look like a wave at all.

Video compilation of the early steps

And then it clicked: the sporadic randomness had to go. To address the visual noise, I experimented with expanding semicircles that eventually moved out of the plotting area, recycling them back toward the center. Unfortunately, this didn’t smooth out the noise or convey a clear wave pattern. By this point, the code was overly complicated, and I realized it was time to refactor.

I stripped away everything that contributed to shakiness or randomness. Anything calling on the random number generator (RNG) during the animation was removed to ensure smooth transitions across frames. I refactored the logic so the tiles rotated smoothly up the wave’s face, over the top, and back to the bottom in a continuous loop. By reusing the wave’s coordinates, colors, and patterns, I eliminated unnecessary randomness and introduced a cohesive flow.

Finally, I discovered a stray RNG call that wasn’t needed. Removing it was the breakthrough moment—the animation suddenly became seamless, as if by magic.

Preview of the final video

The result is a smooth, dynamic wave animation that pairs beautifully with the song. Comparing the final animation to the earlier stages, you can clearly see the transformation: what began as noisy and chaotic evolved into a flowing, harmonious design. When the music video is released, I’ll share the link on my webpage, so stay tuned!

In the meantime, I highly recommend checking out Christos DC and The Ligerians’ music—it’s fantastic work that deserves a listen.

Back to blog