Communitygithub.com

VFX de agente

Dirige VFX reactivos a la música desde una partitura: elige una plantilla WebGL2, renderiza en Chrome headless, audita los destellos y exporta un loop mudo o un runtime web.

¿Qué es VFX de agente?

El agente no escribe shaders. Elige plantilla y preset, ata parámetros al bajo, a los onset y a los beats, y el motor entrega H.264. Cada render lleva una auditoría de destellos. Un loop ping-pong en silencio y una exportación web autocontenida convierten la misma partitura en un loop de escenario o en un efecto dentro de la página.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

agentvfx

Tú diriges; el motor renderiza. Nunca escribes código de sombreado para un clip. Eliges una plantilla, un preset y unos pocos parámetros tipados, los escribes en una partitura de efectos (JSON), y el motor lo renderiza en Chrome headless (WebGL2), codifica H.264 con ffmpeg y lo audita en busca de destellos.

Ejecuta cada comando desde esta carpeta (la raíz de la habilidad). Las rutas dentro de una partitura se resuelven respecto al directorio actual.

1. Verificar la máquina

node scripts/vfx.mjs doctor

ok: true significa que se encontraron Chrome con GPU WebGL2 y ffmpeg. De lo contrario, lee blockers e indica al usuario qué instalar (CHROME_PATH, FFMPEG_PATH). Blender 5.x solo es necesario para fondos (BLENDER_PATH).

2. Elegir un aspecto

node scripts/vfx.mjs list            # familia, id de plantilla, tipo de entrada, presets
node scripts/vfx.mjs list --json     # con descripciones

input indica lo que necesita una plantilla: generative (nada), footage (input.video) o either. Comienza desde un preset; cambia como máximo dos o tres parámetros por ronda. Muestra al usuario el resultado antes de inventar más.

3. Escribir la partitura

Esquema: schemas/fx-score.schema.json. Mínimo:

{ "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 es de 3 a 5. seed hace que el renderizado sea repetible.
  • params sobrescribe el preset (los nombres y rangos provienen del fx.json de la plantilla).
  • bindings vinculan un parámetro a una característica de audio (bass, onset, beat, bands.N, …) con gain, offset, attackMs, releaseMs. Mantén el ataque en el fotograma de onset y la liberación corta (aproximadamente 60 ms): una lectura rápida se percibe como profesional, un suavizado intenso se percibe como demostración.
  • hits disparan una plantilla extra en un onset o beat; cuts cortan abruptamente la pila en un beat; stack superpone hasta dos plantillas sobre la base.
  • labels y textStyle configuran la capa de texto del motor (fuentes instaladas por nombre; fallback genérico cuando faltan).

Verifícalo sin renderizar:

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

4. Renderizar y observar

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

Previsualiza primero en pequeño (640x360), luego aumenta el tamaño para la versión final. El comando imprime JSON con la ruta del film, el resultado de destellos y las imágenes fijas. Abre stills/sheet.png y cada tira antes de describir el clip a alguien. Un renderizado que no has mirado no está terminado.

5. Seguridad ante destellos

Cada renderizado lleva una auditoría de destellos (destellos generales y rojos por segundo, estilo WCAG 2.3.1). El modo predeterminado stage mantiene la intensidad completa y escribe SAFETY.txt cuando se superan los límites. "safety": { "mode": "broadcast-safe" } aplica los límites; "safeVariant": true añade film.safe.mp4 junto a la versión completa. Informa claramente al usuario cuando un clip supera los límites.

6. Fondos (opcional, Blender)

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

Escenas procedurales, sin activos descargados. Usa el film.mp4 del fondo como input.video. --quality final es lento (aproximadamente 2 minutos por fotograma a 1080p); pregunta antes de iniciar uno. Consulta references/plates.md.

7. Bucles silenciosos

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

Reproduce el clip hacia adelante y luego hacia atrás (sin costura, sin pista de audio) y audita los destellos del bucle reproducido dos veces. El código de salida 3 significa que el bucle supera los límites de destellos. La inversión puede duplicar los destellos alrededor de un giro; --hold 6 pausa seis fotogramas en cada giro, lo que a menudo lleva dicho bucle de nuevo dentro del límite. Un cambio rojo que se convierte en un destello rojo al invertirse no puede solucionarse de esta manera: dilo y deja que el usuario decida.

8. En vivo en una página web

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

Escribe un runtime autónomo, las plantillas elegidas y una página de demostración. Respeta prefers-reduced-motion. Consulta references/web.md.

Reglas

  • Nunca distribuyas ni confirmes música para la que no tengas derechos de redistribución. El movimiento de un renderizado puede provenir de una pista mientras que el bucle publicado permanece en silencio.
  • Las referencias inspiran; no se copian. No reproduzcas un fotograma, logotipo, marca o archivo de fuente del trabajo de otra persona.
  • No empaquetes archivos de fuente. Nombra fuentes instaladas; estas tienen un fallback cuando faltan.

Más información

  • references/template-format.md — cómo se construye una plantilla (fx.json, pases, presets, capa de texto).
  • references/plates.md — fondos de Blender.
  • references/web.md — API del runtime web.

Skills relacionados