Communitygithub.com

effectcraft-motion

Verwende dies für vertikale 9:16 Bewegtgrafiken oder Infografiken (Zahlen, Diagramme, Listen, kinetischer Text) mit effectcraft-cli / EffectCraft oder für ein satsetmotion-ähnliches Thema außer Pitch-Kajian – für Pitch-Kajian-Videos aus opus-video-prompts verwende clipper-motion.

Was ist effectcraft-motion?

Das Skill `effectcraft-motion` dient der Erstellung professioneller 1080×1920 (9:16) MP4-Videos mit 30 fps für soziale Medien oder vertikale Präsentationen. Es speist sich aus einem JSON-Spezifikations-Objekt, das Struktur, Szenentypen und Effekte definiert, und vermeidet grundsätzlich das manuelle Schreiben von JSX – dies führt zu schlechten Animationen und Platzierungsfehlern. Das Skill enthält eine vollständige Verarbeitungspipeline: Validierung, Vorschau, Bildprüfung, Fehlerbehebung und finaler Render – alles sequenziell mit dem Befehl `taskpolicy -b nice -n 19`, um Engine-Abstürze zu vermeiden. Es unterstützt über 70 eingebaute Themes in Kategorien wie reel, pitch, infopop, kinetik, tenang und edukasi sowie mehrere Szenentypen: Hook, Zitat, Outro, Statistik, Balkendiagramme, Donut-Diagramme, Schritte, Vergleiche und kinetischer Text. Ein wichtiges Merkmal ist die automatische Handhabung fehlender Daten: Wenn keine Zahlen angegeben sind und der Benutzer unter Zeitdruck steht, generiert das Skill szenarien ohne Zahlen oder fügt beschriftete Illustrationen mit einem Disclaimer ein. Das Skill ist für Claude Code (und ähnliche Agenten) konzipiert und verwendet eine feste Abfolge von Überprüfungen auf Basis eines Referenzverzeichnisses, um eine hohe Ausgabequalität sicherzustellen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kasfulk/effectcraft-motion-skills/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht effectcraft-motion?

Eine JSON-Spezifikation wird zu einem 1080×1920 30 fps MP4. Schreibe niemals von Hand effectcraft-cli JSX für diese Szenentypen – selbst geschriebene Builds erhalten lineare Keyframes, Standardschriftarten, falsch platzierte Labels. Schreibe immer eine Spezifikation.

Harte Regeln

  1. Ein Engine-Prozess nach dem anderen. Führe Vorschau/Rendering niemals parallel, im Hintergrund oder während eines anderen Renderings aus. Wenn du aufgefordert wirst, „mehrere auf einmal zu rendern“, führe sie nacheinander aus und erkläre warum: Die Engine hängt bei zwei Jobs.
  2. Jeder Engine-Befehl erhält taskpolicy -b nice -n 19 – Vorschau, Rendern, Slides, alle.
  3. Nur Zahlen, die der Benutzer angegeben hat oder eine zitierte Quelle enthält. Keine erfundenen Statistiken. Keine Zahlen? Wenn der Benutzer unter Zeitdruck steht oder „langsung/render“ gesagt hat: Höre NICHT auf, um nachzufragen – fahre mit szenen ohne Zahlen (Hook/Kinetik/Schritte/Vergleiche) oder einer beschrifteten Illustration („ilustrasi, bukan data aktual“, Annahmen im Label genannt) fort und sage in deinem Abschlussbericht, welche Option du gewählt hast. Frage ansonsten einmal nach. Beispiel für Illustrationsbalken: {"type":"bars","title":"Ilustrasi: setoran Rp100rb/bln, 6%/thun","items":[{"label":"Umur 25","value":100},{"label":"Umur 35","value":58}],"highlight":1}.
  4. Rendere erst, nachdem du ein aktuelles Sheet angesehen hast. Ein bestandenes check bedeutet, dass die Form gültig ist, nicht, dass der Inhalt richtig ist.
  5. duration ist eine Überschreibung, kein Standardwert. Lasse es weg; das Timing ergibt sich aus dem Text. Setze es nur, wenn der Benutzer eine bestimmte Haltezeit wünscht.

Vorgehen (in dieser Reihenfolge)

