How I made degenerative
I had to overcome quite a few technical hurdles in order to bring degenerative to life as a fully on-chain artwork. While the collection is intended to stand on its own artistically, it also seemed worthwhile to walk through how I built degenerative.

Start with a watercolor painting
Each degenerative output begins with a photograph of one of my Grandma's watercolor paintings. My Grandma and I went through her vast and rich collection of paintings she has sold over her lifetime. I had to crawl through some old SD cards she had to find some of the paintings, but eventually we landed on a list of 37 paintings that we felt were the best fit for this project.

Now I had 37 JPEG photographs taken with a 2011-era digital camera of my Grandma’s watercolor paintings. I couldn’t fit them all on the blockchain in full resolution, and simply uploading photographs isn’t very interesting artistically.
Vector graphics and optimization
I knew I wanted to do something with differentiable vector graphics on this project. There is a researcher by the name of Tzu-Mao Li involved with an MIT Lab that published a DARPA funded paper in 2020, and published a GitHub repo named diffvg. I found that github repo a couple of years ago, and thought it would be really interesting to use its concepts for on-chain artwork. It felt like the algorithm was a way to optimally represent complex graphics with minimal data, which is exactly the challenge that most blockchain art has to solve.
I played around for about a year with various images and photographs being represented in painterly diffvg renderings, but nothing stood out to me until I put in my Grandma’s watercolor paintings. The combination of the watercolor blending and the stroke-based diffvg representation really looked special. It was able to capture the essence of each painting, while also somehow having its own distinct look.
Tuning the target
There are nearly infinite levers and parameters to tweak when tuning diffvg solvers. Eventually I settled on a custom solver and blending routine that used 1200 strokes to represent each watercolor. Each solution takes hours to run on my laptop, so the optimal settings took many months to find and settle into something I was happy with.
I now had another problem: Every output was megabytes of vector stroke data. Each stroke is represented by a series of Bezier curves, and rgba. I knew I couldn’t upload over 40mb of data to the blockchain for a single project — this was not a good fit at all for the blockchain! However, I wanted to see how much quantization I could apply before the outputs would begin to perceptually degrade. I experimented with various ways to reduce precision, as well as represent curves in different coordinate systems. In the end, I was able to land on a bitpacked compression algorithm that could represent each painting in about 40kb, with only minimal visual degradation.
PostParams for the win
40kb × 37 paintings is still too large for a project script in my opinion. I wanted the project to be easily loadable in the Art Blocks on-chain generator without having to load in the stroke data for every painting. PostParams offered a great solution — I could use an augmentation hook to inject only the 40kb of relevant bitpacked stroke data for each painting.
So now we were down to 40kb of data to load from the blockchain — this was now looking very possible to pull off!
How to make it generative art?
I now had an interesting representation of my Grandma’s paintings on the blockchain.
Great… but that just feels like a weird version of an obscure semi-archival project? I desperately wanted to make the project generative, but it wasn’t obvious to me how.
So I played around in “stroke space” for about a year. I could represent the strokes in different ways. I could emulate them being oil paint, or watercolor paint, or colored pencil, or painted buildings. I could apply all sorts of effects and animations. But they all felt like cheap photoshop transformations that didn’t carry any meaning behind them.
Then one evening I had a revelation — I already had the painting, I didn’t have to generate anything…
I had to DE-generate it!
Turning generative art on its head and de-generating was exactly what I had been looking for. From there it was easy — I played with many algorithms based on many concepts to go from pure to entirely abstract based on a chaos factor.
I love the concept of degeneration, and how it plays out in my life. Everything truly degenerates without care and constant revisiting; this is the theme that led to the conceptual portion of the project — degeneration changes every week, constantly tugging between near perfection and total chaos.
Summary
In the end, all beauty of this project is entirely owed to my Grandma’s watercolors.
I’m nothing but the degen who built algorithms to degenerate her work and share it with other degens for as long as the blockchain exists!
Follow it on your phone
Follow one painting and get a weekly nudge, with a short reflection, when it changes.