The built-in systems
Every built-in system is addressable from a preset. Their named parameters, defaults, and per-system notes are tabulated in Parameter roster — that table is maintained alongside the presets and is the authoritative list.
system = | What it draws |
|---|---|
fragment_field | A fullscreen domain-warped light field (fragment shader). |
swarm | ~10k CPU-simulated particles on an evolving flow field. |
parametric_curve | A sampled line curve from one of five families — the Maurer rose, Lissajous, hypotrochoid, superformula or harmonograph (below). |
lsystem | An L-system turtle figure, precomputed per depth. |
star_pattern | A Hankin star pattern over a regular tiling. |
reaction_diffusion | A Gray-Scott reaction-diffusion field. |
attractor | GPU compute particles iterating a strange attractor. |
spectrum | The log-spaced band array as N elements — bars, a contour, or a ring. |
emitter | Objects that spawn, ride their own parabola, and die — the only system whose population varies. |
shape_field | One mark silhouette drawn at frame scale as a signed-distance field, so banding the palette draws concentric offset contours. |
warp_mesh | The previous frame, resampled through a grid with one transform per vertex — the only system that draws nothing of its own. |
shape_collage | Flat opaque elements on their own off-white paper, composited in painter order — the only system in which one object is genuinely in front of another, and the only one that draws a graphic rather than light. |
analytic_field | A fullscreen closed-form function of position from one of two families — the Chladni plate’s nodal lines, or an escape-time Julia or Mandelbrot set with optional orbit traps (below). |
cellular | A discrete cellular automaton on a grid of cells, from one of three families — Conway’s Life and every birth/survival rule, Larger than Life’s wide neighbourhoods, or the cyclic automaton’s spirals — painted with the history of each cell (below). |
plexus | A few hundred points in 3D, joined by a line wherever two come close, seen through a perspective camera with a real focal plane: lines and dots blur with their distance from focus. The points drift through a cube or ripple on a sheet (below). |
There is deliberately no per-system preset count here. A count re-drifts every time
a preset is added and nothing fails when it does. presets/ is the list; ls presets/*.toml
is the count.
shape_collage adds parameters, not grammar. Every variable, constant, function,
operator and error message in The expression language is the
same with it as without, and a collage preset is written with the same vocabulary as every
other preset — worth stating, because a new system reads like it must have brought new
grammar with it.
The four line systems share one stroke. parametric_curve, lsystem,
star_pattern and spectrum all draw through the same line renderer, so
thickness, brightness, glow and softness mean the same thing on all four
and a value that reads well on one transfers. softness is the shape of the
stroke across its width: 0 is solid with a one-pixel antialiased edge, 1 is
a pure quadratic falloff, and the default is 0.25. It is coverage where glow is light — reach for
softness when a figure reads blurred and glow when it reads too bright. The
working ranges, the sub-pixel limit and the thickness dead zone that sits
beside it are in
Parameter roster.
Beyond a system’s own parameters, every preset may also bind the engine-wide
compositing controls — the shared view transform (zoom, pan_x, pan_y), the
background pass (bg_*), feedback trails, the screen-space kaleidoscope
(kaleido_*), bloom_*, occlude (how much of the figure’s coverage the
backdrop resolves against), the frame exposure, and the final ink-on-paper
remap (ink_* / paper_*). Those are documented under
Engine-wide controls.
They run in a fixed order, which is worth knowing when a look does not compose the way you expect:
|------------------ linear light, unbounded -------------------| |-- 0..1 --|scene -> post chain (trails -> kaleidoscope -> bloom) OVER background -> [transition blend] -> tonemap/exposure -> ink -> presentEverything up to and including the post chain is per preset — during a dissolve each side composites its own backdrop and chain, independently. The blend, the tonemap and the ink remap are engine-wide: one pass each, over the frame both presets produced.
Everything left of the tonemap is floating-point linear light, so an additive
accumulation is free to exceed 1.0 and no hand-off clips; the tonemap
is the single place the frame becomes a displayable picture. That is why
bloom_threshold can mean “brighter than the display could show” and why stacked
strokes roll off with their colour intact instead of flattening to white.
The post chain renders at the render target’s own resolution. trails and
kaleido_* follow the target (quantized and capped) rather than a fixed grid, so
composing either one costs no sharpness at any display size.
A stage changes softness, never shape. The internal grid is a resolution, not a
proportion: your scene is drawn at the window’s aspect and the stage’s present
stretches it back by exactly the inverse, so the grid’s own ratio cancels out and a
circle stays a circle whether trails is on or off
(ADR-0037). A preset comment
that blames a stage for a figure’s shape is stale.
Two things still follow from a stage being a resample:
- On a line scene,
mirror_order/mirror_reflectreplicate real geometry before rasterization, so they cost nothing in resolution, whilekaleido_*folds finished pixels. Prefer the mirror when either would do — see Mirror or kaleidoscope?. - Reaction-diffusion is a special case in the other direction. Its simulation grid
is deliberately fixed and independent of the window, but the field is
toroidal, so
pan_*is a seamless infinite scroll andzoom > 1tiles rather than running out of field.
In this section
Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.