[spectrum] — for spectrum
| Key | Values | Notes |
|---|---|---|
elements | integer 2..=64 | How many elements the frequency axis is divided into. Default 24. Optional. |
layout | bars, polyline, radial_ring | Which figure the elements form. Default bars. Optional. |
smoothing | seconds, or { attack, release } | Per-element temporal easing, in the same vocabulary as [smoothing]. Default: none (instant). Optional. |
system = "spectrum"
[spectrum]elements = 26layout = "bars"smoothing = { attack = 0.025, release = 0.22 }The whole table is optional — system = "spectrum" alone renders the default
readout. An out-of-range elements or an unknown layout is a surfaced load
error naming what it expected, never a silent fallback.
Why 64 is the ceiling. The engine analyses 64 log-spaced bands, and the scene
reduces them to elements by averaging each element’s own contiguous slice — a
real partition, so no band is dropped or counted twice. Above 64 that stops being
possible, and a readout finer than its own data is a lie rather than a feature.
The axis is only half logarithmic, and the low end is the coarse end. Band
edges follow a log curve, but each band is floored at one FFT bin (23.4 Hz at
48 kHz), which binds up to ~750 Hz — so the bottom 31 of the 64 bands are
linear, and band 0 alone spans 23–47 Hz, a full octave. At 24 elements the
lowest element therefore covers more musical range than any other, not less.
The measured mapping is tabulated with
bin(x).
smoothing here is per element, not per binding. It is the one piece of
easing an expression cannot reach: the element levels are scene state, computed
from the band array rather than evaluated from a binding, so [smoothing] has no
name to attach to. Asymmetric values earn their keep more here than almost
anywhere else — the bands are the rawest signal in the engine, so a fast attack
keeps a transient’s shape while a slow release lets the elements fall like a
meter instead of strobing on every analysis hop. Like all easing in this engine it
is expressed in seconds against the real frame time, so it looks the same at 60
and 144 Hz — and the same at any curve, since what it eases is the curved
level, which is the one you see. Engaging a
curve costs you a scale
retune, not a release retune.
Two attractor params behave unlike anything else in the set:
-
fade(default0.94) is the fraction of the trail accumulation kept per 1/60 s, applied frame-rate-independently.0clears every frame (no trails); values near1smear toward permanence — highfadeplusink_amountis the documented “blot” trap (the page fills in solid). -
reseedis edge-triggered, not a level: it fires once when the bound expression rises past0.5, soreseed = "beat"fires on each beat instead of every frame the flag is held. What it fires is a disturbance: every particle is kicked a bounded distance from wherever it currently is, and the map’s own mixing pulls it back onto the figure over the next few frames. The figure is shaken; it is not erased.It used to re-scatter, and “re-scatter” was generous (ADR-0066). A reseed replaced the cloud with a uniform fill of an axis-aligned box sized to the family’s native extent — so it read as a burst of flat speckle with hard straight edges, followed by a visible convergence back onto the attractor. That is what a user reported on
attractor_ink, andRichtripled the particles into the same rectangle. Measured under the new behaviour, 0 % of the cloud ends up off the figure where the old re-fill put 100 % of it.Two consequences for composing. A reseed is now a smaller event than it was, because a disturbance is smaller than a wipe — if you were leaning on the wipe as a structural beat, that is gone, and the jitter magnitude is the lever rather than returning to the box. And the cloud no longer re-randomizes: a full re-fill re-sampled the basin every time, so over a long session the population now stays the one it converged to. The map’s own mixing is what explores the attractor anyway.
The seed box survives where it is correct — the initial fill and a family change, the two places there is no existing cloud to disturb.
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.