Conway's Souls — Cellular Automata with Inherited DNA
Conway's Game of Life on a 1024×1024 grid where every living cell carries a 24-bit "soul" inherited from its parents with mutation. Watch evolution find configurations that survive a million generations.
What this is
Conway's Game of Life on a 1024×1024 toroidal grid, running at up to 240 generations per second on the GPU. Standard B3/S23 rules — but every living cell carries a 24-bit "soul" packed into its RGB channels. When a cell is born, it inherits its soul from one of its 3 living parents with a 1-bit mutation. Render colored by soul. Watch lineages drift across surviving regions like watercolor.
Why this is mind-blowing
Standard Game of Life is a static rule running on dead pixels. This is evolutionary biology in a grid. The histogram tells you which souls dominate. After a million generations, the surviving lineages are the ones that found stable, self-replicating configurations. You're watching natural selection happen in pixels.
Build Conway's Game of Life where every living cell has a 32-bit "soul"
passed to its children with 1-bit mutation per generation. Run it on a
1024×1024 grid via WebGL2 ping-pong textures at 60fps. Standard B3/S23
rules. When a new cell is born, it inherits the soul of one of its 3
living parents at random, with 1 mutated bit. Render the grid colored
BY THE SOUL so as lineages diverge you see color drift across surviving
regions. Show a soul histogram. Generation counter. Souls, not pixels,
are the unit of selection.
Paste this into Claude, Cursor, or Copilot. Change one thing that matters to you.
What I learned shipping it
- RGBA8 textures give you 4 channels × 8 bits = 32 bits per pixel for free. Pack the alive flag into alpha and you have 24 bits of soul in RGB. Color and identity become the same thing.
- Per-pixel pseudorandom hashes (input: cell position + generation count) replace random number generators in GPU shaders. Same seed → same evolution → reproducible runs.
- Reading back GPU state for the histogram is expensive. Sample every 4th cell instead of all of them. The visualization stays accurate; the perf cost drops 16×.