Communitygithub.com

kasfulk/effectcraft-motion

À utiliser pour créer des vidéos motion design verticales 9:16 (infographies, chiffres, graphiques, listes, texte cinétique) avec effectcraft-cli / EffectCraft, ou un thème de style satsetmotion autre que le pitch kajian — pour les vidéos de style pitch kajian issues d'opus-video-prompts, utilisez clipper-motion.

Qu'est-ce que effectcraft-motion ?

Ce skill transforme une spécification JSON en une vidéo MP4 au format 1080x1920 à 30 images par seconde. Il est conçu pour les développeurs et créateurs de contenu qui utilisent l'outil EffectCraft pour produire des motion graphics verticales (9:16) comme des infographies animées, des graphiques, des listes numérotées ou du texte cinétique. L'approche est simple : l'utilisateur fournit une spécification JSON structurée, et le skill gère la validation, l'aperçu et le rendu final, interdisant toute écriture manuelle de JSX pour ces types de scènes. Le skill impose des règles strictes : un seul processus de rendu à la fois (pour éviter les conflits), l'utilisation de `taskpolicy -b nice -n 19` pour chaque commande, et une validation rigoureuse via un cycle d'aperçu et de correction avant le rendu final. Il prend en charge divers types de scènes (hook, stat, bars, donut, steps, compare, custom) et intègre des thèmes prédéfinis (reel, pitch, infopop, kinetik, tenang, edukasi) ainsi que des effets visuels (grid, glow, rgbIn, etc.). Le skill inclut également un tableau des erreurs courantes et des indicateurs de mauvaises pratiques pour guider l'utilisateur vers des spécifications correctes et un rendu de qualité.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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

  1. 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.
  2. Chaque commande du moteur utilise taskpolicy -b nice -n 19 — aperçu, rendu, diapositives, toutes.
  3. 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}.
  4. Effectuez le rendu uniquement après avoir consulté une planche récente. check valide la forme, pas le contenu.
  5. duration est 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
  1. Lisez la planche avec l'outil Read. Chaque panneau. Une image fixe réglée par scène.
  2. 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.
  3. 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.
  4. taskpolicy -b nice -n 19 node $E render video.json — confirmez d'abord le chemin out (par défaut = nom de base de la spec + .mp4).
  5. 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"}]}
typenécessiteutilisation pour
hook / quote / outrotext (+emphasis, source, cta)ouverture, citation, fermeture
kineticlines 1–6phrases révélées une par une — pas de données
statvalue (+prefix,suffix,label)un grand nombre unique
barsitems 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")
donutvalue 0–100une part/pourcentage
stepsitems 1–5comment faire numéroté
compareleft,right {title,points≤4}avant/après, A vs B
customjsxtout 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 plancheCorrection (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 ≥ NsAugmentez duration, ou laissez le timing automatique fonctionner (omettez-le)
Débordement des étiquettes des barresRaccourcissez d'abord les étiquettes, puis le titre ; highlight sur la barre de l'histoire
Valeurs des barres > 100Mettez à l'échelle proportionnellement (par ex. en milliers) ; le chiffre exact va dans le label
Valeur donut > 100Mauvaise scène ou mauvais sens — un donut est une part de 100
Deux panneaux identiquesSupprimez-en un ; un fait par stat
La diapositive montre @yourpageSpec 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

ErreurAu 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 imagesLire chaque panneau sur la planche
Chaque scène fixée à 3 sOmettez duration
Police par défaut, fond sombre génériqueChoisissez un thème
Ajouter manuellement des effets AE dans du JSX customUtilisez un preset fx ; nouvel effet : ajoutez-le à lib/fx.jsx
sed -i sur macOSOutil d'édition sur la spécification
CLI brute à l'intérieur des scèneseffectcraft-cli brut uniquement pour les modifications en dehors de ces scènes (reference/cli.md)

Skills associés