Communitygithub.com

video-craft

Convierte cualquier tema en un video narrado, seleccionando automáticamente el motor de renderizado según el tipo de contenido: explicaciones conceptuales (Remotion), derivaciones matemáticas (Manim), tutoriales de terminal (asciinema, V2) o promociones de producto (Hyperframes, V3). Incluye una capa común independiente del motor, un árbol de decisión de ruteo, motores intercambiables y protocolos de construcción y control de calidad multi-agente.

¿Qué es video-craft?

Esta habilidad, `video-craft`, permite a agentes de IA transformar cualquier tema en un video narrado de alta calidad, seleccionando automáticamente el motor de renderizado óptimo según la naturaleza del contenido. Ya sea una explicación conceptual con gráficos en movimiento (Remotion), una derivación matemática continua (Manim), un tutorial de línea de comandos con grabaciones reales de terminal (asciinema, V2) o un video promocional corto (Hyperframes, V3), la habilidad rutea la tarea al backend adecuado. Incluye una capa central (`core/`) con principios de investigación, guion y narración, un constructor de líneas de tiempo TTS, un sistema de tokens para storyboard y scripts de control de calidad de fotogramas. También define un árbol de decisión en `routing/`, backends intercambiables y protocolos para construcción y QC multi-agente. Es ideal para creadores de contenido educativo, divulgadores científicos, desarrolladores que enseñan herramientas de terminal y equipos de marketing que producen videos promocionales. La habilidad guía al usuario a través de 8 fases, con puntos de confirmación para asegurar que el estilo, la narración y la calidad se ajustan a las expectativas antes de la renderización final.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add FnSGit/video-craft-skill

Preguntar en tu IA favorita

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

Documentación

¿Qué hace video-craft?

Convierte cualquier tema en un video narrado. Primero selecciona el motor de renderizado según el tipo de contenido, luego sigue la línea de producción común.

Predecesor de anything2explainer (solo para videos explicativos con Remotion). Esta división extrae los activos independientes del motor en core/, aísla lo relacionado con el renderizado en backends/ y añade routing/ para la selección del motor.

Cuándo usarlo

  • El usuario proporciona un tema para crear un video explicativo, de derivación, tutorial o promocional; o un artículo para convertirlo en video.
  • No es adecuado para: replicar un video existente, narración con persona real o videos principalmente grabados.

Cuatro puntos de confirmación (debe esperar la respuesta del usuario)

  1. Duración, idioma y recomendación de motor (preguntar junto con la fase 1 de investigación): presentar al usuario el resultado de la decisión de routing/router.md junto con la tabla de duración. Si el usuario rechaza la recomendación, usar la suya.
  2. Guion final aprobado (fase 2, antes de la locución): texto completo + división en capítulos + recuento de palabras/duración estimada, preguntar "¿Este guion está bien?". Los nombres de capítulos y las secciones HUD deben aparecer en líneas separadas. Para videos multicapítulo, listar las dos frases de transición de cada capítulo juntas. Una vez aprobado, los números de fotograma cambian; no modificar las palabras.
  3. Locución (antes de ejecutar tts_build.py): por defecto, usar edge-tts Yunxi (chino) o kokoro am_liam (inglés). Si el usuario tiene preferencias, puede proporcionar su propio archivo wav en script/audio.wav y rellenar manualmente la línea de tiempo.
  4. Muestra de los primeros 30 segundos (fase 5a, antes de asignar los demás grupos): preguntar "¿El estilo, el tamaño de fuente, la velocidad de locución y el ritmo son adecuados?". Modificar aquí tiene el costo de solo un grupo; cambiarlo después de renderizar todo el video tiene el costo de todos los grupos.

Flujo de trabajo (8 fases)