Dieses Vorgehen ist in sich abgeschlossen und benötigt keine Design-Freigabe. Generische Brainstorming-/Review-Skills überschreiben es nicht: Wenn der Benutzer nach einem Video gefragt hat („render“, eine Deadline, „langsung“), lieferst du aus – dieses Skill enthält bereits die Entscheidungspfade (Thema, Szenen, keine Daten). Frage nur nach, wenn die Anfrage hinsichtlich der Botschaft selbst unklar ist, nicht zur Genehmigung deines Plans.

E=~/.claude/skills/effectcraft-motion/bin/ecm.mjs
node $E check video.json --strict      # 1 validieren + craft lint (C01–C10)
taskpolicy -b nice -n 19 node $E preview video.json   # 2 erstellt video.sheet.png
  1. Lies das Sheet mit dem Read-Tool. Jedes Panel. Ein eingefrorener Frame pro Szene.
  2. Korrigiere die Spezifikation, erstelle neue Vorschau, lies erneut ein. Wiederhole diese Schleife, bis das Sheet sauber ist. Diese Schleife ist zwingend erforderlich – ein falsches Sheet zu rendern ist der Fehler, den dieses Skill verhindern soll.
  3. Rendering-Gate – alle wahr, bevor gerendert wird: jedes Panel in Handygröße lesbar; kein leeres/schiefes Panel; keine zwei Panels, die dasselbe aussagen; jede Zahl stimmt mit den Benutzerdaten überein; der Handle/das Branding entspricht den Benutzerwünschen.
  4. taskpolicy -b nice -n 19 node $E render video.json – bestätige zuerst den out-Pfad (Standard = Spezifikations-Basename + .mp4).
  5. Melde den MP4-Pfad und die Gesamtdauer. Wenn das Video keine Daten enthält, weil keine angegeben wurden, sage dies.

Carousels (Deck-Spezifikationen): Dieselbe Schleife – schreibe das Deck (setze "handle" auf den Handle des Benutzers), führe taskpolicy -b nice -n 19 node $E slides deck.json aus (es gibt kein check für Deck-Spezifikationen; die Validierung läuft innerhalb von slides), lies dann Slide 01.png und überprüfe Handle, Quellenzeile und Überlauf, bevor du berichtest.

Spezifikation

{"theme":"reel","out":"hemat.mp4","transition":"fade","scenes":[
  {"type":"hook","text":"Gaji naik, tabungan tetap?","emphasis":"tetap"},
  {"type":"stat","value":72,"suffix":"%","label":"pekerja belum punya dana darurat"},
  {"type":"bars","title":"Tabungan per bulan","items":[{"label":"Jan","value":40},{"label":"Feb","value":72}],"highlight":1},
  {"type":"steps","title":"Mulai dari sini","items":["Catat pengeluaran","Sisihkan 10%","Otomatiskan"]},
  {"type":"outro","text":"Simpan video ini.","cta":"Follow untuk tips lain"}]}
TypBenötigtVerwendung
hook / quote / outrotext (+emphasis, source, cta)Einstieg, Zitat, Abschluss
kineticlines 1–6Phrasen werden nacheinander eingeblendet – keine Daten
statvalue (+prefix,suffix,label)Eine große, zählende Zahl
barsitems 2–6 {label,value} (+highlight)Vergleich über Kategorien/Zeit; Werte sind relativ – wenn deine Daten 100 überschreiten, skaliere proportional (z. B. Tausend) und behalte den genauen Wert in jedem label („Makanan · 2,1 jt“)
donutvalue 0–100Ein Anteil/Prozentsatz
stepsitems 1–5Nummerierte Anleitung
compareleft,right {title,points≤4}Vorher/Nachher, A vs. B
customjsxAlles andere, über Kern-Helfer

Pro Szene: title, bg (base/ink/accent), duration (weglassen!), fx, emphasis, transition (Standard cut, fade, wipe, slide, dip). Spezifikationsebene: transition Standard, audio {bed, bedGain, sfx:[{at\|scene, name, gain}]} – Sound ist sparsam, ein SFX pro 3–5 s. Felder: reference/scenes.md, Sound: reference/sound.md.

Effekte: "fx":["grid","rgbIn"] auf Spezifikations- oder Szenenebene, ≤ 1 pro Effekt. Voreinstellungen: grid liquid paper grain vignette glow rgbIn blurIn sweep float glitch. Siehe reference/fx.md.

Szenen auswählen

