Communitygithub.com

danbaruka/ai-video

Crea videos verticales cortos (TikTok, Reels, YouTube Shorts, de 30 a 90 s) con un estilo blanco animado y limpio a partir de un solo archivo video.json, usando muy pocos tokens. Tres modos.

¿Qué es ai-video?

Este skill permite a agentes de IA generar videos verticales profesionales (videos cortos para TikTok, Reels, YouTube Shorts) de 30 a 90 segundos con un estilo gráfico blanco y animado. Todo se controla a través de un único archivo `video.json` que define el guion, las escenas (16 tipos predefinidos), la voz y la marca. El flujo de trabajo es simple: el agente escribe el guion y el archivo JSON, luego ejecuta `make.mjs` que produce automáticamente la voz (con edge-tts, gratuito), sincroniza los subtítulos palabra por palabra, anima cada escena, añade música y efectos, y renderiza el MP4. Soporta tres modos: "Generado" (voz neural y diseño de movimiento), "Imágenes" (coloca capturas de pantalla, fotos o páginas web dentro de un iPhone, navegador o pantalla completa) y "Filmado" (añade subtítulos y escenas animadas sobre un video de una persona hablando). Funciona en inglés, francés y muchos otros idiomas. Está optimizado para usar muy pocos tokens (un video de 60s puede completarse con ~65,000 tokens) porque el agente escribe JSON en lugar de HTML/CSS. Incluye herramientas de revisión como una hoja de contactos (planche) y verificaciones automáticas de desbordamiento de texto y errores.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danbaruka/claude-code-ai-video/tree/main/skills/ai-video

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace ai-video?

Un video es un archivo video.json: las oraciones que dice la voz y, para cada idea fuerte, una escena seleccionada de un catálogo de 16 tipos. El script scripts/make.mjs hace todo lo demás. Nunca escribas HTML, CSS o código de animación a mano. La única excepción es el momento especial que merece un visual personalizado (tipo html).

idea ─► guion (oraciones) ─► video.json ─► make.mjs ─► hoja de contactos (revisión) ─► --rendu ─► MP4 + portada + texto de publicación

Las claves JSON están en francés (phrases, texte, scene, voix, marque…), al igual que los tipos de escena (titre, chiffre, liste…). Escríbelas exactamente como se muestran en este skill. El texto que dice la voz puede estar en cualquier idioma.

Antes del primer video (una vez)

sh <skill>/scripts/install.sh      # verifica node ≥ 18, ffmpeg, python3; instala edge-tts en <skill>/.venv

<skill> es la carpeta de este archivo. La primera ejecución descarga HyperFrames (a través de npx), GSAP y los logotipos. Después de eso, todo queda en caché.

El flujo de trabajo

  1. El tema, en una oración. Si el usuario no da ninguno, sugiere 3 y deja que elija.
  2. El guion. Lee references/writing.md: ganchos que funcionan, estructura, extensión.
    • Apunta a 9 a 14 oraciones y 110 a 170 palabras.
    • Cuenta aproximadamente 2.7 palabras por segundo, más 0.35 s entre oraciones: 130 palabras duran aproximadamente 50 s.
  3. El archivo. Escribe videos/<id>.json en el proyecto del usuario. El formato está abajo, y el catálogo completo está en references/scenes.md. Pon los archivos multimedia en videos/medias/.
  4. Construir. node <skill>/scripts/make.mjs videos/<id>.json crea la voz, la página, la verificación y la hoja de contactos, sin renderizar (aproximadamente 1 minuto).
  5. Revisar. Abre solo una imagen: videos/rendus/<id>-planche.jpg.
    • Muestra el fotograma 1, luego cada escena al final (una vez que todos sus elementos han llegado), luego la tarjeta final.
    • Corrige el JSON y vuelve a ejecutar el comando. La voz está en caché: solo se rehacen las oraciones cambiadas.
  6. Renderizar. Añade --rendu. Tarda aproximadamente 1 minuto por 45 s de video. Obtienes:
    • videos/rendus/<id>.mp4;
    • -couverture.jpg, la portada, que es el fotograma 1;
    • <id>.txt, con el título, la descripción, los hashtags y el comentario fijado.
  7. Publicar. Lee references/publishing.md para conocer los horarios de publicación por país de la audiencia, la cadencia de publicación y los pies de foto. Nunca publiques nada sin la aprobación explícita del usuario.

Ahorrar tokens: las reglas que importan

