Features

The 8 colour lenses (default: Lineage), Acid Art (ASCII/glyph rendering), 5 themes, 10 Life-like rules, opt-in multiplayer, video export, the history ribbon, the Time Sculpture, branching and compare, the field guide and achievements logbook, experiments, the audio instrument, cinematic mode, and the guided tour.

Lenses

The same live cells can be recoloured to answer different questions, without ever changing the simulation underneath. Colour in AFTERLIFE is read-only: it rides along with each cell, but B3/S23 — birth, survival, death — can never see it. That's not just a design promise; a test seeds colour state, actively poisons it, and confirms the resulting live/dead bits come out byte-identical to a run with no colour reasoning applied at all. Switch lenses with 1–8, or the drawer, and every lens shows a short legend explaining what its colour means.

The default lens is Lineage, not Life. Life is, by design, a single fixed hue — correct for what it means (alive, honestly, nothing more), but it made a brand-new, zero-configuration visit read as a flat monochrome world. Lineage is colourful and still honest: colour means inherited ancestry, not decoration. The opening scene shows several genuinely distinct family-line hues at generation 0 with no interaction at all. Life remains one keypress away (1).

  • Life — the plain view: alive or dead, one accent colour.
  • Age — a spectral ramp from young to long-lived, so structures that have persisted for a long time visually separate from freshly-born cells.
  • Activity — a spectral ramp over recent change and churn, highlighting where the world is currently doing something.
  • Lineage — heritage colour. A newborn cell's hue is the circular mean of its exactly-three parents' hues (birth in B3/S23 always has exactly three parents, so this is never ambiguous). Two colliding populations visibly interbreed at their border instead of one colour simply overwriting the other.
  • Immigration — the classic two-colour Life variant: a newborn takes the majority colour among its three parents; a three-way tie is resolved by the rule below. Exactly B3/S23 underneath — this is a coarser, 2-colour view of the same data QuadLife shows in full.
  • QuadLife — the four-colour variant. Same majority-of-three birth rule; when all three parents are pairwise distinct, the newborn takes the one colour not represented among them, rather than picking arbitrarily.
  • Velocity — hue from each cell's local directional bias, a proxy for which way a structure is advancing. Grey where direction isn't well-defined.
  • Neighbors — a 9-step spectral ramp over live-neighbour count, cool for sparse and hot for crowded, sweeping through the accent colour right at the birth/survival band (2–3 neighbours) — a way to see the rule itself, not just its results.

A colourblind-safe palette (the standard Okabe-Ito swatches, verified distinguishable under protanopia, deuteranopia and tritanopia) is a toggle in Settings, applied to the discrete Immigration/QuadLife lenses.

Acid Art: ASCII, the modulation field, and colour automation

Beyond the honest lenses above, an opt-in Art mode (A, or the HUD) redraws the same live cells as characters from a monospace glyph set — JetBrains Mono, the app's own numeral face — chosen by real per-cell state: age, activity, lineage hue, local density, live neighbour count. Every glyph is rasterised to an offscreen canvas once per character set and cached; the draw path blits that cached raster and recolours it, never calling the text engine per cell per frame, so a full 256×160 grid of characters stays cheap.

A modulation field — procedural value-noise, radial and linear gradients, an animated plasma, or a real image/video/webcam source you provide — can additionally warp glyph choice, hue, brightness or jitter. This is decoration layered on top of the simulation, never a second source of truth: nothing in Art mode can change which cells are alive, and turning it off restores the honest lens exactly, byte for byte. A one-shot action can also seed the world from an image, by thresholding its luminance into a real edit — an honest one-time conversion, not a hidden second world.

Up to 4 deterministic LFOs — sine, triangle, saw, or a random walk, each a pure function of absolute time, so they're replay-safe by construction — can drive hue rotation, palette cycling, glyph-set switching, field motion, trail length, or brightness. Custom colour palettes and fading trails are both supported. Four presets (Classic ASCII, Ember, Bloom, Monolith) and a "Randomise" button get you started; everything is saved locally and can be exported/imported as JSON. Art mode is off by default — the shipped look is completely unchanged until you opt in.

Themes

Five built-in themes, switchable from Settings or the HUD's "More tools" menu: Observatory (the unchanged default — a dusk-lit instrument room), Ivory Plate (a warm, light natural-history-plate palette for daylight legibility), High Contrast, Phosphor (an amber CRT observatory), and Cyanotype (a blueprint exposure). Switching a theme writes 21 design tokens as CSS custom properties directly onto the page — no reload, no rebuild — and the world canvas re-themes itself automatically, because its colours already resolve through the same tokens at draw time.

