Communitygithub.com

jindratilk/ae-motion-graphics

Erstellen und Nachbilden von nativen, editierbaren Motion Graphics in Adobe After Effects durch Scripting. Geeignet für After Effects-Animationen, Produktfilme, UI-Animationen, Promos und Nachbildungen von Referenzvideos.

Was ist ae-motion-graphics?

Diese AI-Agent-Fähigkeit (Skill) ermöglicht es, hochwertige Motion Graphics direkt in Adobe After Effects durch Scripting zu erstellen oder anhand von Referenzvideos nachzubilden. Sie ist für Entwickler, Motion Designer und Agenten gedacht, die After Effects programmatisch steuern möchten – ohne die GUI zu berühren. Der Skill unterstützt zwei Hauptmodi: **RECREATE** (1:1-Nachbildung eines Referenzvideos durch Analyse, Messung und Vergleich) und **CREATE** (Entwicklung eines Originalfilms für eine Marke oder ein Produkt durch Recherche, Konzept, Storyboard und Aufbau). Die Hauptplattform ist Adobe After Effects (getestet mit Version 2026). Der Skill automatisiert die gesamte Pipeline: Starten einer isolierten AE-Instanz, Kommunikation per PID (über ein Swift-Tool `aedo`), Ausführen von ExtendScript-Code, Verwendung einer Python-DSL (`kit.py`) zur Beschreibung der Animation als Daten, und Erstellung nativer AE-Projekte (mit Ebenen, Effekten, Keyframes und Kameras). Zu den Kernregeln gehören minimalistische Keyframes mit geschwungenen Geschwindigkeitskurven, eine einzelne 3D-Kamera pro Szene, natives Editing (Live-Text, Formen, Effekte) und die Vermeidung von Raster-Ersatz. Der Skill enthält auch Werkzeuge für das Rendern (aerender), das Erstellen von Standbildern (`still.py`) und das Überprüfen der Integrität.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Weltklasse-Motion Graphics in After Effects: der Prozess

Arbeiten Sie die gemeinsamen Grundlagen durch, folgen Sie dem relevanten Modus und schließen Sie mit Qualitätssicherung und Abgabe ab:

  1. Teil A – Mit After Effects verbinden. Stellen Sie eine zuverlässige Steuerung Ihrer eigenen AE-Instanz her.
  2. Teil B – Immer geltende Regeln. Lesen Sie die gemeinsamen Animations- und Editierbarkeitsregeln, bevor Sie mit dem Bau beginnen.
  3. Teil C – RECREATE-Prozess. Gleichen Sie ein Referenzvideo durch Analyse, Messung und Vergleich ab.
  4. Teil D – CREATE-Prozess. Entwickeln Sie einen Originalfilm durch Recherche, Konzept, Storyboard und Aufbau.
  5. Teil E – Abschluss. Überprüfen Sie das endgültige Rendering und verpacken Sie die angeforderten Liefergegenstände.

Arbeitsmodi

ModusZielWie es beginnt
RECREATEEin Referenzvideo 1:1 in Timing, Layout, Bewegung und Optik nachbilden, nativ neu aufgebaut.Das Referenzvideo analysieren und vermessen; es definiert die Geschichte.
CREATEEinen originellen Film für eine Marke oder ein Produkt erstellen.Recherche, Konzept, Storyboard und Moodboard, gefolgt vom Aufbau.

Teil A – Mit After Effects verbinden

Das Ziel ist eine private, zuverlässige, skriptbare After Effects-Instanz, die von keinem anderen Agenten gestört werden kann und die Sie steuern können, ohne die GUI zu berühren.

A1. Eigene Instanz starten

  1. Notieren Sie die laufenden AE-PIDs: pgrep -f "Contents/MacOS/After Effects".
  2. Starten Sie eine neue Instanz:
    open -n "/Applications/Adobe After Effects 2026/Adobe After Effects 2026.app" --args -m
    
    Ein kleiner Swift-Launcher (NSWorkspace.openApplication mit createsNewApplicationInstance=true und Argumenten -m -ApplePersistenceIgnoreState YES) kann dasselbe tun und die PID direkt zurückgeben.
    • Starten Sie das rohe Binärprogramm nicht über subprocess.Popen. Dieser Prozess ist nicht bundle-registriert und kann keine AppleEvents empfangen.
  3. Differenzieren Sie die PID-Listen und behalten Sie die neue PID für nachfolgende Befehle.
    • AE kann nach dem Start unter einer neuen PID neu starten. Nehmen Sie die PID, die das Hauptfenster "Adobe After Effects" besitzt (Quartz CGWindowListCopyWindowInfo).
    • Die Bundle-ID ist com.adobe.AfterEffects.application.
  4. Schließen Sie die Startdialoge (Crash-Reparatur → Weiter). Ein Adobe-Anmeldefenster in diesen Instanzen ist ein bekannter Anzeigefehler: ignorieren Sie es, geben Sie niemals Anmeldedaten ein und eskalieren Sie es nicht an den Benutzer.
  5. ensure_ae.py automatisiert dies: es startet neu, wenn die PID tot ist, bestätigt die kleinen Dialoge, erkennt die neu gestartete PID und öffnet das Projekt erneut.

