Communitygithub.com

jindratilk/ae-motion-graphics

Crea y recrea gráficos animados nativos y editables en Adobe After Effects mediante scripting. Ideal para animaciones en After Effects, vídeos de producto, animaciones de UI, promociones y recreaciones de vídeos de referencia.

¿Qué es ae-motion-graphics?

Esta habilidad permite controlar Adobe After Effects mediante scripting para crear o recrear gráficos animados de manera nativa y totalmente editable. El proceso se divide en cinco partes: conexión con After Effects, reglas universales de animación, recreación a partir de una referencia, creación original y finalización con exportación. Soporta dos modos de trabajo: RECREATE, para igualar 1:1 un vídeo de referencia en temporización, diseño, movimiento y aspecto; y CREATE, para desarrollar una pieza original desde la investigación y el concepto hasta la animación final. La herramienta utiliza Python para describir la animación como datos, ExtendScript (ES3) para construir los elementos nativos en After Effects, y un conjunto de utilidades como `kit.py`, `kit.jsx`, `build.py`, `stills.py`, `render.py`, y `aerender_job.py` para automatizar la construcción, renderizado y generación de contact sheets. Las reglas clave incluyen usar la menor cantidad de keyframes posible con curvas suaves, una única cámara 3D por escena, transiciones motivadas (sin destellos ni fundidos cruzados neutros), y mantener todo nativo (texto, formas, máscaras, efectos, precomposiciones, cámaras, luces y modelos 3D) para garantizar la editabilidad. La comunicación con After Effects se realiza mediante AppleEvents dirigidos a un PID específico para evitar interferencias con otras instancias de agentes.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jindratilk/claude-skill-ae-motion-graphics/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

Gráficos animados de primer nivel en After Effects: el proceso

Trabaja con los fundamentos compartidos, sigue el modo relevante y luego finaliza con control de calidad y entrega:

  1. Parte A – Conectar con After Effects. Establece un control fiable de tu propia instancia de AE.
  2. Parte B – Reglas que siempre aplican. Lee las reglas compartidas de animación y editabilidad antes de construir.
  3. Parte C – Proceso de RECREACIÓN. Iguala una referencia mediante análisis, medición y comparación.
  4. Parte D – Proceso de CREACIÓN. Desarrolla una pieza original mediante investigación, concepto, historia y construcción.
  5. Parte E – Finalización. Verifica el render final y empaqueta los entregables solicitados.

Modos de trabajo

ModoObjetivoCómo comienza
RECREATEIgualar un vídeo de referencia 1:1 en temporización, diseño, movimiento y aspecto, reconstruido de forma nativa.Analiza y mide la referencia; ella define la historia.
CREATECrear una pieza original para una marca o producto.Investigación, concepto, historia y moodboard, seguido de la construcción.

Parte A – Conectar con After Effects

El objetivo es una instancia privada, fiable y scriptable de After Effects que ningún otro agente pueda perturbar, y que puedas manejar sin tocar la interfaz gráfica.

A1. Inicia tu propia instancia

  1. Registra los PID de AE en ejecución: pgrep -f "Contents/MacOS/After Effects".
  2. Inicia una nueva instancia:
    open -n "/Applications/Adobe After Effects 2026/Adobe After Effects 2026.app" --args -m
    
    Un pequeño lanzador Swift (NSWorkspace.openApplication con createsNewApplicationInstance=true y argumentos -m -ApplePersistenceIgnoreState YES) puede hacer lo mismo y devolver el PID directamente.
    • No inicies el binario directamente con subprocess.Popen. Ese proceso no está registrado en el bundle y no puede recibir AppleEvents.
  3. Diferencia las listas de PID y conserva el nuevo PID para comandos posteriores.
    • AE puede re-crearse bajo un nuevo PID después del inicio. Toma el PID que posee la ventana principal de "Adobe After Effects" (Quartz CGWindowListCopyWindowInfo).
    • El bundle id es com.adobe.AfterEffects.application.
  4. Elimina los diálogos de inicio (Crash Repair → Continue). Una ventana de inicio de sesión de Adobe en estas instancias es un conocido fallo de visualización: ignórala, nunca introduzcas credenciales y no la comuniques al usuario.
  5. ensure_ae.py automatiza todo esto: reinicia cuando el PID muere, confirma los diálogos pequeños, detecta el PID regenerado y reabre el proyecto.

