Video de Podcast
Crea un video de 1920x1080 de dos presentadores hablando sobre un tema. Cada tema tiene su propia foto de fondo, tarjeta de título, ícono y etiqueta de altavoz con barras de voz animadas. Los cambios de tema tienen una transición de pantalla completa y un "whoosh", los íconos aparecen con un "pop", y la última escena incluye un botón de suscripción y créditos. Puede comenzar con la voz clonada del usuario.
Lee /hyperframes antes de cambiar cualquier composición. Los scripts a continuación están en la carpeta scripts/ de esta habilidad. Ejecútalos desde la carpeta del proyecto de video.
0. Entrevista primero
No investigues, escribas ni generes nada hasta que esto esté terminado. Un video renderizado es lento de rehacer, así que resuelve las decisiones de antemano. El método proviene de la habilidad de interrogatorio de Matt Pocock.
Las decisiones forman un árbol: algunas solo se pueden preguntar una vez que otras están resueltas. Trabaja en rondas:
- Haz cada pregunta de la cual puedas responder los prerrequisitos ahora, y nada que dependa de una respuesta que aún no hayas escuchado. Esa pregunta espera a una ronda posterior.
- Numera cada pregunta y da tu respuesta recomendada, redactada de modo que "sí" la acepte.
- Espera las respuestas, luego determina qué desbloquearon y haz la siguiente ronda. Una respuesta también puede hacer que una pregunta planeada sea inútil: elimínala.
Formatea cada pregunta así:
❓ **P1** - **<título>**: <la pregunta>
➡️ <tu respuesta recomendada>
Los hechos son tu trabajo, las decisiones son de ellos. Nunca preguntes lo que puedas buscar: si VoiceStudio está en ejecución, qué perfiles de voz existen (GET /profiles), qué hay en la carpeta, qué dice la investigación. Nunca respondas una decisión por ellos. Pregunta en texto plano, para que puedan responder con sus propias palabras.
Las decisiones a cubrir, aproximadamente en este orden:
| Ronda | Decisiones |
|---|---|
| 1 | El tema y el ángulo específico. Quién está viendo y qué saben ya. Qué deben hacer los espectadores después. Duración objetivo. |
| 2 | Los dos presentadores: quiénes son y cómo se relacionan, por ejemplo experto y cliente. Tono. Nombre del programa. Si comienza con la propia voz del usuario. |
| 3 | Si comienza con su voz: qué perfil y las palabras exactas. Acentos y carácter de voz para los presentadores diseñados. |
| 4 | Después de la investigación: qué hallazgos usar y cualquier afirmación que quieran omitir. La lista de temas, en orden. |
| 5 | Apariencia y sonido: el tipo de fotos, el ícono para cada tema, cualquier cambio en las transiciones, whoosh y pop. Dónde se publicará el video. |
Omite cualquier cosa ya respondida en la solicitud. Si dicen "solo hazlo" o "tú decides", deja de preguntar, toma tus respuestas recomendadas y listálas. No hay límite de preguntas, pero no preguntes por preguntar: cada pregunta debe cambiar el video.
Termina reproduciendo el plan en unas pocas líneas: tema, audiencia, duración, presentadores, apertura, lista de temas y llamado a la acción. Espera a que confirmen antes de comenzar el paso 1. Si algo más tarde reabre una decisión, como una investigación que contradice el ángulo, detente y pregunta.
1. Verifica la configuración
curl -s "$VOICESTUDIO_URL/profiles"debería responder. URL predeterminada:http://localhost:3000. Si el servidor tiene una clave API,VOICESTUDIO_API_KEYdebe estar configurada. Nunca escribas la clave en un archivo del proyecto.ffmpegynodeestán en PATH, y las habilidades de HyperFrames están instaladas.
Si falta algo, detente y dirige al usuario al README de esta habilidad.
2. Crea el proyecto
npx hyperframes init <dir>, luego copia templates/script.example.json a <dir>/script.json.
3. Investiga y escribe script.json
Investiga el tema primero. Cada estadística necesita una fuente real: colócala en el campo source de esa escena y no inventes números. Escribe lenguaje natural, aproximadamente 150 palabras por minuto.
| Campo | Significado |
|---|---|
show | Nombre del programa, mostrado en cada escena |
chips | Etiquetas de crédito en la última escena |
voices | Una entrada por altavoz. name, role, color, más profile_id o instruct y seed |
scenes | Ordenadas por aparición. kicker, title, icon, opcional sub y source. La última es el outro |
lines | Turnos hablados en orden: who, scene, text. Las líneas de una escena deben ser contiguas |
icon es un nombre de ícono de Lucide que se adapte al tema, como phone-call.
Para comenzar con la propia voz clonada del usuario, agrega una voz con su profile_id de VoiceStudio (de GET /profiles), asígnale una primera escena propia y termina la línea con un traspaso como "¡Empecemos!" Solo clona una voz con permiso de su dueño.
Muestra el guion al usuario antes de generar las voces.
4. Genera las voces
python3 <skill>/scripts/make_voice.py
Esto escribe assets/audio/ y assets/lines.json. El audio se almacena en caché, por lo que después de editar el guion solo genera lo que cambió. Si el usuario vuelve a clonar una voz, elimina su audio de assets/audio/ para que se regenere, y primero confirma que el ref_audio_path del perfil cambió: un clon que no se guardó deja la voz anterior en su lugar. Haz que el usuario escuche el audio antes de renderizar.
5. Agrega imágenes, íconos y sonidos
Imágenes: cada escena necesita assets/img/<id-escena>.jpg, apaisada, al menos 1920 de ancho, y una foto diferente de la escena anterior, para que cada cambio de tema sea visible. Usa solo imágenes que el usuario pueda publicar, como fotos con licencia CC de Wikimedia Commons. Registra cada una en assets/img/credits.json como {"<id-escena>": {"artist": "...", "license": "...", "page": "..."}}. La última escena muestra los nombres de los artistas.
Íconos:
npm pack [email protected] --silent && tar xzf lucide-static-0.460.0.tgz
mkdir -p assets/icons && cp package/LICENSE assets/icons/LICENSE
cp package/icons/<nombre-ícono>.svg assets/icons/ # una vez por ícono de escena
rm -rf package lucide-static-0.460.0.tgz
Sonidos: ejecuta estos comandos y copia el archivo que cada uno imprime:
npx hyperframes media-use resolve --type sfx --intent "short whoosh transition" --project .
npx hyperframes media-use resolve --type sfx --intent "quick pop badge" --project .
mkdir -p assets/sfx
cp <ruta whoosh> assets/sfx/whoosh.mp3
cp <ruta pop> assets/sfx/pop.mp3
Acredita cualquier sonido CC BY en la última escena mediante chips.
6. Construye y verifica
python3 <skill>/scripts/build.py, luego npx hyperframes check. Corrige todos los errores. Luego ejecuta npx hyperframes snapshot --at <segundos> y mira los fotogramas en los cambios de escena antes de renderizar. Las transiciones son de pantalla completa en los tiempos de inicio de escena que build.py imprime.
7. Renderiza
npx hyperframes render. El MP4 se guarda en renders/. Espera varios minutos por minuto de video.
Verifica el archivo, luego dile al usuario lo que mediste: npx hyperframes audio <video> --json muestra si el sonido está presente y si la sonoridad está en el rango. Puedes medir el sonido pero no escucharlo, así que pídeles que escuchen.