/make-video — 2~4단계: 선택에서 릴리즈 병합까지
입력: 사용자가 ideas 파일에서 선택(「/make-video N」+ 수정)하거나 사용자가 지정한 객체.
출력 = DoD (AGENTS.md, 「채팅 파이프라인」): out/<ep>/release/ - 마스터 <ep>_en_1080x1920p60.mp4 와
publish_en.md, 두 파일 — 사용자에게 전달됨; 시각적 QA 통과; 전부 커밋됨; 브랜치가 main에 병합됨
(video_wt.py finish); worktree 제거됨.
기준 — docs/quality.md: 인포그래픽이 아닌 영화; 사실은 말로, 장관은 그림으로; 최종 6시간 GPU 이내.
EN 전용, 목표 29~29.5초, 최대 30.0초 (docs/shorts_format.md).
참고: 프로세스 — docs/pipeline.md; 승인 — docs/approval.md; 패키지 — docs/publish.md; 역할 —
docs/workflows.md; 라이브러리 — docs/spacekit.md; 시간 — docs/timings.md; 큐 — docs/render_queue.md;
에이전트, 커밋, 함정 — AGENTS.md. 명령어 — worktree 루트에서 Git Bash로 실행; <ep> = epNNN_<slug>.
0단계 — worktree, 큐, 커밋
/next-video후video/epNNN…브랜치 — 계속 진행./next-video없이 메인 복사본에서 채팅 시작 —python tools/video_wt.py start→ ClaudeEnterWorktreepath/ Codexworkdir.- Blender, TTS, 음악, 빌드 — 큐를 통해서만: 작업이 제출되면 채팅은 텍스트 작업을 계속 진행.
- 각 블록 후 — 모델 트레일러와 함께
type(<ep>): …커밋. 턴 종료 — clean tree.
파트 A — 승인 전까지
- 에피소드.
python tools/video_wt.py claim <slug>(slug —[a-z0-9_], ≤ 16, 카탈로그 이름 기준).episodes/_template/복사 →episodes/<ep>/,episode.json—id= 폴더 이름,languages: ["en"](경로frames_dir/audio_dir설정 안 함). ideas 파일 끝에 추가:선택됨: N, <날짜>, 수정사항: …, 에피소드: <ep>. 커밋feat(<ep>): 옵션 N에서 에피소드. - 사실: 연구원 + 사실 확인자 (
docs/workflows.md) →facts.md(모든 숫자는 링크 포함, 시각적 참조). 커밋. - 시각적 브리프
visual_brief.md(역할 「연출가」): 참조, 첫 프레임, money shot, 팔레트, 조명, 카메라 및 각 샷의 이벤트, 규칙, 예산. 비평가 「시네마/와우」 브리프 검토 → 수정. 커밋. - 대본
script_9x16.json(EN): 68 세그먼트,29.5초 (≤ 30.0 엄격), ≈ 55~70 단어; 첫 문장 — 사실 기반 후크; 마지막 문장은 시작으로 연결 (루프).at(초) 앵커, 29en_cap— 숫자,|— 수동 줄바꿈 (docs/pipeline.md, 「자막 및 타이틀」 참고). 채널 음성 — Kokoroaf_heart×0.98. 커밋. - 씬 및 샷.
system.py(실제 파라미터 → 화면, 규칙은 docstring에); 부족한 부분은spacekit/모듈로 (별도 커밋feat(spacekit): …, 회귀 테스트tools/imgdiff.py). 브리프 기반shots_9x16.py: 610개 샷, 각 25초, 각 샷 ≥ 3 뎁스 레이어, 키 + 컨트롤, 헤일로/블룸, 카메라 움직임, 모션 블러, 배경 비어있지 않음 (docs/quality.md).episode.json(edit,en오버레이, 안전 영역 내 자막),music_cues.json(자체 키/모드/템포). 컷 — 이벤트 기반 직접 연결; 마지막 프레임 = 첫 프레임. 편집 프레임 합계 ≤ 1799 (60fps 기준).python tools/check_episode.py episodes/<ep>/episode.json. 커밋. - 타이밍 프리뷰:
python tools/render_queue.py submit preview episodes/<ep>/episode.json --with-tts, 상태 —status --json. 시트out/<ep>/9x16/sheet_prev.png; Traceback/OVERRUN 없음, FLASH/EVENT 있음; 큐 시트 —python tools/cues.py episodes/<ep>/episode.json --logs out/<ep>/9x16/logs. - 히어로 프레임: 샷별
submit preview … --hero --shots vN --frames F,F+1,F+2(F = 최적 샷 순간; 100%,--samples없음 — 샷 코드의 샘플, 최종과 동일) →out/<ep>/9x16/hero/,sheet_hero.png. 비평가 및 소유자에게 — F 프레임;hero_vN.log로그 기준 — 초/프레임 및 ETA (docs/timings.md). 샘플 및 무거운 효과는shots_9x16.py에서 조정 (커밋, 히어로 재생성)하여 최종 시간이 4~6시간이 되도록, 1시간이 안 되도록 함. - 비평 (
docs/workflows.md): 「시네마/와우」 (샷 평가 110, < 8 — 재작업, 최대 3라운드), 구성, 리듬/후크, 사실 (7단계 반복. 보고서 — 에피소드 내 파일로 저장, 라운드별 커밋docs/quality.md의 4가지 블로커 전용); 선택사항: 독창성, 사운드. 수정 → 6fix(<ep>): 비평 기반 수정, 라운드 K. - 초안 영상 전체 (
docs/approval.md, 1a): 샷에draft함수 + 에피소드별preview_movie.py를submit task로 실행. 생성 안 됨 — 초안 영상 없이 승인 진행, 메시지에 "초안 영상: 없음". - 승인:
docs/approval.md템플릿 기반 메시지 + 파일 (히어로 프레임, 초안 영상). 상태 커밋. 멈추고 응답을 기다려라. 수정 — 해당 단계로 돌아감.
파트 B — 「ok」 후: DoD까지 (docs/approval.md의 중단 외 질문 금지)
- 히스토리에 승인 기록. 합의된 큐 시트 및
publish_en.md(docs/publish.md기준, 규칙은 목록으로) 준비. 커밋chore(<ep>): 렌더 승인됨(사용자 수정 사항은 본문에). - 최종 렌더.
python tools/render_queue.py submit final episodes/<ep>/episode.json --approved '사용자 승인: 날짜, 채팅 컨텍스트'. 플래그는 이미 받은 동의를 기록하며, 대체하지 않음. 사용자에게 — 작업 ID, PC, ETA. Worker가 PC를 선택하고, 120프레임 단위로 렌더링, 프레임체크 수행, TTS, 음악, mix, build_edit, 빌드, 머신 QA 및 릴리즈. 채팅은 종료 가능. - 상태 및 오류.
status --json(진행률 —cursor/steps; 작업 완료 전 프레임은snapshot스냅샷에 저장,out/<ep>/아님).failed— 스냅샷 내 단계 로그; 일시적 환경 오류 —retry JOB; 코드/대본 수정 —cancel JOB, worktree에서 수정, 필요시 새 승인, 새 작업. Framecheck FAIL — RERENDER 분석, 스냅샷(및 원격)에서 불량 프레임 제거,retry JOB --rerender-shots vN.pause/resume— 청크 사이. 상위 bash 종료 금지. - 시각적 QA.
needs_review= 머신 검사 및 패키지 준비 완료. PNGout/<ep>/9x16/qa_en/및 마스터: 히어로 프레임보다 나빠서는 안 됨 (노이즈, 뭉개짐, 과다 노출, 깜빡임), 안전 영역, 자막, 싱크 어긋남, 루프. 이상 없음 —python tools/render_queue.py accept JOB; 결함 — 수정 및 새 작업. - 전달. 두 파일
out/<ep>/release/사용자에게 제공 (Claude — SendUserFile). 렌더 중 소스 변경됨 — 커밋 전에 스냅샷의 publish와 편집 JSON 비교 확인. - 기록.
episodes/INDEX.md(샷, 기법, 음성, 키, 후크),README.md에피소드 테이블, ✅ 주제docs/channel.md, 초/프레임 측정docs/timings.md, 교훈 — 관련 문서에 기록. 커밋docs(<ep>): 기록 및 교훈(에피소드 코드,edit_9x16_en.json,publish_en.md;out/제외). - 병합.
python tools/video_wt.py finish— clean → release → accept →git merge main→ check_episode 및 테스트 → ff main →out/<ep>/메인 복사본으로 이동. 충돌 — worktree에서 해결, 커밋, 반복. 그런 다음 worktree 종료 (Claude —ExitWorktreekeep) 및 메인 복사본에서python tools/video_wt.py remove epNNN; 앱에서 시작한 worktree (start --here)는 제거하지 않음. 그제야 — 「완료」.