animation-studio: idea → guion → voz → render seguro → MP4
Este archivo es un enrutador. Haz las cuatro grandes preguntas, verifica el hardware y luego carga solo los archivos que el trabajo necesita:
content/<paquete>.md (reglas de escritura y precisión) + styles/<estilo>.md (apariencia; su bloque JSON es el preset que lee el motor) + engines/<motor>/README.md (cómo renderizar). Las herramientas compartidas viven en shared/.
Encuentra la carpeta de la habilidad (SKILL_DIR) = la carpeta que contiene este archivo. Claude Code la muestra como el directorio base de la habilidad; otros agentes: la carpeta del SKILL.md que se te indicó leer. Siempre llama a las herramientas como "$SKILL_DIR/shared/...", entre comillas (las rutas suelen contener espacios). Busca un Python 3.10+ (python3, python o py -3) y llámalo PY. Después de setup_check.py --install, usa el python del venv que imprime.
Mantén al usuario informado con una lista de tareas. Escribe cada entregable en videos/<slug>/ dentro de la carpeta de trabajo del usuario (slug = nombre corto en minúsculas con guiones). Explica en lenguaje sencillo.
Lo que funciona en esta versión
| Parte | Estado |
|---|---|
| Paquetes de contenido | ✅ Biblia (content/bible.md) · ✅ Tecnología (content/tech.md) · ✅ Historia/anuncio general (content/general-story.md) · ✅ Matemáticas/educación (content/education-math.md) |
| Estilos | motor A: ✅ Stickman · ✅ Flat 2D · ✅ Storybook · ✅ Whiteboard · ✅ Modern vector — motor B: ✅ Manim (+ colores Whiteboard / Modern vector) — motor C: ✅ Toon 3D — motor D: ✅ Cinematic 3D |
| Motores | ✅ A py2d (Python 2D) · ✅ B Manim (LaTeX opcional) · ✅ C Toon 3D (lento: limitado por nivel) · ✅ D Blender (vistas previas Eevee, finales Cycles en POWER) |
| Formatos | ✅ 9:16 · ✅ 16:9 · ✅ 1:1 · ✅ 4:5 |
| Subtítulos | ✅ .srt siempre + incrustación estilizada con resaltado de palabras (shared/captions.py) |
| Voz | ✅ grabación del usuario · ✅ Piper TTS (shared/voice.py, gratuito, sin conexión) |
| Música/SFX | ✅ sintetizada (shared/sound.py) · ✅ archivo de música propio del usuario con licencia |
| Proyectos de editor | ✅ Kdenlive · ✅ Shotcut · ✅ DaVinci Resolve (FCPXML) · ✅ Blender VSE · 🧪 OpenShot (experimental) · ✅ paquete de editor (CapCut, cualquier editor) |
| Kit de marca | ✅ marcas guardadas (carpeta del usuario), marca de agua, tercio inferior, tarjeta final de marca, colores de marca en cualquier estilo (shared/brand.py, docs/branding.md) |
| Instalaciones de software | ✅ un registro verificado (shared/tools.yaml) con comandos para Windows, macOS y cada familia de Linux; nunca instala sin un sí |
Si el usuario elige un elemento 🚧, dilo claramente, ofrece la opción ✅ más cercana y entrega igualmente el paquete de guion.
Etapa 1: Ingreso (AskUserQuestion, máximo 4 preguntas por llamada; omite lo que ya esté respondido)
Llamada 1
- Contenido: Historia bíblica · Tecnología/programación · Matemáticas/educación · Historia/anuncio general
- Estilo: ofrece primero el predeterminado para el contenido (Biblia → Storybook · Tecnología → Modern vector · Matemáticas → Manim · General → Flat 2D), luego 2–3 más. Menciona Stickman para piezas rápidas y ligeras.
- Formato(s) (multiSelect): 9:16 1080x1920 (TikTok/Reels/Shorts) · 16:9 1920x1080 (YouTube/proyector) · 1:1 1080x1080 · 4:5 1080x1350.
PY shared/formats.py tableimprime la tabla de plataformas. - Calidad: Vista previa (rápida, 720p) · Final (1080p). Recomienda primero una Vista previa de 5 s, siempre.
Llamada 2 (solo lo que aplique)
0. ¿Marca? Ninguna · Usar marca guardada (lista desde PY "$SKILL_DIR/shared/brand.py" list) · Crear nueva marca. Crear nueva: pregunta cada campo UNO a la vez, todos opcionales (nombre, eslogan, sitio web, archivo de logo, teléfonos, WhatsApp, correos electrónicos, redes sociales, colores, fuente OFL, CTA) y guarda cada uno con brand.py set (valida formatos de teléfono/correo/URL/color); logo mediante brand.py logo, fuente mediante brand.py font. Nunca inventes datos de contacto: solo lo que el usuario proporcione (o confirme de su propio sitio web). Luego las opciones, con valores predeterminados de docs/branding.md: marca de agua (anuncio/promoción ACTIVADO; Biblia, tecnología y matemáticas DESACTIVADO), esquina/tamaño/opacidad/logo o logo+nombre · tercio inferior (cuándo, duración) · tarjeta final con CTA + contactos (anuncio/promoción ACTIVADO) y su duración · recolorear el estilo con los colores de la marca (sí/no).
5. Tema/historia y duración (30 s · 60 s · 90 s · 2–3 min; otras duraciones mediante "Otro"). Los paquetes de contenido añaden los suyos propios (Biblia: audiencia).
6. Voz: Mi propia grabación (predeterminado) · Piper TTS (gratuito, sin conexión; voz predeterminada en_US-ljspeech-medium, datos de dominio público). Piper necesita una instalación única (setup_check.py --tts --install) y descarga de voz (voice.py --download, ~60 MB): pregunta primero.
7. ¿Subtítulos incrustados? Sugiere Sí para 9:16 y 1:1 (la mayoría ve sin sonido), No para 16:9. Siempre se crea un archivo .srt.
8. ¿Tarjeta final "Hecho con animation-studio"? Desactivada por defecto; solo por aceptación explícita. Nunca añadas una marca de agua.
9. Salida: MP4 terminado · Archivo de proyecto para un editor · Ambos.
Elección del editor (solo si la salida incluye un archivo de proyecto): ejecuta PY "$SKILL_DIR/shared/tools.py" status --kind editor y muestra la lista numerada COMPLETA (✅ instalado + versión · ❌ no instalado · ⚠️ no compatible aquí, p. ej., editores de escritorio en un servidor sin pantalla). El usuario elige exactamente uno (AskUserQuestion: hasta 4 opciones con los editores instalados primero; el resto se puede escribir en "Otro"). Si la elección es ❌, muestra PY "$SKILL_DIR/shared/tools.py" flow <editor> palabra por palabra (qué es, el comando de instalación para ESTE sistema operativo/distribución/shell, el enlace oficial) y pregunta: Instalar ahora (lo ejecutaré) · Lo instalaré yo mismo, luego digo "listo" · Elegir otro editor · Saltar, dame MP4 + paquete de editor. "Instalar ahora" → tools.py install <editor> --yes (dilo primero si Windows mostrará un aviso de permiso o si un paso necesita sudo; los pasos con sudo se entregan al usuario como ! sudo ...). Después de cualquier instalación o "listo": ejecuta status de nuevo, confirma ✅, continúa donde lo dejaste. CapCut y los editores no compatibles reciben el paquete de editor. Detalles: docs/editors.md.
Guarda las respuestas en videos/<slug>/brief.md.
Etapa 2: Verificación de hardware (antes de cualquier renderizado; nunca la saltes)
Ejecuta PY "$SKILL_DIR/shared/hwcheck.py" y muestra su tabla y nivel en un mensaje breve. También guarda el perfil del sistema (SO + versión, WSL, Apple Silicon, distribución y familia de Linux, gestores de paquetes, shell, pantalla) que cada paso posterior lee. Cada comando de instalación que muestres o ejecutes proviene de PY "$SKILL_DIR/shared/tools.py" cmd <herramienta> (coincidiendo con este SO, distribución y shell); nunca escribas uno de memoria. Sin pantalla (sin interfaz gráfica) → solo renderizado: sin aplicaciones de editor.
| Nivel | Regla | Motores | Límites |
|---|---|---|---|
| LITE | < 12 GB RAM o < 4 hilos de CPU | A, B | Solo 720p; Toon 3D y Blender bloqueados (ofrece imágenes fijas) |
| STANDARD | entre | A, B completo; C ≤ 5 s de vista previa (más solo con confirmación + reanudación); D Eevee ≤ 5 s a 720p, muestras bajas | 1 trabajo de renderizado; workers = hilos − 2 |
| POWER | ≥ 32 GB RAM + GPU dedicada ≥ 6 GB VRAM | todos, Cycles en la GPU | workers = hilos − 1 |
| Si el portátil está con batería, advierte antes de cualquier renderizado de más de un minuto. Si la RAM libre es inferior al 25 %, pide al usuario que cierre las aplicaciones grandes. |
Etapa 3: Elegir el motor (estilo → motor), luego cargar archivos
| Estilo | Motor | Cargar |
|---|---|---|
| Stickman, Flat 2D, Storybook, Whiteboard, Modern vector | A engines/py2d | styles/<estilo>.md, engines/py2d/README.md |
| Manim (matemáticas, algoritmos, diagramas); los colores de Whiteboard/Modern vector también funcionan aquí | B engines/manim | styles/manim.md (o el estilo elegido), engines/manim/README.md |
| Toon 3D | C engines/toon3d (una carpeta de proyecto con story.js + world.js) | styles/toon-3d.md, engines/toon3d/README.md |
| Cinematic 3D | D engines/blender (scene.json, Z hacia arriba) | styles/cinematic-3d.md, engines/blender/README.md |
| Si el nivel bloquea el motor, explica por qué y ofrece: la misma historia en un estilo del motor A, o solo algunas imágenes fijas. El usuario puede anular un límite solo después de una advertencia clara ("esto puede congelar o sobrecalentar tu ordenador; guarda tu trabajo primero"). |
Luego carga content/<paquete>.md y sigue sus etapas de investigación y escritura.
Etapa 4: Paquete de guion (reglas del paquete de contenido), luego PARAR
Cada paquete entrega: la narración en un bloque copiable (≈ 3.7 palabras/s a menos que el paquete indique lo contrario) con recuento de palabras y duración → script.txt; una lista de tomas → shotlist.md; extras del paquete (Biblia: tabla de fidelidad, notas de estudio, descripción); y fuentes al final. Nunca inventes versículos, citas, API, banderas, versiones o hechos: búscalos o ejecútalos, de lo contrario márcalos como NO VERIFICADO.
Luego entrega la voz en off (grabación del usuario: mp3/wav, sin música) y espera el audio. Si el usuario solo quería el guion, detente aquí.
Etapa 5: Producción
- Configuración:
PY "$SKILL_DIR/shared/setup_check.py" --engine <motor>→ tabla ✅/❌. Una herramienta faltante (Blender, Manim, Node, LaTeX, Inkscape...) usa el mismo flujo que los editores: muestratools.py flow <herramienta> --for engine, luego Instalar ahora · Lo instalaré yo mismo, luego digo "listo" · Elegir otro estilo · Saltar (solo guion, lista de tomas y referencias); vuelve a comprobar después. Los paquetes de Python van solo al.venvpropio de la habilidad (--install, después de un sí). - Voz + sincronización. Piper:
PY "$SKILL_DIR/shared/voice.py" script.txt voice.wav --timing work --speed 0.85(tiempos exactos de frases, sin adivinanzas). Grabación del usuario:PY "$SKILL_DIR/shared/timing.py" voice.mp3 script.txt --out work. Ambos escribenwork/words.json+work/phrases.json. - Escena: motor A:
videos/<slug>/scene.json; motor B: una escena.pyde Manim que comience confrom studio import *; motor C:videos/<slug>/story.js+world.js; motor D: unscene.jsonde Blender (formatos en los README del motor). Una toma por frase; mantén rostros, texto y objetos clave dentro de la zona segura de cada formato elegido (shared/formats.md). - Verificación de aspecto: renderiza 3–6 imágenes fijas por formato (
--frames 0,60,...), crea una hoja de contactos (PY "$SKILL_DIR/shared/sheet.py" sheet.jpg <dirs> --safe <fmt>), muéstrala y compárala con las reglas del paquete de contenido (Biblia: reverencia + violencia). Corrige antes de renderizar. - Estimación:
PY "$SKILL_DIR/shared/estimate.py" --engine <motor> scene.json --fmt <fmts> --quality <q>(Manim:--engine manim scene.py --name SceneName --timing work/phrases.json; Toon 3D:--engine toon3d <carpeta del proyecto>; Blender:--engine blender scene.json) →DECISION: OKrenderizar ·ASKdecir al usuario "~X min, Y GB" y preguntar (ofrece la vista previa de 5 s) ·REFUSEno hay suficiente disco (necesita 2× la estimación): pide al usuario que libere espacio. - Renderiza un formato a la vez (nunca dos trabajos a la vez). Los renderizados largos se ejecutan en segundo plano; el motor se ejecuta con baja prioridad, se reanuda desde el último fotograma guardado si se vuelve a ejecutar y se pausa (código de salida 4) si la RAM libre cae por debajo del 15 %. Dile al usuario que puede seguir trabajando.
- Audio: música
PY "$SKILL_DIR/shared/sound.py" music music.wav --seconds <duración del video> --mood warm|calm|tense|tech|playful, SFX... sfx sfx.wav --seconds <len> --cues cues.json(pop, whoosh, type, chime, success, swell, rain, soft thunder), luegoPY "$SKILL_DIR/shared/mix.py" voice.wav music.wav sfx.wav --music-db -12 --sfx-db -10 --seconds <len>(la música nunca supera −6 dB por debajo de la voz; −9 a −12 para videos con mucho diálogo o reverentes). Un archivo de música proporcionado por el usuario reemplaza music.wav: recuérdale una vez que debe poseer los derechos. 7b. Marca (si se eligió): recolorea antes de renderizar (brand.py recolor <marca> --style <estilo> --out style_<marca>.md, úsalo como estilo de la escena); después de renderizar,brand.py apply <marca> frames_<fmt> branded_<fmt> --fmt <fmt> [--watermark tr,9,90,logo] [--lower-third a,b] [--end-card 2.5 --cta "..."] [--captions]y usabranded_<fmt>de aquí en adelante. Con una tarjeta final, mezcla el audio con--seconds <nueva duración>. - Subtítulos + finalización + QA:
PY "$SKILL_DIR/shared/captions.py" work out/<Title> --style <estilo> --fmt <fmt> --quality <q>(→.srt+_<fmt>.ass), luegoPY "$SKILL_DIR/shared/finish.py" frames_<fmt> out/<Title>_<fmt>.mp4 --audio mix.wav --quality <q> [--ass out/<Title>_<fmt>.ass] --srt out/<Title>.srt [--end-card solo si se optó por ella]. Verifica las líneas de QA (segmentos negros/estáticos, aproximadamente −14 LUFS) y mira la hoja_qa.jpg. - Proyecto de editor (si se eligió):
PY "$SKILL_DIR/shared/editors.py" prepare --frames frames_<fmt> --shots "<f0>-<f1>:<nombre>,..." --final out/<Title>_<fmt>.mp4 --voice voice.wav --music music.wav --sfx sfx.wav --srt out/<Title>.srt --out videos/<slug>/editorluego... export videos/<slug>/editor/timeline.json --editor <kdenlive|shotcut|openshot|resolve|blender-vse|pack>. Muestra su tabla de verificación (la sincronización debe coincidir con el MP4; Kdenlive/Shotcut también reciben un renderizado melt de 2 s). Dile al usuario cómo abrirlo (docs/tools/.md). - Entrega los MP4, el .srt, el proyecto de editor si lo hay, y una línea por toma describiendo lo que muestra. Tarjeta final opcional solo si el usuario optó por ella.
Reglas de seguridad (siempre)
- Nunca inicies un renderizado sin la Etapa 2 y el paso 5 (estimación). Siempre ofrece "Vista previa de 5 s primero".
- Respeta los límites del nivel; las anulaciones solo después de una advertencia clara y un sí.
- Un trabajo pesado a la vez. Nunca elimines ni sobrescribas los archivos del usuario sin preguntar (volver a renderizar en una carpeta de fotogramas existente se reanuda;
--forcesobrescribe, así que pregunta). - Si una herramienta falta o el usuario rechaza las instalaciones, entrega igualmente el guion, la lista de tomas y las referencias.
Créditos y licencias
Código: MIT (consulta LICENSE). El código de terceros incluido se enumera en THIRD_PARTY_NOTICES.md. La habilidad no incluye fuentes, música ni imágenes: utiliza fuentes del sistema y sonido sintetizado. Los videos del usuario son suyos: sin marca de agua forzada; la tarjeta final es opcional.