Random convolution with feedback

Edit: embed isn’t working for me, here’s a direct link: http://robp.meowr.net/stuff/trip_assistance.mp4

Here’s a demo for something I wrote a few years ago. The code primarily does two things, first, it blits an arbitrary number of pixels from a source image to the destination. Second, it takes a 5x5 matrix and will randomly mutate one value every frame. This can get into some really neat states! Unfortunately, it also leads to states that just saturate fully and stay there. I played with some methods to try and rebound from this, but I never quite figured it out. There are controls for adjusting how many pixels are blit, and setting whether it clears each frame or feeds back

I’d like to share the code, but it’s a bit embarassing right now. I’m not too smart at DSP and the code is just brute forcing the convolution. I suspect I could probably optimize it with FFT, but I gotta go back and bang my head against a wall for awhile. Seeing everyone else’s cool stuff really makes me wanna go back and work on it more!


adding wraparound/foldover/nonlinearities for parameters at the saturation point can help keep things moving. having some kind of smooth noise/external entropy source helps a lot as well (pnt seeds, camera sources, random number generators here and there). the classic image processing approach to living patterns is to use blur and sharpen kernels in succession with variable parameters. its essentially reaction diffusion where the blurring works as diffusion to spread the information about the image and the sharpen works as the reaction to help solidify and strengthen patterns as they form. sometimes less is more when working with neighborhoods as well, video waaaves and waaave pools feedback system work with extremely limited convolutional neighborhoods which keeps them zipping along.

something ive been curious to experiment with is non square based kernels, theres a really nifty CA system based on circular kernels that does some pretty nifty stuff. thought it might be cool to have a bunch of different sets of polygonal kernel shapes to switch around to and from while iterating as we