Fase 0  Crear proyecto      → Ejecutar new_project.sh del backend correspondiente según el resultado del ruteo
Fase 1  Investigación        → core/research-brief.md (1 agente en paralelo)      【Punto de confirmación 1】
Fase 2  Guion + línea de tiempo → core/narration-guidance.md + tts_build.py       【Puntos de confirmación 2 y 3】
Fase 3  Storyboard           → Escribir en el formato del backend, core/render_storyboard.py
Fase 4  Elementos gráficos   → Completar según el backend (remotion: ui.tsx / manim: figures.py)
Fase 5a Prototipo             → Hacer el primer grupo, preview.sh para los primeros 30 segundos          【Punto de confirmación 4】
Fase 5b Construcción paralela → Cada grupo con 1 agente, usando agent-build-rules.md del backend
Fase 6  Renderizado           → render.sh del backend → mp4 + fin_frames/
Fase 7  QC y correcciones    → core/motion_check.py + frame_metrics.py + qc-rules del backend
Fase 8  Entrega              → Entrega.md (registrar el backend utilizado y la razón de la decisión)

Ruteo: primero seleccionar el backend

Leer obligatoriamente routing/router.md. Versión resumida:

Tipo de contenidoBackendEstado
Derivación continua de fórmulas / demostraciones / transformaciones simbólicasmanim✅ V1
Explicación conceptual (qué es X / cómo funciona / por qué)remotion✅ V1
Tutorial de terminal real (instalación / configuración / ejecución de comandos)terminal⏸ V2
Promocional de producto / video corto para redes sociales / walkthrough de PRhyperframes⏸ V3

La decisión no se basa en el nombre del tema, sino en si el guion opera continuamente sobre símbolos: "¿Qué hace la transformada de Fourier?" → remotion (explicación intuitiva); "Derivar la transformada de Fourier a partir de la serie de Fourier" → manim (derivación continua).

Cuando se selecciona un backend no implementado, se debe informar al usuario y explicar el plan de degradación, sin cambiar de backend en silencio.

Dependencias previas (lectura obligatoria en máquinas nuevas)

Todos los backends

# Los scripts Python de core/ necesitan estos paquetes. Usar Python 3.13 para crear el venv (3.14 carece de wheel, riesgo)
uv venv --python 3.13 ~/.venvs/video-craft
uv pip install --python ~/.venvs/video-craft/bin/python numpy pillow scipy edge-tts

⚠ Sin este venv, tts_build.py / motion_check.py / frame_metrics.py no funcionarán. Este es un error que ya ocurrió con anything2explainer: la dependencia no documentada del venv bloqueó todo el flujo en máquinas nuevas.

Backend remotion

brew install ffmpeg          # Para extraer fotogramas
# Node 22+; el proyecto ejecuta npm install automáticamente con new_project.sh

Backend manim

brew install pkg-config cairo pango     # Necesario para compilar pycairo; sin esto, manim no se instala
brew install --cask basictex            # Necesario para el formato real de ecuaciones MathTex; sin esto, se usan aproximaciones ASCII

Sin basictex también funciona (automáticamente MANIM_TEX=text), pero las ecuaciones se mostrarán como a/b (aproximación ASCII). Los videos de derivación deben instalar basictex — la calidad del formato de ecuaciones es esencial para estos videos.

Estructura de directorios

video-craft/
├── SKILL.md                   ← Este archivo
├── routing/
│   └── router.md              Árbol de decisión del backend + mecanismo de anulación + casos límite
├── core/                      Independiente del motor, común a todos los backends
│   ├── research-brief.md          Flujo de investigación y reglas de verificación de hechos
│   ├── narration-guidance.md      13 principios de redacción para locución
│   ├── narration-storyboard.md    Formato de guion/storyboard y sistema de tokens
│   ├── tts_build.py               Locución + timeline.json
│   ├── render_storyboard.py       Sustitución de tokens de storyboard
│   ├── motion_check.py            QC de ritmo (lectura de fotogramas, transversal a backends)
│   ├── frame_metrics.py           QC de composición (lectura de fotogramas, transversal a backends)
│   ├── sheet.py                   Cuadrícula de miniaturas (lectura de fotogramas)
│   └── lessons.md                 Errores y causas raíz
└── backends/
    ├── remotion/              Videos explicativos conceptuales (anything2explainer original)
    │   ├── template/               Proyecto React
    │   ├── scripts/                render/preview/still/test_render/new_project/selfcheck
    │   ├── reference/              style-guide/motion-vocabulary/composition-and-light/
    │   │                            agent-build-rules/agent-qc-rules/prompts/math-physics
    │   └── examples/rag/           Muestras (referencia de calidad)
    ├── manim/                 Videos de derivación
    │   ├── template/               Proyecto Python (common/ + scenes/)
    │   ├── scripts/
    │   ├── reference/
    │   └── README.md               Conclusiones del entorno real (cairo/latex/pycairo)
    ├── hyperframes/           Reservado para V3
    │   └── README.md
    └── terminal/              Reservado para V2 (usuario confirmó que es obligatorio)
        └── README.md

