Communitygithub.com

Motion Craft Pro · 动效工坊 Pro

Motion Craft Pro — un stack de dirección de gráficos en movimiento programáticos, inspirado en Remotion: storyboard JSON, suavizado spring, helpers de escena, Edge TTS con subtítulos por palabra, render Canvas 1080p y montaje con FFmpeg. Estética Claude Opus: tipografía editorial serena, abundante espacio en blanco, sutil spring. No es video fotorrealista por IA.

¿Qué es Motion Craft Pro · 动效工坊 Pro?

Motion Craft Pro es un stack de dirección ligero para crear gráficos animados programáticos (motion graphics) directamente desde código en Canvas. Está pensado para desarrolladores y agentes de IA como Claude que quieran producir piezas animadas con un flujo de trabajo riguroso y estético: primero se define un storyboard en JSON, luego se genera locución con Edge TTS (con subtítulos por palabra o por frase), se renderizan fotogramas clave para inspección visual y finalmente se compone el video completo con audio y subtítulos mediante FFmpeg. El stack está diseñado para funcionar en el ecosistema de herramientas de línea de comandos de Node.js y Python, y se apoya en Puppeteer para renderizar páginas HTML5 Canvas. Su estética se inspira en Claude Opus 5.5: tipografía editorial sobria, amplios márgenes, colores cálidos y animaciones spring con overshoot muy contenido (damping 16-18). No genera video fotorrealista ni animaciones 3D complejas; se especializa en motion graphics limpios, como títulos, estadísticas, barras comparativas, citas y tarjetas finales. Es completamente agnóstico al proveedor de IA pero optimizado para agentes como Claude, Cursor o Codex que necesitan un flujo determinista y reproducible, sin depender de servicios de video por difusión.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/songyuqiang55-create/motion-craft-pro/tree/master/skills/motion-craft

Preguntar en tu IA favorita

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

Documentación

¿Qué hace Motion Craft Pro · 动效工坊 Pro?

Gráficos animados programáticos. Alineados con la estética y hábitos de Claude Opus 5.5 al escribir código para piezas visuales: primero el storyboard, luego la locución, luego los fotogramas fijos, luego el render completo.

No es como Kling/Jimeng — esos videos generados por IA. La imagen se pinta fotograma a fotograma en Canvas mediante código.

Primero: ubicar el directorio del skill (siempre obligatorio)

engine.js / scenes.js / render.js / compose.py / tts.py / film.html / storyboard.json todos en el mismo directorio que este SKILL.md (plano, sin subcarpetas).

<directorio_skill> = ruta absoluta del directorio padre de este archivo.

# Autoverificación de ruta
python "<directorio_skill>/compose.py" --check

Prohibido usar rutas relativas como python scripts/compose.py — el entorno de revisión no las encontrará.

Dependencias

DependenciaUso
Node 18+render.js
puppeteer-coreControlar Chrome local
Chrome / ChromiumRenderizado
Python 3.9+tts / compose
edge-ttspip install edge-tts
FFmpeg completoComposición (no usar la versión reducida de Playwright)

Estándares de calidad (para que sea "Pro")

  1. Por defecto 1920×1080 (también compatible con 1440×1080 / 1080×1920 / 1080×1080)
  2. Una cosa por pantalla; fundido obligatorio entre escenas; hold largo, entrada corta
  3. Spring con ligero overshoot (damping≈16–18, prohibido el rebote excesivo en toda la pantalla)
  4. Espacio en blanco: margen exterior ≥ 8% del lado corto; texto cuerpo en blanco cálido #f4f1ea, color de acento sobrio (por defecto bronce #c4a574)
  5. Títulos con espaciado entre letras; diferencia de tamaños entre niveles ≥ 1.5×
  6. Locución primero + exportar subtítulos con WordBoundary siempre que sea posible
  7. Primero exportar ≥4 fotogramas fijos para revisión, luego renderizar la duración completa
  8. renderFrame(t) es una función pura: prohibido Date.now() / Math.random()

Flujo de trabajo (estrictamente en orden)

1. Escribir el storyboard JSON (antes que cualquier código)

Copiar storyboard.json, completar según storyboard.schema.json:

  • meta: formato, duración, texto completo de la narración, voz
  • beats[]: id, start, end, type, copy, visual
  • Tipos de escena: TitleBeat / BulletReveal / StatCounter / CompareBars / QuoteCard / EndCard

