Strudel and Hydra have no shared clock — Hydra's bpm and Strudel's transport are independent and will drift
Strudel runs on its own cycle transport (setcpm/setcps). Hydra has two independent time sources: time (wall-clock since page load) and a global bpm that paces array-argument stepping. Neither is connected to Strudel’s transport. The only signal that crosses the bridge is a.fft[0..3] — band energy, no phase, no beat index, no bar position. Setting Hydra’s bpm to match the music’s BPM produces only a frequency match; the two clocks start at different instants, drift independently, and will not phase-align over a set. True bar/phrase-locked visual events are therefore not achievable — see the not-yet-possible list.
Examples
bpm = 110 in Hydra after setcpm(110/4) in Strudel makes array-stepped params step at roughly the same tempo, but the visual step will not land on the musical downbeat and the offset wanders progressively over the set.
Assessment
A performer sets bpm = 120 in Hydra to match a 120-BPM Strudel pattern. After 5 minutes the array-stepped kaleid sides are landing a full beat late. Explain why this happened and why it cannot be fixed without a shared transport.