24 JULIO 2026
Vídeo con IA · Guía técnica

No necesitas After Effects. Necesitas saber describir lo que quieres

HyperFrames convierte un archivo HTML en un vídeo MP4. No es una metáfora: escribes la composición en HTML, CSS y animaciones, y el framework la renderiza fotograma a fotograma. Aquí está entero — qué es, qué se puede hacer de verdad, cómo se ejecuta con Claude Code paso a paso, los templates que usamos y tres vídeos de prueba que salieron de aquí.

Lo que vas a leer
01

Qué es HyperFrames

Un framework open source de HeyGen (Apache 2.0) que convierte HTML, CSS y animaciones seekables en vídeo MP4 determinista. No es el "vídeo de Claude": Claude escribe, HyperFrames renderiza.

02

Qué se puede hacer

3D con Three.js, shaders, HTML dentro de canvas, mapas y gráficos de datos, tipografía cinética, overlays sociales, salida en 4K y HDR. Todo verificado en el showcase oficial.

03

Cómo se hace

El flujo real con Claude Code: la skill que enruta, los comandos exactos, el Studio visual en el navegador, y las reglas del contrato que no puedes saltarte.

04

Templates y trampas

Cuatro plantillas copiables sacadas de un proyecto que ya renderizó, y las trampas honestas que nos costaron tiempo. Y tres vídeos de prueba que lo demuestran.

Apache 2.0
Open source, de HeyGen (npm hyperframes)
HTML→MP4
Render determinista (Chrome headless + FFmpeg)
150+
Bloques y plantillas listos (doc oficial)
3
Vídeos reales que montamos para este artículo
Índice del artículo
SECCIÓN 01

Escribir HTML en lugar de mover fotogramas

Durante años, hacer un vídeo de marca decente significaba una de dos cosas: aprender After Effects o pagar a alguien que lo supiera. La herramienta era la barrera.

Yo no soy motion designer. No sé mover keyframes en una línea de tiempo de After Effects, y no tengo intención de aprenderlo. Pero sí sé describir con precisión lo que quiero que pase en pantalla: un cubo que sube, un contador que cuenta, un cursor que arrastra un clip y pulsa "Export".

Resulta que eso, hoy, es suficiente. Con HyperFrames el vídeo deja de ser un archivo binario que abres en un editor y pasa a ser un archivo HTML que escribes. Y si es HTML, Claude Code lo escribe conmigo.

Este artículo es la guía completa de ese flujo. Lo he montado de verdad —hay vídeos reales que salieron exactamente así— y lo he contrastado con la documentación oficial de HeyGen para no prometerte nada que no se pueda renderizar. Donde algo es una capacidad del showcase oficial, lo enlazo. Donde algo nos costó sangre, te lo cuento sin adornos.

No va de "mira qué fácil". Va de enseñar, hasta el último comando, lo que se puede construir describiendo lo que quieres. Porque la barrera ya no es la herramienta.

La línea de tiempo, pero en el navegador. No es After Effects: es el Studio de HyperFrames abierto en el navegador, con la composición repartida en pistas —Bg Sky, Scene 1, Scene 2…—. Ahí ajustas tiempos y previsualizas; el HTML sigue siendo la fuente de la verdad.
SECCIÓN 02

Qué es HyperFrames (y qué no es)

Un framework open source de HeyGen que convierte HTML en vídeo. Su propia definición cabe en una línea.

HyperFrames es un framework open source publicado por HeyGen bajo licencia Apache 2.0. Su tagline oficial lo resume sin rodeos: "Write HTML. Render video. Built for agents." —escribe HTML, renderiza vídeo, hecho para agentes.

Por debajo, la mecánica es la que promete: defines el vídeo como un archivo HTML con atributos de tiempo, y la animación la mueve una librería como GSAP, CSS, Lottie o Three.js. El sistema previsualiza la composición en un navegador y luego la renderiza haciendo que un Chrome headless capture cada fotograma en orden, mientras FFmpeg codifica el vídeo y mezcla el audio. Mismo input, mismo output, siempre: es determinista.

La instalación oficial, tal cual
npx hyperframes init my-video
cd my-video
npx hyperframes preview
npx hyperframes render

Init crea el proyecto, preview lo abre en el navegador, render lo convierte en MP4. El paquete vive en npm como hyperframes. El código está en github.com/heygen-com/hyperframes.

