Communitygithub.com

VFX agent

Dirige des VFX réactifs à la musique depuis une partition : choisir un template WebGL2, rendre dans Chrome headless, auditer les flashs, exporter une boucle muette ou un runtime web.

Qu'est-ce que VFX agent ?

L'agent n'écrit pas de shader. Il choisit un template et un preset, lie des paramètres à la basse, aux onsets et aux temps, et le moteur sort du H.264. Chaque rendu passe un audit de flash. Une boucle ping-pong muette et un export web autonome font de la même partition un loop de scène ou un effet dans la page.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wjgoarxiv/agentvfx/tree/HEAD/skills/agentvfx

Demander à votre IA préférée

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

Documentation

agentvfx

Vous dirigez ; le moteur effectue le rendu. Vous n'écrivez jamais de code de shader pour un clip. Vous choisissez un modèle, un préréglage et quelques paramètres typés, vous les écrivez dans une partition FX (JSON), et le moteur effectue le rendu dans Chrome headless (WebGL2), encode en H.264 avec ffmpeg, et l'audite pour les flashes.

Exécutez chaque commande depuis ce dossier (la racine de la compétence). Les chemins dans une partition sont résolus par rapport au répertoire courant.

1. Vérifier la machine

node scripts/vfx.mjs doctor

ok: true signifie que Chrome avec GPU WebGL2 et ffmpeg ont été trouvés. Sinon, lisez blockers et dites à l'utilisateur quoi installer (CHROME_PATH, FFMPEG_PATH). Blender 5.x n'est nécessaire que pour les fonds (BLENDER_PATH).

2. Choisir un look

node scripts/vfx.mjs list            # famille, identifiant du modèle, type d'entrée, préréglages
node scripts/vfx.mjs list --json     # avec descriptions

input indique ce dont un modèle a besoin : generative (rien), footage (input.video), ou either. Commencez par un préréglage ; modifiez deux ou trois paramètres au maximum par itération. Montrez le résultat à l'utilisateur avant d'en inventer plus.

3. Écrire la partition

Schéma : schemas/fx-score.schema.json. Minimal :

{ "version": 1, "template": "lattice", "preset": "vermilion-fine",
  "input": { "video": "test-media/clip-01.mp4", "audio": "test-media/beat-132.mp3" },
  "durationSec": 4, "seed": 47, "out": "my-lattice" }
  • durationSec est 3–5. seed rend le rendu reproductible.
  • params remplace le préréglage (les noms et plages proviennent du fx.json du modèle).
  • bindings lie un paramètre à une caractéristique audio (bass, onset, beat, bands.N, …) avec gain, offset, attackMs, releaseMs. Gardez l'attaque sur la trame d'onset et la relâche courte (environ 60 ms) : une réactivité vive donne un résultat professionnel, un lissage prononcé donne l'impression d'une démo.
  • hits déclenche un modèle supplémentaire sur un onset ou un beat ; cuts coupe net la pile sur un beat ; stack superpose jusqu'à deux modèles sur la base.
  • labels et textStyle paramètrent la couche de texte du moteur (polices installées par nom ; fallback générique si absentes).

Vérifiez-la sans effectuer le rendu :

node scripts/vfx.mjs validate my-score.json

4. Effectuer le rendu et regarder

node scripts/vfx.mjs render my-score.json --out out/my-lattice --width 640 --height 360

Aperçu en petit d'abord (640x360), puis augmentez la taille pour le final. La commande affiche du JSON avec le chemin du film, le résultat du flash et les images. Ouvrez stills/sheet.png et chaque séquence avant de décrire le clip à quiconque. Un rendu que vous n'avez pas regardé n'est pas terminé.

5. Sécurité des flashes

Chaque rendu comporte un audit de flash (flashes généraux et rouges par seconde, style WCAG 2.3.1). Le mode par défaut stage conserve l'intensité maximale et écrit SAFETY.txt lorsque les limites sont dépassées. "safety": { "mode": "broadcast-safe" } applique les limites ; "safeVariant": true ajoute film.safe.mp4 à côté de la version complète. Dites clairement à l'utilisateur quand un clip dépasse les limites.

6. Fonds (optionnel, Blender)

node scripts/plate.mjs --scene terminalcore --shot gallery --out out/plate --width 640 --height 360 --seconds 4

Scènes procédurales, aucun asset téléchargé. Utilisez le film.mp4 du fond comme input.video. --quality final est lent (environ 2 minutes par trame 1080p) ; demandez avant d'en lancer un. Voir references/plates.md.

7. Boucles silencieuses

node scripts/loop.mjs out/my-lattice/film.mp4 reels/my-lattice.mp4 --preview reels/preview/my-lattice.webp --audit out/my-lattice/loop-flash.json

Joue le clip en avant puis en arrière (sans couture, sans piste audio) et audite les flashes de la boucle jouée deux fois. Le code de sortie 3 signifie que la boucle dépasse les limites de flash. Le sens inverse peut doubler les flashes autour d'un virage ; --hold 6 met en pause six trames à chaque virage, ce qui ramène souvent une telle boucle dans les limites. Un changement rouge qui devient un flash rouge en inversé ne peut pas être corrigé de cette façon — dites-le et laissez l'utilisateur décider.

8. En direct sur une page web

node scripts/export-web.mjs lattice collage --out out/web

Écrit un runtime autonome, les modèles choisis et une page de démonstration. Respecte prefers-reduced-motion. Voir references/web.md.

Règles

  • N'expédiez jamais et ne commitez jamais de musique pour laquelle vous n'avez pas les droits de redistribution. Le mouvement d'un rendu peut provenir d'un morceau tandis que la boucle publiée reste silencieuse.
  • Les références inspirent ; elles ne sont pas copiées. Ne reproduisez pas une trame, un logo, une marque ou un fichier de police provenant du travail de quelqu'un d'autre.
  • Ne regroupez pas de fichiers de polices. Nommez les polices installées ; elles utilisent un fallback si elles sont absentes.

En savoir plus

  • references/template-format.md — comment un modèle est construit (fx.json, passes, préréglages, couche de texte).
  • references/plates.md — fonds Blender.
  • references/web.md — API du runtime web.

Skills associés