A2. Nur per PID mit ihm kommunizieren

  • tell application "Adobe After Effects 2026" trifft jede Instanz, einschließlich der Instanzen anderer Agenten. Verwenden Sie es niemals.
  • aedo (Swift) sendet das AppleEvent misc/dosc (DoScript) an eine PID.
  • ae.py script.jsx oder ae.py -e "code" umschließt jedes Skript:
    • enthält das ES3-JSON-Polyfill (json.jsx);
    • ruft app.beginSuppressDialogs() auf;
    • führt $.evalFile innerhalb von try/catch aus;
    • schreibt {ok, value, error, line, file, ms} in eine Ergebnisdatei. AppleEvent-Rückgabewerte sind unzuverlässig, lesen Sie daher immer die Datei.
  • Projekt-Identitätswächter: Führen Sie vor jedem mutierenden Skript eine Überprüfung der Ziel-PID und app.project.file gegen das bearbeitete Projekt durch. Schließen oder beenden Sie niemals eine Instanz, von der Sie nicht überprüft haben, dass sie Ihnen gehört.
  • Führen Sie jeweils nur ein AE-Skript aus. Skripte sind oft nicht idempotent, sichern Sie daher oder speichern Sie unter einem anderen Namen, bevor Sie Massenänderungen vornehmen.

A3. Gesundheitscheck vor der eigentlichen Arbeit

Lesen Sie mit einem Skript Folgendes aus:

  • app.version und ob das Projekt Ihnen gehört;
  • den Comp-Renderer (ADBE Advanced 3d wird für 3D-Modellebenen und Umgebungslicht benötigt);
  • Schriftarten: app.fonts.getFontsByPostScriptName(name).length muss größer als 0 sein für jede Schriftart, die Sie verwenden möchten;
  • ob ein Test-saveFrameToPng auf der Festplatte erscheint.

Setzen Sie auch die Einstellung, die es Skripten erlaubt, Dateien zu schreiben und auf das Netzwerk zuzugreifen (Pref_SCRIPTING_FILE_NETWORK_SECURITY).

A4. Die Build-Pipeline: Daten → natives Projekt

Verwenden Sie verfügbare Build-Helfer oder implementieren Sie Äquivalente; die Namen der Helfer beschreiben ihre Rollen.

  1. Python beschreibt den Film als Daten. Eine kit.py-DSL bietet:

    • K()-Sparse-Keys mit benannten Easings;
    • shape, text, precomp, null, camera, model, L (Ebenen);
    • Effekte nach matchName, Masken, Track Mattes, Ausdrücke, Marker, Notizen, Labels.

    Kombinieren Sie Szenenspezifikationen zu einer einzigen Build-Spezifikation.

  2. kit.jsx erstellt native Ebenen aus der Spezifikation.

    • Es erstellt Ebenen von unten nach oben, sodass sie bereits in der endgültigen Reihenfolge sind. Vermeiden Sie Massenneuordnungen mit moveTo, das AE verlangsamen kann.
    • Dann wendet es Parentings, Effekte, Masken, Transformationen, Easings, Mattes und Umgebungslicht-Verkabelung an.
  3. build.py spec.json --new --only "A|B" --stills "Comp:t1,t2" --save output.aep

    • --new schließt das aktuelle Projekt ohne zu speichern (CloseOptions.DO_NOT_SAVE_CHANGES). Andernfalls öffnet newProject() einen "Speichern unter"-Dialog und hängt.
  4. Standbilder: stills.py "Comp" t1,t2 prefix.

    • saveFrameToPng ist asynchron (pollt, bis die Datei existiert) und schreibt 16-Bit-PNGs (vor 8-Bit-Betrachtung durch 257 teilen).
  5. Gezielte Bewegungsrenders: render.py "Comp" start end out.mp4 [--half] [--hq], oder aerender mit -s/-e.

  6. Vollständige Renders: aerender_job.py "Comp" out.mp4 [--half] [--hq].

    • Es speichert eine Job-Kopie und führt aerender -project job.aep -rqindex 1 -sound ON in einem separaten Prozess aus.
    • Es ist schneller als die In-App-Warteschlange, und ein Absturz kann die Arbeitsinstanz nicht lahmlegen.
  7. Kontaktbögen: contact.py (Einzelbilder aus einem Video) und sheet.py (Standbilder, behält das Seitenverhältnis). Verkleinern Sie Bilder immer, bevor Sie sie anzeigen.