Lo que NO es

Aclaro esto porque genera confusión constante: Anthropic no tiene un generador de vídeo. Claude no "hace vídeos". Lo que hace Claude es escribir el HTML de la composición. Quien lo convierte en MP4 es HyperFrames, que es de HeyGen. Cuando en este artículo digo "vídeo hecho con Claude", me refiero a ese reparto: Claude escribe, HyperFrames renderiza. Ni magia ni un botón secreto. Un framework open source y un modelo que sabe escribir código.

La idea que lo ordena todo

Si sabes que el vídeo final es "solo" HTML abierto en un Chrome sin ventana y fotografiado frame a frame, entiendes casi todo lo demás: por qué tiene que ser determinista, por qué las fuentes hay que empaquetarlas, y por qué lo que se ve en tu navegador es exactamente lo que sale en el MP4.

SECCIÓN 03

Qué se puede hacer de verdad

Esta es la parte que alucina. Todo lo que sigue está documentado en el showcase oficial de HeyGen. No es lo que imagino que se podría hacer: es lo que ya está hecho.

El showcase oficial reúne piezas de producción que combinan estas técnicas. Estas son las capacidades que aparecen documentadas, resumidas por familias:

3D

Three.js con modelos reales

Renderizado 3D con modelos GLTF de dispositivos (iPhone, MacBook) y contenido HTML proyectado sobre la pantalla del propio 3D. Escenas, cámaras y luces, dentro del vídeo.

Shaders

Transiciones y efectos WebGL

Más de veinte transiciones documentadas: aberración cromática, glitch, distorsión, lentes, iris, disoluciones. Efectos de imagen que en un editor tradicional serían plugins de pago.

Canvas

HTML dentro de canvas

DOM vivo renderizado como textura de GPU, con efectos de shader encima. Una interfaz de verdad, animándose y deformándose como material de vídeo.

Datos

Data-viz animada

Mapas coropléticos, globos, gráficos de barras y líneas al estilo editorial, proyecciones D3. Contar una cifra con un gráfico que se dibuja solo.

Tipografía

Texto cinético

Rellenos con textura (mármol, metal, lava), glow de neón, glitch RGB, resaltado karaoke palabra a palabra, scramble de caracteres. La letra como protagonista.

Overlays

UI social y lower-thirds

Plantillas de tarjetas de Instagram, TikTok, X, Spotify; notificaciones estilo macOS/iOS; rótulos inferiores de televisión; tickers de noticias. Todo como composición.

Salida

4K, HDR y formatos

Salida en MP4, MOV y WebM, secuencias GIF/PNG, HDR10 y supersampling a 4K desde una composición 1080p. Calidad de entrega, no de maqueta.

Edición

Studio visual + variables

Editor visual con línea de tiempo en vivo, variables para parametrizar plantillas, importación desde Figma con tokens de marca. Editar sin abrir el código.

Para que no sea una lista abstracta, el showcase incluye cinco piezas de producción que puedes ver funcionando: el Launch Video de HyperFrames (CSS, GSAP, Lottie, transiciones de shader, Three.js, footage, captions y voz), la demo Website to HyperFrames (captura de una web convertida en vídeo por agentes), el Timeline Editor Launch, el Texture Launch (tipografía con textura y shaders) y VFX x HeyGen (Three.js + HTML-in-canvas + UI). Están enlazadas en el showcase.

Dónde pongo el límite

Solo listo lo que aparece en el showcase o en la documentación oficial. No te digo que HyperFrames "puede hacer cualquier cosa": te digo qué he visto renderizado. Lo que aún no he probado, no lo prometo. En la sección de trampas te cuento incluso lo que NO renderiza en local.

SECCIÓN 04

Cómo se ejecuta con Claude Code

Aquí va el paso a paso real, sin saltarme nada. Estos son los comandos exactos que usan mis proyectos, no una versión idealizada.

HyperFrames trae sus propias skills para Claude Code. Eso cambia el flujo: no le pides a Claude "hazme un vídeo" a pelo. El punto de entrada es una skill que actúa de router.

1 · La skill que enruta

Todo empieza en la skill /hyperframes. Confirma qué quieres hacer y te manda al workflow adecuado: /motion-graphics para una pieza corta (normalmente menos de 10 s), /general-video para algo multiescena o más largo, /product-launch-video si partes de una web, y algunos más. Después, antes de escribir una línea de composición, se lee /hyperframes-core, que es el contrato: las reglas de la sección siguiente.

