A track now yields a complete, coherent look with no input: palette,
per-section scene assignments, parameter sets, post and feedback settings.
Seeded from a hash of the decoded PCM, so a file always renders identically.
- palette.js builds in OKLCH, not HSL. HSL lightness is not perceptual, so
evenly-stepped HSL palettes have colours that vanish and colours that
dominate — which matters when nobody is supervising the choice.
Regenerates until the contrast floor is cleared.
- Scenes are assigned per section KIND, not per section: a track's drops
share a scene and the video reads as one piece instead of a shuffle.
- Family preference per kind keeps breakdowns off strobing glitch scenes.
- Section bias (energy/density/motion) carries track character into params
without scenes knowing anything about audio.
- PaletteSource is the seam for cover art later; no scene would change.
Gate 9/9, including the look-space spread measurement (mean pairwise
distance 0.168 against a 0.08 floor) — the one check that catches a
generator that is deterministic and valid but visually collapsed.
Known gap, not a regression: all four battery tracks currently choose the
same two scenes. There are no 'minimal' family scenes yet, so intro and
outro sections fall through to flow/organic. Differentiation is presently
carried by palette alone. Phase 7 grows the library to fix it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>