A5. ExtendScript-Regeln (ES3)

  • Kein JSON und kein Array.indexOf: Verwenden Sie das Polyfill oder Schleifen. Lesen Sie JSON mit eval('('+text+')').
  • Verwenden Sie niemals verkettete ternäre Operatoren (a?x:b?y:z werden falsch ausgewertet). Verwenden Sie if/else.
  • Adressieren Sie Eigenschaften per matchName. Namenssuchen nach Anzeigenamen haben eine Grenze von 39 Byte und sind lokalisiert.
  • Eine Kamera ist kein threeDLayer: Testen Sie matchName==='ADBE Camera Layer'.
  • Normalisieren Sie Wertedimensionen: Übergeben Sie Skalare an getrennte Dimensionen und 3-Element-Arrays an 3D-Eigenschaften.
  • shutterPhase muss eine ganze Zahl sein.
  • Setzen Sie applyFill=true, bevor Sie eine Textfüllfarbe setzen.
  • Erstellen Sie ein neues TextDocument pro Ebene. Rufen Sie resetCharStyle()/resetParagraphStyle() vor dem Styling auf.
  • Ein Fehler "Eigenschaft oder übergeordnetes Element ist ausgeblendet" bedeutet, dass die Eigenschaft dort nicht gilt. Beispiel: Die Y-Rotation eines Umgebungslichts kann nicht gesetzt werden; animieren Sie stattdessen seine Quellkarte.
  • Formverlaufsfüllfarben können nicht skriptbar gesetzt werden. Verwenden Sie einen Verlaufsrampen-Effekt oder geschichtete Lichtgruppen.

A6. Zusammenleben mit anderen Agenten

  • Andere Agenten können AE "beim Namen" beenden, was auch Ihre Instanz trifft. Speichern Sie oft und halten Sie ensure_ae.py bereit.
  • Drücken von Escape in einem durch Beenden ausgelösten "Änderungen speichern?"-Dialog beendet AE.
  • Computer-Use- und Barrierefreiheitswerkzeuge sehen möglicherweise nur die Fenster anderer Instanzen. Diagnostizieren Sie Ihre eigenen Fenster mit einer Quartz-Fensterliste, gefiltert nach PID, plus screencapture -l <windowId>. Verwerfen Sie sie über Systemereignisse auf Ihrer PID (Tastencode 36 = Eingabetaste, 53 = Escape).
  • Legen Sie versehentliche Störungen einer anderen AE-Instanz offen.

Teil B – Regeln, die immer gelten

Wenden Sie diese Regeln in beiden Modi an, um die Bewegung flüssig und das Projekt bearbeitbar zu halten.

B1. Keyframes: so wenige wie möglich

  • Verwenden Sie so wenige Keyframes wie möglich, um eine flüssige Bewegung zu erzielen. Zehn Keys mit Kurven schlagen tausend lineare Keys.
  • Eine Geste benötigt 2–4 Keys: Start, Ende und einen echten Halt oder einen echten Extrempunkt (Spitze, Tal, Phasenwechsel).
  • Begrenzen Sie jede Eigenschaft auf etwa 7–12 Keys. Mehr Keys bedeuten normalerweise, dass die Bewegung nicht entworfen wurde.
  • Backen Sie Bewegung niemals als bildweise (oder 2-pro-Bild) lineare Keys. Ein Editor kann sie nicht bearbeiten, und sie wirkt mechanisch.
  • Wenn Bewegung aus Messung oder Legacy-Daten stammt, passen Sie sie an (siehe B3). Fügen Sie niemals Samples direkt ein.

