Durante años, cada vídeo fue una sesión de edición: abrir el proyecto, arrastrar clips, ajustar subtítulos a mano, exportar, descubrir un error y volver a empezar. Funciona para una pieza; no funciona cuando necesitas una serie, varias marcas y versiones en tres idiomas. Por eso construí SPIELBERG, un motor de vídeo programático que opero conversando con un agente: le doy el encargo y el material, apruebo el guion y el animatic, y lo que sale es un MP4 verificado, no un documento con ideas.
Por qué vídeo por código
Un vídeo hecho con código se parece más a una página web que a una sesión de edición. Cada fotograma es una función del tiempo: con las mismas entradas, el mismo resultado. Eso trae tres cosas que un editor tradicional no da:
- Repetibilidad. Cambiar una frase del guion y volver a renderizar no rompe nada que ya estuviera bien.
- Versionado. El vídeo vive en Git: se puede comparar, revisar y deshacer como cualquier otro código.
- Automatización. Un agente puede preparar escenas, capturas, voz y subtítulos, porque todo son archivos y comandos.
SPIELBERG nació haciendo reels para un cliente con una cadena sencilla (Remotion, Whisper y un archivo de configuración) y creció hasta convertirse en un monorepo con tres piezas: el motor de vídeo, una CLI de unas 580 líneas y un conjunto de skills de Claude Code que coordinan el trabajo.
Antes de producir: cuatro preguntas
La primera lección llegó pronto. Pedí una pieza horizontal y una skill externa entregó una vertical, fuera del proyecto y fuera de Remotion. Desde entonces, nada se produce sin responder cuatro preguntas:
- Orientación y resolución: vertical, horizontal o cuadrado, y a qué tamaño.
- Fotogramas por segundo.
- Dónde se entrega: una red social, una web, una presentación.
- Si es una pieza suelta o una capa que irá dentro de otro montaje.
Parece burocracia; en realidad es lo que evita rehacer un render entero porque alguien imaginó otro formato.
El pipeline: del encargo al MP4
Cada vídeo vive en su propia carpeta, con el guion, un manifiesto y la composición de Remotion. El recorrido es siempre el mismo, aunque las técnicas cambien:
- Guion por escenas. Un formato propio con bloques de vídeo y de escena que tanto yo como el agente podemos leer.
- Decisión de escenas. Un modelo de TypeSafe propone, para cada escena, qué capas globales lleva (narrador, música, subtítulos) y qué va en primer plano y qué de apoyo. En la primera prueba acertó en 8 de 9 escenas. Nada se aplica sin mi visto bueno.
- Animatic con audio. Un boceto en blanco de cada escena, con la voz ya sonando, para juzgar ritmo antes de invertir en acabado.
- Aprobaciones con huella. Contrato, guion, storyboard y animatic se aprueban con mi respuesta literal, ligada a un hash. Si el guion cambia después, la aprobación caduca sola.
- Producción por capas. Remotion es siempre la línea de tiempo maestra. Las demás fuentes entran como capas: película procedural, capturas de software con un cursor virtual, stock con su manifiesto de licencia, 3D, mapas, gráficos, partículas o recorte de fondos con Apple Vision.
- Audio y subtítulos. Voz, transcripción local y mezcla con ducking determinista.
- Render y verificación. Comprobación previa, render y control de calidad del audio sobre el MP4 ya codificado, antes de copiarlo a la carpeta de entregas.
Un galope, ocho lenguajes
La mejor demostración de por qué Remotion manda es una pieza de 32 segundos: un caballo galopa sin detenerse mientras el mundo que lo dibuja cambia de estilo ocho veces (silueta, vectorial plano, cartoon, pixel art, lápiz, recortes articulados, 3D estilizado y realista). Cada cambio llega con una cortina que el caballo atraviesa con el hocico por delante, a 120 pulsaciones por minuto y una zancada por tiempo. El galope sigue las fotografías de Muybridge de 1878, con un único esqueleto para los ocho estilos.
Los siete primeros estilos están dibujados con código; la escena realista del final es el único plano generado con IA (Kling, a través de Higgsfield), y lo pedí de forma explícita.
Mezclar ilustración 2D, geometría 3D y vídeo generado en una misma secuencia, con transiciones que casan al fotograma, es justo el tipo de trabajo que en un editor tradicional se vuelve frágil y que aquí es una composición más.
Otras piezas que ya salen del motor
Cierres de marca. Dos piezas verticales para redes: el outro de LeonelKrea, un caballo de ajedrez dorado que se convierte en el logo, y una semilla que crece hasta ser un girasol y termina en el gato de la marca.
Outro de LeonelKrea (9 s) y semilla que florece (5 s), en 1080×1920.
Vídeo de producto. Para presentar la propuesta de un software de gestión para un campamento petrolero, el vídeo cuenta el problema (hojas de cálculo que se duplican y llegan tarde), la propuesta (un panel de dirección y herramientas para cada equipo), la maqueta del campamento como interfaz y un plan por etapas. Lleva voz y subtítulos, y salió en español, inglés e italiano desde el mismo proyecto.
Vídeo de la propuesta, de casi dos minutos. Las interfaces son un concepto y los datos, de ejemplo.
3D de verdad cuando hace falta. No todo se dibuja con código: este robot está modelado, iluminado y animado en Blender, y entra en una pieza como cualquier otro clip.
Determinismo: la regla que manda
El motor tiene siete reglas maestras, y la primera es absoluta: nada depende del reloj. Sin Math.random, sin Date.now y sin animaciones CSS; todo se calcula a partir del fotograma actual. Si un fotograma se renderiza dos veces, sale idéntico.
Esa disciplina tiene consecuencias de rendimiento que aprendí midiendo:
- No clonar lienzos. Un efecto de estela sobre un panel desenfocado generaba doce canvas a 1080×1920 y tardaba entre 125 y 835 ms por fotograma, cuando el presupuesto a 24 fps es de 41,7 ms. Clonar canvas o WebGL quedó prohibido.
- Shaders de verdad. De 204 componentes de React Bits auditados, 91 son shaders WebGL. Necesitan ANGLE en el Chromium sin interfaz y un tiempo atado al fotograma; imitarlos con SVG está vetado. Con eso, los fotogramas fijos con shaders se renderizan en menos de 400 ms.
- Precisión medible. En una pieza mixta de prueba, cinco de cinco eventos de audio caen con menos de 6,7 ms de error sobre la imagen.
El audio también se verifica
La voz sale de ElevenLabs y la transcripción se hace en local con whisper.cpp, acelerado en el chip del Mac. Pero una transcripción automática nunca es el subtítulo final: se revisa contra el guion, porque el guion es la fuente de verdad.
Los subtítulos fueron el mejor ejemplo de medir antes de opinar. La regla antigua (cuatro palabras o 28 caracteres por bloque) producía 59 bloques en una pieza: 12 de una sola palabra y 19 de menos de un segundo. Lo reescribí siguiendo estándares profesionales de subtitulado (dos líneas de hasta 42 caracteres, entre 1 y 7 segundos, hasta 17 caracteres por segundo) y un corte por programación dinámica. Resultado: 20 bloques legibles.