A2. Comunícate solo por PID

  • tell application "Adobe After Effects 2026" afecta cualquier instancia, incluyendo las de otros agentes. No lo uses nunca.
  • aedo (Swift) envía el AppleEvent misc/dosc (DoScript) a un PID.
  • ae.py script.jsx o ae.py -e "código" envuelve cada script:
    • incluye el polyfill JSON ES3 (json.jsx);
    • llama a app.beginSuppressDialogs();
    • ejecuta $.evalFile dentro de un try/catch;
    • escribe {ok, value, error, line, file, ms} en un archivo de resultado. Los valores de retorno de AppleEvent no son fiables, así que siempre lee el archivo.
  • Guardia de identidad del proyecto: antes de cualquier script mutante, verifica el PID objetivo y app.project.file contra el proyecto que se está editando. Nunca cierres o salgas de una instancia que no hayas verificado que es tuya.
  • Ejecuta un script de AE a la vez. Los scripts a menudo no son idempotentes, así que haz una copia de seguridad o Guarda Como antes de cambios masivos.

A3. Verificación de estado antes del trabajo real

Con un script, lee:

  • app.version y si el proyecto es tuyo;
  • el renderizador de la composición (se necesita ADBE Advanced 3d para capas de modelo 3D y luces ambientales);
  • fuentes: app.fonts.getFontsByPostScriptName(name).length debe ser mayor que 0 para cada fuente que planees usar;
  • que un saveFrameToPng de prueba aparezca en el disco.

También establece la preferencia que permite a los scripts escribir archivos y acceder a la red (Pref_SCRIPTING_FILE_NETWORK_SECURITY).

A4. El pipeline de construcción: datos → proyecto nativo

Usa los helpers de construcción disponibles o implementa equivalentes; los nombres de los helpers describen sus roles.

  1. Python describe la pieza como datos. Un DSL kit.py proporciona:

    • K() claves dispersas con easing nombrado;
    • shape, text, precomp, null, camera, model, L (capas);
    • efectos por matchName, máscaras, pistas matte, expresiones, marcadores, notas, etiquetas.

    Combina las especificaciones de la escena en una única especificación de construcción.

  2. kit.jsx construye capas nativas a partir de la especificación.

    • Crea las capas de abajo arriba, por lo que ya están en el orden final. Evita el reordenamiento masivo con moveTo, que puede bloquear AE.
    • Luego aplica parentesco, efectos, máscaras, transformaciones, eases, mattes y cableado de luz ambiental.
  3. build.py spec.json --new --only "A|B" --stills "Comp:t1,t2" --save salida.aep

    • --new cierra el proyecto actual sin guardar primero (CloseOptions.DO_NOT_SAVE_CHANGES). De lo contrario, newProject() abre un diálogo de Guardar Como y se cuelga.
  4. Stills: stills.py "Comp" t1,t2 prefijo.

    • saveFrameToPng es asíncrono (espera hasta que el archivo exista) y escribe PNGs de 16 bits (divide entre 257 para visualización en 8 bits).
  5. Renders de movimiento específicos: render.py "Comp" inicio fin salida.mp4 [--half] [--hq], o aerender con -s/-e.

  6. Renders completos: aerender_job.py "Comp" salida.mp4 [--half] [--hq].

    • Guarda una copia del trabajo y ejecuta aerender -project trabajo.aep -rqindex 1 -sound ON en un proceso separado.
    • Es más rápido que la cola dentro de la app, y un fallo no afecta a la instancia de trabajo.
  7. Contact sheets: contact.py (fotogramas de un vídeo) y sheet.py (stills, mantiene la relación de aspecto). Siempre reduce el tamaño de las imágenes antes de visualizarlas.

A5. Reglas de ExtendScript (ES3)

  • No hay JSON ni Array.indexOf: usa el polyfill o bucles. Lee JSON con eval('('+text+')').
  • Nunca uses ternarios encadenados (a?x:b?y:z evaluado incorrectamente). Usa if/else.
  • Direcciona las propiedades por matchName. Las búsquedas por nombre visible tienen un límite de 39 bytes y están localizadas.
  • Una cámara no es threeDLayer: prueba matchName==='ADBE Camera Layer'.
  • Normaliza las dimensiones de los valores: pasa escalares a propiedades separadas y arrays de 3 elementos a propiedades 3D.
  • shutterPhase debe ser un entero.
  • Establece applyFill=true antes de asignar un color de relleno de texto.
  • Crea un TextDocument nuevo por capa. Llama a resetCharStyle()/resetParagraphStyle() antes de aplicar estilo.
  • Un error "la propiedad o el padre está oculto" significa que la propiedad no aplica allí. Ejemplo: no se puede establecer la Rotación Y de una luz ambiental; anima su mapa de origen.
  • Los colores de relleno de degradado de forma no pueden ser scriptados. Usa un efecto Gradient Ramp o grupos de luces en capas.

