The v3 home tuner card runs continuously, and every tuner visualization
drove a self-rescheduling 60fps requestAnimationFrame loop that never
stopped — pinning a renderer core even on a silent home screen with the
needle/strobe at rest.
Make each viz idle its loop once there's nothing left to animate, and
re-kick it from update() on the next reading that actually moves it:
- analogue-gauge: stop when the needle + drum strip have settled on their
targets (|target-current| below a sub-visible epsilon); restart when a
new reading moves the target.
- strobe / mace-fx-iii / chef-mt3: stop when there's no live signal and the
strobe drift (and glow fade) have fully decayed; restart on the next note.
- toilet-tuner: stop when silent and the plunger has eased back to centre;
restart on the next reading (guarded so repeated no-signal updates don't
re-kick a parked loop).
Active tuning is unchanged — the loop runs whenever a note is sounding or
the indicator is still moving. Bumps tuner 1.3.1 -> 1.3.2.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>