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.
62
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./design-templates/audio-jingle/SKILL.mdThree 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
voice_id, not prose in --voiceSFX
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:
"$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").
--voice. Use a real
MiniMax voice_id (for example male-qn-qingse) or omit the flag
and let the daemon's default voice apply.1a7a23d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.