music-video-gen/flow-state/tools
Dejvino cfe77fd524 Finish the song bank: axis ranges that are real, and a collinearity check
Completes the bank whose first half went in with the scene commits. The
remaining work was all in what "covered" means.

Two axis ranges were wrong, and being wrong made the coverage report lie in
both directions. Loudness is a raw mean spectral magnitude, not a normalised
0..1, so every song read as 0.00 and the axis looked dead. Centroid is mapped
to a log frequency axis, so a track of nothing but sub-bass and a 55Hz pad
still measures 0.28 and pure hiss measures 0.93 — against a nominal [0,1] the
bank would have reported a permanent 50% gap that no synth change could close.
Both now carry the range the statistic can really take on, with the reason.

Spread on every axis is not coverage of the space, so the tool also measures
correlation between axes. It immediately found brightness and noisiness moving
together at r=0.95: noise colour had been tied to brightness, one axis wearing
two names, leaving the dark-and-noisy quadrant unreachable. Noise colour is now
its own parameter — hiss over a sub-bass pad is an ordinary record.

That got r to 0.94, and no further. Flatness is the geometric mean of the
spectrum over its arithmetic mean across the whole band, so a signal only
measures flat if it has energy everywhere, which is the same thing as measuring
bright; band-limiting the noise to hold the centroid down empties the top and
drops the flatness with it. It is a property of the analyser and real material
does the same, so it is allowlisted with its reason. Anything not on that list
still fails — the check is there to catch a bank that has collapsed, not to
relitigate physics every run.

The output is gitignored. It is 172MB of deterministic audio derived from a
table that will keep changing: rebuild it, do not carry it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:03:02 +02:00
..
build-song-bank.js Finish the song bank: axis ranges that are real, and a collinearity check 2026-08-17 07:03:02 +02:00
cast-census.js A cast census, and the arrangement it needed to be true 2026-08-17 06:45:42 +02:00
lint-scenes.js Six more visualizers, built through the scaffolder 2026-08-06 00:14:20 +02:00
new-scene.js Phase 10: variety, twelve scenes, and tooling to write the next one 2026-08-05 23:59:20 +02:00
probe-mp4.js Fix export frame loss: reject codec profiles that reorder frames 2026-08-06 13:10:24 +02:00