Communitygithub.com

에이전트 VFX

악보로 음악 반응 VFX를 연출한다. WebGL2 템플릿을 고르고, 헤드리스 크롬에서 렌더하고, 깜빡임을 검사한 뒤 무음 루프나 웹 런타임을 보낸다.

에이전트 VFX란 무엇인가요?

에이전트에게 셰이더를 쓰게 하지 않는다. 템플릿과 프리셋을 고르고 파라미터를 저음, 온셋, 비트에 묶은 FX 스코어를 쓰면 엔진이 H.264를 낸다. 렌더마다 깜빡임 검사가 붙는다. 무음 핑퐁 루프와 자체 포함 웹 보내기로 같은 스코어가 무대 루프도 되고 페이지 안 효과도 된다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wjgoarxiv/agentvfx/tree/HEAD/skills/agentvfx

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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

관련 스킬