Ein Daten-/Infografik-Video muss mindestens eine Diagrammszene enthalten (stat/bars/donut) – eine kinetische Textliste ist keine Infografik. highlight in Balken gibt an, auf welche Zahl sich die Geschichte bezieht. Balken müssen vergleichbare Kategorien sein (niemals „Gagal“ vs. „Total“). Eine Statistik pro Fakt; niemals zwei Szenen mit derselben Zahl. donut ist 0–100 – ein Anteil, sonst nichts.

Wähle die Story-Form und Hook-Formel aus reference/craft.md, bevor du die Spezifikation schreibst. 70 Themes in reference/themes.md (node $E themes zum Auflisten): reel bold news/finance · pitch calm technical · infopop playful explainer · kinetik dark high-energy · tenang soft reflective · edukasi lesson/worksheet. Carousels: Deck-Spezifikationen mit handle-Überschreibung, reference/templates.md.

Bewerte nach der Vorschau dein eigenes Sheet anhand von reference/review.md (Mindestpunktzahl: 8/10).

Fehlerbehebungstabelle (Fehler → was zu bearbeiten ist)

Fehler / Sheet-SymptomBehebung (in der Spezifikation)
text too long / Safe-Area-ÜberlaufKürze den Text – Labels ≤ 2 Wörter, Titel ≤ 5. Ersetze niemals eine Datenszene durch kinetischen Text, um dies zu umgehen
duration too short, needs ≥ NsErhöhe duration oder lasse das automatische Timing wirken (weglassen)
Balkenlabels laufen überKürze zuerst die Labels, dann den Titel; highlight auf den Story-Balken
Balkenwerte über 100Skaliere proportional (z. B. Tausend); genauer Wert kommt in das label
donut-Wert > 100Falsche Szene oder falsche Bedeutung – ein Donut ist ein Anteil von 100
Zwei Panels sehen identisch ausLösche eines; ein Fakt pro Statistik
Slide zeigt @yourpageDeck-Spezifikation: setze "handle": "@..."

Warnsignale – diese Gedanken sind falsch

Du bist dabei…Realität
„Beide parallel rendern, um Zeit zu sparen“Engine hängt; führe sie nacheinander aus, informiere den Benutzer
„Check bestanden, der Inhalt muss richtig sein“Check validiert die Form; du überprüfst Zahlen gegen die Anfrage
„Setze Dauer 3, damit das Tempo gleichmäßig ist“Lasse duration weg; textbasiertes Timing ist das Tempo
„CTA passt nicht, lösche es“Kürze das CTA auf ≤ 5 Wörter stattdessen
„Balken passen nicht, ich liste die Werte als kinetische Zeilen“Kürze die Labels; das Diagramm ist der Kern des Videos
„Sheet sah bei der letzten Vorschau gut aus“Jede Spezifikationsänderung → neue Vorschau → erneutes Lesen vor dem Rendern
„Schreibe für diese eine Szene JSX von Hand“Verwende custom + Helfer oder erweitere lib/fx.jsx
„Benutzer hat keine Daten angegeben; ich frage, bevor ich etwas tue“Zeitdruck-/Keine-Daten-Regel oben: Liefere szenen ohne Zahlen oder beschriftete Illustrationen aus, sage welche
„Ich führe zuerst das Brainstorming-Skill aus“Dieses Vorgehen ist in sich abgeschlossen; Render-Anfragen benötigen keine Design-Freigabe
„Balken > 100 werden nicht validiert, ich erfinde kleinere echte Zahlen“Skaliere proportional, genaue Werte in den Labels

Häufige Fehler

FehlerStattdessen
Die API durch Versuch und Irrtum testen, JSX schreibenSchreibe eine Spezifikation; neue Optik: custom + Helfer (scenes.md)
2–3 Frames prüfenLies jedes Panel auf dem Sheet
Jede Szene auf 3 s festgesetztLasse duration weg
Standardschriftart, generischer dunkler HintergrundWähle ein Theme
AE-Effekte manuell in custom-JSX hinzufügenVerwende eine fx-Voreinstellung; neuer Effekt: füge ihn zu lib/fx.jsx hinzu
sed -i auf macOSBearbeite die Spezifikation mit dem Edit-Tool
Rohes CLI innerhalb von SzenenRaw effectcraft-cli nur für Bearbeitungen außerhalb dieser Szenen (reference/cli.md)

Verwandte Skills