Every theme, including a custom one you build and export/import, is held to the same bar: the 8 lenses' accent colours (life, age, activity, time, branch A/B, diff, warn) must stay at least as mutually distinguishable — measured as a minimum distance in OKLab colour space — as they are in Observatory's own closest real pair. A custom theme that fails this check (for example, setting two different concepts to visually the same colour) cannot be saved. Site theming (this guide/wiki) is not part of this feature — it's an app-only capability today.

Rules: beyond Conway's own B3/S23

The Rules panel offers 10 curated Life-like presets beyond Conway's original — HighLife (genuine self-replicators), Day & Night, Seeds, Maze and its thinner sibling Mazectric, Replicator (a parity rule where every pattern eventually copies itself), Life without Death (a one-way ratchet — once born, a cell never dies), 2×2, and Coral — plus a field for any custom B/S rulestring. Every preset's headline claim in the panel was actually run against the engine, not asserted from familiarity with the rule's reputation; see Verification for the exact numbers, and for the one rule (Diamoeba) that was tried and dropped after its usual claim failed to reproduce.

Changing the rule always starts a fresh world. It's not possible to switch rules partway through a running history: a recorded edit or a saved keyframe has no way to record which rule produced it, so replaying old history under a newly-chosen rule would silently reinterpret it under a rule that never actually ran it. Choosing a new rule stops playback, clears the board, and resets history — the same honest trade-off as loading a different scene.

Multiplayer

An opt-in, account-free way to share one universe with someone else, using a technique called deterministic lockstep: instead of ever sending world state over the wire, every peer sends the same tiny edits everyone already knows how to replay, timed to land about a second in the future for everybody — including the person who drew them, so nobody's own edits ever jump the queue. Every peer computes the identical result from the identical inputs; nobody is a server. If two peers' clocks disagree about the same cell, both apply the edits in the same agreed order and get the same answer. The simulation pauses rather than guesses whenever an input might still be outstanding, and every so often peers compare a checksum of their own worlds and loudly flag it if the two have ever drifted apart, with a one-click resync.

Today this works with no server and no account: open the app in two browser tabs, host a room in one, join with the room code in the other. That's not a demo of a future feature — it's the real thing, using the browser's own cross-tab messaging. A room's shared identity includes the active rule, so two peers running different rules simply can't connect to the same room rather than silently computing different futures. Nothing about multiplayer costs a solo player anything: the code for it isn't even downloaded until you open the Multiplayer panel.

Video, GIF, and audio export

The Save & export panel can render an offline, deterministic replay of your world — a fresh copy of the engine, stepped forward and fed the same recorded edits your session already has, never the live simulation you're watching — out as a WebM video, an animated GIF, or a zipped sequence of PNG frames, matching whatever lens, theme, or Art mode configuration you actually have on screen. Exports are bounded (frame count and resolution are capped, with an honest reduction notice rather than a silent truncation) and cancellable mid-render. The GIF encoder — a hand-written median-cut colour quantiser, GIF-flavoured LZW compressor, and GIF89a file writer, with no external library — is verified against a real, independent GIF decoder (Chromium's own), not just its own round-trip.

The soundscape you hear while playing can be exported too: a deterministic offline audio render reproduces the same drone and churn-driven notes your ears would hear, using your current scale, preset, tempo, and density, as a standalone WAV or muxed straight into the WebM's audio track. It's genuinely quiet while your world is paused or still, and comes alive once something is actually happening — verified against a real offline audio-rendering engine, not assumed. A Time Sculpture turntable export was designed for this feature and deliberately cut rather than shipped half-working — untested against real WebGL in the time available. See the project's own contributor notes for exactly what exists and what it would take to finish it.

The history ribbon

A ribbon along the bottom of the screen is not a scrollbar bolted onto a simulation — it's the actual recorded history, scrubbable in both directions. Dragging it calls the same goto(generation) the engine uses internally, restoring the nearest keyframe and replaying forward deterministically, so what you see at generation 4,000 is the real generation 4,000, including every edit — and every cell's colour — you made along the way. See How it works for the mechanism.

The Time Sculpture

Select a range on the ribbon and lift it into a 3D view where the third axis is time. Every slice is a real recorded generation, stacked in order — a still life becomes a vertical column, a travelling glider becomes an inclined beam, and a collision becomes a shape you can orbit and read from any angle. A plane lets you slice through the stack to inspect a single moment in context. It's lazily loaded as its own bundle, so it costs nothing until you open it.

Branching and compare

Editing a cell at a past generation would normally overwrite everything that happened after it — the obvious default, and still what happens if you don't ask for anything else. Branching instead forks the timeline: the original future keeps playing untouched on its own branch, your edited future plays on a new one, and a compare view diffs the two cell-for-cell, frame-for-frame. Up to 8 branches are kept at once; a 9th evicts the least-recently-used one, unless it's been renamed or is the branch you're currently on.

