Brand promo (showreel de estudio)
Este skill crea un vídeo promocional completo a partir de un único archivo de configuración, promo.json. Un lienzo (canvas) dibuja cada fotograma en Chrome sin cabecera, por lo que el vídeo es diseño animado puro, sin plantillas ni metraje de archivo:
- Imagen: los propios clips de la marca, su animación de logotipo y sus textos.
- Banda sonora: una pista sintetizada original generada con código (128 bpm). Cada corte, impacto y caída se ajusta a sus compases.
- Narración: VoxCPM2, ejecutado localmente.
- Sonido: el audio propio de cada trabajo suena en su foco.
La estructura es fija y funciona a cualquier escala de marca. Solo cambia el contenido.
| Tiempo | Sección |
|---|---|
| 0-3.4 s | Aparece escrito { Every story }, luego "deserves to move." |
| 3.2-7.6 s | Un anillo de tarjetas 3D (fotogramas de todos los trabajos): "Here are five of ours." |
| 7.6 s (compás 4) | La caída: ceja, el nombre de la marca en un recuadro con efecto glitch, un subtítulo |
| 9.5 s + 5.6 s cada uno | Un foco por trabajo: bloque de título más el trabajo en una tarjeta inclinada (16:9) o un teléfono (9:16), chip "Full video · m:ss", su propio sonido con barras de nivel en vivo |
| pausa | "Your story" y luego un gran "next." en la última palabra de la línea de narración |
| carrera | Cada clip pasa volando en 3D, con tres palabras (Written · Voiced · Animated) en las frases del narrador |
| final | El logotipo líquido aterriza en el golpe final, se desliza a la izquierda, el nombre aparece, luego los chips y la URL |
La duración es de 51.5 s con 5 trabajos, 45.9 s con 4 y 40.2 s con 3.
Requisitos:
- ffmpeg, Node 22+ y Google Chrome o Chromium (
CHROME_PATH). - Python con numpy y scipy (
PROMO_PY). - Para la narración, VoxCPM2 (
VOX_PY, consultascripts/voices.py). Sin él, el promo no tiene narrador, o puedes añadir tus propias grabaciones enbuild/vox/<id>.wav.
Flujo de trabajo
1. Reúne lo que necesita el promo
-
3-5 trabajos: vídeos terminados del trabajo de la marca, de cualquier duración. Un vídeo vertical se reproduce en un teléfono, uno apaisado en una tarjeta. Ten en cuenta:
- Un buen momento de sonido en cada uno, como el inicio de una frase o un remate: se reproducen 4 s en el foco. Indica su tiempo de inicio como
sound, o déjalo fuera y se usará el inicio de un intervalo silencioso cerca del 35 % del vídeo. - Establece
"mute": truepara un trabajo cuyo sonido no deba reproducirse.
- Un buen momento de sonido en cada uno, como el inicio de una frase o un remate: se reproducen 4 s en el foco. Indica su tiempo de inicio como
-
La animación del logotipo, con transparencia. La mejor fuente es
/generate-logocon el estilo líquido:generate-logo/scripts/animate.sh logo.png --styles liquid --proresEsto genera
<name>-5s-liquid-alpha.movmás su-sfx.wav. También funciona un-alpha.webmtransparente o un PNG transparente. -
Datos de la marca:
- El nombre, dividido en dos partes de color (
["KumNit", " Studio"]). - Los colores: dos degradados para el nombre, un acento, un segundo acento y un acento cálido. Léelos del logotipo.
- El sitio web.
- Lo que hace la marca: los cuatro chips.
- El nombre, dividido en dos partes de color (
-
Idioma:
"lang": "en"o"km". Para camboyano, escribe todo el texto y las líneas de narración en camboyano natural. Kantumruy Pro y Koulen están incluidos.
2. Escribe el proyecto
Crea una carpeta para el proyecto y copia examples/kumnit-showreel.json como promo.json, luego edítalo. Cada clave se describe en references/config.md. Mantén los textos cortos: títulos de una a tres palabras, líneas de hasta seis palabras. Las líneas largas se encogen para encajar, pero se leen peor.
Escribe la narración en voice.lines como una oración corta por momento:
nextdebe terminar con la palabra que se muestra grande. Por ejemplo, "Your story could be next."rushnecesita tres frases separadas por comas, una por palabra de la carrera ("We write it, voice it, and animate every frame.").
3. Vista previa (aproximadamente 30 s)
<skill>/scripts/promo.sh <proyecto>/promo.json --preview
Esto recorta los activos, planifica los tiempos y renderiza 12 fotogramas en out/<nombre>-preview.png. Léelo y comprueba:
- Las tarjetas muestran los momentos correctos.
- Ningún título está apretado.
- El logotipo está encuadrado (su marca debe ocupar aproximadamente el 60 % de su recuadro).
- Los focos alternan lados.
Para corregir una imagen, cambia el inicio sound de ese trabajo. Luego elimina assets/clips/p<k>, assets/bites/p<k>.wav y assets/manifest.json, y ejecuta la vista previa de nuevo.
4. Renderizado (aproximadamente 10 minutos la primera vez)
<skill>/scripts/promo.sh <proyecto>/promo.json # ejecútalo en segundo plano
Las etapas se ejecutan en este orden: activos, voces, plan, música, mezcla, renderizado, codificación.
- Voces: la primera ejecución carga el modelo (aproximadamente 2 min), luego toma de 10 a 60 s por línea. Las líneas que ya existen se conservan, así que elimina un
build/vox/<id>.wavpara rehacerlo. - Renderizado: aproximadamente 4 min con 2 procesos de Chrome.
- Reanudación:
--from mix(orender, oencode) reejecuta desde esa etapa solamente.
Salida: out/<nombre>-1080p60.mp4 y out/<nombre>-contact.png (un fotograma por segundo).
5. Verifica antes de entregarlo
- Lee la hoja de contacto.
ffprobedebe mostrar la duración esperada (51.5 s con 5 trabajos).- La mezcla está normalizada a -14 LUFS.
- No puedes oír el resultado, así que informa al usuario de lo que has comprobado (tiempos, niveles, fotogramas) y pídele que escuche. Presta la mayor atención al narrador sobre el sonido propio de cada trabajo.
Ajustes
- Efectos de sonido: establece
sfxDiren una carpeta con los efectos de sonido propios del usuario y los nombres de archivo enscripts/audio.py(SFX) se probarán primero. Cualquier falta se sintetiza, por lo que el skill también funciona sin biblioteca. - Tiempos: se miden a partir de la narración en
scripts/plan.py. El sonido de cada trabajo comienza después de su línea de narración y se detiene antes del siguiente foco. Para cambiar las reglas, editaplan.py, no la escena. - Aspecto: los colores provienen de
brand, todo el movimiento está enscripts/scene.mjs, y la partitura está enscripts/music.py, cuyo diseño de compás está documentado en su parte superior.