What is biota

biota searches the parameter space of Flow-Lenia - a continuous cellular automaton where matter is conserved by construction. Rather than finding a single best creature, it fills a behavioral grid where each cell holds the most compact creature with a particular phenotypic fingerprint. The result is a structured catalog of qualitatively distinct life-forms.

Each creature is a soliton: a stable, self-maintaining pattern that persists indefinitely given the right parameters. Mass conservation is what makes them viable across a wide parameter range - without it, most settings produce explosion or collapse within a few steps.

The search algorithm

MAP-Elites runs a loop: sample parameters, simulate a creature, measure its behavior, insert it into the matching archive cell if it beats whatever is already there. After thousands of rollouts the archive fills with creatures covering the behavioral space as broadly as possible - not optimizing toward one solution, but toward diversity.

Simulations run in parallel across a 3-node GPU cluster. One batch task evaluates B creatures as a single vectorized forward pass on one RTX 5060 Ti. The driver owns the archive and orchestrates the search; workers are stateless.

archive capacity
16,384 cells
grid shape
32 × 32 × 16
cluster throughput
97 s / 500 rollouts

Behavioral descriptors

Three scalars measured from each rollout index the archive's three axes. The active set is chosen per run — any three from the built-in library of fifteen. All are normalized to [0, 1] and empirically calibrated against real cluster runs.

velocity
Mean COM displacement per step over the trailing 50 steps. Separates drifters from stationary creatures.
gyradius
Mass-weighted RMS distance from the center of mass. Separates compact dots from spread-out rings and lattices.
spectral entropy
Shannon entropy of the radially-averaged FFT spectrum. Separates smooth blobs from sharp-edged structured creatures.
oscillation
Variance of bounding-box area over the trace tail. Separates pulsing, breathing creatures from rigid translators.
compactness
Fraction of total mass inside the bounding box. Separates tight, well-defined creatures from diffuse scattered ones.
mass asymmetry
Directional bias of COM motion. Separates straight-line movers from orbiters and creatures with circular trajectories.
PNG compressibility
Compressed-to-raw size ratio of the final state. Low = smooth and boring, high = noisy, middle = structured and interesting.
rotational symmetry
Angular variance of mass around the center of mass. Low = rings and disks, high = dumbbells, L-shapes, asymmetric gliders.
persistence score
Maximum descriptor drift across the trace tail. Low = behaviorally stable over time, high = the creature is still changing.
displacement ratio
Total displacement divided by total path length over the trace tail. Zero = pure orbiter, one = perfect straight-line glider.
angular velocity
Mean absolute angular speed of COM motion over the trace tail. Separates rotors and orbiters from translators and stationary creatures.
growth gradient
Mass-weighted mean spatial gradient magnitude at the final step. Low = smooth symmetric creature, high = labyrinthine internal structure.
morphological instability
Variance of gyradius over the trace tail. Low = rigid stable form, high = creature constantly reshapes or fragments over time.
activity
Mean absolute gyradius change per step. Measures internal work rate — static creatures score near zero, pulsing or morphing ones score high.
spatial entropy
Shannon entropy of mass distribution over a coarse spatial grid. Low = compact localized mass, high = diffuse or multi-body spread.

Further reading

