Habilidad de Jingles de Audio
Tres submódulos. El audioKind del proyecto activo decide cuál se ejecuta:
audioKind | Modelos a los que enrutamos | Enfoque del plan |
|---|---|---|
music | Suno V5 (por defecto), Udio, Lyria 2 | género + tempo + instrumentación |
speech | MiniMax TTS (por defecto), Fish, ElevenLabs V3 | guion + voz + ritmo |
sfx | ElevenLabs SFX (por defecto), AudioCraft | textura + impacto + duración |
Mapa de recursos
audio-jingle/
├── SKILL.md
└── example.html
Flujo de trabajo
Paso 0 — Leer los metadatos del proyecto
audioKind, audioModel, audioDuration (segundos) y (para voz) voice. Ramificar por valores conocidos y usarlos textualmente. La falta de metadatos no es una instrucción para preguntar: inferir un valor predeterminado seguro cuando sea posible, y emitir un formulario aclaratorio solo cuando la respuesta faltante cambiaría materialmente la salida solicitada o impediría la generación.
Importante: voice es específico del proveedor. Para minimax-tts, --voice debe ser un voice_id de MiniMax válido (por ejemplo male-qn-qingse), no una descripción en lenguaje natural. Si solo tienes una descripción breve de voz en prosa ("narradora femenina cálida", "mandarín neutro"), mantenla en tu plan pero omite --voice para que se aplique el ID de voz predeterminado del daemon, o pide al usuario que elija un ID específico.
Paso 1 — Planificar
Música
- Género + artistas de referencia (1-2)
- Tempo (BPM) + tonalidad
- Instrumentación (máximo 3-5 instrumentos)
- Voces: sí / no / tarareadas / coro
- Arco emocional (introducción → estribillo → outro)
Locución
- Guion (final, no borrador — TTS lo ejecuta literalmente)
- Voz objetivo + ritmo
Para MiniMax esto significa un
voice_idreal, no prosa en--voice - Indicaciones de pronunciación para nombres propios / acrónimos
Efectos de sonido
- Textura (impacto / whoosh / ambiente / foley)
- Duración + envolvente (ataque abrupto vs. crescendo suave)
- Nota de capas (golpe único vs. apilado)
Expón el plan en 2-3 oraciones antes de despachar.
Paso 2 — Componer el prompt
Usa el formato que prefiera el modelo upstream. Vincula audioDuration directamente al parámetro de la API; nunca pongas "hazlo de 30 segundos" en prosa.
Paso 3 — Despachar mediante el contrato de medios
Usa el despachador unificado — no llames a las APIs de los proveedores manualmente:
"$OD_NODE_BIN" "$OD_BIN" media generate \
--project "$OD_PROJECT_ID" \
--surface audio \
--audio-kind "<music|speech|sfx>" \
--model "<audioModel de metadatos>" \
--duration <audioDuration segundos> \
[--voice "<ID de voz del proveedor (solo voz)>"] \
--output "<slug-corto>-<duracion>s.mp3" \
--prompt "<prompt ensamblado del Paso 2 — para voz, el guion literal>"
El comando imprime una línea de JSON: {"file": {"name": "...", ...}}. Los bytes llegan al proyecto; el Visor de Archivos renderiza automáticamente los controles de transporte de audio.
Paso 4 — Entrega
Responde con: resumen del plan, el nombre de archivo devuelto por el despachador y una oración sobre qué probar si el usuario quiere una variación (por ejemplo, "cambiar tempo de 92 a 108 BPM" en lugar de "hazlo diferente").
Reglas estrictas
- TTS ejecuta tu guion literalmente. Revísalo antes de despachar — incluso una coma fuera de lugar cambia la cadencia.
- MiniMax TTS rechaza descripciones de voz en prosa libre en
--voice. Usa unvoice_idde MiniMax real (por ejemplomale-qn-qingse) u omite la bandera y deja que se aplique la voz predeterminada del daemon. - Música: menos de 30s = sección única; 30-90s = introducción + cuerpo; 90s+ = arco completo. No intentes meter una canción de 3 actos en 15 segundos.
- SFX: prefiere una capa bien descrita sobre un párrafo de "hazlo genial" — los generadores recompensan palabras de textura específicas.
- Guarda el archivo en cada turno. El visor de audio muestra los controles de transporte en el momento en que el archivo llega.