A local music generator. A SongSpec becomes a full song —
MusicGen renders each section, a CLAP gate scores each against its intended vibe, and
ffmpeg stitches the survivors into one track. No cloud, no API keys.
You author a SongSpec — sections, style, mix, optional vocals — validated by
spec.py before a note renders (a structural failure is an authoring bug, never a model
failure). Then the pipeline generates the song section by section and keeps only what actually sounds like
what you asked for.
The SongSpec — sections, style, mix, energy arc — is validated by spec.py before a note renders. A structural failure is an authoring bug, caught before any model runs.
MusicGen renders each section conditioned on the tail of the previous one — the hidden gem — so the song flows as one piece instead of a playlist of disconnected clips.
A CLAP model scores each section against its prompt; duration must match the bar count; ffprobe verifies the master. Vocals are non-blocking — a bad take is dropped, never corrupts the song.
First full render: Something Blue — 3:48, sectioned, continued, gated, stitched. Every kept section cleared CLAP; a wandering generation gets caught and re-rolled instead of shipped.