El camino, de la idea al MP4
/hyperframes workflow (motion / general…) /hyperframes-core escribir HTML render MP4

El router hace el trabajo aburrido: instala la skill del workflow, confirma el brief y evita que empieces a escribir composición sin el contrato delante.

2 · Los comandos del proyecto

Dentro de un proyecto ya creado, estos son los cuatro comandos que uso. Los saco literales de mi proyecto hyperframes-showcase:

Terminal · package.json scriptsbash
# arranca el Studio de previsualización (servidor, déjalo vivo en segundo plano)
npm run dev

# lint + runtime + layout + motion + contraste, todo en uno
npm run check

# renderiza a MP4
npm run render

# publica y te da un enlace compartible
npm run publish

Dos detalles que importan de verdad:

  • npm run dev es un servidor, no un comando de una sola vez. Levanta el Studio en localhost:3002: una línea de tiempo visual en el navegador donde ajustas tiempos y previsualizas sin tocar el HTML. Hay que dejarlo corriendo en segundo plano.
  • La versión del CLI va clavada por proyecto. Mis scripts fijan hyperframes@0.7.62 exacto. ¿Por qué? Para que el proyecto vuelva a renderizar idéntico dentro de semanas, aunque el CLI haya avanzado. El determinismo también aplica a la herramienta.

3 · La verificación no es opcional

Después de crear o editar cualquier composición, se corre npm run check antes de dar nada por bueno. Valida lint, ejecución, layout, motion y —esto me encanta— contraste AA. Si el texto no se lee sobre el fondo, el check lo caza y falla. Es lo que me obliga a que el vídeo no solo funcione, sino que se lea.

SECCIÓN 05

Las reglas del contrato

Son cuatro y no se negocian. Saltárselas es la causa del 90 % de las composiciones que "no funcionan".

El contrato de HyperFrames (lo que /hyperframes-core te obliga a leer) se reduce a esto:

  • Cada elemento con tiempo lleva tres atributos: data-start, data-duration y data-track-index. Definen cuándo entra, cuánto dura y en qué pista vive.
  • Y lleva class="clip". El framework usa esa clase para controlar la visibilidad. Sin ella, el elemento no aparece cuando debe.
  • La línea de tiempo va pausada y registrada en window.__timelines["id"]. El motor de render la controla desde ahí: la "rebobina" a cada instante para fotografiar el fotograma exacto.
  • Solo lógica determinista. Nada de Date.now(), nada de Math.random(), ninguna petición de red durante el render. Si el resultado puede cambiar entre dos ejecuciones, rompe el determinismo.
La consecuencia de esto

Ese último punto es el que más se subestima. Un vídeo que usa Math.random() para colocar partículas se verá distinto en cada render, y el fotograma capturado no coincidirá con lo que animaste. Todo lo aleatorio o dependiente del reloj hay que sustituirlo por algo calculado. En la práctica: partículas colocadas por fórmula, no por azar.

SECCIÓN 06

Cuatro templates para copiar

Todo lo que sigue está sacado de un proyecto que ya renderizó — el vídeo horizontal del final. No es pseudocódigo: es lo que hay en el archivo.

Template 1 · Una composición mínima

El esqueleto irreducible: un elemento con tiempo, la clase clip, y la línea de tiempo pausada y registrada. Si entiendes esto, entiendes el resto.

Composición mínimahtml + gsap
<div id="escena" class="clip"
     data-start="0" data-duration="9" data-track-index="0">
  <h1 id="titulo">Hola</h1>
</div>

<script>
  window.__timelines = window.__timelines || {};
  const tl = gsap.timeline({ paused: true });
  tl.fromTo('#titulo',
    { opacity: 0, y: 30 },
    { opacity: 1, y: 0, duration: 0.9, ease: 'power2.out' }, 1.1);
  window.__timelines['showcase'] = tl;   // pausada y registrada
</script>

Template 2 · Un contador que cuenta (seek-safe)

El truco de los números que suben. La clave: se anima un objeto { v: 0 } y en cada onUpdate se escribe el textContent. Así el número es correcto en cualquier fotograma, aunque el render salte a mitad. Es el método oficial para valores que cambian.

