Communitygithub.com

NoizAI/skills

Habilidad para generar canciones con voz y acompañamiento a partir de descripciones de texto y/o letras, o para hacer versiones (covers) de canciones existentes en un nuevo estilo.

¿Qué es skills?

Esta habilidad, 'text-to-music', te permite crear música vocal completa de dos maneras: **Generar** una canción nueva a partir de una descripción musical y letras (proporcionadas por el usuario o escritas por el servidor), o **Hacer un cover** de una canción existente, cambiando su estilo pero manteniendo la melodía original (con posibilidad de usar letras nuevas o las originales reconocidas automáticamente). Es ideal para crear jingles, canciones de cumpleaños, temas musicales, o versiones alternativas de canciones. Está diseñada para plataformas de agentes de IA como Claude Code, Cursor y Codex. El proceso se ejecuta mediante scripts de línea de comandos (`python3 skills/text-to-music/scripts/t2m.py`) que envían solicitudes a la API de Noiz.ai, la cual genera dos variantes de cada canción en formato MP3. La habilidad soporta parámetros detallados para controlar el género, estado de ánimo, instrumentación, tempo, duración, género vocal, timbre, y más. También incluye funciones para reconocer letras de canciones originales, verificar el estado de trabajos en curso y gestionar la clave de API. El costo se basa en la duración de la canción generada (15 créditos por segundo de la variante más larga) y se factura por trabajo completo, no por variante.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NoizAI/skills/tree/HEAD/skills/text-to-music

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

texto-a-música

Dos formas de crear una canción con voz + acompañamiento, guardada como MP3. Cada solicitud produce dos variantes.

  • Generar — una canción nueva a partir de una descripción musical y letras.
  • Cover — reinterpretar una canción existente en un nuevo estilo, manteniendo su melodía. Las letras pueden ser las originales (reconocidas automáticamente) o nuevas.

Disparadores

  • haz una canción / generar música / texto a música / componer
  • convierte estas letras en una canción / canta esto / jingle / canción temática / canción de cumpleaños
  • haz un cover de esta canción / haz una versión jazz / reinterpreta en otro estilo
  • 写歌 / 生成音乐 / 作曲 / 唱首歌 / 歌词谱曲 / 翻唱 / 改编 / 换个风格唱

Generar — canción nueva a partir de texto

Una solicitud necesita un prompt (la descripción musical) y exactamente una fuente de letras:

# Deja que el servidor escriba letras a partir de un tema
python3 skills/text-to-music/scripts/t2m.py "indie pop alegre, guitarras brillantes, 120 BPM" \
  --lyrics-prompt "una canción sobre viajes por carretera con amigos"

# Usa tus propias letras (en línea o desde un archivo)
python3 skills/text-to-music/scripts/t2m.py "balada mandopop, piano y cuerdas" \
  --lyrics $'[Verso]\nLa lluvia afuera ha parado\n[Estribillo]\nTe sigo esperando' --vocal-gender Female --title "La lluvia paró"
python3 skills/text-to-music/scripts/t2m.py "lo-fi hip hop, suave, crujido de vinilo" \
  --lyrics-file cancion.txt --duration 120 -o chill.mp3

# Modela la voz/estilo a partir de una canción de referencia (archivo local ≤20 MB o URL pública)
python3 skills/text-to-music/scripts/t2m.py "synth-pop soñador" --lyrics-file cancion.txt --ref-audio ./ref.mp3

Salida: cancion_v1.mp3 y cancion_v2.mp3 (o <nombre>_v1.mp3 / <nombre>_v2.mp3 con -o). Cuando el servidor escribe las letras, también se guardan en <nombre>_letras.txt.

ArgumentoPor defectoDescripción
promptrequeridoDescripción musical: género, ambiente, instrumentos, tempo (≤1500 caracteres)
--lyrics / -l—Texto de las letras; los marcadores [Verso], [Estribillo], [Puente] ayudan a estructurar
--lyrics-file—Archivo UTF-8 .txt con letras (≤64 KB)
--lyrics-prompt—Tema para que el servidor escriba las letras
--tags—Etiquetas de estilo, separadas por comas (≤50 caracteres)
--negative-tags—Estilos a evitar
--duration / -dautoIndicación de duración objetivo: 60, 120 o 180 segundos. Una sugerencia, no una garantía.
--ref-audio—Canción de referencia, ruta local o URL pública

--lyrics, --lyrics-file y --lyrics-prompt son mutuamente excluyentes; se requiere uno.

Cover — reinterpretar una canción existente

Necesita la canción fuente, letras y una descripción del nuevo sonido (--style y/o --prompt):

# Mismas letras, nuevo estilo: reconoce las letras del original y luego lo versiona
python3 skills/text-to-music/scripts/t2m.py cover original.mp3 \
  --style "jazz, voz femenina ahumada" --recognize-lyrics -o cover_jazz.mp3

# Nuevas letras sobre la melodía original, arreglo más libre
python3 skills/text-to-music/scripts/t2m.py cover https://ejemplo.com/cancion.mp3 \
  --prompt "folk acústico, guitarra punteada, íntimo" --lyrics-file nuevas_letras.txt \
  --adherence main_melody --vocal-gender Male