Este skill es económico porque el modelo escribe de 60 a 120 líneas de JSON por video, en lugar de 250 a 400 líneas de HTML y código de animación. En una prueba a ciegas, un agente nuevo produjo un video de 60 s terminado con aproximadamente 65,000 tokens, incluida la lectura de este skill. Para mantenerlo así:

  • No abras make.mjs, lib/*.mjs, style.css ni el index.html generado. El catálogo de escenas es suficiente. Abre el código solo si un comando falla y su mensaje no es suficiente.

  • Lee una referencia solo para su paso:

    PasoReferencia
    escriturawriting.md
    elegir una escenascenes.md
    voz, metraje o capturas de pantallamodes.md
    publicaciónpublishing.md

    Nunca vuelvas a leer una referencia ya leída en la conversación.

  • Una hoja de contactos, no capturas de pantalla. Para revisar un video, mira <id>-planche.jpg una vez. Nunca tomes un fotograma por segundo, y nunca inspecciones el MP4 fotograma a fotograma.

  • Confía en la verificación. El comando ejecuta la verificación de HyperFrames (texto que se desborda, texto oculto, errores de tiempo de ejecución) y lo resume en unas pocas líneas.

    • "aucun débordement, aucune erreur" significa que está limpio.
    • Una línea con ✗ debe arreglarse siempre.
    • Una línea con ⚠ vale la pena leerla: arréglala si afecta al texto.
  • Los lotes toman un solo comando. Escribe primero los N archivos. Luego ejecuta node make.mjs videos/a.json videos/b.json … --rendu en segundo plano, y espera a que termine sin mirar su salida.

  • Edita en el lugar. Para arreglar algo, cambia solo la oración o escena defectuosa en el JSON. Nunca reescribas todo el archivo.

  • Sin búsqueda de activos. Los logotipos (logo:bitcoin, logo:metamask…) y 45 iconos (icone:cle…) están integrados. Busca en la web una imagen solo si el usuario lo pide.

El formato video.json

{
  "id": "wallet-key",
  "titre": "Tu cripto no está en tu billetera",
  "langue": "es",
  "voix": { "nom": "es-ES-AlvaroMultilingualNeural", "debit": "+4%" },
  "marque": { "nom": "BDan", "visuel": "icone:etincelle" },
  "prononcer": { "USDT": "U S D T" },
  "phrases": [
    { "texte": "Tu cripto no está en tu *billetera*.",
      "scene": { "type": "titre", "lignes": ["Tu cripto", "no está en", "tu *billetera*"], "visuel": "icone:portefeuille" } },
    { "texte": "La clave cabe en *doce palabras*.",
      "scene": { "type": "chiffre", "valeur": "12", "apres": "palabras", "au": "doce", "couleur": "accent" } },
    { "texte": "Se llama frase de recuperación." }
  ],
  "fin": { "texte": "Soy BDan.", "sous": "Hablemos de nueva tecnología.", "audio": "medias/firma.wav" },
  "publication": { "titre": "…", "legende": "…", "hashtags": ["cripto"], "commentaire": "…" }
}
  • phrases[].texte: lo que dice la voz, palabra por palabra.

    • *palabra* marca la palabra fuerte: se muestra en cursiva coloreada, pulsa cuando se dice, y la cámara se acerca a ella.
    • Úsala como máximo una vez por oración.
  • scene: inicia una nueva escena.

    • Una oración sin escena extiende la anterior, lo que deja tiempo para leer.
    • En modo filmado, una oración sin escena muestra el rostro; allí, "scene": "suite" extiende la escena.
  • au ("en"): el elemento aparece en esa palabra de la oración, por ejemplo "au": "Ledger".

    • Sin au, los elementos se distribuyen solos: uno por oración cuando hay tantos elementos como oraciones, de lo contrario a intervalos regulares.
  • Visuales, donde una escena lo requiera: "logo:binance", "icone:cadenas", "emoji:🔑", o una ruta como "medias/captura.png" (los archivos .svg se incrustan).

  • voix: la voz. nom es el nombre de la voz, debit es la velocidad. fichier apunta a tu propia grabación.

  • langue: "fr" por defecto. Pon "en" para inglés, junto con una voz en inglés.

  • marque: la pequeña píldora de marca en la parte inferior izquierda. nom es el nombre de la marca, visuel su logotipo.

  • prononcer: formas habladas. Cambian cómo la voz dice una palabra, nunca el texto mostrado en pantalla.

  • fin: la tarjeta final, con el logotipo de marque, texte y sous (un subtítulo).

    • audio reproduce una despedida grabada en la tarjeta.
    • Sin audio, la tarjeta permanece 2 s, en silencio.
  • titre: el nombre del video en los archivos. El título de YouTube va en publication.

  • Opcional:

    ClaveEfecto
    musiqueun archivo de música, atenuado debajo de la voz
    couleurscolores, por ejemplo {"accent": "#2f6bff", "accent2": "#5fa3ff"}
    sons: falsesin efectos de sonido en las transiciones
    blancsilencio entre oraciones, 0.35 s por defecto
    pausesilencio extra después de una oración
    sousTitres: falsesin subtítulos
  • La oración 1 siempre tiene una escena. El fotograma 1 es la portada que la gente ve en sus feeds, así que usa un titre corto y llamativo.

Las 16 escenas (parámetros y ejemplos en references/scenes.md):

Para mostrar…tipo
el gancho, una línea impactantetitre
un número (precio, récord, porcentaje)chiffre
2 a 6 puntos, herramientas o consejosliste
un método de 2 a 5 pasosetapes
A versus B, antes / después, mito / realidadduel
marcas, monedas, aplicacioneslogos
una captura de pantalla o grabación de pantalla de una apptelephone
un sitio web, una páginanavigateur
una foto, como tarjeta o pantalla completaimage
una conversación (IA, soporte, estafa)chat
un peligro, una estafa, buenas noticiasalerte
una tendencia, una comparación en númerosgraphique
un comando, una instalaciónterminal
una cita de alguiencitation
un concepto y su explicacióncarte
el momento que merece un visual inventadohtml

Varía las escenas.

  • Dale a cada idea fuerte su propia escena: de 6 a 10 escenas por video.
  • Nunca uses el mismo tipo dos veces seguidas, y cambia el orden de los tipos de un video al siguiente.
  • Un estilo fijo no debe convertirse en una plantilla. Si tres videos seguidos comparten la misma secuencia de escenas, los espectadores se van.

Los tres modos (detalles en references/modes.md)

  • Generado: el JSON es todo lo que necesitas.
    • La voz es edge-tts: gratuita, sin clave, muchos idiomas.
    • Configura voix.nom para cambiar la voz o el acento.
  • Imágenes: tus capturas de pantalla y fotos van en telephone, navigateur o image, desde videos/medias/.
    • Una voz grabada o clonada va en "voix": { "fichier": "medias/voz.wav" }.
    • Se transcribe localmente (whisper) y se sincroniza con tus oraciones.
  • Filmado: configura "rush": "medias/clip.mp4". El audio del clip es la voz.
    • Las oraciones sin escena muestran el rostro, con subtítulos en la parte inferior.
    • Una escena cubre la pantalla durante la duración de su idea.
    • Escribe las oraciones a partir de la transcripción: el skill las sincroniza palabra por palabra.

Antes de renderizar: la lista de verificación

  • La oración 1 declara el tema claramente, y su título se lee en menos de un segundo.
  • Cada palabra técnica se explica en la misma oración o en la siguiente.
  • Hay como máximo una palabra fuerte por oración, y de 6 a 10 escenas de tipos variados.
  • Los números provienen de una fuente real y verificada. Una escena chiffre lleva source cuando el número proviene de otra persona.
  • La hoja de contactos está revisada, la verificación está limpia, y no queda ninguna advertencia de "mot introuvable" (palabra no encontrada).
  • El final da una razón para quedarse (qué viene después, una frase para recordar), no una pregunta vaga.
  • Las marcas se muestran para hablar de ellas, nunca para sugerir una asociación.
  • Las conversaciones inventadas llevan "mention": "Ejemplo ficticio", o "Example" en inglés.

Cuando algo falla

MensajeQué hacer
voix : … edge_ttsejecuta sh <skill>/scripts/install.sh
mot « x » introuvableun au debe repetir una palabra de las oraciones de su escena, tal como está escrita
logo « x » introuvableproporciona un archivo ("medias/x.svg"), o prueba el nombre de la marca sin espacios
el texto se desbordaacorta el texto, o cambia a una escena más ancha (carte o liste en lugar de duel); no toques el CSS
una palabra se pronuncia malagrega a prononcer, por ejemplo {"Ledger": "Lédjer"}

Skills relacionados