¿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
- El tema, en una oración. Si el usuario no da ninguno, sugiere 3 y deja que elija.
- 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.
- El archivo. Escribe
videos/<id>.jsonen el proyecto del usuario. El formato está abajo, y el catálogo completo está enreferences/scenes.md. Pon los archivos multimedia envideos/medias/. - Construir.
node <skill>/scripts/make.mjs videos/<id>.jsoncrea la voz, la página, la verificación y la hoja de contactos, sin renderizar (aproximadamente 1 minuto). - 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.
- 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.
- Publicar. Lee
references/publishing.mdpara 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.cssni elindex.htmlgenerado. 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:
Paso Referencia escritura writing.mdelegir una escena scenes.mdvoz, metraje o capturas de pantalla modes.mdpublicación publishing.mdNunca 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.jpguna 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 … --renduen 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.
- Sin
-
Visuales, donde una escena lo requiera:
"logo:binance","icone:cadenas","emoji:🔑", o una ruta como"medias/captura.png"(los archivos.svgse incrustan). -
voix: la voz.nomes el nombre de la voz,debites la velocidad.fichierapunta 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.nomes el nombre de la marca,visuelsu 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 demarque,texteysous(un subtítulo).audioreproduce 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 enpublication. -
Opcional:
Clave Efecto 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
titrecorto y llamativo.
Las 16 escenas (parámetros y ejemplos en references/scenes.md):
| Para mostrar… | tipo |
|---|---|
| el gancho, una línea impactante | titre |
| un número (precio, récord, porcentaje) | chiffre |
| 2 a 6 puntos, herramientas o consejos | liste |
| un método de 2 a 5 pasos | etapes |
| A versus B, antes / después, mito / realidad | duel |
| marcas, monedas, aplicaciones | logos |
| una captura de pantalla o grabación de pantalla de una app | telephone |
| un sitio web, una página | navigateur |
| una foto, como tarjeta o pantalla completa | image |
| una conversación (IA, soporte, estafa) | chat |
| un peligro, una estafa, buenas noticias | alerte |
| una tendencia, una comparación en números | graphique |
| un comando, una instalación | terminal |
| una cita de alguien | citation |
| un concepto y su explicación | carte |
| el momento que merece un visual inventado | html |
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.nompara cambiar la voz o el acento.
- Imágenes: tus capturas de pantalla y fotos van en
telephone,navigateuroimage, desdevideos/medias/.- Una voz grabada o clonada va en
"voix": { "fichier": "medias/voz.wav" }. - Se transcribe localmente (whisper) y se sincroniza con tus oraciones.
- Una voz grabada o clonada va en
- 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
chiffrellevasourcecuando 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
| Mensaje | Qué hacer |
|---|---|
voix : … edge_tts | ejecuta sh <skill>/scripts/install.sh |
mot « x » introuvable | un au debe repetir una palabra de las oraciones de su escena, tal como está escrita |
logo « x » introuvable | proporciona un archivo ("medias/x.svg"), o prueba el nombre de la marca sin espacios |
| el texto se desborda | acorta 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 mal | agrega a prononcer, por ejemplo {"Ledger": "Lédjer"} |