CA Finder (GPU Edition)

This is a cellular automaton simulator running as a shader on your GPU. Cellular automata are simple rule-based systems. Forming from chaos, each pixel, or “cell”, determines its next value based on its neighbors. Systems and structures emerge from these local rules.

I made this tool so I could generate tiling patterns quickly. The controls are hard to use and require a keyboard, but with a bit of patience you’ll figure it out. If you’re not familiar with the specifics of cellular automata, it might help to brush up first. Or start hitting buttons and see what happens.

If you discover an interesting pattern, please share it with me. I love seeing how people use tools like this.

One last thing: I made a fractal explorer based on this code, and it’s much easier to get visually interesting results with. Unless you’re specifically interested in cellular automata, you might want to check that out instead.

Controls

Ruleset controls

  • : New random ruleset
  • : Mutate ruleset
  • : Undo last ruleset change
  • : Redo ruleset change

Other controls

  • Q: Increase neighbor range (decrease with Shift + Q)
  • W: Change weight distribution
  • E: Increase cell inertia (decrease with Shift + E)
  • A: Add weight ring (remove with Shift + A)
  • S: Scramble pixels (useful if a simulation gets stuck in a single state)
  • D: Increase pixel density (decrease with Shift + D)
  • Z: Increase number of states (decrease with Shift + Z)
  • X: Cycle neighborhood type (reverse with Shift + X)
  • R: Cycle wrap behavior (reverse with Shift + R)
  • C: Increment color palette (decrement with Shift + C)
  • F: Toggle semitotalistic mode
  • V: Cycle color palette offset (reverse with Shift + V)
  • [: Previous memory bank (next with Shift + [)
  • ]: Next memory bank (previous with Shift + ])
  • 09: Hold to save settings to slot in current bank; press to recall
  • Enter: Save image
  • Space: Pause / play simulation
  • ?: Show this info pane
  • Esc: Hide this info pane

Note: not everything is configurable from this interface. To make deeper tweaks, follow the README and start running the code locally.