Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Audio generation skill — jingles, beds, voiceover, and sound effects. Routes music requests to Suno V5 / Udio / Lyria, speech to MiniMax TTS / FishAudio / ElevenLabs V3, and SFX to ElevenLabs SFX or AudioCraft. Output is one MP3/WAV file saved to the project folder.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -60% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 127% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 414% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -43% | 0% |
Three sub-modes. The active project's audioKind decides which one runs:
| audioKind | Models we route to | Plan focus | |---|---|---| | music | Suno V5 (default), Udio, Lyria 2 | genre + tempo + instrumentation | | speech | MiniMax TTS (default), Fish, ElevenLabs V3 | script + voice + pacing | | sfx | ElevenLabs SFX (default), AudioCraft | texture + impact + duration |
audio-jingle/
├── SKILL.md
└── example.htmlaudioKind, audioModel, audioDuration (seconds), and (for speech) voice. Branch by known values and use them verbatim. Missing metadata is not an instruction to ask: infer a safe default when possible, and emit a clarifying form only when the missing answer would materially change the requested output or prevent generation.
Important: voice is provider-specific. For minimax-tts, --voice must be a valid MiniMax voice_id (for example male-qn-qingse), not a natural-language description. If you only have a prose voice brief ("warm female narrator", "neutral Mandarin"), keep that in your plan but omit --voice so the daemon's default voice id applies, or ask the user to choose a specific id.
Music
Speech
For MiniMax this means a real voice_id, not prose in --voice
SFX
State the plan in 2-3 sentences before dispatching.
Use the format the upstream model prefers. Bind audioDuration to the API parameter directly; never put "make it 30 seconds" in prose.
Use the unified dispatcher — do not call provider APIs by hand:
bash"$OD_NODE_BIN" "$OD_BIN" media generate \ --project "$OD_PROJECT_ID" \ --surface audio \ --audio-kind "<music|speech|sfx>" \ --model "<audioModel from metadata>" \ --duration <audioDuration seconds> \ [--voice "<provider voice id (speech only)>"] \ --output "<short-slug>-<duration>s.mp3" \ --prompt "<assembled prompt from Step 2 — for speech, the literal script>"
The command prints one line of JSON: {"file": {"name": "...", ...}}. The bytes land in the project; the FileViewer renders the audio transport controls automatically.
Reply with: plan summary, the filename returned by the dispatcher, and one sentence on what to try if the user wants a variation (e.g. "swap tempo from 92 to 108 BPM" rather than "make it different").
even one stray comma changes the cadence.
--voice. Use a realMiniMax voice_id (for example male-qn-qingse) or omit the flag and let the daemon's default voice apply.
full arc. Don't try to fit a 3-act song into 15 seconds.
cool" — generators reward specific texture words.
the moment the file lands.
Other measured skills in the registry, with their headline benchmark lift.