
짧은 영상을 “한 번 생성”하는 도구는 많다. 어려움은 그다음이다. 장면이 이어져야 하고, 캐릭터·배경이 흔들리면 안 되며, 비용·승인·실패 재시도가 파이프라인 안에 있어야 한다. video-auto(Chained Video Studio) 작업은 그 문제를 에이전트 오케스트레이션 + Electron 도구 + 외부 생성기로 나눠 붙잡은 실험이다.
이 글은 출시 후기가 아니라, 로컬 저장소에 남은 운영 계약과 검증된 산출물 기준으로 적은 회고다. 성과 수치나 미공개 API 키는 쓰지 않는다.
한 줄로 말하면
코딩 에이전트가 지능(오케스트레이터·디렉터·리뷰어)을 맡고, Electron/Node는 도구와 상태만 제공한다. 미디어는 Grok Imagine, Google Flow(Gemini Flow), Kling 등 외부 제공자가 만들고, 이 앱은 체인(순서·게이트·체크포인트) 을 소유한다.
Sora는 경로에서 제외했다. 제공자 표는 README 기준으로 grokWeb / grokApi / geminiFlow / klingApi / klingFal / klingWeb이다.
두 개의 제어면
CLAUDE.md가 못을 박아 둔 경계가 있다.
일 · 하네스 · 진입점
멀티 씬 필름 제작 · Claude production skills · shot-studio (plan → assets → render → post)
Electron 앱 코드 변경 · 앱 개발 하네스 · AGENTS.md → harness manifest
유료·비가역 단계(렌더 등)는 shot-studio 승인 게이트 뒤에 둔다. shot-plan 등을 직접 호출해 게이트를 우회하지 않는다.
병렬로 OpenMontage 흡수형 /video 경로도 있다. research·prompts·QA는 팬아웃하고, last-frame 릴레이만 순차로 두는 하이브리드다. 보드·체크포인트·코스트 스크립트(om:*)가 “지금 어느 스테이지인지”를 사람에게 보여 준다.
실제로 남긴 것
문서에 적힌 검증 산출물 예시는 다음과 같다.
- 최종 컷:
runs/chain/black-file-twelve-faces/out/...-final-cut.mp4 - 프로덕션 레저: 同 프로젝트
ledger.json - 편집 가능한 타이틀 AEP
- 두 번째 검증 레저:
runs/chain/skyduel/ledger.json
즉 “데모 GIF 한 장”이 아니라, 런 디렉터리 + 레저 + 게이트가 남는 구조를 목표로 했다.
스토리 → 영상 E2E는 대략 이런 명령으로 묶인다.
npm run produce -- --story "..." --scenes 6 --yes --provider grokWeb
npm run produce:status -- --project <projectId>
npm run produce:stitch -- --project <projectId>
Three.js를 본선으로 쓰지 않은 이유
선택지 제목에 “Three.js 렌더”가 있었지만, video-auto 본 저장소의 중심은 생성형 비디오 체인 + ffmpeg 스티치 + 에이전트 게이트다. Three.js/WebGL 언급은 관련 학습 스펙 문서에 스치듯 나타날 뿐, 프로덕션 경로의 기본 렌더러로 고정되어 있지 않다. 회고에서 과장하지 않기 위해 본선은 체인 자동화로 적는다.
배운 점
- 파이프라인 없는 생성은 재현되지 않는다. Rule Zero — 모든 프로덕션은 manifest 스테이지를 탄다.
- 병렬과 순차를 섞어야 한다. 이미지·리서치는 병렬, 컷 연속성(릴레이)은 순차.
- 비용·연속성 게이트를 스킬 밖에 두면 반드시 우회된다. 진입점을
shot-studio하나로 모은 이유다. - 사람에게는 보드가 필요하다. dry-run·gate·ship 샘플이 온보딩을 대신한다.
- 캐릭터/월드 락 없이 씬을 늘리면 얼굴과 소품이 먼저 붕괴한다.
한계
- 브라우저 로그인 기반 제공자(
grokWeb등)는 세션·UI 변경에 취약하다. - 외부 API 요금·쿼터는 레저로 추적해도 “창작 품질”을 보장하지 않는다.
- Electron 앱 UX와 에이전트 스킬이 이중으로 있으면, 문서가 어긋날 때 드리프트가 생긴다. 변경 이력표를 CLAUDE/AGENTS에 남긴 이유다.
다음에 같은 일을 한다면
- 스토리 입력 →
plan-only로 SCENE_TABLE 승인 → 그다음 gen. - provider는 한 프로젝트에 하나만 기본값으로 고정하고, 폴백은 명시적 게이트 뒤에.
- 최종물은 mp4만이 아니라 ledger + review 아티팩트를 함께 아카이브.
영상 자동화의 핵심은 모델 이름이 아니라, 에이전트가 같은 계약을 다시 실행할 수 있는가에 있었다.