Que fait effectcraft-motion ?
Une spécification JSON devient un MP4 1080×1920 à 30 ips. N'écrivez jamais manuellement du JSX effectcraft-cli pour ces types de scènes — les constructions manuelles produisent des interpolations linéaires, des polices par défaut, des étiquettes mal placées. Écrivez toujours une spécification.
Règles strictes
- Un seul processus du moteur à la fois. N'exécutez jamais l'aperçu/rendu en parallèle, en arrière-plan ou pendant un autre rendu. Quand on vous demande de « faire plusieurs rendus à la fois », exécutez-les en série et expliquez pourquoi : le moteur se bloque avec deux tâches.
- Chaque commande du moteur utilise
taskpolicy -b nice -n 19— aperçu, rendu, diapositives, toutes. - Uniquement les chiffres donnés par l'utilisateur ou issus d'une source citée. Pas de statistiques inventées. Pas de chiffres ? Si l'utilisateur est pressé par le temps ou a dit « langsung/render » : NE vous arrêtez PAS pour demander — continuez avec des scènes sans chiffres (hook/kinetic/steps/compare) ou une illustration étiquetée (« ilustrasi, bukan data aktual », hypothèses mentionnées dans l'étiquette), et dites dans votre rapport final celle que vous avez choisie. Sinon, demandez une fois. Exemple d'illustration de barres :
{"type":"bars","title":"Ilustrasi: setoran Rp100rb/bln, 6%/thun","items":[{"label":"Umur 25","value":100},{"label":"Umur 35","value":58}],"highlight":1}. - Effectuez le rendu uniquement après avoir consulté une planche récente.
checkvalide la forme, pas le contenu. durationest une surcharge, pas une valeur par défaut. Omettre ; le timing provient du texte. Ne la définissez que si l'utilisateur demande un temps d'arrêt spécifique.
Procédure (dans l'ordre)
Cette procédure est autonome et ne nécessite aucune étape d'approbation de conception. Les compétences génériques de brainstorming/révision ne la remplacent pas : lorsque l'utilisateur a demandé une vidéo (« render », une date limite, « langsung »), vous livrez — cette compétence contient déjà les chemins de décision (thème, scènes, absence de données). Ne vous arrêtez pour demander que lorsque la requête est ambiguë sur le message lui-même, pas pour approuver votre plan.
E=~/.claude/skills/effectcraft-motion/bin/ecm.mjs
node $E check video.json --strict # 1 valider + lint craft (C01–C10)
taskpolicy -b nice -n 19 node $E preview video.json # 2 construit video.sheet.png
- Lisez la planche avec l'outil Read. Chaque panneau. Une image fixe réglée par scène.
- Corrigez la spécification, re-prévisualisez, re-lisez. Boucle jusqu'à ce que la planche soit propre. Cette boucle est obligatoire — une planche erronée rendue est l'échec que cette compétence vise à prévenir.
- Porte de rendu — toutes vraies avant de rendre : chaque panneau lisible à la taille d'un téléphone ; pas de panneau vide/déséquilibré ; pas deux panneaux disant la même chose ; chaque chiffre correspond aux données de l'utilisateur ; le handle/la marque est celle demandée par l'utilisateur.
taskpolicy -b nice -n 19 node $E render video.json— confirmez d'abord le cheminout(par défaut = nom de base de la spec +.mp4).- Rapportez le chemin du MP4 et la durée totale. Si la vidéo n'a pas de données parce qu'aucune n'a été fournie, dites-le.
Carrousels (specs de deck) : même boucle — écrivez le deck (définissez "handle" sur le handle de l'utilisateur), exécutez taskpolicy -b nice -n 19 node $E slides deck.json (il n'y a pas de check pour les specs de deck ; la validation s'exécute dans slides), puis lisez la diapositive 01.png et vérifiez le handle, la ligne de source et le débordement avant de signaler.
Spécification
{"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"}]}
| type | nécessite | utilisation pour |
|---|---|---|
| hook / quote / outro | text (+emphasis, source, cta) | ouverture, citation, fermeture |
| kinetic | lines 1–6 | phrases révélées une par une — pas de données |
| stat | value (+prefix,suffix,label) | un grand nombre unique |
| bars | items 2–6 {label,value} (+highlight) | comparaison entre catégories/temps ; les valeurs sont relatives — si vos données dépassent 100, mettez à l'échelle proportionnellement (par ex. milliers) et conservez le chiffre exact dans chaque label ("Makanan · 2,1 jt") |
| donut | value 0–100 | une part/pourcentage |
| steps | items 1–5 | comment faire numéroté |
| compare | left,right {title,points≤4} | avant/après, A vs B |
| custom | jsx | tout le reste, via les helpers de base |
Par scène : title, bg (base/ink/accent), duration (omettre !), fx, emphasis, transition (cut par défaut, fade, wipe, slide, dip). Niveau spécification : transition par défaut, audio {bed, bedGain, sfx:[{at|scene, name, gain}]} — le son est parcimonieux, un sfx toutes les 3–5 s. Champs : reference/scenes.md, son : reference/sound.md.
Effets : "fx":["grid","rgbIn"] au niveau de la spec ou de la scène, ≤ 1 chacun. Presets : grid liquid paper grain vignette glow rgbIn blurIn sweep float glitch. Voir reference/fx.md.
Choisir les scènes
Une vidéo de données/infographie doit contenir au moins une scène de graphique (stat/bars/donut) — une liste de texte cinétique n'est pas une infographie. highlight des barres = le nombre autour duquel tourne l'histoire. Les éléments des barres doivent être des catégories comparables (jamais "Gagal" vs "Total"). Un stat par fait ; jamais deux scènes montrant le même nombre. donut est 0–100 — une part, rien d'autre.
Choisissez la forme de l'histoire et la formule d'accroche dans reference/craft.md avant d'écrire la spécification. 70 thèmes dans reference/themes.md (node $E themes pour lister) : reel bold news/finance · pitch calm technical · infopop playful explainer · kinetik dark high-energy · tenang soft reflective · edukasi lesson/worksheet. Carrousels : specs de deck avec handle en surcharge, reference/templates.md.
Après l'aperçu, évaluez votre propre planche par rapport à reference/review.md (barre : 8/10).
Tableau des corrections (erreur → quoi modifier)
| Erreur / symptôme de la planche | Correction (dans la spec) |
|---|---|
text too long / débordement de zone de sécurité | Raccourcissez ce texte — étiquettes ≤ 2 mots, titres ≤ 5. Ne remplacez jamais une scène de données par du kinetic pour l'éviter |
duration too short, needs ≥ Ns | Augmentez duration, ou laissez le timing automatique fonctionner (omettez-le) |
| Débordement des étiquettes des barres | Raccourcissez d'abord les étiquettes, puis le titre ; highlight sur la barre de l'histoire |
| Valeurs des barres > 100 | Mettez à l'échelle proportionnellement (par ex. en milliers) ; le chiffre exact va dans le label |
Valeur donut > 100 | Mauvaise scène ou mauvais sens — un donut est une part de 100 |
| Deux panneaux identiques | Supprimez-en un ; un fait par stat |
La diapositive montre @yourpage | Spec de deck : définissez "handle": "@..." |
Drapeaux rouges — ces pensées sont erronées
| Vous êtes sur le point de… | Réalité |
|---|---|
| « Faire le rendu des deux en parallèle pour gagner du temps » | Le moteur se bloque ; exécutez en série, informez l'utilisateur |
| « Le check a passé, le contenu doit être bon » | Check valide la forme ; vous vérifiez les chiffres par rapport à la demande |
| « Définir duration 3 pour un rythme uniforme » | Omettez duration ; le timing dérivé du texte est le rythme |
| « Le CTA ne rentre pas, supprimons-le » | Raccourcissez le CTA à ≤ 5 mots à la place |
| « Les barres ne rentreront pas, je vais lister les valeurs en lignes kinetic » | Raccourcissez les étiquettes ; le graphique est le but de la vidéo |
| « La planche avait l'air bien au dernier aperçu » | Toute modification de spec → re-prévisualisation → re-lecture avant le rendu |
| « Écrire manuellement du JSX pour cette seule scène » | Utilisez custom + helpers, ou étendez lib/fx.jsx |
| « L'utilisateur n'a pas donné de données ; je vais demander avant de faire quoi que ce soit » | Règle pas-de-données/sous pression ci-dessus : livrez sans chiffres ou avec illustration étiquetée, dites lequel |
| « Je vais d'abord exécuter la compétence de brainstorming » | Cette procédure est autonome ; les demandes de rendu n'ont pas besoin d'une étape d'approbation de conception |
| « Les barres > 100 ne seront pas validées, je vais inventer des nombres réels plus petits » | Mettez à l'échelle proportionnellement, chiffres exacts dans les étiquettes |
Erreurs courantes
| Erreur | Au lieu de cela |
|---|---|
| Tester l'API par essais et erreurs, écrire du JSX | Écrire une spécification ; nouveau visuel : custom + helpers (scenes.md) |
| Vérifier 2–3 images | Lire chaque panneau sur la planche |
| Chaque scène fixée à 3 s | Omettez duration |
| Police par défaut, fond sombre générique | Choisissez un thème |
Ajouter manuellement des effets AE dans du JSX custom | Utilisez un preset fx ; nouvel effet : ajoutez-le à lib/fx.jsx |
sed -i sur macOS | Outil d'édition sur la spécification |
| CLI brute à l'intérieur des scènes | effectcraft-cli brut uniquement pour les modifications en dehors de ces scènes (reference/cli.md) |