Usar números, no adjetivos. Ejemplo: título 86px, entrada 0.9s, hold 2.2s — no escribir "que se vea grandioso".

2. TTS → Duración real → Reajustar la línea de tiempo

python "<directorio_skill>/tts.py" \
  --text-file narracion.txt \
  --out "<directorio_trabajo>/voice.mp3" \
  --voice es-ES-AlvaroNeural \
  --rate=-6% \
  --captions-json "<directorio_trabajo>/captions.json" \
  --captions-vtt "<directorio_trabajo>/captions.vtt"

Usar la duración real de voice.mp3 para ajustar beats[].start/end y meta.duration. No escribir primero los tiempos a ojo y luego añadir la locución.

Nota sobre subtítulos: Si Edge TTS devuelve WordBoundary se agrupa por palabra; actualmente la mayoría de voces en español solo tienen SentenceBoundary, el script divide por comas y puntos para crear VTT por frases.

3. Completar film.html (o basarse en la plantilla)

  • Referencias al mismo directorio: engine.js, scenes.js (no ../assets/)
  • Incrustar el storyboard en la página, o mantenerlo sincronizado con storyboard.json
  • Llamar a MCScenes.drawScene(...); la decoración lateral se puede escribir a mano, pero el contenido debe usar los componentes de escena

4. Revisión de fotogramas fijos (obligatorio)

Primero renderizar una muestra corta o arrastrar t en el navegador, o renderizar puntos clave a 1fps. Al menos revisar: inicio, mitad, datos/comparación, final.

Verificar: superposiciones, texto desbordado, oscuridad excesiva, alineación, legibilidad de subtítulos.

5. Renderizado completo

node "<directorio_skill>/render.js" \
  "<directorio_trabajo>/film.html" \
  "<directorio_trabajo>/frames" \
  30 \
  18

6. Composición

python "<directorio_skill>/compose.py" \
  --frames "<directorio_trabajo>/frames" \
  --voice-file "<directorio_trabajo>/voice.mp3" \
  --captions "<directorio_trabajo>/captions.vtt" \
  --out "<directorio_trabajo>/out.mp4" \
  --duration 18 \
  --width 1920 --height 1080

Opcional: --bgm music.mp3 (ducking de locución), --burn-captions, o --text para que compose integre TTS inline.

7. Leer qa-report.json + cuatro qa-stills

Si no pasa la revisión, modificar el storyboard/maquetación y re-renderizar — no entregar a la fuerza.

API del motor (engine.js)

const {
  Ease, spring, springSeg, seg, lerp, beatAlpha,
  glow, beam, drawBackdrop, createParticles, drawParticles,
  drawGrain, drawVignette, drawColorGrade,
  drawTracked, wrapCN, camera, transition, applyWipe,
  divider, card, ring, bars,
  drawCaptions, captionsFromWordBoundaries, layoutGrid, Palette
} = MC;

const { TitleBeat, BulletReveal, StatCounter, CompareBars, QuoteCard, EndCard, drawScene } = MCScenes;

Parámetros recomendados para Spring (estética Claude)

UsodampingstiffnessovershootClamping
Entrada de título16–18140–160false (permitir ligero rebote)
Elementos de lista18145true
Contador numérico14120false

Formatos de pantalla

UsoTamaño
Horizontal por defecto1920×1080
Diapositivas / 4:31440×1080
Vertical1080×1920
Cuadrado1080×1080

Usar layoutGrid(W,H) para obtener márgenes y columnas dobles.

Entregables

  • storyboard.json
  • film.html (renderizable de nuevo)
  • voice.mp3 + captions.vtt / captions.json
  • out.mp4 (calidad 1080p)
  • qa-report.json + qa-stills/*.png ≥ 4

Límites

  • Produce motion graphics, no imágenes reales, no video generado por difusión
  • No incluye 3D complejo / animación de personajes / fluidos
  • Edge TTS no es una voz humana real; su rango emocional es limitado
  • No incluye un proyecto completo de Remotion (ecosistema React, clúster de renderizado server-side); este paquete es un stack de dirección ligero listo para usar

Skills relacionados