The field guide and the logbook

A recognition pass watches the grid for known specimens — still lifes, oscillators, spaceships, guns — as they appear, and logs each one as a discovery you can follow, rename, and jump back to later. It's how the catalogue in Specimen catalogue connects to what's actually happening in your own universe, not just a static reference list.

A separate 14-entry achievements logbook (HUD icon, or L) keeps a naturalist's-log record of what you've actually witnessed — your first glider, your first fork, watching a collision or an extinction, finishing an experiment. Every entry is wired to a real simulation event or session-state change; nothing unlocks on a timer or for merely opening a panel.

Experiments

Three small, authored puzzles built on the same mechanics as everything else — change something, watch what happens, get an honest verdict instead of a badge:

  • One Cell — flip a single dead-to-alive cell before a collision, and the outcome flips from a 221-cell debris field to total extinction by generation 54.
  • First Contact — a glider and a lightweight spaceship are on a collision course; intervene or don't.
  • Keep Something Alive — the baseline activity dies out at generation 85; find an edit, within a budget of 3, that keeps something moving to generation 150.

Exact verified numbers for each are in Verification.

The audio instrument

A WebAudio soundscape maps what's happening on the grid — population, births, deaths, activity — onto pitched, scheduled notes on a fixed tonal centre, turning the simulation into an ambient instrument rather than a silent visualisation. It ships with 9 synthesised timbres (mallet, glass, pad and accent from the original soundscape, plus pluck, bell, bow, breath and perc) arranged into 4 presets: Observatory (the original default — restrained mallet and glass over a soft filtered drone), Glass (bright pluck/bell/glass, lifted and shimmering), Deep (slow, dark, bowed pads and breath tones), and Chime (quick, bell-like, an ambiguous whole-tone shimmer). A slow harmonic drift, on by default, tracks a short- and long-run average of the population and shifts register at most once per 60 seconds when the two diverge — a deliberately rare, unhurried musical gesture, never a per-generation twitch. Generative percussion, derived from real (heavily rate-limited) event rates, is available as an opt-in texture.

The sustained drone underneath all of this is driven by two measured, decaying signals — how fast the world is churning, and how fast its population's centre of mass is actually moving — each fed only by real per-interval measurements. The practical effect: a paused, frozen, or extinct world decays to genuine silence within a few seconds on its own, and the underlying audio engine auto-suspends shortly after, so a quiet tab costs no CPU. Gating on a rate rather than a raw count was a deliberate fix — gating on a raw count meant a faster simulation speed could cancel out its own effect on the very thing controlling the drone.

Notes can also be routed to a real external synthesiser or DAW over Web MIDI — port and channel selection, optional mapping of event classes to separate channels, guaranteed note-offs (every note-on schedules its own matching note-off, and retriggering the same note always sends an immediate note-off first), and an all-notes-off panic control that fires automatically on mute, on switching ports, and when the tab closes, so nothing is ever left ringing on real hardware.

The soundscape can also react to system or microphone audio (via getDisplayMedia/getUserMedia, each starting only from an explicit button press with the capture target named up front). This is structurally limited to presentation and tempo — it can nudge note density, the drone's filter sweep, and playback speed, and has no code path into the simulation engine at all, so it cannot corrupt or influence cell state no matter how it's driven.

Cinematic mode

Hand the camera to the app: an auto-pan choreographer scores regions of the grid by real activity, density and confirmed travellers, picks a subject, holds on it for a while, and moves on — hands-off and full-screen. When a tracked traveller dies, it lingers on the aftermath rather than cutting away immediately; it also pulls back to a wider view periodically so you don't spend the whole session zoomed into one corner. Any real pointer, keyboard or touch input pauses it immediately without exiting, so a stray click doesn't kick you out of a mode you just settled into — it resumes on its own after a short idle period, or Esc leaves it entirely. Toggle with C; presentation mode (V) similarly hides all chrome without taking over the camera.

The guided tour

A first-run guided tour walks through the app's core mechanics using a real spotlight — it dims the interface and cuts a live hole over the actual control or patch of world being taught, tracking world coordinates through the camera so a step anchored to something happening in the simulation (like the opening encounter) still highlights the right place if you pan or zoom mid-step. Steps complete on the real action they teach, not a timer or a synthetic click — draw a cell, open the drawer, scrub the timeline — and each has a "show me" for anyone who'd rather watch the app do it once. It only runs automatically on a fresh profile; replay it any time from the compass icon or the shortcuts sheet (?).