Lenia: Continuous Game of Life, Explained
After reading this you will understand how Lenia turns a smooth field into moving, pulsing creatures, how to reproduce the Orbium glider by hand, and how to tell dissolving noise from a stable lifeform by watching the total population.
What Lenia is, and the Orbium hook
Lenia is a cellular automaton with no discrete cells to speak of. In Conway's Game of Life a cell is either 0 or 1, time advances in whole steps, and each cell looks at exactly eight neighbours. Lenia relaxes all three of those constraints. The state at every point is a real number between 0 and 1. Time advances in small fractional steps. Each point measures its surroundings not by counting neighbours but by a weighted average over a soft ring around it.
The result is a field that behaves like living matter. Load the canonical Orbium and you see a crescent-shaped blob glide steadily across the grid, holding its shape for hundreds of steps while translating one grid unit every few frames. It is not scripted. The motion falls out of one convolution and one bell-shaped growth rule applied everywhere at once.
The Orbium lives at a precise address in parameter space: growth centre \mu = 0.15, growth width \sigma = 0.017, kernel radius R = 13. Nudge any of those a little and the creature either dissolves or freezes. That sensitivity is the whole story.
When to reach for Lenia, and when not to
Use Lenia to build intuition about emergence: how local, uniform rules produce coherent structures that move and persist. It is an excellent bridge between the discrete Game of Life and continuous reaction-diffusion systems. It shows the edge-of-chaos band where interesting behaviour lives, and it lets you feel how fragile that band is.
Do not read Lenia as biology. An Orbium is not a cell, a soliton is not an organism, and the population number is not a headcount. Lenia is a toy that demonstrates a mechanism (self-organisation from local averaging plus a nonlinear response), not a model calibrated to any real creature. If you want population genetics, the Genetic Drift Simulator models actual allele frequencies. If you want collective motion with a mechanistic claim, the Boids Flocking Simulator is closer to observed flocks.
Lenia is deterministic. The same field and the same parameters always produce the same future. Any apparent randomness comes from your starting configuration, not from the rule.
The update rule and why each piece exists
Write the field at time t as A_t(x), a number in [0,1] at each grid point x. One step does two things. First, measure the neighbourhood by convolving the field with a fixed kernel K. Second, feed that measurement through a growth function G and add a small slice of it back into the field.
Here K * A_t is the convolution: for each point, take a weighted average of the field over the kernel, so the number u = (K*A_t)(x) summarises how much matter sits in the ring around x. The factor \Delta t is the time step, a small number like 0.1. The \mathrm{clip} keeps the state inside [0,1].
The growth function is a shifted, rescaled Gaussian that returns a value between -1 and +1.
Read it plainly. When the local average u is close to \mu, the exponential is near 1, so G \approx +1 and the cell grows. When u is far from \mu (either too crowded or too sparse), the exponential is near 0, so G \approx -1 and the cell decays. The width \sigma sets how forgiving that preference is. This is the continuous echo of Life's "born on 3, survive on 2 or 3" band.
The kernel itself is a ring, not a disc. It is a smooth bump peaked at some fraction of the radius R, falling to zero at the centre and at the edge, then normalised so its weights sum to 1. That ring shape is what gives Lenia creatures their crescent, orbiting character: a cell prefers matter at a middle distance, not right on top of it.
A worked step with the demo defaults
Reproduce the numbers with the demo button, which loads \mu = 0.15, \sigma = 0.017, R = 13, and \Delta t = 0.1. You do not need the full grid to see how one cell decides its fate. You only need the local average u that the convolution hands you.
Updating one cell for three values of u
Take a single point currently at A_t = 0.40. Suppose the convolution reports three different neighbourhood averages. Compute G(u) and the new state for each.
- Right on target,
u = 0.150. Then (u-\mu)^2 = 0, so G = 2\cdot 1 - 1 = +1.000. New state = 0.40 + 0.1\cdot 1.000 = 0.500. The cell grows. - Slightly crowded,
u = 0.170. Then (u-\mu)^2 = 0.0004 and 2\sigma^2 = 0.0005780, so the exponent is -0.6920, \exp(-0.6920) = 0.5006, and G = 2\cdot 0.5006 - 1 = 0.0012. New state = 0.40 + 0.1\cdot 0.0012 = 0.4001. Almost no change. - Too crowded,
u = 0.200. Then (u-\mu)^2 = 0.0025, exponent -4.325, \exp(-4.325) = 0.01323, and G = -0.9735. New state = 0.40 + 0.1\cdot(-0.9735) = 0.3027. The cell decays.
Notice how narrow the acceptance window is. Moving u from 0.150 to 0.200, a shift of just 0.05, flips the cell from full growth to near-full decay. That knife-edge, applied at every point every step, is what carves a soft blob into a creature with a sharp leading edge and a trailing tail.
Explore the sensitivity yourself
Reading the population number and the field
The tool reports total population, the sum of the field over the whole grid. That single number is your fastest diagnostic for which of the three fates you are watching.
- Dissolving
- Population falls steadily toward
0. The growth band never gets fed, so every cell decays. Typical when \sigma is too small or \mu is set where no stable clump can form. - Still or breathing
- Population settles to a roughly constant value, or oscillates around one. A stationary blob or a pulsating spot. The field stops translating.
- Locomotive
- Population holds nearly constant while the centre of mass moves. This is the Orbium regime: mass is conserved but shifts one direction each step.
A concrete signature: a healthy Orbium keeps its population flat within a few percent while its centre of mass advances at a steady rate. If you see the population drop below, say, 60% of its starting value within a hundred steps, the creature is dying, not gliding. Watch the number, not just the picture, because a slowly shrinking blob can look stable for a while before it collapses.
Common mistakes
Most disappointments come from four places, and all are easy to fix once you know the mechanism.
Changing the kernel radius R without rescaling your pattern is the most common failure. The Orbium is tuned for R = 13. If you set R = 20 but paint a creature the old size, its features no longer match the ring, and it dissolves. The pattern size and the radius must scale together.
Second, a time step that is too large. Lenia integrates a differential equation. With \Delta t around 0.1 the numerics are smooth. Push it to 0.5 and the update overshoots each step, so a stable creature can shatter into checkerboard noise. If a known-good pattern suddenly explodes, lower the step first.
Third, expecting arbitrary blobs to come alive. The stable lifeforms occupy thin slivers of parameter space. Painting a random smooth blob at the Orbium settings almost always gives you a dissolving or freezing lump, not a glider. Load the known Orbium first, then perturb from there.
Fourth, reading the teal-to-gold colours as species. The glow encodes one field value per point, from 0 (dark) to 1 (gold). It is a heat map of a single quantity, not different kinds of matter.
Related tools on this site
Lenia sits in a family of models where simple local rules produce global structure. If self-organisation is what draws you, these are worth a look.
For emergent motion from local rules, compare the flocking in the Boids Flocking Simulator and the spontaneous unison in Firefly Synchronization. For self-organised networks built by many simple agents, see Ant Colony Pheromone Trails, Slime Mould Networks and Mycelium Growth. For growth from a grammar rather than a field, try L-System Plants. For a continuous excitable system that shares Lenia's differential-equation flavour, fire an impulse in the Neuron Action Potential. And to watch selection shape a population directly, run Evolving Creatures.
Frequently asked questions
Is Lenia alive?
No. Lenia produces patterns that behave like living matter (they move, hold shape, and resist small disturbances), but there is no metabolism, no genetics and no reproduction in the biological sense. It is a demonstration that lifelike behaviour can arise from a fixed local rule, not a claim about life.
Why does the Orbium move in a specific direction?
Its shape is asymmetric, so the ring-shaped kernel feeds growth slightly more on one edge and decay on the other. Each step the leading edge grows and the trailing edge fades, which shifts the centre of mass. The direction is set by the asymmetry of the pattern you load, not by the rule.
What does the time step really do?
It is the size of the numerical time slice used to integrate the growth. Smaller \Delta t gives smoother, more accurate motion but slower simulation. Around 0.1 is a good default. Above roughly 0.3 the integration becomes unstable and patterns can blow up even at correct \mu and \sigma.
Why is the kernel a ring instead of a filled disc?
The ring makes each cell prefer matter at a middle distance rather than right beside it. That preference is what produces the hollow, crescent structure of Lenia creatures. A filled disc kernel tends to give blobby, less interesting dynamics.
Can I find new creatures myself?
Yes, but expect to search. Start from the Orbium, change one parameter by a small amount, and watch the population trace. Most changes dissolve or freeze the pattern; the interesting ones sit in narrow bands. Seeding continuous noise and letting it settle sometimes crystallises into unexpected stable shapes.