# Reconocer solo las letras (para revisar o editar antes de versionar)
python3 skills/text-to-music/scripts/t2m.py lyrics original.mp3 -o letras.txt

Flujo recomendado cuando el usuario quiere ajustar las letras: ejecutar lyrics → editar el archivo → cover --lyrics-file.

ArgumentoPor defectoDescripción
sourcerequeridoCanción original: archivo local (≤100 MB; mp3/wav/m4a/aac/flac/ogg) o URL pública
--style / -s—Etiquetas de estilo cortas, ej. "rock, voz masculina" (≤50 caracteres)
--prompt / -p—Descripción más larga del sonido del cover (≤1500 caracteres)
--adherencehighhigh = seguir el arreglo original de cerca; main_melody = mantener solo la melodía principal, más libertad
--lyrics / -l—Letras a cantar
--lyrics-file—Archivo UTF-8 .txt con letras (≤64 KB)
--recognize-lyricsoffTranscribir primero las letras de la fuente y usarlas
--output / -ocover.mp3Ruta de salida; las variantes obtienen los sufijos _v1 / _v2

Se requiere al menos uno de --style / --prompt; se requiere exactamente una fuente de letras.

Argumentos Compartidos

ArgumentoPor defectoDescripción
--title—Título de la canción (≤80 caracteres)
--vocal-gender—Male o Female
--vocal-timbre—Descripción libre de la voz, ej. "contralto cálida y ronca" (≤50 caracteres)
--output / -osong.mp3 (cover.mp3 para covers)Ruta de salida; las variantes obtienen los sufijos _v1 / _v2
--no-waitoffEnviar, imprimir el/los ID del trabajo y salir
--poll-interval10Segundos entre comprobaciones de estado
--timeout1800Máximo de segundos de espera (el trabajo continúa ejecutándose en el servidor)
--api-keyde env/configClave de API de Noiz (anula la clave almacenada)

Reanudar / Verificar Trabajos

La generación imprime dos gen_product_ids; un cover imprime un task_id. Si la espera agota el tiempo o usaste --no-wait, reanuda con:

python3 skills/text-to-music/scripts/t2m.py status <id_v1> <id_v2> -o cancion.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> -o cover.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> --no-wait   # solo imprime el estado

El estado pasa por submitted → running → succeeded / failed. Los covers también informan de una stage (el análisis ocurre antes de cantar, por lo que los covers tardan más). Las URL de descarga caducan después de ~24h; vuelve a ejecutar status para obtener nuevas.

Escribir Buenos Prompts

  • Prompt / estilo = el sonido: género + ambiente + instrumentación + tempo. "pop orquestal cinematográfico, cuerdas ascendentes, 90 BPM, esperanzador".
  • Letras: mantén las secciones cortas y etiquétalas. Las letras en chino, inglés y mixtas funcionan.
  • Canciones cortas: para jingles o saludos, pasa -d 60 y escribe solo un verso + estribillo.
  • Covers: elige high para que el cover sea reconocible; elige main_melody para un cambio de género más grande.
  • ¿No estás satisfecho? Ejecuta de nuevo: cada ejecución da dos variantes nuevas.

Costo

  • Canciones y covers se cobran una vez por trabajo (no por variante): techo(segundos de la variante más larga) × 15 créditos, cobrados después de que ambas variantes tengan éxito. Una canción de 2 minutos cuesta alrededor de 1,800 créditos. Si los créditos de la suscripción no cubren todo el trabajo, se factura como pago por uso a $0.00015/s. El script imprime el monto cobrado al finalizar.
  • Reconocimiento de letras (lyrics / --recognize-lyrics): 100 créditos (o $0.001 pago por uso), cobrado solo cuando se detectan voces.

Límites de velocidad: 5 envíos por minuto por clave por endpoint; consulta de estado 60 por minuto.

Limitaciones

  • No se admite música puramente instrumental: siempre se requieren letras.
  • --duration es solo una sugerencia; la duración real puede diferir. Los covers siguen la duración de la fuente.
  • Los prompts o letras que contengan contenido sensible son rechazados (code=400).

Configuración

python3 skills/text-to-music/scripts/t2m.py config --set-api-key TU_CLAVE
# o
export NOIZ_API_KEY=TU_CLAVE

Obtén tu clave de API en developers.noiz.ai.

Requisitos

  • Python 3.6+
  • Paquete requests: uv pip install requests
  • Clave de API de Noiz desde developers.noiz.ai

Seguridad y Divulgación de Datos

  • Clave de API: Almacenada en ~/.config/noiz/api_key (permisos 0600) o mediante la variable de entorno NOIZ_API_KEY.
  • Red: Los prompts, letras y cualquier audio de referencia/fuente (carga de archivo o URL) se envían a https://noiz.ai/v1/text-to-music y https://noiz.ai/v1/text-to-music/cover*; el estado del trabajo se consulta desde los mismos endpoints. No se transmite ningún otro dato.
  • Salida: Los MP3 generados (y los archivos de texto de letras) se descargan desde URL firmadas de almacenamiento de Noiz y se guardan en la ruta de salida. No se modifican otros archivos.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados