Communitygithub.com

akdavid4real/effectcraft-motion

Crea, repara o audita vídeos de gráficos en movimiento (promos, explicativos, videos de marca, intros animadas, cortes 9:16) en EffectCraft, el compositor al estilo After Effects, con locución, música y efectos de sonido sincronizados.

¿Qué es effectcraft-motion?

Esta skill permite a un agente de IA (como Claude Code, Cursor o Codex) crear, reparar o auditar videos completos de motion graphics directamente desde la terminal, utilizando EffectCraft (un compositor similar a After Effects) y su CLI (`effectcraft-cli`). El flujo de trabajo está diseñado para producir piezas corporativas de 60 segundos con un acabado profesional: locución sincronizada, música y efectos de sonido ajustados al compás, y transiciones limpias, evitando errores comunes como cuadros vacíos, voces superpuestas o textos ilegibles. La skill se basa en un conjunto de reglas estrictas y referencias técnicas (diseño de movimiento, paletas de colores, sincronización con beats) y ofrece cinco estilos visuales predefinidos para garantizar un resultado cuidado sin necesidad de diseñar desde cero. Es compatible con sistemas macOS y Linux, usa herramientas locales como Kokoro para la locución y Parakeet para la transcripción de palabras, y puede integrar música y efectos desde catálogos como HeyGen o archivos locales. El agente debe seguir un flujo de trabajo paso a paso: desde la captura del brief, la escritura de un guion, la planificación de la línea de tiempo con tiempos precisos, hasta la elección del look, la construcción de escenas visuales y la revisión final mediante renders de prueba y tests de calidad automáticos (`timeline.py check`, `ec.py qa`). La skill insiste en que el agente revise visualmente cada fotograma y no se fíe solo de que el código se ejecute sin errores, ya que los fallos visuales son la causa principal de que un video parezca de baja calidad.

Compatible con✓Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add akdavid4real/effectcraft-motion

Preguntar en tu IA favorita

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

Documentación

Kit de motion graphics en EffectCraft

Un flujo de trabajo probado para crear motion graphics corporativos de 60 segundos en EffectCraft que tengan un diseño cuidado, estén sincronizados y libres de los errores clásicos: cuadros vacíos entre escenas, locuciones superpuestas, texto tapado por decoraciones, números que desaparecen y efectos de sonido fuera del ritmo.

El diseño viene de los looks y las composiciones, no de cero. Elige uno de los cinco looks probados, escribe cada escena como una única llamada a scene() con tu contenido y los tiempos de las palabras, y la composición se encarga del tamaño, la cuadrícula, el color y el movimiento. Los agentes que inventan un estilo terminan con degradados oscuros, manchas de brillo y texto centrado pequeño; esta es la razón principal por la que una promo generada se ve barata.

Cualquier agente puede usar esto. Todo se ejecuta desde la terminal (effectcraft-cli a través de scripts/ec.py). MCP es opcional. Ubicación del kit: la carpeta que contiene este archivo (llámala $KIT).

No es este kit: los videos narrativos de figuras / stick-figure (pantalla dividida "forma incorrecta vs forma correcta") usan la skill stick-figure-story.

