$npx -y skills add mphinance/alpha-skills --skill audio-jingleAudio 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.
| 1 | # Audio Jingle Skill |
| 2 | |
| 3 | Three sub-modes. The active project's `audioKind` decides which one |
| 4 | runs: |
| 5 | |
| 6 | | `audioKind` | Models we route to | Plan focus | |
| 7 | |---|---|---| |
| 8 | | `music` | Suno V5 (default), Udio, Lyria 2 | genre + tempo + instrumentation | |
| 9 | | `speech` | MiniMax TTS (default), Fish, ElevenLabs V3 | script + voice + pacing | |
| 10 | | `sfx` | ElevenLabs SFX (default), AudioCraft | texture + impact + duration | |
| 11 | |
| 12 | ## Resource map |
| 13 | |
| 14 | ``` |
| 15 | audio-jingle/ |
| 16 | ├── SKILL.md |
| 17 | └── example.html |
| 18 | ``` |
| 19 | |
| 20 | ## Workflow |
| 21 | |
| 22 | ### Step 0 — Read the project metadata |
| 23 | |
| 24 | `audioKind`, `audioModel`, `audioDuration` (seconds), and (for speech) |
| 25 | `voice`. Branch by `audioKind` and use the values verbatim — no |
| 26 | clarifying form unless something is marked `(unknown — ask)`. |
| 27 | |
| 28 | Important: `voice` is provider-specific. For `minimax-tts`, `--voice` |
| 29 | must be a valid MiniMax `voice_id` (for example `male-qn-qingse`), not |
| 30 | a natural-language description. If you only have a prose voice brief |
| 31 | ("warm female narrator", "neutral Mandarin"), keep that in your plan |
| 32 | but omit `--voice` so the daemon's default voice id applies, or ask the |
| 33 | user to choose a specific id. |
| 34 | |
| 35 | ### Step 1 — Plan |
| 36 | |
| 37 | **Music** |
| 38 | - Genre + reference artists (1-2) |
| 39 | - Tempo (BPM) + key |
| 40 | - Instrumentation (3-5 instruments max) |
| 41 | - Vocals: yes / no / hummed / choir |
| 42 | - Mood arc (intro → chorus → outro) |
| 43 | |
| 44 | **Speech** |
| 45 | - Script (final, not draft — TTS runs verbatim) |
| 46 | - Voice target + pacing |
| 47 | For MiniMax this means a real `voice_id`, not prose in `--voice` |
| 48 | - Pronunciation hints for proper nouns / acronyms |
| 49 | |
| 50 | **SFX** |
| 51 | - Texture (impact / whoosh / ambience / foley) |
| 52 | - Duration + envelope (sharp attack vs. gentle swell) |
| 53 | - Layering note (single hit vs. stacked) |
| 54 | |
| 55 | State the plan in 2-3 sentences before dispatching. |
| 56 | |
| 57 | ### Step 2 — Compose the prompt |
| 58 | |
| 59 | Use the format the upstream model prefers. Bind `audioDuration` to the |
| 60 | API parameter directly; never put "make it 30 seconds" in prose. |
| 61 | |
| 62 | ### Step 3 — Dispatch via the media contract |
| 63 | |
| 64 | Use the unified dispatcher — do **not** call provider APIs by hand: |
| 65 | |
| 66 | ```bash |
| 67 | node "$OD_BIN" media generate \ |
| 68 | --project "$OD_PROJECT_ID" \ |
| 69 | --surface audio \ |
| 70 | --audio-kind "<music|speech|sfx>" \ |
| 71 | --model "<audioModel from metadata>" \ |
| 72 | --duration <audioDuration seconds> \ |
| 73 | [--voice "<provider voice id (speech only)>"] \ |
| 74 | --output "<short-slug>-<duration>s.mp3" \ |
| 75 | --prompt "<assembled prompt from Step 2 — for speech, the literal script>" |
| 76 | ``` |
| 77 | |
| 78 | The command prints one line of JSON: `{"file": {"name": "...", ...}}`. |
| 79 | The bytes land in the project; the FileViewer renders the audio |
| 80 | transport controls automatically. |
| 81 | |
| 82 | ### Step 4 — Hand off |
| 83 | |
| 84 | Reply with: plan summary, the filename returned by the dispatcher, and |
| 85 | one sentence on what to try if the user wants a variation (e.g. "swap |
| 86 | tempo from 92 to 108 BPM" rather than "make it different"). |
| 87 | |
| 88 | ## Hard rules |
| 89 | |
| 90 | - TTS runs your script **literally**. Proof it before dispatching — |
| 91 | even one stray comma changes the cadence. |
| 92 | - MiniMax TTS rejects free-form voice prose in `--voice`. Use a real |
| 93 | MiniMax `voice_id` (for example `male-qn-qingse`) or omit the flag |
| 94 | and let the daemon's default voice apply. |
| 95 | - Music: under 30s = single section; 30–90s = intro + body; 90s+ = |
| 96 | full arc. Don't try to fit a 3-act song into 15 seconds. |
| 97 | - SFX: prefer one well-described layer over a paragraph of "make it |
| 98 | cool" — generators reward specific texture words. |
| 99 | - Save the file every turn. The audio viewer shows transport controls |
| 100 | the moment the file lands. |