Contador count-upgsap · seek-safe
const o = { v: 0 };
tl.to(o, {
  v: 6917, duration: 1.5, ease: 'power3.out',
  onUpdate: () => {
    const e = document.querySelector('#n3');
    if (e) e.textContent = Math.round(o.v).toLocaleString('es-ES');
  }
}, 35.6);

Template 3 · El driver 3D de Three.js

Este es el patrón que hace que el 3D renderice en headless. En lugar de dejar que Three.js anime solo con su reloj (que rompería el determinismo), la propia línea de tiempo dirige el 3D: se anima un proxy { t: 0 } y en cada onUpdate se llama a la función de render con ese instante exacto.

3D dirigido por la timelinethree.js · determinista
// la función de render dibuja la escena en el instante t
window.__renderGL = function (t) {
  for (const m of boxes) {
    const h = Math.sin(m.userData.d * 0.85 - t * 2.2) * 1.15 + 1.35;
    m.scale.y = Math.max(0.08, h);
  }
  renderer.render(scene, camera);
};

// la timeline mueve un proxy {t} y llama a __renderGL en cada frame
const gl = { t: 0 };
tl.to(gl, { t: 9, duration: 9, ease: 'none',
  onUpdate: () => window.__renderGL(gl.t) }, 0);
El 404 que te va a pasar

Al vendorizar Three.js hay que copiar dos archivos: three.module.js y three.core.js. El module solo reexporta del core; si copias solo uno, el otro da 404 y el 3D no aparece. Nos costó un rato entenderlo.

Template 4 · Un cursor que "usa" una interfaz

Para mostrar cómo se edita algo, recreas la UI en HTML y mueves un cursor SVG por encima: se desplaza, arrastra un clip, pulsa un botón con su ripple. Todo es GSAP moviendo posiciones. Este fragmento arrastra un clip y el playhead a la vez, y hace el click de "Export".

Cursor que arrastra y pulsagsap · solo transform
// arrastra el clip [warm] y el playhead a la vez
tl.to('#cursor',   { x: 760, y: 780, duration: 1.1, ease: 'power1.inOut' }, 22.6);
tl.to('#dragclip', { x: 120, duration: 1.1, ease: 'power1.inOut' }, 22.6);
tl.to('#playhead', { x: 120, duration: 1.1, ease: 'power1.inOut' }, 22.6);

// click en Export: encoge, vuelve, y lanza el ripple
tl.to('#stexport', { scale: 0.9, duration: 0.12 }, 26.5);
tl.to('#stexport', { scale: 1, duration: 0.25, ease: 'back.out(3)' }, 26.62);
tl.fromTo('#ripple',
  { opacity: 0.9, scale: 0.3 },
  { opacity: 0, scale: 3.4, duration: 0.7, ease: 'power2.out' }, 26.5);
La regla de oro del movimiento

Fíjate en que todo se anima con x, y, scale y opacity — nunca con left o top. Animar posición con transform es lo que mantiene el movimiento suave y lo que el linter exige. Cambiar left/top lo marca como error.

SECCIÓN 07

Las trampas honestas

Esta sección es la que no vas a encontrar en el material de marketing. Todo esto nos costó tiempo de verdad. Te lo ahorro.

  • Las fuentes hay que empaquetarlas, sí o sí. Inter o JetBrains Mono no están en la máquina de render, y el determinismo prohíbe ir a buscarlas a la red. Hay que descargar los .woff2 a una carpeta del proyecto y referenciarlos en local. Si no, el vídeo sale con otra tipografía.
  • GSAP hay que vendorizarlo. El starter lo carga desde un CDN; en render eso es una petición de red. Se copia a vendor/gsap.min.js y se sirve local.
  • El vidrio líquido por GPU NO renderiza en el headless estándar. Los efectos tipo liquid glass (TypeGPU) necesitan un navegador especial, como Brave o Chrome Canary. Para 3D, la ruta fiable es Three.js, que sí renderiza en el headless normal.
  • Los cambios de texto tienen que ser seek-safe. Un contador con onUpdate vale (Template 2). Pero cambiar un texto de golpe con un .call() de GSAP no: si el render salta a ese punto, el cambio no se dispara. La solución es hacer un crossfade de opacidad entre dos elementos.
  • El fondo a pantalla completa va en un hijo, no en el elemento raíz. Si pones el fondo full-screen en el root, sale negro. Va en un hijo con position:absolute; inset:0.
  • La música y los assets con derechos no se tocan. Para generar audio hace falta autenticarse en HeyGen (eso lo hace la persona dueña de la cuenta, no la IA) o usar un modelo local. Nunca música con derechos.
