Video animado
Estás haciendo un cortometraje animado a partir de una historia. El usuario te da una historia, una sinopsis, una lista de escenas o un guion. Tú entregas un mp4 terminado y un pie de foto para Instagram. Realizas cada paso tú mismo y no te detienes a pedir aprobación en el camino.
Las películas que esta habilidad crea se ven animadas a mano: personajes que se aplastan, estiran, parpadean y reaccionan, una cámara que nunca está quieta, una textura de papel y tinta, y una imagen que encaja exactamente con la voz. NO deben parecer una presentación de diapositivas con imágenes estáticas y texto. Todo en esta habilidad existe para obtener ese resultado de manera confiable, así que sigue los pasos en orden y usa el kit en lugar de inventar tu propio sistema.
SK abajo significa la carpeta de esta habilidad: ~/.claude/skills/animation-video.
Cómo funciona (léelo una vez)
- Toda la película es un archivo JavaScript,
film.js, que tú escribes. Describe lo que está en pantalla en cualquier momentot. Un script lo renderiza fotograma a fotograma en Chrome sin cabeza y ffmpeg crea el mp4. No hay editor de video ni generación de imágenes. - La voz en off se genera primero, línea por línea. Sus tiempos reales se escriben en
timeline.js. Cada momento de la película se define en relación con la voz (por ejemplo "0.2 s antes de que comience la línea 4"), por lo que la imagen y la voz no pueden desincronizarse. - Un kit te proporciona las partes difíciles ya hechas: un motor (facilidad de movimiento, cámara, escenas, subtítulos), dos estilos artísticos completos con personajes, poses y accesorios, y 25 recetas de animación probadas.
- Revisas tu trabajo renderizando fotogramas fijos y mirándolos. Esto no es opcional. No puedes juzgar una película que no has visto.
Los pasos
Crea la lista de tareas a partir de estos pasos y trabájalos en orden.
| # | Paso | Resultado |
|---|---|---|
| 0 | Verificación previa | todas las herramientas presentes, VoiceStudio ejecutándose |
| 1 | Leer la historia, elegir el estilo | decisiones tomadas, carpeta del proyecto creada |
| 2 | Escribir el guion | vo/script.json, máximo 130 palabras habladas |
| 3 | Generar la voz | un archivo wav verificado por línea |
| 4 | Construir la línea de tiempo | timeline.js, duración de la película 35-45 s |
| 5 | Planificar las tomas | un comentario con el plan de tomas al inicio de film.js |
| 6 | Escribir la película | film.js, escena por escena, revisando fotogramas fijos mientras avanzas |
| 7 | Revisar toda la película | hojas de contactos visualizadas, defectos corregidos |
| 8 | Exportar | el mp4 |
| 9 | Entregar | mp4 + guion con voz + pie de foto de Instagram + notas honestas |
Paso 0 - Verificación previa
bash ~/.claude/skills/animation-video/scripts/preflight.sh
Cada línea debe decir OK. Si VoiceStudio está AUSENTE, pide al usuario que abra la aplicación VoiceStudio y espera; nunca sustituyas una voz diferente ni omitas la voz en off. Arregla cualquier otra cosa con el comando que imprime el script.
Paso 1 - Leer la historia y elegir el estilo
No hagas preguntas al usuario a menos que no haya historia en absoluto. Decide tú mismo:
- Estilo. Hay dos. Mira
SK/references/characters-ink.jpgycharacters-paper.jpg(usa la herramienta Leer en las imágenes) para verlos.ink: contornos gruesos y ondulados de tinta, letreros serif robustos, caricatura retro cálida. Mejor para historias con un villano, payasadas, tiendas, calles, bromas físicas.paper: collage de papel recortado, sin contornos, sombras suaves, serif elegante. Mejor para historias sobre teléfonos, aplicaciones, enlaces, naturaleza, estados de ánimo más suaves o modernos.- Si el usuario pidió un estilo, úsalo. De lo contrario, si la carpeta de trabajo ya tiene un episodio anterior, usa el OTRO estilo (ejecuta
head -3 */style.js 2>/dev/nullpara ver cuál se usó). De lo contrario, elige según la historia.
- Reparto. ¿Quién es el héroe (el dueño de un pequeño negocio o personaje principal)? ¿Quién o qué es el obstáculo (un villano, un cliente confundido, un laberinto)? Dos personajes principales es suficiente.
- Carpeta del proyecto. Un nombre corto de la historia, en la carpeta de trabajo del usuario.
bash ~/.claude/skills/animation-video/scripts/new_project.sh "./film-<nombre-corto>" ink # o paper
Esto crea el proyecto con un film.js inicial funcional. Lee ese archivo inicial ahora: es corto y muestra la estructura exacta que mantendrás.
Paso 2 - Escribir el guion
Lee primero SK/references/story.md. Tiene la estructura, el presupuesto de palabras y ejemplos prácticos. Las reglas más importantes:
- Máximo 130 palabras habladas en total. La voz habla aproximadamente 3.2 palabras por segundo, por lo que 130 palabras son unos 43 s. Si el guion del usuario es más largo, recórtalo tú mismo, conservando sus mejores líneas y el orden de la historia. No preguntes; diles al final lo que recortaste. Una película corta que se mueve siempre es mejor que una larga que se arrastra.
- Una línea por ritmo, de 5 a 16 palabras cada una, con identificadores
l01,l02, ... Cada línea se convierte en un clip de audio y generalmente en una idea visual. - Escribe para el oído: los números como palabras ("cuarenta", no "40"), sin emojis, sin símbolos, los nombres de marcas deletreados como suenan ("Site Keep" para SiteKeep).
- La última línea es un gancho que pide a los espectadores comentar (ver valores predeterminados de Marca a continuación).
Escríbelo en <project>/vo/script.json:
{"l01": "Conoce a Maya. Ella hace golosinas personalizadas desde cero.",
"l02": "Así que montó una tienda dentro de un enorme mercado en línea."}
Paso 3 - Generar la voz
python3 ~/.claude/skills/animation-video/scripts/voice.py "./film-<nombre-corto>"
Esto toma unos 20 s por línea (4-5 minutos para un guion completo): ejecútalo con un tiempo de espera de 10 minutos. Si se detiene a mitad de camino, ejecuta el mismo comando nuevamente; las líneas ya grabadas se conservan. Genera cada línea con la voz del usuario (perfil 3a02464e, "ep1 D sample-locked", inglés, pasos 16, velocidad 1.0, sin texto de instrucción; estos son los valores predeterminados, no los cambies a menos que el usuario lo diga), la escucha nuevamente e imprime para cada línea OK o DIFF con lo que escuchó.
Lee cada línea DIFF y decide:
- Bien: las mismas palabras escritas de manera diferente ("SiteKeep" / "Site Keep", "40" / "cuarenta", "dos" / "to", puntuación).
- Mal: falta una palabra, se añadió o es una palabra diferente ("su menú" escuchado como "nuestro menú"). Regenera solo esas líneas:
voice.py <project> --only l05 l11. Si una línea aún falla después de dos intentos más, reformula ligeramente esa línea enscript.jsony regenérala.
Nunca envíes una línea con una palabra omitida, añadida o incorrecta.
Paso 4 - Construir la línea de tiempo
python3 ~/.claude/skills/animation-video/scripts/audio.py timeline "./film-<nombre-corto>"
Imprime la duración total y la hora de inicio y duración de cada línea. Luego ajusta las pausas en <project>/film.json y ejecútalo nuevamente:
{"lead": 0.55, "gap": 0.4, "tail": 1.6, "gaps": {"l04": 0.7, "l09": 0.9}}
gapes la pausa predeterminada después de una línea. Da una pausa más larga (0.6-0.9) después de una línea cuyo visual necesita espacio para desarrollarse: una broma, una caída, una gran revelación, el giro de la historia.- Usa 0.25-0.35 entre líneas que son un mismo pensamiento.
tailes cuánto tiempo se mantiene la tarjeta final después de la última palabra (1.4-1.8).- Objetivo total: 35-45 s. Más de 46 s: corta una línea del guion y repite los pasos 3-4 para ella.
Cada vez que vuelvas a grabar una línea más tarde, ejecuta audio.py timeline nuevamente. Debido a que cada indicación está relacionada con la voz, la película se resincroniza por sí sola.
Paso 5 - Planificar las tomas
Lee SK/references/story.md sección "Del guion a las tomas". Luego escribe el plan como un bloque de comentario al inicio de film.js (no un documento separado). Una fila por escena:
/* PLAN DE TOMAS
A l01-l02 calle, día Maya aparece detrás de su puesto, saluda. Cámara: lento acercamiento.
B l03-l04 misma calle La sombra del dueño cae sobre ella, el cartel CAE (sacudida, polvo). Ella salta.
C l05 sótano Se abre la trampilla, ella queda suspendida en el aire, cae. Cámara sigue hacia abajo.
...
Z l12 tarjeta final Círculo que se cierra. Pregunta + "deja uno en los comentarios". El héroe se asoma.
*/
Un buen plan tiene: 5-8 escenas; una imagen diferente al menos cada 6 s; una broma visual clara o sorpresa en cada escena; cada idea abstracta convertida en algo físico (una tarifa se convierte en un peaje, un algoritmo en una trampilla, un enlace confuso en una jungla); el estado de ánimo pasando de problema a alivio en la solución; y una tarjeta final.
Paso 6 - Escribir la película
Antes de escribir, lee estos (son cortos y marcan la diferencia entre una buena película y una rota):
SK/references/engine.md- cada función que puedes llamar.SK/references/kit-ink.mdokit-paper.md- personajes, poses, accesorios de tu estilo.SK/references/recipes.js- 25 movimientos probados para copiar. Mira tambiénrecipes-<style>.jpg.SK/references/craft.md- los números de tiempo y reglas que lo hacen sentir animado a mano.
Luego escribe film.js en las cuatro secciones del iniciador: configuraciones, tiempos de indicaciones, indicaciones de sonido, escenas.
Trabaja una escena a la vez. Escribe la escena A, renderiza dos o tres fotogramas fijos, míralos, corrige, luego pasa a la escena B:
node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nombre-corto>" stills 1.2 3.5 6.0
Luego abre <project>/check/sheet-1.jpg con la herramienta Leer. Si el comando imprime PAGE ERROR, la película tiene un error de JavaScript: corrige el primero impreso y ejecútalo nuevamente.
Las diez reglas de film.js (cada una previene un fallo que realmente ha ocurrido):
- Solo edita
film.js(y colores enstyle.jssi es necesario). Nunca editesengine.jsoindex.html. - Nunca escribas un tiempo bruto. Cada indicación se construye desde la voz:
L('l04')(inicio de línea),E('l04')(fin de línea),wt('l04', 'tres rivales')(cuando se dice una frase), más o menos un pequeño desplazamiento. Dale un nombre a cada una:const tSlam = L('l04') + 0.25; - Inicia una acción 0.1-0.3 s ANTES de su palabra para que caiga EN la palabra.
- Las poses y objetos usan
q(tiempo muestreado 12 veces por segundo: la sensación de animación a mano). La cámara, la sacudida y los barridos usant(suave). - Nada puede ser visible antes de su indicación. Usa
pop(...)oif (q < tCue) ...para que las cosas aparezcan cuando la voz las menciona, no antes. - No uses
Math.random(),Date, animación CSS nisetTimeout. Usah(n)para aleatoriedad. La película debe dar la misma imagen cada vez para el mismot. - Dibuja fondos mucho más grandes que la pantalla (por ejemplo, x de -1000 a 2080) para que los movimientos de cámara y las sacudidas nunca muestren un borde vacío.
- El orden de dibujo es por profundidad: las cosas dibujadas más tarde están al frente. Primero el fondo, luego objetos lejanos, personajes, objetos cercanos, luego efectos.
- Mantén las cosas importantes dentro de x 70-1010 e y 180-1400. Los subtítulos se ubican en y 1420-1560 y los propios botones de Instagram cubren todo debajo de y 1600 y el borde derecho.
- Cada sonido pertenece a un evento visible y se declara con
sfx(tiempo, nombre)al mismo tiempo de indicación que el evento. Una pistamusic(...)para la parte problemática, otra para el alivio.
El estándar de calidad. Antes de dar una escena por terminada, debe tener todo esto:
- Vida en cada fotograma. El héroe parpadea y respira (
POSE.idle(q)), algo en el fondo se mueve (nube, letrero que se mece, formas flotantes), y la cámara tiene al menos un lento acercamiento. Un fotograma donde nada se mueve durante más de un segundo es un defecto. - Las entradas y salidas son animadas, nunca un corte simple: aparecer con rebasamiento, caer con un rebote, saltar, desaparecer con anticipación (recetas 1-6).
- Los impactos golpean en un fotograma, juntos: aplastamiento + sacudida de pantalla + polvo o explosión + un sonido (receta 3). Esta única cosa hace más por la "sensación" que cualquier otra.
- Los personajes actúan. Miran lo que sucede (
look), reaccionan un tiempo DESPUÉS de que sucede (receta 9), y cambian de pose y rostro cuando el estado de ánimo de la historia cambia. Nunca dejes un personaje en una sola pose durante toda una escena. - Una broma por escena que haga la idea física y un poco divertida.
- Texto legible. Los letreros y etiquetas tienen al menos 40 px de alto, de 1 a 4 palabras, alto contraste, en pantalla durante al menos 1 s, nunca cubiertos por un personaje o los subtítulos.
- Una transición real entre escenas (recetas 19-20, o un movimiento rápido de cámara dentro de un mismo mundo), no solo una imagen reemplazando a otra.
Paso 7 - Revisar toda la película
node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nombre-corto>" check 36
Abre ambas hojas de contactos (check/sheet-1.jpg, sheet-2.jpg) con la herramienta Leer. Cada una muestra 18 fotogramas en orden temporal, de izquierda a derecha, de arriba a abajo; los tiempos los imprime el comando. Revisa esta lista en cada fotograma y escribe lo que encuentres antes de arreglar nada:
- Texto cortado, superpuesto a otro texto, o cubierto por un personaje o accesorio
- Subtítulos cubriendo algo importante, o un nombre de marca dividido o mal escrito (establece
CAPTION.replace, o mueve la acción hacia arriba) - Una gran área vacía (más de un tercio del fotograma sin nada): acerca la cámara, o mueve las cosas, o agrega detalle de fondo
- Algo visible antes de que la voz lo haya mencionado, o todavía allí después de que debería haber desaparecido
- Un personaje o accesorio clave parcialmente fuera de pantalla, pequeño (menos de 250 px de alto), u oculto
- Una mano, brazo u objeto atravesando algo que debería estar delante o detrás
- Dos fotogramas seguidos (separados por 2+ segundos) que se vean idénticos: agrega movimiento o un movimiento de cámara
- La emoción incorrecta en un rostro para ese momento de la historia
- La tarjeta final: pregunta legible, mensaje de comentario visible, nada superpuesto
Arregla lo que encuentres, luego renderiza fotogramas fijos solo en esos tiempos para confirmar (render.mjs <project> stills 4.2 11.8). Mira fotogramas individuales a tamaño completo (check/f003.jpg) cuando una hoja sea demasiado pequeña para juzgar. Haz como máximo dos rondas de revisión completas; no pulas para siempre, pero tampoco te saltes la revisión.
Paso 8 - Exportar
bash ~/.claude/skills/animation-video/scripts/build.sh "./film-<nombre-corto>" "./<nombre-corto>.mp4"
Esto toma de 2 a 10 minutos (el estilo paper es más lento): ejecútalo en segundo plano o con un tiempo de espera de 10 minutos. Renderiza cada fotograma, mezcla voz + efectos de sonido + música, e imprime una verificación. Confirma: h264 1080x1920 a 30 fps con audio aac, duración igual al total de la línea de tiempo, volumen medio entre -16 y -19 dB. Si el render imprime PAGE ERROR, corrígelo y ejecútalo nuevamente.
Paso 9 - Entregar
Dale al usuario, en este orden:
- El archivo mp4. Si el usuario está en una sesión de chat que puede mostrar video (Claude Code, Cursor), muéstralo con un enlace directo o usando la funcionalidad de vista previa. Si no es posible, di dónde se guardó.
- El guion tal como se grabó (
<project>/vo/script.jsono impreso en texto plano). - El pie de foto para Instagram:
[Mini historia en 2-3 líneas que enganche, incluyendo la pregunta de la tarjeta final]
.
.
.
¿Qué harías tú? Déjalo en los comentarios 👇
#animacion #historia #emprendedor #pequenoNegocio #animacionHechaAMano
Valores predeterminados de Marca: Si la historia es sobre un pequeño negocio o emprendimiento, usa los hashtags
#animacion #historia #emprendedor #pequenoNegocio #animacionHechaAMano. Si la historia es sobre tecnología o enlaces, usa#animacion #historia #tecnologia #enlaces #animacionHechaAMano. Ajusta los hashtags según la historia, pero mantén siempre#animacionHechaAMano. La última línea del guion debe terminar con una pregunta o un gancho que pida a los espectadores comentar (por ejemplo, "¿Te ha pasado? Déjalo en los comentarios", "¿Cuál es tu consejo?", etc.).
- Notas honestas (1-3 líneas): algo que salió bien, algo que fue difícil, y algo que harías diferente la próxima vez.
Recordatorios para el agente de IA
- Sin preguntas. Nunca preguntes "¿Debo cortar esto?" o "¿Está bien este estilo?". Toma decisiones. Informa al usuario después.
- Sin atajos. Renderiza fotogramas fijos. Míralos. Arregla los defectos. Esta habilidad funciona porque revisas tu trabajo, no porque seas rápido.
- El audio manda. Si la sincronización se siente apagada, probablemente lo esté. Arregla la línea de tiempo, no el código de animación.
- La tarjeta final es obligatoria. Pregunta + mensaje de comentario. El héroe se asoma. Sin excepciones.