agentvfx
당신이 지시하고 엔진이 렌더링합니다. 클립을 위해 셰이더 코드를 직접 작성할 필요가 없습니다. 템플릿, 프리셋, 몇 가지 타입이 지정된 매개변수를 선택하여 FX 스코어(JSON)로 작성하면, 엔진이 headless Chrome(WebGL2)에서 렌더링하고, ffmpeg로 H.264를 인코딩하며, 플래시 감사를 수행합니다.
모든 명령은 이 폴더(스킬 루트)에서 실행하세요. 스코어 내의 경로는 현재 디렉터리를 기준으로 해석됩니다.
1. 시스템 확인
node scripts/vfx.mjs doctor
ok: true는 Chrome(GPU WebGL2 포함)과 ffmpeg가 발견되었음을 의미합니다. 그렇지 않으면 blockers를 읽고 사용자에게 설치해야 할 항목(CHROME_PATH, FFMPEG_PATH)을 알려주세요. 블렌더 5.x는 플레이트에만 필요합니다(BLENDER_PATH).
2. 룩 선택
node scripts/vfx.mjs list # 패밀리, 템플릿 ID, 입력 종류, 프리셋
node scripts/vfx.mjs list --json # 설명 포함
input은 템플릿에 필요한 것을 나타냅니다: generative (필요 없음), footage (input.video 필요), 또는 either (둘 다 가능). 프리셋에서 시작하고, 라운드당 최대 두세 개의 매개변수만 변경하세요. 더 많은 것을 생성하기 전에 결과를 사용자에게 보여주세요.
3. 스코어 작성
스키마: schemas/fx-score.schema.json. 최소 예시:
{ "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는 3–5 사이입니다.seed는 렌더링을 재현 가능하게 만듭니다.params는 프리셋을 재정의합니다(이름과 범위는 템플릿의fx.json에서 가져옵니다).bindings는 매개변수를 오디오 기능(bass,onset,beat,bands.N, ...)에 연결하며,gain,offset,attackMs,releaseMs를 사용합니다. 어택은 onset 프레임에 맞추고 릴리즈는 짧게(약 60ms) 유지하세요: 스냅한 느낌은 프로페셔널하게 읽히고, 과도한 스무딩은 데모처럼 읽힙니다.hits는 onset 또는 beat에서 추가 템플릿을 실행합니다.cuts는 beat에서 스택을 하드 컷합니다.stack은 기본 템플릿 위에 최대 두 개의 템플릿을 레이어링합니다.labels와textStyle은 엔진의 텍스트 레이어를 설정합니다(설치된 폰트를 이름으로 참조, 없으면 일반 폰트로 대체).
렌더링 없이 확인하려면:
node scripts/vfx.mjs validate my-score.json
4. 렌더링 및 확인
node scripts/vfx.mjs render my-score.json --out out/my-lattice --width 640 --height 360
먼저 작은 크기(640x360)로 미리보기하고, 최종 결과의 크기를 높이세요. 이 명령은 필름 경로, 플래시 결과, 스틸 이미지가 포함된 JSON을 출력합니다. 클립을 누구에게 설명하기 전에 stills/sheet.png와 모든 스트립(strip)을 여세요. 확인하지 않은 렌더링은 완료된 것이 아닙니다.
5. 플래시 안전
모든 렌더링은 플래시 감사(일반 플래시 및 초당 적색 플래시, WCAG 2.3.1 스타일)를 수행합니다. 기본 모드 stage는 전체 강도를 유지하고 제한을 초과할 경우 SAFETY.txt를 작성합니다. "safety": { "mode": "broadcast-safe" }는 제한을 강제하며, "safeVariant": true는 전체 버전 옆에 film.safe.mp4를 추가로 생성합니다. 클립이 제한을 초과할 경우 사용자에게 명확히 알리세요.
6. 배경 플레이트 (선택 사항, 블렌더)
node scripts/plate.mjs --scene terminalcore --shot gallery --out out/plate --width 640 --height 360 --seconds 4
절차적(procedural) 씬으로, 다운로드된 에셋이 필요 없습니다. 플레이트의 film.mp4를 input.video로 사용하세요. --quality final은 느립니다(1080p 프레임당 약 2분). 시작하기 전에 사용자에게 물어보세요. 자세한 내용은 references/plates.md를 참조하세요.
7. 무음 루프
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
클립을 앞으로 재생한 다음 뒤로 재생합니다(이음새 없음, 오디오 트랙 없음). 루프를 두 번 재생한 것에 대해 플래시 감사를 수행합니다. 종료 코드 3은 루프가 플래시 제한을 초과했음을 의미합니다. 역방향 재생은 전환점에서 플래시를 두 배로 증가시킬 수 있습니다. --hold 6은 각 전환점에서 6프레임을 일시 중지하여 종종 루프를 제한 내로 낮춥니다. 역방향 재생 시 적색 변화가 적색 플래시가 되는 경우 이런 방식으로 수정할 수 없습니다. 사용자에게 알리고 결정하게 하세요.
8. 웹 페이지에서 라이브 사용
node scripts/export-web.mjs lattice collage --out out/web
독립 실행형 런타임, 선택된 템플릿, 데모 페이지를 작성합니다. prefers-reduced-motion을 존중합니다. 자세한 내용은 references/web.md를 참조하세요.
규칙
- 재배포할 권리가 없는 음악을 절대 전송하거나 커밋하지 마세요. 렌더링의 모션은 트랙에서 비롯될 수 있지만, 게시된 루프는 무음 상태를 유지합니다.
- 참고 자료는 영감을 주는 것입니다. 복사하지 마세요. 다른 사람의 작업에서 프레임, 로고, 마크 또는 폰트 파일을 재현하지 마세요.
- 폰트 파일을 번들로 포함하지 마세요. 설치된 폰트 이름을 사용하세요. 없으면 기본 폰트로 대체됩니다.
추가 정보
references/template-format.md— 템플릿 구성 방법(fx.json, 패스, 프리셋, 텍스트 레이어)references/plates.md— 블렌더 플레이트references/web.md— 웹 런타임 API