Making the figure respond — the three levers, and none of them is new
All three of the obvious reactivity asks fall out of parameters that already existed, once the thing being banded is a distance. These are recipes, not features.
[params]color_center = "time * 0.15" # RINGS TRAVEL OUTWARDscale = "0.5 + 0.12 * bass" # THE FIGURE BREATHESpalette_steps = "6 + floor(hash(beat_index) * 4)" # RING COUNT PER DETECTION- Rings travel outward because
color_centerslides the palette coordinate, and the coordinate is a distance — so sliding it slides every contour together. The seam to know about is the LUT’s repeat addressing: the coordinate wraps at 1, so unless the gradient’s last stop is its first colour again, the wrap is a visible edge crossing the figure once per cycle. Measured on a cyclic gradient, a full 12-step cycle moves the frame by 0.0339 per step on average with the wrap step at 0.0330 — no stutter. On a non-cyclic palette the wrap is the sharpest transition in the gradient; see Repeating is not the same as continuous. - The figure breathes on
scale, monotonically: measured 14, 26 and 41 px of half-extent atscale0.25, 0.45 and 0.7. - Ring count on the beat works because
palette_stepsis quantized on the CPU — an eased binding visits whole counts and never a fractional one, which would leave every boundary crawling. Whether it reads is a separate question: a band count is a global change to every pixel at once, which is the shape a strobe has, andfragment_mandala’s header flags the same worry. If it strobes, put the beat onscaleorgammainstead and let the count sit still.
Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.