B2. Kurven: ein glatter Bogen im Geschwindigkeitsdiagramm

  • Öffnen Sie das Geschwindigkeitsdiagramm jeder animierten Eigenschaft.

    • Ein glatter Glocken- oder Bogenverlauf bedeutet flüssige Bewegung.
    • Ein eckiger, treppenartiger Graph (jeder Key mit Easy Ease auf Null) bedeutet, dass die Bewegung ruckelt.
    • Ein Spike bedeutet einen Ruck, es sei denn, es ist ein beabsichtigter Akzent.
  • Innere Keys einer kontinuierlichen Geste dürfen nicht anhalten.

    • Verwenden Sie kontinuierliche Bézier-Keys.
    • Setzen Sie die innere Geschwindigkeit auf das harmonische Mittel der benachbarten Steigungen, 2ab/(a+b) wenn beide das gleiche Vorzeichen haben, sonst 0, bei einem Einfluss von etwa 33,3.
    • Wenden Sie niemals ein globales Easy Ease auf eine kontinuierliche Geste an: es erzeugt die Treppenstufen.
  • Easing-Vokabular (Aus-Einfluss des vorherigen Keys / Ein-Einfluss dieses Keys):

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

    Ein benutzerdefiniertes Easing ist {'o':[speed,inf],'i':[speed,inf]}. Ein sanftes Zurückziehen, zum Beispiel: {'o':[0,55],'i':[0,92]}.

  • Räumliche Tangenten sind standardmäßig Null, was ein Überschwingen des Pfades vermeidet. Verwenden Sie Bögen nur gezielt.

  • Eine zu kurze Bewegung mit einem harten Expo-Start wirkt wie ein Ruck. Verlängern Sie sie (0,5 → 0,8 s) und weichen Sie das Easing auf, anstatt Keys hinzuzufügen.

  • Überlappen Sie Unterbewegungen zu einer Geste. Eine Faltung, dann ein Flip, dann ein Schub, einzeln ausgeführt, ergibt eine Stop-and-Go-Bewegung. Beginnen Sie die nächste Bewegung, bevor die vorherige endet.

B3. Kurven aus Daten anpassen

Im Recreation-Modus oder beim Konvertieren von dichten Daten:

  1. Tasten Sie die Zielbewegung dicht ab (50–200 Hz) mit valueAtTime oder aus Messung.

  2. Fixieren Sie Knoten am Start und Ende, an exakten Haltepunkten (Geschwindigkeit Null) und an signifikanten Extrempunkten (Steigung Null auf dieser Achse).

  3. Lösen Sie Geschwindigkeiten und Einflüsse durch kleinste Quadrate gegen die Samples: Geschwindigkeiten vorzeichenbeschränkt, Einflüsse auf 0,04–0,94 begrenzt.

  4. Fügen Sie nur dann einen Knoten hinzu, wenn der Fehler die Toleranz überschreitet:

    EigenschaftToleranz
    Position2–3 px (Kamera 3 px)
    Skalierung0,4–0,65
    Opazität0,5–2,5
    Unschärfe~1
    Rotation0,4
  5. Führen Sie bei Vektoreigenschaften Knotenzeiten über Achsen hinweg zusammen, indem Sie den Bézier teilen (de Casteljau). Stellen Sie sicher, dass die eingehende Geschwindigkeit gleich der ausgehenden Geschwindigkeit an jedem inneren Key ist.

  6. Belassen Sie es unverändert, mit einem schriftlichen Grund: Ausdrücke, Time Remap, Tippkadenz, bewusste Halteschalter, Ein-Bild-Sichtbarkeitswechsel.

B4. Eine 3D-Kamera pro Szene

  • Jede Szene hat eine CAMERA • scene (Ein-Knoten, NO_AUTO_ORIENT, getrenntes X/Y/Z). Die Kamera trägt die Bildausschnitte, Schwenks, Fahrten und Zooms.

  • Animieren Sie nicht Position/Skalierung an jedem Element, um eine Kamerafahrt vorzutäuschen.

  • Um eine Kamera aus aufgezeichneter UI-Bewegung abzuleiten (Hauptebenenposition P, Skalierung s, Kompositionszentrum C, Zoom Z0):

    • Kamera XY = C + (C − P)/s
    • Kamera Z = −Z0/s

    Drücken Sie dann alles, was sich von selbst bewegt, in lokalen Begriffen aus.

  • Die Kamera erzählt die Geschichte: Ankunft → Aktion → Beschleunigung → lesbarer Haltepunkt und Makro-Detail → Rückzug-Enthüllung.

  • Lokale Animation bleibt lokal: ein Cursorpfad, ein Klickdruck, ein Scrollen, ein Kartenflip. Eltern-Klick-Pulse innerhalb der Komponente, sodass sie dieser unter Perspektive folgen.

  • Überschriften leben auf einer stabilen 2D-Ebene über der 3D-Welt, sodass Kamerafahrten sie niemals abschneiden. Überprüfen Sie dies mit einer projizierten Textumgebungsprüfung.

