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
- 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.
- Jeder Engine-Befehl erhält
taskpolicy -b nice -n 19– Vorschau, Rendern, Slides, alle. - 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}. - Rendere erst, nachdem du ein aktuelles Sheet angesehen hast. Ein bestandenes
checkbedeutet, dass die Form gültig ist, nicht, dass der Inhalt richtig ist. durationist 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
- Lies das Sheet mit dem Read-Tool. Jedes Panel. Ein eingefrorener Frame pro Szene.
- 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.
- 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.
taskpolicy -b nice -n 19 node $E render video.json– bestätige zuerst denout-Pfad (Standard = Spezifikations-Basename +.mp4).- 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"}]}
| Typ | Benötigt | Verwendung |
|---|---|---|
| hook / quote / outro | text (+emphasis, source, cta) | Einstieg, Zitat, Abschluss |
| kinetic | lines 1–6 | Phrasen werden nacheinander eingeblendet – keine Daten |
| stat | value (+prefix,suffix,label) | Eine große, zählende Zahl |
| bars | items 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“) |
| donut | value 0–100 | Ein Anteil/Prozentsatz |
| steps | items 1–5 | Nummerierte Anleitung |
| compare | left,right {title,points≤4} | Vorher/Nachher, A vs. B |
| custom | jsx | Alles 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-Symptom | Behebung (in der Spezifikation) |
|---|---|
text too long / Safe-Area-Überlauf | Kürze den Text – Labels ≤ 2 Wörter, Titel ≤ 5. Ersetze niemals eine Datenszene durch kinetischen Text, um dies zu umgehen |
duration too short, needs ≥ Ns | Erhöhe duration oder lasse das automatische Timing wirken (weglassen) |
| Balkenlabels laufen über | Kürze zuerst die Labels, dann den Titel; highlight auf den Story-Balken |
| Balkenwerte über 100 | Skaliere proportional (z. B. Tausend); genauer Wert kommt in das label |
donut-Wert > 100 | Falsche Szene oder falsche Bedeutung – ein Donut ist ein Anteil von 100 |
| Zwei Panels sehen identisch aus | Lösche eines; ein Fakt pro Statistik |
Slide zeigt @yourpage | Deck-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
| Fehler | Stattdessen |
|---|---|
| Die API durch Versuch und Irrtum testen, JSX schreiben | Schreibe eine Spezifikation; neue Optik: custom + Helfer (scenes.md) |
| 2–3 Frames prüfen | Lies jedes Panel auf dem Sheet |
| Jede Szene auf 3 s festgesetzt | Lasse duration weg |
| Standardschriftart, generischer dunkler Hintergrund | Wähle ein Theme |
AE-Effekte manuell in custom-JSX hinzufügen | Verwende eine fx-Voreinstellung; neuer Effekt: füge ihn zu lib/fx.jsx hinzu |
sed -i auf macOS | Bearbeite die Spezifikation mit dem Edit-Tool |
| Rohes CLI innerhalb von Szenen | Raw effectcraft-cli nur für Bearbeitungen außerhalb dieser Szenen (reference/cli.md) |