A6. Coexistencia con otros agentes

  • Otros agentes pueden cerrar AE "por nombre", lo que también afecta a tu instancia. Guarda a menudo y ten ensure_ae.py listo.
  • Pulsar Escape en un diálogo "¿Guardar cambios?" provocado por un cierre cierra AE.
  • Las herramientas de uso por ordenador y accesibilidad pueden ver solo las ventanas de otras instancias. Diagnostica tus propias ventanas con una lista de ventanas Quartz filtrada por PID más screencapture -l <windowId>. Descartarlas mediante System Events en tu PID (código de tecla 36 = Retorno, 53 = Escape).
  • Informa de cualquier interferencia accidental con otra instancia de AE.

Parte B – Reglas que siempre aplican

Aplica estas reglas en ambos modos para mantener el movimiento suave y el proyecto editable.

B1. Keyframes: tan pocos como sea posible

  • Usa la menor cantidad de keyframes posible para obtener un movimiento suave. Diez claves con curvas superan a mil claves planas.
  • Un gesto necesita de 2 a 4 claves: inicio, fin, y una pausa real o un extremo real (pico, valle, cambio de fase).
  • Limita cada propiedad a aproximadamente 7–12 claves. Más claves normalmente significa que el movimiento no está diseñado.
  • Nunca hornees el movimiento como claves lineales por fotograma (o 2 por fotograma). Un editor no puede editarlo y parece mecánico.
  • Cuando el movimiento proviene de medición o datos heredados, ajústalo (ver B3). Nunca pegues muestras.

B2. Curvas: un arco suave en la gráfica de velocidad

  • Abre la gráfica de velocidad de cada propiedad animada.

    • Una campana o arco suave significa movimiento suave.
    • Una gráfica angular, escalonada (cada clave con Easy Ease a cero) significa que el movimiento tartamudea.
    • Un pico significa un tirón, a menos que sea un acento intencionado.
  • Las claves interiores de un gesto continuo no deben detenerse.

    • Usa claves Bézier continuas.
    • Establece la velocidad interior como la media armónica de las pendientes vecinas, 2ab/(a+b) cuando ambas tienen el mismo signo, si no 0, con una influencia de aproximadamente 33.3.
    • Nunca apliques un Easy Ease global a un gesto continuo: crea escalones.
  • Vocabulario de easing (influencia de salida de la clave anterior / influencia de entrada de esta clave):

    NombreInfluencia
    ease33/33
    smooth70/70
    inout82/82
    out12/88
    expo6/94
    snap3/97
    in88/12
    soft45/75

    Un ease personalizado es {'o':[velocidad,inf],'i':[velocidad,inf]}. Un suave retroceso, por ejemplo: {'o':[0,55],'i':[0,92]}.

  • Las tangentes espaciales tienen valor predeterminado cero, lo que evita el sobreimpulso de la trayectoria. Usa arcos solo con un propósito.

  • Un movimiento demasiado corto con un inicio expo brusco se percibe como un tirón. Alárgalo (0.5 → 0.8 s) y suaviza el ease en lugar de añadir claves.

  • Superpone submovimientos en un solo gesto. Un pliegue, luego un giro, luego un empujón, hechos por separado, dan un movimiento de parada y arranque. Inicia el siguiente movimiento antes de que termine el anterior.

B3. Ajuste de curvas a partir de datos

En el modo Recreación, o al convertir cualquier dato denso:

  1. Muestrea el movimiento objetivo densamente (50–200 Hz) con valueAtTime o desde la medición.

  2. Fija nudos al inicio y al final, en pausas exactas (velocidad cero) y en extremos significativos (pendiente cero en ese eje).

  3. Resuelve velocidades e influencias mediante mínimos cuadrados contra las muestras: velocidades con restricción de signo, influencias limitadas a 0.04–0.94.

  4. Añade un nudo solo donde el error supere la tolerancia:

    PropiedadTolerancia
    Posición2–3 px (cámara 3 px)
    Escala0.4–0.65
    Opacidad0.5–2.5
    Desenfoque~1
    Rotación0.4
  5. Para propiedades vectoriales, fusiona los tiempos de los nudos entre ejes dividiendo la Bézier (de Casteljau). Afirma que la velocidad entrante es igual a la velocidad saliente en cada clave interior.

  6. Conserva tal cual, con una razón escrita: expresiones, remapeo de tiempo, cadencia de escritura, interruptores de pausa deliberados, cambios de visibilidad de un fotograma.