B5. Bewegungsunschärfe, Schärfe und Tiefe

  • Die Kompositions-Bewegungsunschärfe ist eingeschaltet (Verschluss 135–180°, 12–16 Samples).
    • Verringern Sie den Verschluss auf 45–90° bei sehr schnellen Rückzügen oder UI-Verschmierungen.
    • Schalten Sie die Bewegungsunschärfe auf Ebenen aus, bei denen sie Text verdoppelt.
  • Halten Sie große Zooms der UI scharf: eine 2–4× supersampelte Renderebenen-Vorkomposition, die die bearbeitbare Vektor-UI enthält, und keine Kollabierung auf Kameraszenen.
  • Advanced 3D-Renderer: halten Sie ≥ 4 Einheiten zwischen parallelen Ebenen, sonst entstehen Z-Fighting und sichtbare Nähte.
  • Die Opazität einer Null-Ebene wirkt sich nicht auf ihre Kinder aus. Propagieren Sie Opazität auf alle Nachkommen.
  • Unscharfe Glüheffekte müssen Ränder wiederholen AUS haben, sonst zeigen sie rechteckige Begrenzungen. Vollbild-radiale Rampen erzeugen die besten Lichtfelder.

B6. Übergänge: Kontinuität, nicht Effekte

  • Ein Übergang sollte motiviert sein:

    • Match-Cut: Das letzte Bild von A gleicht dem ersten Bild von B. Messen Sie die Pose im Rendering.
    • Morph: Eine Form animiert Größe, Rundheit, Farbe und Position zum nächsten Element.
    • Objekt-Übergabe: Ein Element wird extrahiert und zum Helden der nächsten Szene.
    • Kameratauchgang in ein dunkles Element, sodass die nächste Szene aus Schwarz auftaucht.
    • Hell- oder Dunkelelliptischer Reveal hinter dem Produkt über eine Track Matte.
  • Verboten:

    • Vollbild-weiße oder -graue Blitze;
    • Überblendungen zwischen dunklen und hellen Szenen, die mittelgraue Bilder erzeugen;
    • dieselbe Wischblende auf jedem Schnitt;
    • graue Hintergrund-"Wisch"-Streifen.

    Platzieren Sie Blitze dort, wo sie physikalisch hingehören: auf einem Display, mit einer farbigen Bloom-Blüte hinter dem Objekt.

  • Verwenden Sie höchstens 2–3 Vollbild-Verdunkelungswischblenden pro Film.

B7. Nur nativ, immer editierbar

  • Asset-Downloads: Laden Sie alle für die Aufgabe benötigten Assets herunter, ohne den Benutzer zuerst zu fragen, einschließlich Logos, Symbole, Schriftarten, 3D-Modelle, Texturen, Bilder, Videoreferenzen, Musik und Soundeffekte. Bevorzugen Sie offizielle oder zuverlässige Quellen, bewahren Sie erforderliche Lizenzangaben und wenden Sie die untenstehenden Regeln für native Projekte bei der Verwendung der Assets in AE an.
  • Nativ bedeutet Text, Formen, Masken, Effekte, Vorkompositionen, Kameras, Lichter und native 3D-Modellebenen (GLB/OBJ). Audio kann importiert werden.
    • Importieren Sie niemals Screenshots, Referenzausschnitte, Vorrenderings, Webcam-Loops oder Rasterersatz für native Ebenen.
    • Überprüfen Sie jedes Footage-Element, bevor Sie "nativ" behaupten.
  • Editierbar bedeutet Live-Text, Schieberegler für Steuerungen, klare Ebenennamen und wiederverwendbare Komponentenvorkompositionen, die Änderungen überall dort propagieren, wo sie verwendet werden.
  • Halten Sie Text nach Bearbeitungen mit einem Ankerpunkt-Ausdruck von sourceRectAtTime zentriert.

B8. Typografie

  • Nur Live-Text mit den echten Markenschriftarten. Überprüfen Sie mit getFontsByPostScriptName und installieren Sie statische Instanzen unter einem eindeutigen Familiennamen, wenn nötig.
  • Überschriften sind kurz, fett, Satzfall, mit einem Punkt. Laufweite −20 bis −40.
  • Einblendung pro Zeichen oder Wort: Opazität 0, Unschärfe 20–24, y +14–26, Ease-Out über 0,45–0,55 s. Die Ausblendung spiegelt die Einblendung: 0,25–0,35 s, Unschärfe aufwärts.
  • Messen Sie Breiten gegen das echte TTF (PIL bei 4× Supersampling), sodass Unterstreichungen, Pillen und andere Elemente präzise positioniert werden können.

... (Fortsetzung folgt im vollständigen Skill)

Verwandte Skills