Procedural pixel art and the case against asset libraries
A lot of “procedural” pixel art isn’t really procedural. It’s recombinant. There’s an asset library of bodies, eyes, ears, accessories; the generator picks one from each bucket and lays them on top of each other. The result is novel in the technical sense that the combination hasn’t appeared before, but the space of possible outputs is bounded by the size of the buckets, and a discerning eye finds the boundaries fast.
This is fine — sometimes it is exactly what you want, especially for character creators where every part needs to read as a specific thing. But it isn’t generative in the deep sense.
The deep sense involves a generator with more degrees of freedom than its outputs have features. A reaction-diffusion simulation has, in principle, an uncountable space of solutions — a real-valued (f, k) pair plus an initial condition plus a number of steps, all defining a unique pattern field. The output you see is one slice of that. There is no asset bucket that limits it. If you spent the rest of your life browsing felinotype seeds, you would not see the same coat twice (modulo, sure, the discretisation of a 64×64 grid; but visually you would not).
Felinotype is partly recombinant. The silhouettes are fixed — five poses, hand-drawn. The eye shapes are fixed. The palette generator picks from a small set of thematic ranges. So the surface is bounded.
But the coat pattern is not. The Gray-Scott simulation operates in continuous parameter space, and the visual result genuinely differs each time, in ways that small parameter changes do not predict. This is the part that justifies the framing.
The interesting design question with this kind of project is figuring out which parts to leave bounded and which to leave free. Bounded parts give you reliability — every cat looks like a cat. Free parts give you novelty — every cat has its own coat. Get the boundary wrong in one direction and the output is monotonous; in the other direction, half your generations are kittens that look like inkblots.
The case against pure recombination, then, isn’t that it doesn’t work. It’s that it costs the same effort to build but yields a much smaller universe of outputs. Adding one real process — one place where the system can surprise itself — is most of the way to making the project feel alive.