21 runs
preview
20260415-031303-wry-spire
83 cells · 0.5% fill · 7.8% insertion
3000 rollouts
standard 3000 budget cuda torus
spatial_entropy · gyradius · morphological_instability
preview
20260415-030240-noble-fjord
603 cells · 3.7% fill · 29.6% insertion
3000 rollouts
standard 3000 budget cuda torus
angular_velocity · mass_asymmetry · displacement_ratio
preview
20260415-020149-gentle-zephyr
14 cells · 0.1% fill · 3.2% insertion
2000 rollouts
pretty 2000 budget cuda torus
activity · oscillation · spectral_entropy
preview
20260415-015305-dense-petal
7 cells · 0.0% fill · 1.0% insertion
3000 rollouts
standard 3000 budget cuda
persistence_score · morphological_instability · compactness
preview
20260415-014216-frost-creek
507 cells · 3.1% fill · 32.5% insertion
3000 rollouts
standard 3000 budget cuda torus
gyradius · growth_gradient · spatial_entropy
preview
20260415-013157-keen-harbor
371 cells · 2.3% fill · 23.8% insertion
3000 rollouts
standard 3000 budget cuda torus
displacement_ratio · angular_velocity · velocity
preview
20260413-171441-amber-ember
69 cells · 0.4% fill · 15.4% insertion
1000 rollouts
pretty 1000 budget cuda
rotational_symmetry · persistence_score · mass_asymmetry
preview
20260413-164838-tawny-yew
54 cells · 0.3% fill · 13.0% insertion
1000 rollouts
pretty 1000 budget cuda
oscillation · gyradius · png_compressibility
preview
20260413-162216-dense-harbor
34 cells · 0.2% fill · 5.4% insertion
1000 rollouts
pretty 1000 budget cuda
oscillation · compactness · png_compressibility
preview
20260413-155501-quiet-cinder
252 cells · 1.5% fill · 44.7% insertion
1000 rollouts
pretty 1000 budget cuda
velocity · gyradius · spectral_entropy
preview
20260413-154511-ochre-bramble
648 cells · 4.0% fill · 38.8% insertion
3000 rollouts
standard 3000 budget cuda
velocity · gyradius · spectral_entropy
preview
20260413-153554-amber-anchor
7 cells · 0.0% fill · 1.0% insertion
3000 rollouts
standard 3000 budget cuda
compactness · persistence_score · rotational_symmetry
preview
20260413-152828-wry-spire
787 cells · 4.8% fill · 49.3% insertion
2000 rollouts
standard 2000 budget cuda
mass_asymmetry · spectral_entropy · gyradius
preview
20260413-151944-dense-xenon
28 cells · 0.2% fill · 4.8% insertion
2000 rollouts
standard 2000 budget cuda
gyradius · rotational_symmetry · oscillation
preview
20260413-151331-dense-spire
442 cells · 2.7% fill · 34.2% insertion
2000 rollouts
standard 2000 budget cuda
velocity · mass_asymmetry · png_compressibility
preview
20260413-145422-plush-petal
39 cells · 0.2% fill · 5.4% insertion
2000 rollouts
standard 2000 budget cuda
png_compressibility · rotational_symmetry · persistence_score
preview
20260413-144705-ochre-xenon
122 cells · 0.7% fill · 10.1% insertion
2000 rollouts
standard 2000 budget cuda
oscillation · compactness · mass_asymmetry
preview
20260413-143705-fierce-spire
233 cells · 1.4% fill · 25.1% insertion
2000 rollouts
standard 2000 budget cuda
velocity · gyradius · oscillation
preview
20260413-135712-amber-ember
116 cells · 0.7% fill · 13.1% insertion
2000 rollouts
standard 2000 budget cuda
velocity · compactness · spectral_entropy
preview
20260413-135102-ochre-thistle
203 cells · 1.2% fill · 22.9% insertion
2000 rollouts
standard 2000 budget cuda
oscillation · gyradius · spectral_entropy
preview
20260413-134355-hazy-creek
521 cells · 3.2% fill · 42.7% insertion
2000 rollouts
standard 2000 budget cuda
velocity · gyradius · spectral_entropy
32 runs
20260415-045812-405-eco-noble-fjord-31_13_12
12 creatures · x grid · 10000 steps
93.0s
20260415-030240-noble-fjord cell 31,13,12 torus
mass turnover 0.000%/step
20260415-045617-225-eco-noble-fjord-31_20_15
4 creatures · x grid · 12000 steps
112.3s
20260415-030240-noble-fjord cell 31,20,15 torus
mass turnover 0.000%/step
20260415-045422-741-eco-keen-harbor-30_31_8
5 creatures · x grid · 12000 steps
112.1s
20260415-013157-keen-harbor cell 30,31,8 torus
mass turnover 0.000%/step
20260415-045228-076-eco-keen-harbor-31_31_15
6 creatures · x grid · 12000 steps
112.3s
20260415-013157-keen-harbor cell 31,31,15 torus
mass turnover 0.000%/step
20260415-045108-242-eco-keen-harbor-31_2_7
32 creatures · x grid · 8000 steps
76.3s
20260415-013157-keen-harbor cell 31,2,7 torus
mass turnover 0.000%/step
20260415-044950-211-eco-keen-harbor-31_31_15
20 creatures · x grid · 8000 steps
74.3s
20260415-013157-keen-harbor cell 31,31,15 torus
mass turnover 0.000%/step
20260415-044814-750-eco-keen-harbor-30_31_8
10 creatures · x grid · 10000 steps
93.0s
20260415-013157-keen-harbor cell 30,31,8 torus
mass turnover 0.000%/step
20260415-044651-950-eco-keen-harbor-31_2_7
6 creatures · x grid · 10000 steps
80.1s
20260415-013157-keen-harbor cell 31,2,7
mass turnover 0.000%/step
20260415-044456-567-eco-keen-harbor-31_31_15
8 creatures · x grid · 12000 steps
112.5s
20260415-013157-keen-harbor cell 31,31,15 torus
mass turnover 0.000%/step
20260415-044321-244-eco-keen-harbor-30_31_8
2 creatures · x grid · 10000 steps
93.2s
20260415-013157-keen-harbor cell 30,31,8 torus
mass turnover 0.000%/step
20260415-044126-561-eco-keen-harbor-31_2_7
4 creatures · x grid · 12000 steps
112.1s
20260415-013157-keen-harbor cell 31,2,7 torus
mass turnover 0.000%/step
20260415-043902-915-eco-keen-harbor-31_31_15
3 creatures · x grid · 15000 steps
141.1s
20260415-013157-keen-harbor cell 31,31,15 torus
mass turnover 0.000%/step
20260414-142850-340-eco-ochre-bramble-28_19_13
10 creatures · x grid · 10000 steps
94.2s
20260413-154511-ochre-bramble cell 28,19,13 torus
mass turnover 0.000%/step
20260414-142714-556-eco-hazy-creek-5_23_13
16 creatures · x grid · 10000 steps
93.2s
20260413-134355-hazy-creek cell 5,23,13 torus
mass turnover 0.000%/step
20260414-142539-326-eco-hazy-creek-5_23_13
2 creatures · x grid · 10000 steps
92.8s
20260413-134355-hazy-creek cell 5,23,13 torus
mass turnover 0.000%/step
20260414-142416-698-eco-dense-spire-4_5_2
8 creatures · x grid · 10000 steps
79.4s
20260413-151331-dense-spire cell 4,5,2
mass turnover 0.000%/step
20260414-142254-048-eco-hazy-creek-5_23_13
6 creatures · x grid · 10000 steps
79.5s
20260413-134355-hazy-creek cell 5,23,13
mass turnover 0.000%/step
20260414-142130-427-eco-ochre-bramble-28_19_13
12 creatures · x grid · 10000 steps
79.5s
20260413-154511-ochre-bramble cell 28,19,13
mass turnover 0.000%/step
20260414-134207-680-eco-ochre-bramble-28_19_13
12 creatures · x grid · 10000 steps
91.8s
20260413-154511-ochre-bramble cell 28,19,13 torus
mass turnover 0.000%/step
20260414-134031-301-eco-quiet-cinder-11_23_13
16 creatures · x grid · 10000 steps
93.3s
20260413-155501-quiet-cinder cell 11,23,13 torus
mass turnover 0.000%/step
20260414-133856-532-eco-amber-ember-0_1_10
12 creatures · x grid · 10000 steps
91.5s
20260413-171441-amber-ember cell 0,1,10 torus
mass turnover 0.000%/step
20260414-133721-688-eco-hazy-creek-4_23_13
14 creatures · x grid · 10000 steps
92.0s
20260413-134355-hazy-creek cell 4,23,13 torus
mass turnover 0.000%/step
20260414-133546-412-eco-hazy-creek-5_23_13
16 creatures · x grid · 10000 steps
92.3s
20260413-134355-hazy-creek cell 5,23,13 torus
mass turnover 0.000%/step
20260414-133412-930-eco-dense-spire-5_13_1
8 creatures · x grid · 10000 steps
91.2s
20260413-151331-dense-spire cell 5,13,1 torus
mass turnover 0.000%/step
20260414-133238-638-eco-dense-spire-4_5_2
12 creatures · x grid · 10000 steps
92.1s
20260413-151331-dense-spire cell 4,5,2 torus
mass turnover 0.000%/step
20260414-133101-552-eco-ochre-bramble-30_19_13
10 creatures · x grid · 10000 steps
94.8s
20260413-154511-ochre-bramble cell 30,19,13 torus
mass turnover 0.000%/step
20260414-132924-624-eco-ochre-bramble-28_19_13
8 creatures · x grid · 10000 steps
94.5s
20260413-154511-ochre-bramble cell 28,19,13 torus
mass turnover 0.000%/step
20260414-132749-926-eco-hazy-creek-2_21_13
12 creatures · x grid · 10000 steps
92.4s
20260413-134355-hazy-creek cell 2,21,13 torus
mass turnover 0.000%/step
20260414-132614-994-eco-hazy-creek-5_23_13
10 creatures · x grid · 10000 steps
92.7s
20260413-134355-hazy-creek cell 5,23,13 torus
mass turnover 0.000%/step
20260414-132439-990-eco-ochre-bramble-30_19_13
2 creatures · x grid · 10000 steps
92.4s
20260413-154511-ochre-bramble cell 30,19,13 torus
mass turnover 0.000%/step
20260414-132305-281-eco-hazy-creek-4_23_13
3 creatures · x grid · 10000 steps
92.0s
20260413-134355-hazy-creek cell 4,23,13 torus
mass turnover 0.000%/step
20260414-132131-175-eco-hazy-creek-5_23_13
2 creatures · x grid · 10000 steps
91.7s
20260413-134355-hazy-creek cell 5,23,13 torus
mass turnover 0.000%/step