Reglas de oro (las razones están en references/)

  1. Los tiempos vienen de los datos, no de suposiciones. El plan de escenas está en timeline.json. Los scripts de escena usan SC("s3") y W("s3", "palabra") (el tiempo absoluto en que se dice una palabra). Nunca escribas un tiempo como 23.6.
  2. Mira cada escena que construyas. Renderiza fotogramas de previsualización (ec.py frames) y abre los PNG. El código que se ejecuta sin errores puede renderizar mal.
  3. "Terminado" significa que pasó los gates. timeline.py check tiene 0 FAIL, ec.py qa tiene 0 FAIL, ec.py qa-video tiene 0 FAIL, y has mirado la hoja de contactos. Informa los resultados con honestidad, incluyendo las advertencias.
  4. Usa un look y las composiciones (references/looks.md). Compara dos looks antes de elegir. Al menos un tercio de las escenas deben ser visuales (teléfono / iconos / flujo / barras, o una escena personalizada con un objeto). El código de escena personalizada es para lo que ninguna composición cubre (un mapa, una maqueta de producto), y aún así usa la paleta del look P(S.fondo) y los tamaños de fuente LOOK.tipo.
  5. Lee references/pitfalls.md antes de escribir cualquier script de EffectCraft. Lee references/motion-design.md, references/looks.md y references/techniques.md (cuadrícula de beats, SFX alineados con picos, morphs continuos, lista de prohibiciones) antes de diseñar escenas.
  6. La marca no es tuya para editar (references/brand.md). Muestra el archivo de logotipo real, nunca el nombre escrito como wordmark. Escribe el tagline carácter por carácter. No inventes nombres de productos, etiquetas de botones ni estadísticas. Completa el bloque "brand" en timeline.json para que ec.py qa lo verifique.
  7. Pasar QA no es lo mismo que tener buen diseño. Planifica el guion de color, los visuales y el momento estrella antes de escribir las escenas, y evalúa la película en una revisión de director creativo antes de renderizar (references/design-review.md, comparado con references/benchmark_sheet.png). 7b. UI de producto real (SaaS, videos de aplicación): sigue references/ui-footage.md: captura solo datos de muestra, recorta a un panel, muéstralo legible (55%+ de ancho) o reconstruirlo como UI animada, una pantalla por toma, sin paredes de miniaturas con tono, sin números inventados, y construye aquí para que los gates de QA se ejecuten.
  8. Anuncios de alta energía / hipercinéticos (estilo TikTok, un golpe en cada palabra hablada): sigue references/high-energy.md y templates/hyper.jsx en lugar de las composiciones calmadas.
  9. Informa lo que muestra el render, no lo que planeaste. Antes de escribir el informe o la entrega, extrae fotogramas del MP4 final (no de la previsualización) en la mitad y el último medio segundo de cada escena, y verifica cada afirmación: ¿cada línea en pantalla tiene tiempo suficiente para leerse?, ¿cada paso dibujado es realmente visible?, ¿la captura de pantalla es legible?, ¿la duración coincide con el brief y el nombre del archivo? Lee cada transcripción de locución contra el guion, y escucha el nombre de la marca. En pruebas, la entrega de un agente describía cuatro pasos de un diagrama, tres promesas y "BridgeAxis Technologies"; la película mostraba el último paso 0,3 s antes del corte, las promesas durante medio segundo, capturas de pantalla ilegibles y una voz diciendo "Bridge Access". timeline.py check y ec.py qa ahora advierten sobre errores de voz no leídos y texto legible durante menos de min_read segundos: corrige esas advertencias, no las expliques. Ejecuta con la configuración de razonamiento más alta de tu agente: la ejecución descuidada fue en "Bajo".

Estructura del proyecto

<proyecto>/
  timeline.json          plan de escenas + señales SFX + música (empieza con $KIT/templates/timeline.example.json)
  audio_meta.json        archivos de voz + marcas de tiempo de palabras (del paso de audio)
  soundtrack.wav         generado por timeline.py mix
  assets/voice|sfx|bgm|iconos|fuentes
  scripts/lib.jsx        copia de $KIT/templates/lib.jsx (configura COMP; el look proporciona colores y fuentes)
  scripts/look.jsx       escrito por `ec.py look NOMBRE --acento HEX`
  scripts/timing.jsx     generado (timeline.py emit) - nunca editar
  scripts/wipes.jsx      generado (timeline.py emit) - ejecutar ÚLTIMO
  scripts/reset.jsx, s1.jsx ... s8.jsx
  qa/                    previsualizaciones y hojas de contactos

Ejecuta cada comando desde <proyecto>/. ec.py lee la ruta del proyecto y el nombre de la composición de timeline.json.

Flujo de trabajo A: nuevo video

0. Brief. Pregunta antes de construir: marca/sitio web a emular, estado de ánimo (ruidoso / tranquilo / técnico / lujoso), duración y relación de aspecto, voz (género/tono), y si se quiere música/SFX. Adivinar la dirección creativa es la razón más común por la que un primer corte es rechazado.

1. Configuración

mkdir -p <proyecto>/{scripts,assets/{voz,sfx,musica,iconos},qa} && cd <proyecto>
cp $KIT/templates/lib.jsx $KIT/templates/reset.jsx $KIT/templates/s1.jsx scripts/
cp $KIT/templates/timeline.example.json timeline.json   # editar nombres de proyecto/composición/salida
python3 $KIT/scripts/ec.py fonts                         # instala las fuentes de los looks (una vez por máquina)

Configura COMP en scripts/lib.jsx con el nombre de la composición de la línea de tiempo. Anota el color de acento de la marca (logotipo, CSS del sitio web, producto). Si la marca tiene un sitio web, lee su CSS para el acento y las fuentes. Pon los archivos de logotipo en assets/logo/ y completa el bloque "brand" en timeline.json: nombre, tagline exacto, archivos de logotipo, y cualquier nombre de producto o URL aprobados (references/brand.md).

2. Guion y voz. Escribe 8 líneas (gancho, problema, marca, 2–3 beneficios, prueba, tarjeta final); 60 s contienen aproximadamente 110–130 palabras habladas. Genera un archivo de audio por línea y obtén las marcas de tiempo de palabras en audio_meta.json con esta forma:

{"voces": [{"id": "s1", "ruta": "assets/voz/s1.wav", "duracion_s": 6.45,
             "palabras": [{"palabra": "Cada", "inicio": 0.30, "fin": 0.59}, ...]}]}

Primero ejecuta python3 $KIT/scripts/ec.py doctor. Lista lo que esta máquina tiene y cómo instalar lo que falte. Cuando diga ready, no investigues ni instales alternativas (edge-tts, Whisper, piper, Playwright): las herramientas siguientes son las probadas. Sin ninguna voz, temporiza las escenas con offsets "in+0.5" en lugar de palabras; $KIT/demo/ es un ejemplo completo silencioso (ec.py demo lo renderiza).

  • Voz (la predeterminada): Kokoro local, voz femenina af_heart. Gratis, sin cuenta. El modelo se almacena en caché en ~/.cache/hyperframes/tts/ (se descarga una vez en la primera ejecución):
    export HYPERFRAMES_PYTHON=~/.venvs/kokoro/bin/python   # REQUERIDO: el venv con kokoro-onnx
    npx hyperframes tts "Texto de la línea uno." -v af_heart -o assets/voz/s1.wav   # un archivo por línea
    
    Sin HYPERFRAMES_PYTHON falla con "The kokoro-onnx package is not installed". No hagas pip-install de nada: configura la variable.
  • Marcas de tiempo de palabras: npx hyperframes transcribe assets/voz/s1.wav --json. Usa el modelo Parakeet, almacenado en caché en ~/.cache/hyperframes/parakeet después de la primera ejecución (el motor auto lo selecciona). Parakeet es adecuado para voces TTS limpias como Kokoro. No pases -e whisper aquí: el motor Whisper de hyperframes (whisper.cpp) no está configurado. Para voces grabadas reales con acentos, la skill de edición de footage usa faster-whisper large-v3-turbo (~/.venvs/asr). Copia las palabras y sus tiempos de inicio y fin en audio_meta.json.
  • Música y SFX: el motor de audio de media-use (node <skills>/media-use/audio/scripts/audio.mjs --request audio_request.json --out audio_meta.json --only bgm,sfx). Recupera del catálogo de HeyGen por descripción, por ejemplo "bgm": {"mode": "retrieve", "query": "piano cálido tranquilo"}. <skills> es ~/.claude/skills para Claude Code, ~/.agents/skills para Codex/OpenCode/DeepSeek.
  • HeyGen text-to-speech (a través del motor o la CLI heygen) es la voz alternativa, pero el saldo gratuito se agota. Cuando eso ocurra, usa Kokoro. La recuperación de música y SFX también necesita la CLI heygen con sesión iniciada (heygen auth login --oauth) a menos que HEYGEN_API_BASE esté configurada; sin ella, sfx responde desde la biblioteca incluida de media-use, y el usuario puede proporcionar su propio archivo de música.

Anota qué proveedor y voz usaste realmente.

3. Línea de tiempo

python3 $KIT/scripts/timeline.py beats      # tempo de la música, beats, inicios de compás, drop -> beats.json (necesita "music")
python3 $KIT/scripts/timeline.py suggest    # propone entrada/salida de escena + voz_en; con beats.json, las escenas terminan en los beats
# pegar en timeline.json, configurar el "bg" de cada escena (light/dark/accent), añadir señales SFX ancladas a palabras
python3 $KIT/scripts/timeline.py words      # cada palabra con su tiempo absoluto
python3 $KIT/scripts/timeline.py check      # DEBE ser 0 FAIL
python3 $KIT/scripts/timeline.py emit       # escribe scripts/timing.jsx + scripts/wipes.jsx
python3 $KIT/scripts/timeline.py mix        # escribe soundtrack.wav (-14 LUFS)

Corta en el beat: timeline.py snap mueve los cortes existentes a los beats donde la voz aún encaja; en las escenas, BEAT(n), DOWNBEAT(n), nearBeat(t) y T.drop sincronizan golpes y pops con la música (references/techniques.md). El SFX "at" puede ser un número, "beat:12", "downbeat:3", "drop", "s2:tarde" (la palabra "tarde" en la voz de s2; "s2:el#2" = 2º "el"), "wipe:s3" (la transición hacia s3), "in:s3" o "out:s3". Añade "offset", "vol", "max" (longitud de recorte) y "align": "peak" (el momento más fuerte del sonido aterriza en el ancla: úsalo para impactos y pops).

4. Planifica, luego escribe las escenas. Primero escribe el plan en qa/design_review.md (references/design-review.md, partes 1-6): el guion de color con una línea por escena, el visual que muestra lo que dice cada línea, el héroe de cada escena y el momento estrella. Asigna a cada escena un fondo en timeline.json ("bg": "light" | "dark" | "accent") y vuelve a ejecutar timeline.py emit. Alterna los fondos para que cada corte se lea como un nuevo capítulo. Usa "accent" para los 1-2 momentos más intensos, generalmente el pico emocional. Coloca la revelación de la marca y la tarjeta final en el fondo donde el logotipo real se lea mejor (generalmente light), no en el accent. Luego escribe scripts/s1.jsx ... sN.jsx, cada uno con una llamada scene() con una composición (especificaciones: al inicio de templates/layouts.jsx; guía: references/looks.md):

// scripts/s2.jsx
scene("s2", "list", { label: "El problema",
  items: [["Llegadas tarde.", "tarde"], ["Sorpresas en aduanas.", "aduanas"], ["Seguimiento que no te dice *nada.*", "seguimiento", "nada"]],
  punch: [["Demasiado tarde.", "tarde"]] });

*palabra* marca la parte acentuada de una línea. Los tiempos son palabras de timeline.py words ("palabra", "palabra#2", "palabra+0.3", "in+0.2"), escritas sin puntuación. Las composiciones agrandan o reducen el texto para llenar el cuadro, así que escribe el texto que quieras y deja que la composición le dé tamaño. Mantén las líneas en pantalla cortas: son titulares, no la locución. Solo para algo que ninguna composición cubra (un mapa, una maqueta de producto), copia $KIT/templates/scene_template.jsx.

Haz que al menos un tercio de las escenas sean visuales. Una película que solo tiene palabras sobre fondos se lee como una presentación de diapositivas, por buena que sea la tipografía. Las composiciones visuales ponen un objeto en pantalla del que habla la voz: phone (el producto en la pantalla de un teléfono: una página de pago, un pedido, una actualización de seguimiento), icons (2-4 pictogramas dibujados con etiquetas), flow (paradas unidas por una línea que se llena a medida que se nombra cada una: cliente → teléfono → banco, almacén → puerto → puerta) y bars (2-4 barras que crecen: comisiones, tiempos de espera, antes/después). Elige las escenas donde la voz describe una cosa o un proceso, no una afirmación.

