AI 다큐멘터리 제작
첫 사용: 환경 설정부터
- 이미지: 기본적으로 사용자가 GPT로 이미지를 생성하며, AI는 이미지 API를 호출하지 않습니다.
image_mode=agent는 명시적인 승인이 필요합니다. - 환경: Python 3.10+,
ffmpeg,ffprobe;contact_sheet.py는 Pillow 추가 필요; PyYAML 종속성 없음. - H3: MiniMax H3를 설정한 적이 없다면, 먼저
references/00_setup.md를 확인하세요.- 오픈 플랫폼 등록/실명 인증/충전;
- API Key 생성;
MINIMAX_API_KEY환경 변수 또는 키 파일;base_url/ 모델명 / 해상도 정렬;- 먼저 4초 테스트를 실행한 후에 배치 작업을 진행하세요.
- 키는 코드, 로그, git에 절대 포함하지 마세요.
- H3를 사용할 수 없으면 다른 프로바이더로 변경하거나 애니메틱(animatic)을 먼저 제작하세요. 생성할 수 있다고 가장하지 마세요.
- H3가 설정되지 않으면 G5 단계로 진입하지 마세요.
사용 시기
- 사용자가 인물/주제 단편 영화를 제작하려고 하며, 길이는 브리핑(brief)에 따라 결정됩니다.
- 30초, 1분, 3분은 단순한 예시일 뿐이며, 하드 한도가 아닙니다.
- 실제 인물, 역사 자료, AI 재현 장면이 포함됩니다.
- 처음부터 납품 가능한 최종 결과물까지 제작해야 합니다.
- 비용을 통제하고, 출처를 보존하며, 크레딧을 작성해야 합니다.
부적합한 경우
- 여러 인물의 군상, 인터뷰 형식의 장편 영화;
- 상업 광고, 순수 제품 영상;
- 순수 애니메이션, 순수 가상 제작;
- 실제 촬영이 필요한 현장 다큐멘터리.
길이에 엄격한 제한은 없습니다. 초장기 프로젝트는 별도의素材(자료) 관리가 필요하지만, 워크플로우는 동일합니다.
작업 시작 전 반드시 확인할 사항
- 최종 영상 길이, 화면 비율, 프레임 속도, 언어, 플랫폼;
- 주인공은 누구인지, 어떤 이야기를 할 것인지, 어떤 사실이 틀리면 안 되는지;
- 예산 상한선, 재시도 허용 여부;
- 이미지 생성 주체(
image_mode=human/agent), 사용할 비디오 모델, 편집 소프트웨어; - 내레이션은 실제 사람인지 TTS인지; 음악은 별도 트랙인지;
- 역사 사진/음악 라이선스가 있는지; AI 사용을 명시해야 하는지;
- 납품 형식과 마감 시간;
- 프로필:
short(약 15–60초) /standard(약 2–5분) /custom(요구 사항에 따라); model_routing:hybrid/gpt_only/codex_deepseek;- H3가 설정되었는지 (Key/base_url/model/할당량); 설정되지 않았다면 먼저 설정 방법을 알려주세요.
- 오프닝 카드:
none/static; 몇 초인지; 대상 길이에 포함되는지; 제목 텍스트는 G2.5 단계에서 결정합니다.
브리핑(brief)이 없으면, 리서치 단계로 진입하지 마세요.
길이와 프로필
길이는 project.yaml의 duration_target_sec에 의해 결정되며, 하드코딩되지 않습니다.
| profile | 예시 길이 | 샷 수 (예시) | 세그먼트 (예시) | 음악 (예시) |
|---|---|---|---|---|
| short | 15–60초 | 8–18 | 1–2 | 1개 |
| standard | 2–5분 | 24–60 | 3–5 | 3–5개 |
| custom | 사용자 지정 | 사용자 지정 | 사용자 지정 | 사용자 지정 |
이는 추정치일 뿐 절대적인 기준이 아닙니다. 30초와 3분은 단순히 두 가지 일반적인 예시입니다.
G4 이미지 생성交接
프롬프트 작성 완료 후, 먼저 사용자에게 이미지 생성을 요청하고 나서 병렬 작업을 수행합니다.
image_batch_request.md전송: 샷 번호, 파일명, 프롬프트 위치, 수량, 우선순위; 오프닝 카드가 활성화된 경우0-1_card.png를 첫 번째 배치에 포함시킵니다.- 명확히 말합니다: "이제 이미지 생성을 시작할 수 있습니다."
- 사용자가 시작하면, 에이전트는 이미지/비디오에 의존하지 않는 작업을 수행합니다: 자막, 큐 시트, 비용 표, 출처/크레딧, 편집 골격, 다음 배치 프롬프트 QA.
- 이미지를 검토하지 않고, 비디오를 생성하지 않으며, 최종 합성을 수행하지 않습니다.
- 사용자가 이미지를 반환하면 먼저 이미지를 검토하고, 이미 잠근 내레이션/샷에 대해 다시 논의하지 않습니다.
- 오프닝 카드는 정적 카드이며 H3로 생성하지 않습니다. 텍스트는 글자 단위로 승인하며, 중국어가 불안정할 경우 후반 편집에서 자막을 덧입힙니다.
사용자가 기다리도록 조용히 다른 작업을 하지 마세요. 이미지 생성 작업은 먼저 넘겨야 합니다. 자세한 내용은
references/13_parallel_work.md를 참조하세요.
모델 라우팅
기본값은 hybrid입니다.
| 단계 | 모델 | 수행 작업 |
|---|---|---|
| G0–G3 | Codex + DeepSeek | 브리핑, 리서치, 내레이션, 스토리보드, 프롬프트 |
| G4 | GPT | 이미지 생성/검토; image_mode가 생성 주체를 결정함 |
| G5–G8 | Codex + DeepSeek | 작업, 비용, 편집 파일, QC; 이미지 볼 때 임시로 GPT로 전환 |
- 텍스트와 파일은 DeepSeek, 픽셀과 시각적 요소는 GPT를 사용합니다.
image_mode=human: 사용자가 GPT로 이미지 생성;image_mode=agent: Codex + 이미지 도구로 이미지 생성 (명시적 승인 필요).- 전환 전에
image_handoff.md를 작성하며, 프로젝트 파일이交接 증빙 자료입니다. - 자세한 내용은
references/10_model_routing.md를 참조하세요.
9개 단계 및 G0–G8 게이트
| 단계 | 산출물 | 게이트 |
|---|---|---|
| G0 브리핑 | project_brief.md | 길이, 예산, 권리, 플랫폼 확정 |
| 리서치/사실 확인 | fact_check.csv, research.md | G1 사실 확정 |
| 스크립트/내레이션 | script.md, vo.csv, vo_text_review.md, voice_audition.md, vo_lock.md, vo_review.md | G2 내레이션 확정 (텍스트 + 음색 + 버전) |
| 스토리보드/타임라인 | beats.csv, shots.csv, segments.csv, timeline.csv, animatic.mp4, v0_review.md | G3 비트 할당 + 샷 테이블 + v0 확인 |
| 첫 프레임 (image_mode에 따라) | 首帧/, image_review.md, image_handoff.md, image_batch_request.md | G4 첫 프레임 확정 |
| 비디오 생성 | h3_package/, clips/, tasks.json, cost.csv | G5 비디오 확정 |
| 러프 컷/자막 | cut/, subtitles.srt | G6 화면 확정 |
| 음악/음향 효과 | music/, cue_sheet.csv | G7 소리 확정 |
| 최종 검수/납품 | final.mp4, final_qc.md, credits.md | G8 납품 |
규칙: 이전 관문을 통과하지 못하면 다음 관문으로 진입하지 않으며, 비용을 지출하지 않습니다.
오프닝 카드
G0 단계에서만 "필요 여부, 몇 초, 대상 길이에 포함 여부"를 묻습니다. 제목 텍스트는 G2.5 단계에서 결정합니다.
- G0:
opening_card: none|static;opening_seconds;opening_in_target; - G2.5: 메인 제목/서브 제목/글꼴 스타일;
opening_card.md글자 단위 확인; - G3:
0-1정적 샷으로shots.csv에 기록 (static=yes, 내레이션 없음),segments.csv에CARD행 추가 (static=yes); - G4: 첫 번째 이미지 생성 배치에 포함, 파일명
首帧/0-1_card.png; 텍스트와 이미지가 함께 출력될 때 글자 단위 검수; - G5: H3로 생성하지 않음;
export_h3.py에서static=yes건너뜀, H3 작업 테이블에 포함하지 않음; - G6: 편집에서 정적으로 유지; 1–2%의 느린 확대(푸시인) 가능;
- 오프닝 카드 길이는 대상 길이에서 차감하거나, 대상 길이에 명시적으로 추가하며, G0에서 결정합니다.
오프닝 카드는 "프로젝트 시작 시의 길이 결정"이지 "이미지 생성 시의 장식 옵션"이 아닙니다.
내레이션 검토 순서
- 텍스트 검토:
vo.csv의 전체 텍스트, 타임코드, 사실 메모를 사용자에게 보여줍니다. 사용자가 확인한 후에 오디오 작업을 진행합니다. - 음색 시청: 동일한 문장에 대해 2–3개의 후보를 생성하고, 사용자가 A/B/C를 선택하거나 직접 녹음합니다.
- 전체 스크래치: 선택된 음색으로 전체 내레이션을 생성합니다.
- v0 애니메틱(animatic): 정적 프레임 + 내레이션으로 제작합니다.
- 어떤 단계든 확인되지 않으면 다음 단계로 진행하지 않습니다.
내레이션 우선
이 스킬의 핵심 순서입니다.
- 먼저 내레이션을 확정한 다음, 샷, 첫 프레임, 비디오를 결정합니다.
- 한 문장의 내레이션에 2–3개의 화면을 매칭하는 것이 일반적입니다.
- 한 샷에 한 문장은 특수한 경우 (짧은 반응, 구호, 단일 샷 몽타주)이며, 기본값이 아닙니다.
- 내레이션은 독립적으로
vo.csv에 작성하며, 샷별로 나누지 마세요. - 샷별로 TTS를 생성하지 마세요. 문장/단락별로 생성하고, 전체 단락을 하나의 오디오 트랙에 배치하세요.
- 각 문장은 하나의 정보를 전달합니다. 1–2문장마다 최소한 하나의 하드 정보 (연도/인물명/숫자/행동/인과관계)가 포함되어야 합니다.
- 시적 이미지에는 구체적인 앵커, 연결 고리, 실현 가능성이 있어야 합니다. "문/씨앗"은 모티프가 될 수 있으며, 자동으로 오류가 아닙니다. 앵커가 없는 구호가 빈 말입니다. 먼저 인과관계를 명확히 한 후에 시적인 표현을 고려하세요.
- 작성이 끝나면
narration_lint.py를 먼저 실행하고, 다시 한 번 읽고 최종 확정하세요. - 편집 시 J-컷/L-컷을 사용하세요: 화면은 전환되지만 내레이션은 끊기지 않습니다.
- 문장 사이에 0.3–1.0초의 호흡(숨 고르기)을 남겨두세요. 5초 내레이션을 5초 화면에 억지로 맞추지 마세요. 호흡은 내레이션이 없는 짧은 샷으로 처리하는 것이 좋으며, 내레이션이 있는 샷 내부에 넣지 마세요.
- 호흡은 오직 내레이션 문장 사이에만 배치합니다. 컷 포인트는 호흡 구간 내에 있어야 하며, 내레이션이 있는 문장 내부에 있으면 안 됩니다.
- 내레이션이 확정된 후에는 이전 버전을 직접 수정하지 마세요. 먼저
vo_diff.py를 실행하고, 영향을 받는 파일만 수정하세요. - 하나의 내레이션 단락은 여러 샷에 걸쳐 있을 수 있습니다. 일반 샷은 최대 하나의 내레이션 단락을 포함합니다.
long_take=yes인 롱테이크 샷은 여러 내레이션 단락을 포함할 수 있지만, 각 단락은 샷 내에 완전히 포함되어야 합니다. - 인접한 내레이션 간의 호흡 윈도우에는 최소한 하나의 샷 컷 포인트가 포함되어야 합니다. 문장의 시작과 끝은 샷 내부에 위치할 수 있으며, 컷 포인트와 정확히 일치할 필요는 없습니다. 호흡 구간이 있는 경우 더 큰 쪽을 선택합니다.
shots.csv/timeline.csv를 정렬한 후 먼저 v0 애니메틱(animatic) (정적 프레임/검은 프레임 + 내레이션)을 출력하고, 사용자에게 문장 간 호흡을 확인하도록 명확히 요청합니다. 확인 후에 첫 프레임/비디오를 생성합니다.- 먼저 텍스트를 보여주고, 음색을 결정한 후, v0를 제작합니다. 사용자가 텍스트와 음색을 확인하지 않으면 TTS/애니메틱을 생성하지 마세요.
먼저 내레이션이 있고, 그 다음에 화면이 있습니다. 40개의 샷을 먼저 만들고 각 샷에 한 문장씩 채우는 방식이 아닙니다.
파일 규약
shots.csv
id,story_segment,scene_id,duration,shot_size,camera,scene,action,expression,vo_ids,anchor,first_frame,video,status,cost,notes,long_take,static
story_segment는 내레이션 세그먼트 번호이며, H3 생성 세그먼트가 아닙니다. 생성 세그먼트는segments.csv의generation_id에 있습니다.scene_id는 씬 번호이며,segments.csv와 일치해야 합니다.duration은 초 단위이며, 소수점을 지원합니다.status는todo/image_ready/video_running/video_ok/conditional/retake/final만 사용합니다.vo_ids는 비울 수 있습니다. 일반 샷은 최대 하나의 vo_id를 가집니다.long_take=yes인 롱테이크 샷은V01|V02형식으로 작성할 수 있습니다.long_take=yes: 연속적인 롱테이크 샷으로, 2개 이상의 내레이션 단락을 허용하지만 각 단락은 샷 내에 완전히 포함되어야 합니다.static=yes: 정적 오프닝/삽입 카드이며, H3로 생성하지 않습니다.first_frame이 필수이며,segments.csv에서static=yes세그먼트를 사용합니다.- 이것이 화면의 진실 공급원입니다. 내레이션은
vo.csv에 있으며, 둘은vo_ids로 연결됩니다.
vo.csv
vo_id,start,end,text,shot_ids,notes
V01,0.0,4.2,"한 문장의 완전한 내레이션","1-1|1-2","4.2초; 문장 뒤 0.8초 호흡"
V02,5.0,6.2,"다음 문장","1-3","1.2초; 문장 끝 0.8초"
start/end는 절대 초입니다.- 한 문장의 내레이션은 2–3개의 샷에 걸쳐 있을 수 있습니다.
- 한 샷에 한 문장은 특수한 경우에만 사용합니다.
- 문장 사이에 0.3–1.0초의 호흡을 남겨둡니다.
- 하나의
shot_id는 하나의 큐(cue)에만 속할 수 있습니다. 하나의 큐는 여러 샷을 포함할 수 있습니다. - 자막은
vo.csv에서 생성되며, 샷에 바인딩되지 않습니다.
beats.csv
beat_id,story_segment,kind,shot_id,vo_id,text,notes
B01,1,action,1-1,V01,카운터 뒤에서 문제를 풀다,
B02,1,action,2-1,V02,논문을 봉투에 넣다,
- 비트(beat)는 이야기의 최소 단위이며, 음악 비트가 아닙니다.
- 각 비트는 정확히 하나의
shot_id에 할당됩니다. static이 아닌 각 샷은 최소한 하나의 비트를 가집니다.static=yes인 오프닝 카드는 비트가 없을 수 있습니다. 각 내레이션 단락은 최소한 하나의 비트를 가집니다.- 하나의 내레이션은 여러 비트에 걸쳐 있을 수 있으며, 각 행에서 동일한
vo_id를 반복합니다. - 비트 순서는 샷 순서와 일치해야 합니다. 누락, 중복, 순서 오류는
validate.py에서 걸러냅니다.
segments.csv
generation_id,scene_id,cut_order,shot_id,start,end,duration,keyframe,static,notes
S01,1,1,1-1,0,5,5,首帧/1-1_first.png,no,단일 컷 세그먼트
S02,1,1,1-2,5,9,4,首帧/1-2_first.png,no,세그먼트 내 첫 번째 컷
S02,1,2,1-3,9,15,6,首帧/1-3_first.png,no,세그먼트 내 두 번째 컷
generation_id= 한 번의 H3 생성. 한 세그먼트는 ≤15초이며, 씬을 넘지 않습니다.scene_id는shots.csv의 동일한 샷에 있는scene_id와 같아야 합니다. 씬이 변경되면 세그먼트도 변경되어야 합니다.cut_order= 세그먼트 내 몇 번째 컷인지, 1부터 연속.keyframe= 이 컷의 구도 앵커 이미지. 첫 번째 컷은 0.00초에 고정, 후속 컷은 컷 포인트에 고정.static=yes= 정적 카드, H3에 포함되지 않음. 단일 컷이어야 함.export_h3.py에서 건너뜀.- 각 샷은 하나의 generation에만 나타날 수 있습니다.
- 각 컷의
start/end/duration은shots.csv의 누적 시작 및 종료와 같아야 합니다. 전체 영화는 빈틈이나 중복이 없어야 합니다. validate.py에서 경계 초과, 위치 오류, 빈틈, 중복을 걸러냅니다.
h3_prompts.csv
shot_id,prompt,soundscape,notes
1-1,"첫 프레임 유지; 펜촉이 천천히 움직이고, 등불 불빛이 살짝 흔들린다.","종이와 펜 소리, 먼 곳의 바람 소리.",
export_h3.py는segments.csv에 따라 그룹화하고, 각 컷의 프롬프트를 다중 이미지 정렬 프롬프트로 결합합니다.h3_package/<generation_id>/prompt.md+manifest.json을 출력합니다.- API를 호출하지 않습니다. 생성은 여전히 H3 작업 테이블에 의해 실행됩니다.
내레이션 버전
vo_versions/vo_v1.csv
vo_v1_scratch.wav
vo_lock.md
- 확정 전에 먼저 읽어보기/TTS를 통해 실제 길이를 측정합니다.
- 확정 후에는 새 버전만 추가하고 이전 버전을 직접 수정하지 않습니다.
- 내레이션을 변경하려면 먼저
vo_diff.py를 실행한 후, 영향 범위에 따라 변경합니다. - 자세한 내용은
references/12_change_control.md를 참조하세요.
project.json
init_project.py가 생성하는 기계 설정: profile/model_routing/image_mode/duration_target_sec/shot_target/fps/resolution/providers.
project.yaml은 사람이 읽는 버전입니다. 스크립트는 project.json을 읽습니다.
tasks.json
[{"generation_id":"S01","provider":"minimax_h3","model":"MiniMax-H3","resolution":"768P","duration":9,"status":"todo","prompt":"h3_package/S01/prompt.md","first_frames":["首帧_h3/1-1_first.png"],"cost_cny":0.0}]
generation_id는segments.csv의 생성 세그먼트에 해당합니다.duration은 4–15 사이의 정수여야 합니다.prompt/first_frames는 투입 패키지 경로입니다.- 실패한 작업은 비용이 청구되지 않습니다. 재시도는 별도로 나열됩니다.
- 이전의 샷별 작업은
id를 사용할 수 있지만,h3_tasks.json은 항상generation_id를 사용합니다.
납품 패키지
final.mp4
subtitles.srt
vo.wav
vo.csv
music/A-E.wav + cue_sheet.csv
credits.md
source_list.csv
fact_check.csv
final_qc.md
하드 규칙
- 이미지는 기본적으로 사용자가 GPT로 생성하며, AI는 이미지 API를 호출하지 않습니다. 오직
image_mode=agent이고 사용자가 명시적으로 승인한 경우에만 이미지 도구 사용이 허용됩니다. - 비디오는 기본적으로 한 번만 생성하며, 실패할 경우에만 한 번 더 생성합니다.
- 생성된 비디오에는 환경음/인간 목소리만 허용되며, 배경 음악/BGM은 허용되지 않습니다.
- 768P 소스素材는 1344×768 (7:4)일 수 있으며, 최종 버전은 1920×1080으로 납품합니다.
- 첫 프레임은 반드시 16:9여야 하며, 그렇지 않으면 이미지-비디오 변환 시 화면 비율이 틀어집니다.
- 역사 사진은 출처를 표시하고, AI 화면에는 "장면 재현"이라고 표시합니다.
- 자막은 행당 16–20자, 최대 2행, 좌우 여백 ≥100px입니다.
- 음악 각 부분에는 1.5–2초의 핸들(handle)을 남겨두고, 저점은 무음이 아닙니다.
- 비용은 작업 로그를 기준으로 계산하며, 기억에 의존하지 않습니다.
- 납품 전에 ffprobe로 해상도/프레임 속도/오디오를 재확인합니다.
- 먼저 내레이션을 확정한 후 샷을 결정합니다. 기본적으로 한 문장의 내레이션이 2–3개의 샷에 걸쳐 있으며, 한 샷에 한 문장은 특수한 경우입니다.
- 내레이션으로 화면을 가득 채우지 마세요. 5초 내레이션에 5초 화면은 성급하게 느껴집니다. 문장 사이에 0.3–1.0초의 호흡을 남겨두세요.
- 내레이션은 시적일 수 있지만, 시적인 표현에는 구체적인 대상/행동 앵커가 있어야 합니다. 설명적인 단락에서만 각 문장마다 하드 정보를 요구합니다. 두 가지 기준을 혼용하지 마세요.
- 내레이션이 확정된 후에는 한 문장의 내레이션을 수정하기 위해 전체 프로젝트를 다시 작성하지 마세요. 먼저
vo_diff.py를 실행한 후, 영향을 받는 파일만 수정하세요. - G4 프롬프트 작성이 완료되면 먼저 사용자에게 이미지 생성을 요청합니다. 사용자가 이미지 생성을 시작한 후에야 이미지/비디오에 의존하지 않는 병렬 작업을 수행할 수 있습니다.
- 하나의 내레이션 단락은 여러 샷에 걸쳐 있을 수 있습니다. 일반 샷은 최대 하나의 내레이션 단락을 포함합니다.
long_take=yes인 롱테이크 샷은 여러 내레이션 단락을 포함할 수 있지만, 모두 샷 내에 있어야 합니다. - 호흡 윈도우는 샷 컷 포인트를 포함해야 합니다. 문장의 시작과 끝이 컷 포인트에 붙을 것을 요구하지 마세요. 호흡 구간에 범위가 있는 경우 더 큰 쪽을 선택합니다.
- v0 애니메틱이 완료되면 먼저 사용자에게 문장 간 호흡을 확인하도록 요청합니다. 확인 전에는 첫 프레임을 생성하거나 비디오를 생성하지 않습니다.
- 음색은 2–3개의 후보를 시청한 후 사용자가 선택해야 합니다. 특정 TTS를 기본값으로 사용할 수 없습니다.
- 내레이션은 기본적으로 "명확하지만 직설적이지 않음"입니다. 먼저 인물/사건/인과관계를 명확히 설명하고, 구체적인 이미지와 짧은 문장으로 여백을 남깁니다. 1–2문장 추가는 허용되지만, 각 문장에는 새로운 정보나 새로운 화면이 있어야 하며, 형용사로 길이를 채우지 않습니다.
beats.csv의 각 비트는 정확히 하나의 샷에 할당되어야 합니다. 각 샷과 각 내레이션 단락에는 비트가 포함되어야 합니다. 누락/중복/순서 오류는validate.py에서 걸러냅니다.segments.csv의 한 세그먼트는 ≤15초입니다. 세그먼트 내 컷 순서는 연속적이며, 각 컷은 하나의 키프레임을 가지며, 각 샷은 한 번만 나타납니다. 각 컷의 시작과 끝은shots.csv의 누적 시간과 같아야 합니다. H3 다중 이미지 정렬은export_h3.py를 사용하여 투입 패키지를 생성합니다.- 오프닝 카드: G0에서 길이 결정, G2.5에서 텍스트 결정, G3에서
0-1 static=yes작성, G4에서 이미지 생성, G5에서 H3로 생성하지 않음.
프로바이더
config/providers.yaml은 문서이고, 기계 설정은 providers.json입니다 (init_project.py가 생성하며, timeline.py가 검증합니다).
기본값: 이미지=user_gpt, 비디오=minimax_h3, 내레이션=capcut_tts, 음악=local_midi_fluidsynth, 편집=capcut, QC=ffmpeg.
이미지 프로바이더는 항상 human입니다. 이 규칙은 설정에 따라 변경되지 않습니다.
명령어
python scripts/init_project.py --root my-film --profile short --duration 30 --shots 10 --segments 2
python scripts/timeline.py --shots shots.csv --vo vo.csv --vo-out vo_report.csv --project project.json --min-gap 0.4
python scripts/timeline.py --shots shots.csv --vo vo.csv --max-density 0.85 --allow-single
python scripts/narration_lint.py --text vo.csv --style lyrical --max-chars 28
python scripts/validate.py --shots shots.csv --vo vo.csv --beats beats.csv --segments segments.csv --project project.json
python scripts/validate.py --shots shots.csv --vo vo.csv --beats beats.csv --segments segments.csv --project project.json --strict-files
python scripts/validate_tasks.py --tasks h3_tasks.json --segments segments.csv
python scripts/selftest.py
python scripts/export_h3.py --shots shots.csv --segments segments.csv --prompts h3_prompts.csv --out h3_package
python scripts/timeline.py --shots shots.csv --vo vo.csv --animatic animatic.mp4
python scripts/vo_gap_report.py --vo vo.csv --audio vo_scratch.wav --out vo_gap.md
python scripts/vo_diff.py --old vo_versions/vo_v1.csv --new vo.csv --out vo_diff.md
python scripts/vo2srt.py --vo vo.csv --out subtitles.srt --max-chars 18
python scripts/contact_sheet.py --clips clips --out review --frames 6
python scripts/cost_report.py --tasks tasks.json --out cost.csv --default-model MiniMax-H3
스크립트: init_project.py, validate.py, selftest.py, export_h3.py, timeline.py, narration_lint.py, vo2srt.py, vo_gap_report.py, vo_diff.py, contact_sheet.py, cost_report.py. --animatic의 기본값은 첫 프레임이 없으면 검은 프레임으로 대체, --animatic-missing error는 오류로 처리합니다.
validate.py는 구조 규약 (스키마 / 비트 / 세그먼트 컷 / 커버리지)을 관리합니다. G3는 기본적으로 키프레임 파일을 확인하지 않으며, G5에서는 --strict-files를 사용하여 확인합니다. timeline.py --vo는 시간 (호흡 / 밀도 / 롱테이크)을 관리합니다. 둘 다 실행하며, 서로 대체하지 않습니다.
실패 처리
- 비디오 실패: 작업 상태 확인; 실패 시 비용 미청구; H3-Max로 변경 또는 첫 프레임 수정, 맹목적으로 재실행하지 않음.
- 얼굴 변화/여러 손: 재생성 또는 측면/후면으로 변경.
- 동작이 발생하지 않음: 재생성, 편집으로 억지로 수정하지 않음.
- 자막 넘침: 스타일/줄 바꿈 수정, 보이지 않을 정도로 축소하지 않음.
- 음악 어색함: pickup, expression ramp, handle 추가, 하드 컷하지 않음.
- 내보내기 비율 오류: 프로젝트로 돌아가 1920×1080으로 수정, 늘리지 않음.
참고
SOP.md: 사람이 보는 프로세스 및 체크리스트references/: 단계별 세부 사항 (00_setup.md,09_vo_spans.md,10_model_routing.md,11_narration.md,12_change_control.md,13_parallel_work.md,14_v0_animatic.md,15_beats_segments.md포함)providers/: 교체 가능한 도구templates/: 프로젝트 카드, 샷 테이블, 프롬프트, 리뷰 테이블, 큐 시트, 크레딧, 최종 검수