El control de calidad mide sonoridad, pico real, silencios y espectro sobre el archivo ya codificado, no sobre la mezcla.
Ese control existe porque el codificador me engañó una vez: el AAC a 128 kbps subía hasta 4,8 dB en los transitorios, no los 0,2 dB que daba por buenos la documentación, y el MP4 saturaba. Desde entonces la verificación se hace sobre el archivo que se entrega.
Revisión local: el humano retoca sin pisar al agente
El último tramo no es código. Un doble clic sobre el documento del vídeo abre una pequeña app de macOS con el reproductor de Remotion: ahí corrijo un subtítulo, subo o bajo la voz y la música en decibelios y exporto. Mis retoques se guardan en un archivo de controles con revisiones, separado de lo que escribe el agente, así que ninguno sobrescribe al otro.

La revisión local: mezcla en dB, tamaño de subtítulo y textos editables que conservan los tiempos y la voz.
El personaje de esa captura sale de otra pieza del sistema: un creador procedural de personajes 2D (tres peinados, tres rostros y tres conjuntos de ropa, 27 combinaciones) con sincronía labial para que hable con mi voz.

Lo que cuesta, y lo que no
La IA generativa está en SPIELBERG, pero como complemento, no como motor. Los modelos de vídeo e imagen y la voz o música de pago solo se usan cuando lo pido, y la CLI exige una confirmación explícita antes de cualquier llamada facturable.
La regla tiene historia. Un modelo de vídeo devolvió un error 502, el agente reintentó y se cobraron las dos peticiones. No era mucho dinero (el gasto real de aquellas pruebas fue de 1,35 dólares), pero el patrón sí importaba: ante un error 5xx de un servicio de pago, nunca se reintenta solo.
Con el mismo espíritu, las licencias se tratan como código: 29 pistas de música llegaron con un repositorio de licencia MIT, y la licencia del código no prueba los derechos de la música, así que quedaron en cuarentena.
Lo que todavía falta
SPIELBERG está en uso diario, pero no está terminado, y prefiero decirlo con la misma precisión que el resto:
- Portabilidad. Falta probar el sistema completo en otro ordenador y pasar una regresión entera.
- Calibración. Las funciones de montaje rápido están completas a nivel técnico, pero les faltan escucha, calibración en tres producciones reales y pruebas de rendimiento.
- La app de revisión depende de este repositorio y de Node; no está distribuida ni notarizada.
- Un editor general sigue siendo una idea aparcada: hoy la ruta elegida son los controles de Remotion y la app pequeña.
Si te interesa cómo encaja SPIELBERG con el resto del sistema, en AURORA cuento cómo vigilo a los agentes que lo operan, y en Dexter cómo especifico antes de dejar que un agente toque el código.
Preguntas frecuentes
- ¿Qué es el vídeo programático?
- Es vídeo que se produce escribiendo código en lugar de arrastrar clips en un editor: cada fotograma es una función del tiempo, así que el mismo código renderiza siempre el mismo resultado y se puede versionar, revisar y automatizar.
- ¿Qué es SPIELBERG?
- Es el motor de vídeo programático que construí para mi marca y para clientes: un monorepo con Remotion, una CLI de unas 580 líneas y skills de Claude Code que un agente opera desde la conversación, con aprobaciones humanas antes de producir.
- ¿Por qué Remotion como línea de tiempo maestra?
- Porque es React y es determinista: todo deriva del número de fotograma. Las demás fuentes (película procedural, capturas con Playwright, stock con licencia, 3D, mapas, gráficos o clips generados con IA) entran como capas dentro de esa misma línea de tiempo.
- ¿Cómo se generan los subtítulos?
- Se transcribe la voz en local con whisper.cpp y se cortan los bloques con programación dinámica según estándares profesionales (dos líneas de hasta 42 caracteres, entre 1 y 7 segundos, hasta 17 caracteres por segundo). La transcripción nunca es final: se revisa contra el guion.
- ¿Usa SPIELBERG modelos de IA de pago para generar vídeo?
- Solo si se pide de forma explícita. La generación con IA y la voz o música de pago son complementos facturables que exigen una confirmación; por defecto el vídeo se construye con código, assets propios y stock con licencia.