B4. Una cámara 3D por escena

  • Cada escena tiene una CAMERA • escena (un nodo, NO_AUTO_ORIENT, X/Y/Z separados). La cámara lleva el encuadre, paneos, travellings y zooms.

  • No animes Posición/Escala en cada elemento para simular un movimiento de cámara.

  • Para derivar una cámara a partir de un movimiento de UI registrado (posición de capa principal P, escala s, centro de la composición C, zoom Z0):

    • cámara XY = C + (C − P)/s
    • cámara Z = −Z0/s

    Luego re-expresa todo lo que se mueve por sí mismo en términos locales.

  • La cámara cuenta la historia: llegada → acción → aceleración → pausa legible, y detalle macro → revelación de alejamiento.

  • La animación local permanece local: una trayectoria de cursor, una pulsación de clic, un desplazamiento, un giro de tarjeta. Los pulsaciones de clic padre dentro del componente, por lo que siguen el elemento bajo perspectiva.

  • Los titulares viven en un plano 2D estable sobre el mundo 3D, para que los empujes de cámara nunca los recorten. Verifica con una comprobación de límites de texto proyectado.

B5. Desenfoque de movimiento, nitidez y profundidad

  • El desenfoque de movimiento de la composición está activado (obturación 135–180°, 12–16 muestras).
    • Reduce la obturación a 45–90° en retrocesos muy rápidos o manchas de UI.
    • Desactiva el desenfoque de movimiento en capas donde duplica el texto.
  • Mantén los zooms grandes de UI nítidos: una precomposición de plano de render sobremuestreada 2–4× que contenga la UI vectorial editable, y sin colapsar en escenas de cámara.
  • Renderizador 3D avanzado: mantén ≥ 4 unidades entre planos paralelos, o se solapan y muestran costuras.
  • La opacidad de un nulo no afecta a sus hijos. Propaga la opacidad a todos los descendientes.
  • Los brillos desenfocados deben tener Repetir píxeles de borde DESACTIVADO, de lo contrario muestran límites rectangulares. Los Ramp radiales de fotograma completo crean los mejores campos de luz.

B6. Transiciones: continuidad, no efectos

  • Una transición debe estar motivada:

    • Corte de emparejamiento: el último fotograma de A es igual al primer fotograma de B. Mide la pose en el render.
    • Morfosis: una forma anima tamaño, redondez, color y posición hasta convertirse en el siguiente elemento.
    • Transferencia de objeto: un elemento se extrae y se convierte en el héroe de la siguiente escena.
    • Inmersión de cámara en un elemento oscuro, para que la siguiente escena emerja del negro.
    • Revelación con disco de luz u oscuridad detrás del producto mediante una pista matte.
  • Prohibido:

    • destellos blancos o grises a fotograma completo;
    • fundidos cruzados entre escenas oscuras y claras, que producen fotogramas grises medios;
    • el mismo barrido en cada corte;
    • franjas de "barrido" con fondo gris.

    Coloca los destellos donde pertenecen físicamente: en una pantalla, con un brillo coloreado detrás del objeto.

  • Usa como máximo 2–3 cortinillas de oclusión a fotograma completo por película.

B7. Solo nativo, siempre editable

  • Descargas de activos: Descarga cualquier activo necesario para la tarea sin preguntar primero al usuario, incluidos logotipos, iconos, fuentes, modelos 3D, texturas, imágenes, referencias de vídeo, música y efectos de sonido. Prefiere fuentes oficiales o fiables, conserva la atribución de licencia requerida y aplica las reglas de proyecto nativo a continuación al usar los activos en AE.
  • Nativo significa texto, formas, máscaras, efectos, precomposiciones, cámaras, luces y capas de modelo 3D nativas (GLB/OBJ). El audio puede importarse.
    • Nunca importes capturas de pantalla, recortes de referencia, pre-renders, bucles de webcam o sustitutos raster para capas nativas.
    • Audita cada elemento de footage antes de afirmar que es "nativo".
  • Editable significa texto en vivo, deslizadores para controles, nombres de capa claros y precomposiciones de componentes reutilizables que propagan cambios dondequiera que se utilicen.
  • Mantén el texto centrado después de las ediciones con una expresión de punto de anclaje desde sourceRectAtTime.

B8. Tipografía

  • Solo texto en vivo, con las fuentes reales de la marca. Verifica con getFontsByPostScriptName, e instala instancias estáticas bajo un nombre de familia único cuando sea necesario.
  • Los titulares son cortos, en negrita, con mayúscula inicial y punto final. Tracking de −20 a −40.
  • Revelado por carácter o palabra: opacidad 0, desenfoque 20–24, y +14–26, ease-out en 0.45–0.55 s. La salida refleja la entrada: 0.25–0.35 s, desenfocando hacia arriba.
  • Mide los anchos con el TTF real (PIL a 4× supersampling) para que subrayados, píldoras y...

Skills relacionados