Track 7 — Taste

Everything through Track 6 answers "how." This track is about "why is this one good" — the part of the craft its masters (Geiss, Rovastar, Flexi, and dozens of others credited across the catalog) plainly have but never wrote down. Five dissections, each isolating one master-level technique the earlier tracks didn't cover, followed by the design principles they share.

Every preset below ships in the Stims catalog exactly as an author left it. Each "Open in the editor" link jumps straight to the real source; "Watch it live" plays it as-is.

Dissection 1 · Geiss — reaction-diffusion as a living texture

Watch it live · Open in the editor

Track 6 showed a warp shader that displaces coordinates. This one grows a texture from nothing, using the same reaction-diffusion math Turing patterns and Gray-Scott simulations are built on:

float xy2 = tmpvar_2.x * tmpvar_2.y * tmpvar_2.y;
z.x = tmpvar_2.x + (-xy2 + 0.035 * (1.0 - tmpvar_2.x)) * 4.0;
z.y = tmpvar_2.y + ( xy2 - 0.095 * tmpvar_2.y) * 4.0;

Treat channel x as an activator and y as an inhibitor. x*y² is the coupling term each feeds the other. x regenerates toward 1 at rate 0.035 (the feed rate); y decays at rate 0.095 (the kill rate). The ratio between those two constants is what decides whether the pattern grows as spots, stripes, or the lichen-like sprawl this preset is named for — nudge either number and the topology of the growth changes, not just its speed. Two more moves worth naming: a blurred copy of the frame is subtracted from the sharp one and 40% of that difference is fed back into x — sharpening the growth's edges so it doesn't go mushy — and the whole displacement is dithered with a noise texture; the dither is what stops the pattern from settling into a repeating tile.

On the EEL side, the same adaptive-threshold gate from Track 3 is used for something new: not a color flash, but a single-frame directional impulse. dx_residual gets a nonzero value only on the exact frame the threshold snaps to its post-beat value, and falls back to its own previous value otherwise — no explicit decay curve, just "was this the beat frame or not." The impulse is inverted and amplified 7× to shove the waveform's drawn position, so it visibly flinches away from every hit.

Dissection 2 · Pieturp — one shape, three palettes

Watch it live · Open in the editor

Three overlapping hexagons build the "sunflare." All three are the same shapecode template — same sides, same layout logic — differing only in position and two color pairs:

shapecode_0_r=1.0    shapecode_0_g=0.7    shapecode_0_b=0.04   // inner fill
shapecode_0_r2=0.99  shapecode_0_g2=0.97  shapecode_0_b2=0.0   // outer fill
shape_0_per_frame1=a=treb*.1;
shape_0_per_frame2=a2=mid*.1;

MilkDrop shapes interpolate radially between the r/g/b (inner) and r2/g2/b2 (outer) pair — that's the gradient glow. Each petal's inner alpha tracks treble and its outer alpha tracks mids, independently — one two-line hook, reused verbatim across all three shapes with only position and hue shifted. Write the template once; vary the parameters, not the logic. This is the same instinct behind Track 5's shape state machine, applied to instances instead of time.

The drift underneath is a different smoothing idiom than Track 3's RC filter — a leaky integrator:

per_frame_7=tel=max(0,(tel+(bass*above(bass_att,1.5)))*.91);
per_frame_18=speed=above(bass_att,1.4)+speed*.975;

speed gains only while bass_att is above 1.4 (+1 for every frame it stays there) and bleeds off by 2.5% every frame. Compare this to Track 3's beat flash, which lasts a single frame: this is a continuous exponential release — smoother, and it naturally accumulates momentum across several hits in a row instead of resetting after each one.

Dissection 3 · Rovastar — a real tempo tracker

Watch it live · Open in the editor

Track 3's beat detector was one adaptive threshold. This preset runs two in parallel — one for bass, one for treble, with different decay rates because treble transients are shorter and need to re-arm faster — and combines them into a three-state signal with a single subtraction:

per_frame_5=swapcolour = bass_on - treb_on;

1 when bass alone fired, -1 when treble alone fired, and 0 for both-or-neither. That one number then drives a genuine three-way palette switch (red on bass, blue on treble, and warm amber at rest) — a discrete state palette, categorically different from the continuous color drift in every Track 2 example. Colors don't jump to their target either; they exponentially approach it, and — the detail worth lingering on — the approach rate itself depends on which state just fired, giving bass-triggered red a snappier attack than its release.

Underneath that is a full onset detector, not just a threshold: a slow moving average (meanbass_att, the quiet floor) and a decaying peak tracker (peakbass_att, the recent ceiling) are compared, and a beat fires only when volume is loud and close to its own recent peak and enough time has passed since the last one:

per_frame_22=beat = if(above(volume,0.8),
  if(below(peakbass_att - bass_att, 0.05*peakbass_att),
    if(above(time - lastbeat,0.1+0.5*(beatrate-0.1)),1,0),0),0);

That third condition's window (0.1+0.5*(beatrate-0.1)) isn't fixed — beatrate is itself a moving average of the actual measured interval between real beats, so the refractory window adapts to the song's tempo instead of using one cooldown for every track. This is the difference between "a threshold" and "a tempo tracker": the second one learns the song's rhythm as it plays.

Dissection 4 · Shifter — hand-rolled HSL for a reason

Watch it live · Open in the editor

Every color technique in Tracks 1–5 is independent per-channel sine drift. This preset implements the actual HSL→RGB conversion algorithm — the same piecewise function a graphics library would use — from scratch in EEL, because that buys something sine drift can't: true hue rotation with saturation and lightness held fixed, so the palette sweeps the entire color wheel while staying visually coherent instead of drifting through arbitrary per-channel combinations.

The one deliberate design choice worth isolating from all that machinery is the hue clock's rate itself:

per_frame_39=vrt = vrt + tic*min(1,max(0.1,2-vav));

At low volume (vav near 0), 2-vav is near 2 (clamped to 1) — the hue cycles at full speed. At high volume, 2-vav shrinks toward the 0.1 floor — the hue nearly freezes. This is the reverse of almost every other reactive preset in the catalog: those scale color energy up with volume. Here the palette races through hues in quiet passages and holds its color during loud ones — an unusual, deliberate choice, not a default.

The mechanical core (worth a slower read if you want to implement HSL yourself) is the standard textbook algorithm: tmpb/tmpa compute the HSL "chroma" bounds, three hue values 120° apart derive one per RGB channel, and a six-segment piecewise function converts each into that channel's final value. It is, line for line, what a CSS engine does internally — just written in an audio visualizer's expression language because MilkDrop has no native colorspace support.

Dissection 5 · Flexi, fishbrain & Martin — a mashup that reads as one preset

Watch it live · Open in the editor

The title names the collaboration outright, and it's worth studying as one: three authors' distinct systems, fused into a preset that doesn't read as three preset fragments stapled together.

Flexi/fishbrain's EEL layer runs a stricter beat detector than Dissection 3's — three conditions multiplied together (EEL's way of writing AND):

per_frame_9=beat = above(vol, res) * above(vol, m) * above(vol, 10);

above a dynamic recent-onset bar, above the running mean, and above an absolute floor — the floor exists specifically to reject false triggers during near-silence, when the running mean itself is tiny. On every detected beat, several variables — rotation, warp center, and warp strength — snap to a fresh random value and hold it until the next beat:

per_frame_13=r = if(0.00001 < abs(beat), 0.0002 * (randint(200) - 100), r);

This is a distinct technique family from anything in Tracks 1–6: discrete random re-seeding on trigger, rather than continuous oscillation. It's what produces the glitchy jump cuts the title promises. The custom waves layer a bounded random walk on top — a heading angle nudged one way by bass and the other by treble, stepped forward each frame, with reflecting boundaries keeping the trace on screen instead of wandering off it.

Martin's comp_shader contributes the visual signature: a hand-tuned luminance weighting (deliberately not the standard Rec.601 or Rec.709 coefficients) drives a vertical texture tear in the warp shader, and then the comp shader combines an image gradient with a fixed cosine swirl field and lights up wherever the two nearly cancel out — glow appears exactly where the image's edges align with the swirl's null lines, the threadlike linework the preset is named for. This is a genuinely different comp_shader idiom from anything in Track 6 — worth treating as a technique in its own right, not just a variation on edge detection.

What these five have in common

Read back across all five, past the specific math: every one of them commits to a small number of techniques and executes them precisely, rather than reaching for more parameters. Pieturp's sunflare turns off both borders entirely. Shifter locks saturation and lightness to spend its whole budget on hue. Geiss's reaction-diffusion is two constants and a noise dither, not a dozen tunables. The pattern the coding guide's checklist gestures at — restraint over maximalism — isn't a rule about doing less. It's a rule about knowing exactly which few things are doing the work, and leaving everything else alone.

Next: Track 8 — Shipping, or, if you're ready to publish, the contributing guide directly.