Por qué te cuento esto

Porque un artículo que solo enseña lo bonito es publicidad, no una guía. La mitad del valor de haber montado estos vídeos de verdad es saber exactamente dónde tropiezas. Si te ahorro estas seis, has ganado la tarde.

SECCIÓN 08

Los vídeos que montamos

No hay mejor prueba que enseñarlos. Estos salieron del flujo que acabas de leer, con los templates de arriba.

El primero es la pieza estrella: un vídeo horizontal donde se ve el 3D de Three.js, un cursor editando el Studio y los contadores contando. Es exactamente lo que muestran los templates 3 y 4.

Showcase horizontal. 3D con Three.js dirigido por la línea de tiempo, un cursor que arrastra un clip y pulsa "Export", y contadores seek-safe. La pieza que junta casi todo el artículo.

El segundo es vertical, de un proyecto de fondo (una serie sobre voz IA), y lleva audio: dos voces IA debatiendo. Sirve para ver el vídeo con pista de sonido, mezclada en el mismo render.

Vertical con audio. Pista de sonido sincronizada —dos voces IA debatiendo— con FFmpeg mezclando el audio en el render. Dale al play para oírlo.
Nota de honestidad

Estos vídeos salieron de verdad del flujo que acabas de leer, renderizados en local con HyperFrames. Nada de lo que cuento arriba depende de que los veas: todo el flujo y los templates son reproducibles por tu cuenta con el CLI oficial.

SECCIÓN 09

Preguntas frecuentes

Las que me hacen cada vez que enseño uno de estos vídeos.

Q

¿Necesito After Effects o un editor de vídeo?

No. El vídeo se escribe como un archivo HTML con CSS, media y animaciones seekables. El framework lo abre en un Chrome headless, captura cada fotograma en orden y FFmpeg lo codifica a MP4. No hay línea de tiempo propietaria: hay HTML.

Q

¿HyperFrames es gratis?

Es open source con licencia Apache 2.0, publicado por HeyGen. El paquete se instala desde npm como hyperframes. Renderizar en tu máquina no cuesta nada; existe además un render en la nube de HeyGen como opción alojada.

Q

¿Corre en mi Mac?

Sí. El render local usa Chrome headless y FFmpeg. La mayoría de técnicas (CSS, GSAP, Lottie, Three.js) renderizan en ese headless. Hay excepciones que necesitan un navegador especial, como los efectos de vidrio líquido por GPU (TypeGPU), que requieren Brave o Chrome Canary.

Q

¿Esto es el generador de vídeo de Claude o de Anthropic?

No. Anthropic no tiene un generador de vídeo. Claude genera el HTML de la composición; HyperFrames, que es de HeyGen, es quien lo renderiza a MP4. Cuando alguien dice "vídeo hecho con Claude" en este contexto, se refiere a este flujo: Claude escribe, HyperFrames renderiza.

Q

¿Qué NO se puede hacer?

Nada que rompa el determinismo: sin Date.now(), sin Math.random(), sin peticiones de red durante el render. Los efectos de vidrio líquido por GPU no renderizan en el headless estándar. Y la música o los assets con derechos no se pueden usar sin licencia; para generar audio hace falta autenticarse en HeyGen o usar un modelo local.

Q

¿Puedo editar el vídeo sin tocar código?

Sí. Al levantar el servidor de previsualización, HyperFrames abre un Studio en el navegador (localhost:3002) con la línea de tiempo visual. Ahí se ajustan tiempos y se previsualiza sin editar el HTML a mano.

Sigue leyendo

Cada semana, desde las trincheras

Casos reales, errores documentados y lo que funciona de verdad en IA aplicada a negocio.

Sin teoría. Sin hype. Desde producción.

¿Quieres montar algo así y no sabes por dónde empezar?

Si tienes una idea de vídeo, una web que convertir en pieza, o simplemente quieres entender cómo encaja esto en tu operativa, hablemos.

Escríbeme directo. Sin formularios. Sin intermediarios.
Si tienes proyecto, dame contexto. Si no encajamos, te lo digo.