art by minimizer"Us" | Scribbled Daydreams | Infinite Scribble | Flow | Waves | Your collectionConnect

Originally published January 23, 2023 on Medium, republished here January 29, 2024.

I wanted to write this for quite a while and I always seem to be drawn first to experimenting and producing more art. Yet as I close the mint for Waves, it’s a now good time to do so.

Waves is my first generative project and will always be special for me. It kickstarted my journey into the space, creating a sense of excitement and reinvigorating my desire to create and explore.

The project creates continuous, smooth motion and incorporates a generative color palette which creates some surprising results. It also has a few bonus features.

Visual Structure

Each piece has concentric rings based on sine waves which vary over time. The main rings will push against each other to determine the overall contours and also are the main transitional points for the palette. These rings typically have larger, more pronounced curvatures and move more slowly.

Depending on the shape of the curves, the piece can look more soft and rounded or with multiple outstretched arms. Here are a few examples in that progression:

There are additional rings drawn squeezed between the main rings. These have many more ripples and move faster, and are shaded using the colors of the main rings.

All the rings are perpetually moving. Occasionally, all the sine waves for a ring will cancel out and it will appear smooth. Each ring does this on its own cycle. The “convergence” is when it happens for all rings at the same time. Here is one example:


Building the color algorithm for Waves was really interesting. The goal was to create a wide variety of color combinations but also have the selections fit within the overall theme of the work.

The algorithm works by choosing a starting point and a direction of travel in the 3D color space. The point will keep moving in the given direction and “bounce” off the edges (e.g. black, white, full or no saturation) until it gets to a new color that’s different enough to be the next main color in the palette. It’ll keep doing this, following the same direction of travel until it has enough colors for the piece. The colors for the inner rings, ring borders and background are based on these main colors.

Overall the algorithm prefers higher saturation colors that are not too dark or light. It achieves this by “nudging” the direction of travel to help reduce the frequency of these outputs.

Here’s an example of the algorithm in action using the visualizer. You can run this for any Waves piece here.

This approach creates a broad range of interesting palette outputs. In some cases the palette ended up staying within a narrower range of hues and traversing lightness to darkness:

In other cases it wrapped around the color space, resulting in all the hues showing up in the resulting palette.

Lower saturations, while less common, also add a nice touch when they are incorporated such as in these:

Bonus Features

One unique feature in Waves is that the metadata, which you can access on most platforms such as OpenSea is also available directly in the art. You can type ‘m’ to see it:

The frame for the metadata itself is shaped by rings and so it animates along with the piece while it is being shown.

Another feature is the “alt view”, accessible with ‘a’. It’ll flip how it renders to show quadrangles instead of curves, creating a very different look and as additional piece of art.

You can also vary the speed and also rewind using ‘+’ and ‘-’ and see the current convergence level using ‘s’. All these options are also available via mouse or touch by clicking/tapping on the piece.

Here’s one more video, showing all the bonus features together:

Lastly, ‘f’ lets you see the piece in full screen mode, and ‘c’ downloads a capture of the current frame.

Looking Back

I still enjoy seeing Waves and often look back to them for ideas. The themes of this work, including motion, generative palettes, and sine waves are ones I will likely come back to over time to further explore and refine.

I hope you enjoyed reading this and exploring Waves.