scene("s4", "flow", { label: "Cómo funciona", title: ["Acreditado el *mismo día.*", "dinero", "mismo"],
  nodes: [{ icon: "shop", label: "Vendes", at: "vend" }, { icon: "phone", label: "Tapnest", at: "app" },
          { icon: "bank", label: "Tu cuenta", at: "cuenta", note: "Mismo día" }] });

Los iconos los dibuja el kit (sin archivos): phone card bank cash clock check tick shop bolt chart truck box pin lock user people chat globe send star plane doc. Una escena visual personalizada también cuenta cuando sus capas de imagen/objeto tienen "VIS" en sus nombres (por ejemplo "s5 VIS mapa"); ec.py qa advierte cuando menos de un tercio de las escenas son visuales. No copies layouts.jsx en el proyecto: ec.py lo carga desde el kit, y una copia congela la versión anterior.

5. Elige el look (lee references/looks.md primero). Preselecciona dos looks que encajen con la marca de diferentes maneras, toma el acento de la marca, y compáralos en TUS escenas:

python3 $KIT/scripts/ec.py new
python3 $KIT/scripts/ec.py import soundtrack.wav assets/iconos/*.png
python3 $KIT/scripts/ec.py compare editorial swiss --acento FF5B1F   # -> qa/look_compare.png: ÁBRELO
python3 $KIT/scripts/ec.py look editorial --acento FF5B1F             # aplica el ganador

6. Construye y previsualiza

python3 $KIT/scripts/ec.py run s1 s2 s3 s4 s5 s6 s7 s8 wipes   # s1 crea la composición + banda sonora
python3 $KIT/scripts/ec.py frames 2 4 6.5                      # ABRE qa/frames.png y míralo

Previsualiza dos o tres momentos de cada escena. Para arreglar una escena, edítala y ejecuta ec.py rebuild sN (borra solo esa escena, la reconstruye y vuelve a ejecutar las transiciones). Para reconstruir todo (por ejemplo tras cambiar el look): ec.py run reset s1 ... sN wipes. El look proporciona la transición; para reemplazarla, escribe tu propio scripts/wipes.jsx sin la línea de cabecera "GENERATED" (emit entonces la deja intacta en lugar de sobrescribirla).

7. QA

python3 $KIT/scripts/ec.py qa              # comprueba las reglas 2-9 -> qa/qa_results.json + qa/qa_report.txt: LÉELO
python3 $KIT/scripts/ec.py qa-video <final>.mp4   # comprueba el MP4 renderizado final (fotogramas medios y finales)

Abre el PDF de la hoja de contactos de qa/. Mira también ec.py qa contra tu rama actual git diff:

  • ADVERTENCIA de diseño: menos del 33% de las escenas son visuales. Solución: convierte escenas de texto en phone, flow, bars o icons.
  • ADVERTENCIA de legibilidad: el texto se muestra < X segundos (leyendo la línea de voz más rápida). Ajusta el tiempo de la composición o la longitud del texto.
  • ADVERTENCIA de nombre: el archivo de logotipo no coincide con el nombre de la marca.
  • ERRROR de transición: wipes.jsx es un archivo generado que editaste. Solución: vuelve a ejecutar timeline.py emit para regenerarlo o añade // GENERATED a tu versión personalizada.

Si hay 0 FAIL pero la previsualización se ve mal (texto partido, iconos pequeños, colores incorrectos), corrige la escena. No entregues una película que se ve mal, aunque pase QA.

8. Render

python3 $KIT/scripts/ec.py build h264     # -> comp name.mp4 (H.264 1080p)
python3 $KIT/scripts/ec.py build prores   # -> comp name.mov (ProRes 422 para entrega profesional)
python3 $KIT/scripts/ec.py qa-video comp name.mp4   # verificaciones en el MP4 renderizado

9. Entrega. Informa: título del proyecto, look (con acento), proveedor de voz (y nombre), duración, archivos de salida y su resumen QA. Enumera las advertencias no resueltas: "composición visual 29% (<33% requerido)", "s5 'El proceso': texto 'Automatizado', legible 1.2 s, mínimo 1.8 s", "s7 'Prueba social': icono de usuario, legible 0.9 s, mínimo 1.5 s". Y los problemas reales de las escenas que viste: "s3: el teléfono muestra la fecha de ayer".

Y más importante: ¿la película coincide con el brief original? ¿Es la longitud correcta? ¿El archivo de salida es el que se pidió? ¿El nombre de la marca se pronuncia correctamente y coincide con el logotipo? Siempre verifica las afirmaciones de la entrega mirando el render final. En pruebas, una entrega afirmaba que la comprobación QA aprobaba todo, pero la revisión visual mostraba que el logotipo era en realidad el icono de una aplicación de dibujo; el módulo ec.py qa no verifica el contenido del logotipo, solo que el archivo existe, y el agente confundió "confirmar que no hay fallos" con "el render es correcto".

Flujo de trabajo B: arreglar/auditar un proyecto existente

Partimos de un proyecto creado por otro agente. El proyecto se ve mal (texto ilegible, colores feos, fuera de ritmo, sin escenas visuales) o tiene errores de render. O el usuario quiere que verifiques si está bien para entrega. Lee primero references/pitfalls.md y references/looks.md. Luego ejecuta desde la carpeta del proyecto:

python3 $KIT/scripts/timeline.py check                    # comprueba la línea de tiempo
python3 $KIT/scripts/ec.py qa                               # comprueba las reglas en EffectCraft
find . -name "*.jsx" -path "./scripts/*" | xargs grep -l "scene("   # busca escenas

Si timeline.py check falla (FAIL en superposición de locuciones, tiempos, mezcla, palabras no encontradas): corrige los tiempos primero. Ejecuta timeline.py words -v 2>&1 | head -40 para ver errores de palabras. La corrección típica es cambiar "en+1.0" por una palabra real, o ampliar la ventana de superposición de una escena.

Si la línea de tiempo está bien pero la salida es fea:

  • Sin look: ls scripts/look.jsx, si no está, ejecuta ec.py look editorial --acento FF5B1F (elige un acento de la marca) y ec.py run reset s1 ... sN wipes.
  • Sin escenas visuales: convierte al menos un tercio de las escenas a phone, flow, bars o icons.
  • Mala legibilidad: acorta las líneas de texto o ajusta los valores de tiempo de la composición.
  • Sincronización musical deficiente: ejecuta timeline.py suggest --grid beats para alinear los cortes con los beats del archivo de música.
  • Transiciones que desaparecen porque wipes.jsx tiene la cabecera GENERATED: regenera con timeline.py emit.

Si el render falla (errores de After Effects): ejecuta ec.py doctor para comprobar dependencias, luego ec.py run s1 solo 2>&1 | tail -20 para aislar la escena fallida. Las causas típicas: nombres de fuente incorrectos, referencias de archivo de icono rotas, macros de composición no coincidentes. Informa lo que encontraste y cómo lo arreglaste.

Referencias

ArchivoContenido
references/pitfalls.mdErrores comunes y cómo evitarlos
references/looks.mdDescripciones de estilos + elección + personalización de paletas
references/motion-design.mdPrincipios de diseño de movimiento para gráficos corporativos
references/techniques.mdSincronización con beats, SFX alineados con picos, morphs, transiciones prohibidas
references/brand.mdCómo manejar los activos de marca (logotipos, fuentes, colores)
references/design-review.mdLista de verificación de diseño: guion de color, visual, momento estrella, guía de revisión
references/ui-footage.mdCómo capturar/reconstruir UI de producto para videos SaaS
references/high-energy.mdGuía para anuncios rápidos (estilo TikTok)
references/benchmark_sheet.pngHoja de referencia de calidad (PDF de 4 páginas para comparación)

Plantillas

ArchivoPropósito
templates/timeline.example.jsonEstructura de línea de tiempo completa con bloques de ejemplo
templates/lib.jsxBiblioteca: funciones de utilidad (beats, degradados de preajuste) + importación de look
templates/reset.jsxLimpia la composición
templates/s1.jsxPrimer plano de ejemplo
templates/scene_template.jsxEsqueleto de escena personalizada
templates/hyper.jsxPlantilla de anuncio de alto ritmo (para la regla 8)
templates/layouts.jsxComposición de escenas: phone, list, icons, flow, bars, split, endcard (cargado desde el kit)
demo/Proyecto de demostración completo y silencioso (sin voz)

Notas de implementación

  • Todos los scripts de Python (timeline.py, ec.py) esperan Python 3.10+. Están en $KIT/scripts/. Se ejecutan desde el directorio <proyecto>/.
  • ec.py envía comandos a EffectCraft CLI (effectcraft-cli), que debe estar instalado y en PATH (o configurado por --cli).
  • timeline.py utiliza sox para la mezcla de audio, ffprobe para la duración y ffmpeg para la normalización a -14 LUFS.
  • Los tiempos de las palabras se indexan contra la pista de voz sin recortar; si recortas el audio, los números de tiempo se desplazan.
  • La hoja de contactos de qa/ se genera con timestamps de fotogramas de escena y debe inspeccionarse manualmente; el agente no debe confiar en el texto alternativo.
  • "Overlap" en timeline.json controla cuánto tiempo permanece visible la escena anterior después de que comience la locución de la siguiente (predeterminado 0.3 s, ajustable por escena hasta 0.8 s).
  • Los archivos de iconos PNG en assets/iconos/ son opcionales; el kit dibuja sus propios iconos vectoriales a menos que proporciones un personalizado (por ejemplo, el logo de la aplicación).

Solución de problemas

SíntomaComprobaciónSolución
timeline.py check FAIL en superposiciónEjecuta timeline.py words -vAjusta el overlap de escena en timeline.json
"La composición nombre no existe"ec.py doctor¿Pasó la ejecución de s1 que la crea? Ejecuta ec.py run s1
"No se encuentra el archivo de fuente"ec.py fonts se ejecutó correctamente?Vuelve a ejecutar ec.py fonts. La fuente puede tener un nombre PostScript diferente
Iconos borrosos/pequeñosLas reglas de la composición icons escalan para llenar; comprueba la relación de aspectoPuede que necesites menos iconos o un label más corto
La música no se mezclaffprobe soundtrack.wav¿Falta el archivo de música en assets/bgm/?
SFX no se alineaSeparación del beat de la pista SFXPrueba "align": "peak" o ancla a una palabra en lugar de un beat
El wipes personalizado se sobrescribewipes.jsx falta la línea // GENERATEDAñade // GENERATED a tu wipes personalizado o ponlo en otro archivo e impórtalo al final
ec.py qa dice "No composition"El nombre de la composición en lib.jsx no coincide con el creadoComprueba COMP en scripts/lib.jsx contra timeline.json comp
"error de índice de palabra"Una referencia de palabra en una escena no existe en los datos de vozEjecuta timeline.py words -v para encontrar la palabra faltante; corrige la ortografía o la puntuación en el guion

Aprendizaje y mejora continua

Después de cada entrega, añade una entrada en qa/retrospective.md con:

  • ¿Qué salió bien? (look, sincronización, escena visual)
  • ¿Qué salió mal? (advertencia de QA, error de render, desajuste de diseño)
  • Una cosa que mejorarías la próxima vez (por ejemplo, "prueba el look editorial con un acento más frío", "escribe antes el guion de color", "para escenas de teléfono, previsualiza con datos reales")

Este bucle de retroalimentación te ayuda a elegir mejores looks y composiciones más rápido en proyectos futuros.

Skills relacionados