Imported from recoupable/skills (
skills/recoup-minimax-music-3/SKILL.md). Install upstream withnpx skills add recoupable/skills --skill recoup-minimax-music-3. Copyright stays with the author.
MiniMax Music 3
Two inputs drive this model and they do different jobs:
| Input | fal field | Owns |
|---|---|---|
| Caption | prompt |
the music: genre, tempo, key, vocals, arrangement |
| Lyrics | lyrics |
the words and the song's structure, via bracketed tags |
Naming trap. The open-weights repo and the model card call these
instructionsandinput. On fal they arepromptandlyrics. Same two things, different names.
Build the structured Caption from the brief
Use three headings: Global Metadata, Vocal Details, Arrangement.
Describe genre, BPM and key first, then vocal delivery, instrumentation and the
per-section arrangement. Aim for roughly 250 to 450 words for a detailed brief.
Keep sung words in lyrics; the Caption describes their delivery and structure.
Use the included format below. An already installed, reviewed caption helper may assist, but this workflow must not download skills, install packages or execute remote code. Generation uses an already connected provider tool or preconfigured SDK; if that capability is absent, prepare the caption and lyrics and report the gap.
The minimum viable shape is a labelled header, then instrumentation, then per-section arrangement:
Genre: playful indie pop, bedroom pop. BPM: 112. Key: D major. Bright and bouncy: handclaps,
plucky synth bass, jangly guitar, warm female lead with a smile in it, gang vocals on the chorus.
That is the house precedent (content/rough-draft, 2026-08-25) and it worked. Label BPM and key
explicitly; burying tempo in prose is weaker.
Lyrics: the tags are the structure
Only these tags are recognised. Anything else is sung aloud.
[Intro] [Verse] [Pre-Chorus] [Chorus] [Post-Chorus] [Bridge] [Instrumental] [Solo] [Outro]
Put each tag on its own line, lowercase or titlecase both work. For an instrumental, omit words
entirely and carry the piece on [Instrumental] and [Solo].
Write to the line budget or the model will improvise
About ten sung lines per sixty seconds. Under-supply lyrics and the model does not stop early, it fills the remaining time by repeating and mangling your last section.
Measured 2026-09-02: a 26-line lyric at
duration: 110sang cleanly to 89.7s, then looped a garbled version of the final line three times out to 106.8s. The closing line was "and the wall behind me / is enormous", which came back as "is an all behind me". Seventeen seconds unusable.
Two rules follow:
- Give the outro enough lines to fill its time. A two-line outro under a thirty-second tail is an invitation to loop.
- Do not end on a rare or hard-to-sing word. "Enormous" did not survive. Prefer common, open vowels for the last line of the song.
Repetition is structure, not laziness
A chorus repeated verbatim is how the model knows it is a chorus. Vary a verse; keep the chorus identical each time unless you want the arrangement to diverge.
The call
const res = await fal.subscribe("minimax/music-3", {
input: {
prompt: CAPTION, // the structured caption
lyrics: LYRICS, // tagged, one tag per line
duration: 110, // UPPER BOUND, not a target. 5..300
},
});
const url = res.data?.audio?.url;
| Param | Notes |
|---|---|
prompt |
required. The structured caption. 5,000 token ceiling. |
lyrics |
required. Tagged. |
duration |
an upper bound. The model may stop earlier; it will not stop early just because the lyrics ran out (see above). |
seed |
set it when you want a re-roll to be comparable. |
guidance_scale, num_inference_steps |
leave default unless bake-off says otherwise. |
Returns a WAV. The model card specifies 32 kHz; fal returned 44.1 kHz 16-bit stereo on 2026-09-02, so measure rather than assume. Generation took 234 seconds for 110s of audio.
Cost: $0.002 per second of audio produced, measured twice against the production bill (223.97s = $0.44794 on 2026-08-27; 110.13s = $0.2203 on 2026-09-02). It matches to the cent, so a song was a low-cost step in that historical film. A 110-second track was 22 cents. Verify the current price and retry only within the user's approved budget.
Check the audio before you build anything on it
A song is the timing spine of a film: every scene window is locked to it, so a defect found after the scene table exists is a rebuild, not a fix.
- Measure it.
ffprobefor real duration and sample rate,ebur128for LUFS and peak. - Transcribe it and read the transcript. ElevenLabs Scribe with word timestamps, not whisper. This is what catches a mangled or looped section, and it gives you the word times you need for scene windows anyway. Compare the transcript against the lyrics you sent, line by line.
- Find the last clean word. Where the transcript degrades, that is the end of your usable audio. Cut the film there rather than trying to hide it.
- Only then write the scene table against those word times.
Where this sits
- The song is downstream of the concept, never upstream. Genre, length and structure all follow from what the film is. Generating a song first locks the timing before the story exists.
- Hand the approved audio and its word times to
recoup-music-videofor an artist film, orrecoup-content-make-videofor short-form content. - The audio approval gate is the cheapest gate in a film build. A song change after compositing moves every beat and every caption; before it, it costs 22 cents.
References
references/prompt-library.md— captions we have actually shipped, with what came back
