Communitygithub.com

memex-lab/product-launch-video-skill

Genera voz natural y expresiva a partir de texto usando Google Gemini TTS. Útil para voiceovers, narraciones, podcasts o cualquier tarea de texto a voz. Soporta más de 70 idiomas, control de estilo y emoción mediante indicaciones en lenguaje natural, y 30 voces predefinidas.

¿Qué es product-launch-video-skill?

Este skill transforma texto en voz natural y expresiva utilizando Google Gemini TTS, una tecnología de texto a voz de última generación. Está diseñado para desarrolladores y creadores que necesitan voiceovers coherentes para videos de lanzamiento de productos, narraciones para tutoriales, podcasts o cualquier proyecto que requiera locución. El skill maneja de forma inteligente la falta de consistencia de voz que suele ocurrir en solicitudes API separadas: combina múltiples segmentos de texto en una sola solicitud, inserta pausas entre ellos, genera un archivo de audio continuo y luego lo divide en segmentos individuales mediante detección de silencio con ffmpeg. Soporta más de 70 idiomas, 30 voces predefinidas con diferentes géneros, características y tonos, y permite un control detallado de la interpretación mediante indicaciones en lenguaje natural (estilo, ritmo, acento) y etiquetas de audio inline. Es compatible con Node.js 18+, requiere ffmpeg y el paquete npm `@google/genai`, y funciona con una clave de API de Google (GEMINI_API_KEY). Es ideal para flujos de trabajo de creación de videos, automatización de contenidos y prototipos rápidos de locución.

Compatible con~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/memex-lab/product-launch-video-skill/tree/main/skills/gemini-tts

Preguntar en tu IA favorita

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

Documentación

Texto a Voz con Gemini

Genera voz natural y expresiva a partir de texto usando Google Gemini TTS. Soporta más de 70 idiomas, 30 voces predefinidas y control de estilo mediante indicaciones en lenguaje natural y etiquetas de audio.

Requisitos: Node.js 18+, ffmpeg, paquete npm @google/genai, variable de entorno GEMINI_API_KEY.

Scripts Disponibles

  • scripts/generate-tts.mjs — Generador TTS completo con consistencia en una sola solicitud, división basada en silencios y recorte automático.

Inicio Rápido

Texto único a voz

npm install @google/genai
GEMINI_API_KEY=tu-clave node scripts/generate-tts.mjs \
  --text "¡Hola, bienvenido a nuestro producto!" \
  --output-dir public/vo \
  --voice Kore

Voiceover multi-segmento (voz consistente)

Crea un archivo segments.json:

[
  { "id": "intro", "text": "Bienvenido al lanzamiento de nuestro producto." },
  { "id": "features", "text": "Estas son las tres características que te encantarán." },
  { "id": "close", "text": "Comienza hoy mismo en nuestro sitio web." }
]

Ejecuta:

GEMINI_API_KEY=tu-clave node scripts/generate-tts.mjs \
  --segments segments.json \
  --output-dir public/vo \
  --voice Kore \
  --director-notes "Tono: Cálido, seguro, inspirador. Estilo: Narrador profesional con sonrisa vocal. Acento: Inglés americano neutro. Ritmo: Moderado."

Salida (JSON a stdout):

{
  "success": true,
  "segments": [
    { "id": "intro", "file": "public/vo/vo-intro.mp3", "duration": 3.25 },
    { "id": "features", "file": "public/vo/vo-features.mp3", "duration": 4.10 },
    { "id": "close", "file": "public/vo/vo-close.mp3", "duration": 2.80 }
  ],
  "totalDuration": 10.15,
  "fullAudioFile": "public/vo/vo-full.wav"
}

Opciones del Script

BanderasPor DefectoDescripción
--segments FILE—Archivo JSON con definiciones de segmentos [{id, text}]
--text TEXT—Texto único a generar (alternativa a --segments)
--output-dir DIR—Directorio de salida para archivos de audio (requerido)
--voice NAMEKoreNombre de voz predefinida (ver tabla de Voces)
--model NAMEgemini-3.1-flash-tts-previewID del modelo Gemini TTS
--director-notes TEXT—Guía de interpretación: estilo, ritmo, acento, respiración, articulación. No controla género/edad (usa --voice para eso).
--retries N3Máximo de reintentos para errores de API
--trim / --no-trim--trimRecortar silencios de los bordes de los segmentos
--format FORMATmp3Formato de salida: mp3 o wav

Códigos de Salida

CódigoSignificado
0Éxito
1Faltan argumentos requeridos o variables de entorno
2Error de API después de agotar reintentos
3ffmpeg no instalado o error de procesamiento
4Error de E/S de archivos

