milkdrop
milkdrop · sources · schema v1MILKDROP — a Winamp/Milkdrop music visualizer (wrapping the open-source butterchurn WebGL2 engine + ~20 curated classic presets) as a fully CV-instrumented video SOURCE. Patch audio into AUDIO and the visuals react (the tap is inaudible). The novel part: butterchurn drives nearly all preset motion from three audio scalars — bass/mid/treb — and MILKDROP lets a cable REPLACE any of them. Patch CV into BASS/MID/TREB to drive that band from the cable instead of the live audio (an unpatched band still follows the audio); REACT scales all three. SPEED time-warps the engine clock (clamped at 0), PRESET selects the active preset (quantized knob/CV), MORPH sets the crossfade seconds, and a rising edge on NEXT advances presets hands-free. OUT is a normal downstream video texture (route into a mixer / keyer / OUTPUT). The card has a live preview + preset name/index readout + RCT/SPD/PST/MPH knobs, and hide-controls turns it into a resizable monitor. The butterchurn engine lives in node_modules (not vendored into the WebGL attest basis) and the preset pack loads behind a dynamic import() as a separate chunk. All ports live on the yellow drill-down PATCH PANEL (no raw side jacks, #767).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
audio | audio | AUDIO (audio cable) - the signal the visuals react to. A GainNode sink (published for the cross-domain audio bridge) fans into a mono analyser plus a left/right analyser pair (fftSize 1024, butterchurn's window); each frame the raw bytes are fed to the engine so it reacts to YOUR audio rather than its own internal sampler. The tap is inaudible (a silent gain-0 keep-alive keeps it running); unpatched, the analyser reads flat silence so the preset animates on its own clock. Patch a stereo or mono mix here. audio signal |
bass | cv | BASS (cv) - REPLACES the bass band the visualizer reacts to. While patched, the mapped CV value drives every preset equation that reads bass (low-frequency motion); left unpatched, the bass band follows the live AUDIO input. Centered around an "average" level so an LFO sweeps the band roughly 0..2. Scaled by REACT. control voltage (CV); modulates bass (additive offset — ±1 CV sweeps the full range, centered on the knob) |
mid | cv | MID (cv) - REPLACES the mid band (mid-frequency motion). Same replace-vs-passthrough behavior as BASS: patched = driven by the cable, unpatched = follows live audio. Scaled by REACT. control voltage (CV); modulates mid (additive offset — ±1 CV sweeps the full range, centered on the knob) |
treb | cv | TREB (cv) - REPLACES the treble band (high-frequency motion). Same replace-vs-passthrough behavior as BASS: patched = driven by the cable, unpatched = follows live audio. Scaled by REACT. control voltage (CV); modulates treb (additive offset — ±1 CV sweeps the full range, centered on the knob) |
reactivity | cv | REACT (cv) - modulates the React control, a global scalar multiplied onto all three bands (bass/mid/treb) whether they come from CV or live audio. Below 1 calms the reaction, above 1 exaggerates it. control voltage (CV); modulates reactivity (additive offset — ±1 CV sweeps the full range, centered on the knob) |
speed | cv | SPEED (cv) - modulates the Speed control, a time-warp on butterchurn's internal clock (the per-frame elapsed time is multiplied by it, clamped at zero). Turn it down for slow-motion warp, up for faster motion; 0 freezes the animation. control voltage (CV); modulates speed (additive offset — ±1 CV sweeps the full range, centered on the knob) |
presetSelect | cv | PRESET (cv) - modulates the Preset control, a quantized index into the curated preset list. A sweep selects across the presets; when the rounded index changes, that preset is loaded with a MORPH-second crossfade. control voltage (CV); modulates presetSelect (additive offset — ±1 CV sweeps the full range, centered on the knob) |
morph | cv | MORPH (cv) - modulates the Morph control, the crossfade time in seconds used when the preset changes (via PRESET, NEXT, or the card). 0 = hard cut, higher = a slow blend between presets. control voltage (CV); modulates morph (additive offset — ±1 CV sweeps the full range, centered on the knob) |
next | gate | NEXT (gate cable, edge:trigger) - a rising edge (crossing above mid-scale) advances to the NEXT preset in the curated list (wrapping), crossfading over MORPH seconds. Routed through the CV bridge as the synthetic nextTrig param and edge-detected per frame (fires once per rising edge, not while held). Patch a clock to switch presets in time. gate / trigger; modulates nextTrig (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
outputs
| id | cable | what it does |
|---|---|---|
out | video | OUT (video) - the rendered visualizer frame, upscaled to the engine output resolution. A normal downstream-usable video texture: chain it into any video input (mixer / keyer / effect / OUTPUT) and it also drives the on-card preview screen. RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
bass | Bass | 0..2 | — | linear |
mid | Mid | 0..2 | — | linear |
treb | Treble | 0..2 | — | linear |
reactivity | React | 0..2 | — | linear |
speed | Speed | 0..2 | — | linear |
presetSelect | Preset | 0..? | — | linear |
morph | Morph | 0..8 | — | linear |
nextTrig | Next Trig | 0..1 | — | linear |
controls
| control | what it does |
|---|---|
| Bass | Bass (0..2, default 1) - CV-only band override TARGET (no panel knob; the BASS jack writes it). When the BASS input is patched the mapped value REPLACES the bass band the visuals react to; unpatched, the live audio bass flows through. 1 is the "average" level. |
| Mid | Mid (0..2, default 1) - CV-only band override target for the mid band (no panel knob; the MID jack writes it). Patched = the cable replaces the mid band; unpatched = live audio. 1 is the "average" level. |
| Morph | Morph (0..8 s, default 2) - crossfade time in seconds used whenever the preset changes (PRESET knob/CV, NEXT trigger, or the card). 0 = hard cut, larger = slow blend. CV via the MORPH jack; also a panel knob. |
| Next Trig | Next Trig (0..1, default 0) - hidden synthetic edge-detector param. The CV bridge writes the NEXT gate level here and the module edge-detects a rising crossing of mid-scale to advance to the next preset. Not a user-facing knob (drive the NEXT jack instead). |
| Preset | Preset (0..19, default 0) - selects the active preset by index into the curated ~20-preset list (rounded/quantized). Changing it loads that preset with a MORPH-second crossfade; the card prints the current preset name + index. CV via the PRESET jack; also a panel knob. |
| React | React (0..2, default 1) - global reaction scalar multiplied onto all three bands (CV-driven or live). 1 = as-is, below 1 calms, above 1 exaggerates the audio reactivity. CV via the REACT jack; also a panel knob. |
| Speed | Speed (0..2, default 1) - time-warp on the visualizer's internal clock: the per-frame elapsed time is multiplied by this (clamped at 0). 1 = normal, 0 = frozen, 2 = double-speed motion. CV via the SPEED jack; also a panel knob. |
| Treble | Treble (0..2, default 1) - CV-only band override target for the treble band (no panel knob; the TREB jack writes it). Patched = the cable replaces the treble band; unpatched = live audio. 1 is the "average" level. |
source
milkdrop.ts on GitHub.