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" }
durationSeces de 3 a 5.seedhace que el renderizado sea repetible.paramssobrescribe el preset (los nombres y rangos provienen delfx.jsonde la plantilla).bindingsvinculan un parámetro a una característica de audio (bass,onset,beat,bands.N, …) congain,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.hitsdisparan una plantilla extra en un onset o beat;cutscortan abruptamente la pila en un beat;stacksuperpone hasta dos plantillas sobre la base.labelsytextStyleconfiguran 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.