Cómo Funciona (Multi-Segmento)

Gemini TTS NO garantiza consistencia de voz entre solicitudes API separadas. El script lo resuelve:

  1. Combinando todos los segmentos en UNA sola indicación con marcadores de [pausa de 3 segundos] entre ellos
  2. Generando un único archivo de audio continuo en una sola llamada a la API
  3. Detectando pausas de silencio con ffmpeg silencedetect usando umbrales adaptativos (comienza en noise=-35dB, d=1.5s, y se relaja progresivamente). Si se encuentra una coincidencia exacta, la usa directamente. Si ocurre un salto de umbral (demasiado pocos → demasiados silencios), regenera el audio con un ritmo de habla más rápido para hacer las pausas entre segmentos más distintivas, y luego reintenta la detección.
  4. Dividiendo en los puntos medios de los silencios para crear archivos de segmentos individuales
  5. Recortando el silencio residual (~1.5s por lado) de cada segmento, manteniendo 0.15s de espacio para respirar

Modelos

ModeloMejor Para
gemini-3.1-flash-tts-previewÚltimo, más controlable, más de 200 etiquetas de audio (por defecto)
gemini-2.5-flash-preview-ttsRápido, buena calidad, uso general
gemini-2.5-pro-preview-ttsMáxima calidad, interpretaciones complejas

Voces

30 voces predefinidas:

VozGéneroCarácterTono
AchernarFemeninaSuaveMás agudo
AchirdMasculinaAmigableMedio bajo
AlgenibMasculinaGraveMás grave
AlgiebaMasculinaSuaveMás grave
AlnilamMasculinaFirmeMedio bajo
AoedeFemeninaAireadaMedio
AutonoeFemeninaBrillanteMedio
CallirrhoeFemeninaTranquilaMedio
CharonMasculinaInformativaMás grave
DespinaFemeninaSuaveMedio
EnceladusMasculinaEntre cortadaMás grave
ErinomeFemeninaClaraMedio
FenrirMasculinaEmocionableMedio bajo
GacruxFemeninaMaduraMedio
IapetusMasculinaClaraMedio bajo
KoreFemeninaFirmeMedio
LaomedeiaFemeninaOptimistaMás agudo
LedaFemeninaJuvenilMás agudo
OrusMasculinaFirmeMedio bajo
PuckMasculinaOptimistaMedio
PulcherrimaMasculinaDirectaMedio
RasalgethiMasculinaInformativaMedio
SadachbiaMasculinaAnimadaMás grave
SadaltagerMasculinaEruditaMedio
SchedarMasculinaParejaMedio bajo
SulafatFemeninaCálidaMedio
UmbrielMasculinaTranquilaMedio bajo
VindemiatrixFemeninaGentilMedio
ZephyrFemeninaBrillanteMás agudo
ZubenelgenubiMasculinaCasualMedio bajo

Notas del Director (--director-notes)

Guía de interpretación para la voz seleccionada. Define solo lo que importa: especificar demasiado limita la creatividad del modelo y puede empeorar los resultados.

Las tres direcciones más comunes son Estilo, Ritmo y Acento, pero puedes incluir cualquier instrucción personalizada relevante para la interpretación.

  • Estilo — Calidad emocional y carácter de la entrega. Sé descriptivo: "Entusiasmo contagioso: el oyente debe sentirse parte de algo emocionante" funciona mejor que solo "enérgico". Puedes superponer características y usar términos profesionales de locución como "sonrisa vocal".
  • Ritmo — Velocidad general y variación rítmica. Puede ir desde "Habla lo más rápido posible" hasta "Increíblemente lento y líquido, las palabras se funden entre sí, cero urgencia".
  • Acento — Sé específico. "Inglés británico como se escucha en Croydon, Inglaterra" funciona mucho mejor que "Acento británico".
--director-notes "Estilo: Entusiasta y descarada YouTuber de belleza GenZ. Ritmo: Extremadamente rápido, entrega acelerada como influencers de video corto. Acento: Chica del valle del sur de California de Laguna Beach."

Etiquetas de Audio

Usa [corchetes] dentro del texto del segmento para control palabra por palabra. Anula las notas del director localmente.

[susurros] [gritos] [emocionado] [serio] [pausa corta] [risas] [muy rápido] [muy lento] [sarcástico] [curioso]

También funcionan etiquetas creativas: [como drácula], [susurrando conspirativamente]

Ejemplo: "[emocionado] ¡Esto lo cambia todo! [pausa corta] Déjame mostrarte cómo."

Referencias

Individual skills in this repo

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

Skills relacionados