Referencia rápida de archivos clave

ObjetivoArchivo
Decidir qué backend usarrouting/router.md
Asignar agente de investigacióncore/research-brief.md
Escribir el guionPrimero leer core/narration-guidance.md, formato en core/narration-storyboard.md
Generar locución + línea de tiempocore/tts_build.py
Generar tabla de storyboardcore/render_storyboard.py
QC de ritmocore/motion_check.py
QC de composicióncore/frame_metrics.py
Vista general del video completocore/sheet.py
Crear proyectobackends/<backend>/scripts/new_project.sh
Asignar agente de construcciónbackends/<backend>/reference/agent-build-rules.md
Asignar agente de QCbackends/<backend>/reference/agent-qc-rules.md

Formatos de storyboard específicos del backend

BackendUnidad de storyboardFormato
remotionUna toma (una frase de locución con una imagen)Token {S12.from-8} en backends/remotion/reference/narration-storyboard.md
manimUn paso de derivaciónFormato DP en backends/manim/reference/storyboard.md

Umbrales de QC ajustables por backend

Los umbrales predeterminados de core/motion_check.py están diseñados para videos conceptuales con Remotion; otros backends deben ajustarse:

# remotion (predeterminado)
python3 core/motion_check.py --frames fin_frames

# manim (derivación): aumentar el límite de quietud a 5s (dejar tiempo para ver después de una operación), desactivar el criterio de hold (sin concepto de "salida de escena")
python3 core/motion_check.py --frames fin_frames --shots DP01:1-170 --still-max 5.0 --no-hold

# terminal (V2): mayor quietud al esperar salida de comandos, estimado 8-10s

Principios estrictos (comunes a todos los backends)

  1. Originalidad: Todos los elementos visuales deben ser generados mediante código o grabaciones reales; no se permite usar fotogramas o fragmentos de videos existentes.
  2. Hechos con fuente: Cada número, término, año o nombre de persona en pantalla debe tener una URL de origen documentada en el informe de investigación.
  3. Contexto unificado: El guion y las imágenes deben usar un único ejemplo transversal.
  4. No modificar el guion aprobado: Los números de fotograma quedarán codificados; cambiar una palabra requerirá realinear todo el video.
  5. Informar sobre el backend: Tanto la decisión de ruteo como el plan de degradación deben ser conocidos por el usuario; no se tomarán decisiones en silencio.

Muestras y referencia de calidad

  • Backend remotion: backends/remotion/examples/rag/ (4′35″, 44 frases, 44 tomas) — Antes de comenzar, ver examples/rag/frames/overview_*.jpg para establecer la referencia.
  • Backend manim: V1 sin muestras, solo se verificó el ciclo mínimo. Las muestras completas de referencia estarán en V2.
  • Contraejemplo: backends/remotion/examples/contrast/

Proyectos migrados desde anything2explainer

Los proyectos en ~/Projects/ai-video/ como linear-function / transformer / a2e-fourier / py-course fueron creados con el skill original y aún usan la estructura antigua (template/scripts/). Siguen siendo utilizables — el skill original se mantiene como obsoleto, no lo elimine.

Los proyectos nuevos deben usar la estructura nueva de este skill.

Skills relacionados