Preparing…
REVERSE ENGINEERING / FIELD NOTES

What the image tells us

The cached artwork is Cellularity d_0020 by Jonathan McCabe. Its native image is 59,049 × 59,049 pixels. Broad smooth forms contain fine stripes, spots, and sharply different neighboring textures.

A useful correction

McCabe’s description of Cellularity specifies four floating-point values per pixel, neighbor diffusion, and polynomial reactions influenced by the values’ history. This is distinct from his earlier multiscale Turing model. A licensed Cellularity description also mentions an expanding space.

The two experiments

Independent Turing scales: each scale has its own radius, inhibition range, reaction strength, preference, regional response, and color. The active layers compete on one shared pattern field. Separate history channels preserve their local influence. Smooth averaging uses three box-filter passes to approximate a Gaussian; Square box keeps the earlier kernel.

Regional reactions: two concentrations, two history fields, and evolving regional fields that vary feed and kill rates across the image. Different regions can develop different kinds of cells. This is an experimental construction, not McCabe’s recovered polynomial map.

Color: Independent layers blends a separately colored ramp for each active layer using the retained layer histories. Multichannel spectrum maps several state dimensions independently into RGB. Original single palette keeps the earlier mapping for comparison. Layer colors can be edited directly; color seeds now generate new ramps instead of only rotating a short list.

Inflation: an optional resampling step expands structures about the center while the simulation adds new detail. It runs on a fixed grid, so this is an approximation to a growing domain.

How to explore

  1. Start with a preset and let it develop for several hundred steps. The speed slider sets a target of 1–2,000 steps per second. Type an exact rate or use a quick speed button. This changes playback timing, not the reaction rules.
  2. Move a pad to alter two parameters. Use the axis menus to change the pair. Lock X or Y to hold that axis during dragging and arrow-key adjustments. Hold Shift before dragging, or with the arrow keys, for finer control. Select 2× closer or 2× wider to change the range.
  3. Space plays or pauses; [ and ] halve or double speed; . advances one step and pauses. These shortcuts leave text fields and buttons alone. The +1 and +100 buttons also advance a paused simulation.
  4. Pause, then change palette phase, color cycles, or the color seed. Switch to Scalar field to separate geometry from coloring.
  5. Save state before changing the rule. It stores the complete simulation, the settings, and the step count so you can resume the same experiment.

Playback speed is remembered on this device. It is separate from saved simulation states. Pausing or switching tabs clears the playback backlog, so returning does not cause a burst of catch-up steps.

New rules depend on the current field. Use Restart seed for a controlled comparison. Changing model or resolution starts over. Binary .cell checkpoints contain sixteen floats per pixel. Version 2 JSON files retain all their values; version 1 imports approximate missing histories. Equal seeds are reproducible on the same backend; floating-point differences between GPUs and the CPU can diverge over time.

Layers, randomization, resolution

Use + and − in Layers to add a scale or remove the selected one, up to twelve. Remaining histories and colors are kept. Regional reactions use these as color families.

Randomize perturbs the current settings. Choose an amount, affected controls, a seed, and the chance of adding or removing one layer. The seed advances after each click. Restart with new noise is optional.

The canvas follows the window without restarting. Its square field fills the window with a centered crop; PNG export includes the entire square.

Resolution accepts any integer size within the selected memory budget and device limits. Applying a new size restarts. GPU memory usage is roughly 384 bytes per pixel, plus the display and temporary resources. Resizing retains the old field until the new allocation succeeds. Browsers cannot report reliable free GPU memory, so a very large budget can still cause device loss or a tab crash.

PNG and .cell exports process rows in batches. Browsers with a Save File picker write directly to disk; other browsers limit the download buffer to 128 MiB. Large simulations still keep their coupled fields in memory. Use Cancel export to stop a file before it is committed.

What remains unknown

The exact polynomial map, history mechanism, coefficients, color mapping, seed, growth schedule, and iteration count for d_0020. Neither mode claims a pixel-for-pixel reconstruction. Optional relief shading is a display effect added here.

Sources