Run your own atlas

biota is a self-contained CLI tool. You can run it on a laptop for quick iteration or across a Ray cluster for full-scale searches. The only hard dependencies are Python 3.12, PyTorch, and Ray.

Install

# Clone and install
git clone https://github.com/rkv0id/biota
cd biota
uv sync

Quick start

1
Run a search
The dev preset (64×64 grid, 200 steps) is fast enough for a laptop. No Ray needed.
uv run biota search --preset dev --budget 200
2
Build the viewer
Generates a self-contained HTML file for each run, plus an index.
python scripts/build_index.py
open runs/index.html

GPU and cluster

On Apple Silicon pass --device mps --batch-size 32 for a meaningful speedup. On a CUDA cluster, use --batch-size 64 --workers N where N is the number of nodes. The standard preset (192×192, 300 steps) at B=64 on an RTX 5060 Ti cluster runs 500 rollouts in about 97 seconds.

# Apple Silicon
uv run biota search --preset standard --budget 500 \
    --device mps --batch-size 32

# Single CUDA GPU, no Ray
uv run biota search --preset standard --budget 500 \
    --device cuda --batch-size 64

# Multi-node Ray cluster, custom descriptor axes
uv run biota search --ray-address head:6379 \
    --preset standard --budget 2000 \
    --device cuda --batch-size 64 --workers 3 \
    --descriptors oscillation,compactness,png_compressibility

Choosing descriptors

Pass --descriptors with three comma-separated names to control which behavioral axes the archive uses. With 9 built-ins there are 84 possible configurations. You can also supply your own via --descriptor-module path/to/file.py — the file must define a list named DESCRIPTORS containing Descriptor objects.

# Default axes
uv run biota search --descriptors velocity,gyradius,spectral_entropy

# Shape and complexity axes
uv run biota search --descriptors oscillation,compactness,png_compressibility

More detail

Rami Kader
Machine learning engineer. Interested in cellular automata, artificial life, evolutionary computing, and distributed systems.