Habilidade de Jingle de Áudio
Três submodos. O audioKind do projeto ativo decide qual deles é executado:
audioKind | Modelos para os quais roteamos | Foco do plano |
|---|---|---|
music | Suno V5 (padrão), Udio, Lyria 2 | gênero + andamento + instrumentação |
speech | MiniMax TTS (padrão), Fish, ElevenLabs V3 | script + voz + ritmo |
sfx | ElevenLabs SFX (padrão), AudioCraft | textura + impacto + duração |
Mapa de recursos
audio-jingle/
├── SKILL.md
└── example.html
Fluxo de trabalho
Etapa 0 — Ler os metadados do projeto
audioKind, audioModel, audioDuration (segundos) e (para fala) voice. Ramifique por valores conhecidos e use-os literalmente. Metadados ausentes não são uma instrução para perguntar: infira um padrão seguro quando possível e emita um formulário de esclarecimento somente quando a resposta ausente alteraria materialmente a saída solicitada ou impediria a geração.
Importante: voice é específico do provedor. Para minimax-tts, --voice deve ser um voice_id válido do MiniMax (por exemplo, male-qn-qingse), não uma descrição em linguagem natural. Se você tiver apenas uma descrição de voz em prosa ("narradora feminina calorosa", "mandarim neutro"), mantenha isso em seu plano, mas omita --voice para que o ID de voz padrão do daemon seja aplicado, ou peça ao usuário para escolher um ID específico.
Etapa 1 — Planejar
Música
- Gênero + artistas de referência (1-2)
- Andamento (BPM) + tonalidade
- Instrumentação (máx. 3-5 instrumentos)
- Vocais: sim / não / humming / coral
- Arco emocional (introdução → refrão → final)
Fala
- Script (final, não rascunho — TTS executa literalmente)
- Voz alvo + ritmo
Para MiniMax, isso significa um
voice_idreal, não prosa em--voice - Dicas de pronúncia para nomes próprios / siglas
SFX
- Textura (impacto / whoosh / ambiente / foley)
- Duração + envelope (ataque acentuado vs. crescendo suave)
- Nota de camadas (golpe único vs. empilhado)
Declare o plano em 2-3 frases antes de despachar.
Etapa 2 — Compor o prompt
Use o formato preferido pelo modelo upstream. Vincule audioDuration ao parâmetro da API diretamente; nunca coloque "faça com 30 segundos" em prosa.
Etapa 3 — Despachar via contrato de mídia
Use o despachante unificado — não chame as APIs do provedor manualmente:
"$OD_NODE_BIN" "$OD_BIN" media generate \
--project "$OD_PROJECT_ID" \
--surface audio \
--audio-kind "<music|speech|sfx>" \
--model "<audioModel dos metadados>" \
--duration <audioDuration segundos> \
[--voice "<ID de voz do provedor (apenas fala)>"] \
--output "<slug-curto>-<duração>s.mp3" \
--prompt "<prompt montado na Etapa 2 — para fala, o script literal>"
O comando imprime uma linha de JSON: {"file": {"name": "...", ...}}. Os bytes são salvos no projeto; o FileViewer renderiza automaticamente os controles de transporte de áudio.
Etapa 4 — Finalizar
Responda com: resumo do plano, o nome do arquivo retornado pelo despachante e uma frase sobre o que tentar se o usuário quiser uma variação (por exemplo, "trocar andamento de 92 para 108 BPM" em vez de "torná-lo diferente").
Regras rígidas
- TTS executa seu script literalmente. Revise-o antes de despachar — mesmo uma vírgula extra altera a cadência.
- MiniMax TTS rejeita prosa de voz livre em
--voice. Use umvoice_idreal do MiniMax (por exemplo,male-qn-qingse) ou omita a flag e deixe que o ID de voz padrão do daemon seja aplicado. - Música: abaixo de 30s = seção única; 30–90s = introdução + corpo; 90s+ = arco completo. Não tente encaixar uma música de 3 atos em 15 segundos.
- SFX: prefira uma camada bem descrita a um parágrafo de "torne legal" — geradores recompensam palavras de textura específicas.
- Salve o arquivo a cada turno. O visualizador de áudio mostra os controles de transporte no momento em que o arquivo é salvo.