콘텐츠로 이동

아키텍처

intro에서 두 트랙과 게이트를 짚었습니다. 여기서는 그게 8 에이전트와 phase 흐름으로 어떻게 생겼는지, 영상 여러 편이 어떻게 격리되는지를 봅니다. 눈여겨볼 건 두 가지입니다. 각 게이트를 단일 에이전트가 담당하고 사용자 승인이 에이전트 간 연결고리라는 것, 그리고 산출물이 채팅이 아니라 _workspace/ 파일로 남는다는 것입니다.

graph TB
start[사용자 입력]
start -->|URL 없음, 캐릭터/시나리오| g0[생성형]
start -->|URL 첨부| r0[리믹스]
g0 --> ga[Gate A 기획 - plan.md]
ga --> gb1[Gate B-1 장면 - scenes.json, 5 구조]
gb1 --> gb2[Gate B-2 이미지 - Codex 후보]
gb2 --> gc[Gate C 영상 - ffmpeg draft]
gc --> gpub[발행 메타 - publish.md]
r0 --> ra[Gate A 분석 - yt-dlp, Whisper, hook]
ra --> rb[Gate B 편집 - 자동컷 ffmpeg]
rb --> rpub[발행 메타 - publish.md]

생성형은 게이트 4개와 발행, 리믹스는 게이트 3개와 발행입니다. 각 게이트에서 사람이 승인하거나 수정하거나 롤백합니다. 발행은 두 트랙 다 자동으로 하지 않습니다(S8).

에이전트트랙책임
content-strategist생성형기획, 채널 전략
scene-planner생성형장면 분해, 5 구조 슬롯 채우기
image-director생성형Codex 이미지 생성 (Codex 호출은 여기만)
video-editor생성형ffmpeg 영상 합성
voice-director생성형음성 합성
source-analyst리믹스yt-dlp 수집, Whisper 전사, hook 탐지
remix-editor리믹스자동 편집, 컷
publish-copywriter공통발행 메타 (자동 발행 금지)

blog-writer는 생성형 트랙에서 옵션으로 분기하는 자리입니다. Codex CLI 호출은 image-director 한 곳에만 모읍니다(S7). 여러 에이전트가 부르면 스타일이 깨지고 비용 제어가 안 됩니다. 리믹스 트랙은 이미지를 생성하지 않습니다.

게이트마다 사람이 멈춰 승인하면 실제 compute보다 사람 대기 왕복이 시간을 더 키웁니다. preview 모드의 기본값인 fast-preview는 기획 단계 게이트(A, B-1, B-2)를 자동 통과하고 영상 초안까지 한 번에 달립니다. 사람은 중간 JSON이 아니라 실제 영상을 Gate C에서 한 번만 봅니다.

게이트 철학은 깨지지 않습니다. 산출물은 전부 _workspace/에 남아 Gate C에서 어느 단계로든 롤백할 수 있고(“기획부터 다시”, “장면 3만”, “이미지 다시”), 자동 발행 금지는 그대로입니다. final 렌더에 진입하면 fast-preview는 무시되고, final은 항상 Gate C 명시 승인 후에만 돕니다.

한 채널에서 여러 영상을 동시에 굴립니다. 영상 한 편당 폴더 하나로 격리되고, 루트의 videos.json이 인덱스입니다.

graph TB
idx[_workspace/videos.json - 인덱스 + active_slug]
ch[channel.json - 채널 정체성, 전역]
cache[.cache/ - 시트/이미지/자막/BGM 해시, 전역 공유]
idx --> v1[robot-pov-ep01/ - 생성형]
idx --> v2[drama-clip-30s-01/ - 리믹스]
v1 --> v1a[plan.md, scenes.json, images/]
v1 --> v1b[video_drafts/, publish.md, progress.md]
v2 --> v2a[source/ - video, transcript, license.json]
v2 --> v2b[publish.md, progress.md, license_responsibility.json]

videos.json이 영상 목록과 활성 영상(active_slug)을 들고 있습니다. 모든 에이전트와 스킬은 이 인덱스를 읽어 작업 폴더를 정합니다. “장면 3 이미지 다시”, “후크 다시” 같은 부분 재실행도 활성 영상에 적용됩니다. channel.json(채널 정체성)과 globalization_decision.json(글로벌 친화)은 영상 무관한 전역 자산이고, .cache/는 캐릭터 시트와 이미지, BGM을 영상 간 재활용하는 자리입니다.

_workspace/
├── videos.json 인덱스 + active_slug
├── channel.json 채널 정체성 (전역)
├── globalization_decision.json 글로벌 친화 플래그 (전역)
├── .cache/ 해시 캐시 (전역 공유)
└── {video_slug}/
├── brief.md Phase 1 요건
├── plan.md Phase 2 기획 (생성형)
├── source/ 원본 (리믹스 — video, transcript, license.json)
├── scenes.json 장면 분해 (생성형)
├── images/{scene}/candidate_*.png 이미지 후보 (생성형)
├── video_drafts/draft_v{n}.mp4 영상
├── publish.md 발행 메타
├── progress.md 진행 정본
├── timings.json 성능 측정
└── license_responsibility.json 명시 책임 수락 (리믹스)

_workspace/ 바깥의 .claude/, AI_AUTOMATION.md는 사람 승인 없이 수정하거나 삭제하지 않습니다(S2).

자동화 진입점은 한 곳을 가리킨다

섹션 제목: “자동화 진입점은 한 곳을 가리킨다”

.claude/agents/.claude/skills/는 Claude Code용 저장 위치이고, AGENTS.md는 Codex용 진입점입니다. 둘 다 AI_AUTOMATION.md를 읽습니다. 트랙 라우팅, scene type 스펙, videos.json 스키마, license-policy 레벨이 그 한 파일에 모여 있어, 어느 런타임에서 작업하든 phase와 산출물 계약이 같습니다.

다음 섹션은 tracks입니다. 생성형의 template filling과 리믹스의 hook discovery가 어떻게 다른지, 트리거가 어디서 갈리는지를 봅니다.