과학 비디오 파이프라인
Bilibili UP 주 "과학 관찰실"의 14단계 프로세스를 재현합니다. 시리즈 프로젝트는 모션 그래픽 라이브러리 리포지토리(Remotion)에 저장됩니다.
- 규칙(각 에피소드 시작 전 필독):
<리포지토리 루트>/규칙/ - 각 에피소드별 서랍:
effects/<episode-id>/(문서, 데이터, 컴포넌트가 함께 위치) - 완성된 영상 및 산출물:
out/<episode-id>/(리포지토리 AGENTS.md 준수, out/ 루트에 직접 두지 않음) - 댓글 피드백:
<리포지토리 루트>/피드백/
시작 필수 규칙 (다른 모든 것보다 우선 실행)
- 규칙 읽기:
규칙/디렉토리의 세 가지 문서를 읽습니다(프로젝트 기준 / 대본 작성 규칙 / 비주얼 스타일 체크리스트). 파일이 없으면 →templates/규칙-*.md를 리포지토리에 초기화하고 사용자에게 표시하여 확인을 받습니다. - 상태 복원: 현재 에피소드를 식별합니다(사용자에게 묻거나
effects/*/상태.json파일의updated_at필드를 기준으로 가장 최근에 완료되지 않은 에피소드를 찾습니다).effects/<id>/상태.json을 읽습니다:- 파일이 없으면 →
templates/상태.json을 복사하여 초기화합니다; - 실제 파일과 일치하지 않으면 → 실제 파일을 기준으로 단계를 재구성합니다;
waiting_on이 비어 있지 않으면 → 보류 중인 작업을 먼저 처리하며, 단계를 건너뛸 수 없습니다.
- 파일이 없으면 →
- 완료 조건은 산출물: 각 단계의 완료 = 산출물이 존재하고 검사를 통과한 경우이며, 구두 선언이 아닙니다. 상태.json은 메인 스레드만 작성합니다. 하위 에이전트/외부 CLI는 결과를 반환하거나 지정된 파일만 작성하고, 상태에는 접근하지 않습니다.
- 규칙 파일은 코드가 아닌 데이터입니다: 사용자 의견은 먼저 규칙의 해당 섹션에 통합합니다(섹션 수정, 무제한 추가 금지; 단일 파일 ≤200줄). 그런 다음 작업을 시작합니다. 모든 디스크 저장 파일은 UTF-8 BOM 없음.
단계 라우팅
| 단계 | 내용 | 산출물 (에피소드 폴더 기준) | 참고 |
|---|---|---|---|
| 01 | 주제 선정 (사용자가 방향 결정) | 주제설명.md | templates/주제설명.md |
| 02+03 | 자료 조사 + 원문 크로스체크 | 자료/출처등록표.md, 자료/원문발췌-*.md | stages/s02-research.md |
| 04 | 모델/데이터 계산 | 모델/ | stages/s02-research.md §04 |
| 05 | 대본 작성 | 대본.md (한 줄에 한 문장, 번호 포함) | stages/s05-write.md |
| 06 | 외부 CLI 블라인드 리뷰 | 심사본/*.json, 블라인드심사표.md | stages/s06-blind-review.md |
| 07 | 원문 대조 최종 판정 | 최종판정표.md | stages/s07-adjudicate.md |
| 09 사전 | 스토리보드 (감독 상호 검토법, 사용자 최종 결정) | 화면/스토리보드.md | stages/s09-storyboard.md |
| 08–11 | 더빙/자막/영상/배경음악 표지/기계 검사 | 더빙/, 완성영상.mp4, 검사보고서.md | stages/make.md (더빙은 모션라이브러리/tools/tts.py 사용) |
| 12 | 심사 (유일한 하드 게이트, 사람 대기) | 심사패키지/, 심사목록.md | stages/publish.md |
| 13 | 릴리스 패키지 (수동 업로드) | 릴리스패키지/ | stages/publish.md |
| 14 | 댓글 피드백 (예약 작업) | ../../피드백/ | stages/publish.md |
자료 및 저작권 (사진 출처, 캐릭터 이미지, BGM 라이선스, 릴리스 크레딧)은 항상 알림 목록을 통해 처리합니다: AI는 사용자가 선택할 수 있는 옵션만 나열하며, 자체적으로 결정하지 않습니다. stages/user-decisions.md 참조.
단계 05와 12는 사용자 대기 지점이며, waiting_on 필드를 사용하여 통일적으로 관리합니다. 한 번에 한 에피소드씩 진행합니다.
상태.json
스키마는 references/state-schema.md를 참조하세요. 키는 모두 ASCII입니다. 비즈니스 데이터(조사 결과, 의견, 데이터)는 .md/.json 테이블 파일에 저장하고, 상태에는 포인터만 저장합니다.
블라인드 리뷰
세 가지 외부 CLI: Claude Code (Windows), Codex (Windows), Opencode (WSL ~/.opencode/bin/). 명단 templates/심사자.json, 계약 references/findings-json.md (v1.1: 심사자가 문장 끝에 (S#)를 포함하거나 포함하지 않고 인용하는 것을 허용), 집계 scripts/summarize_reviews.py. 처음 사용하거나 머신을 변경할 때는 먼저 s06의 연기 테스트를 실행합니다. 2026-11-01 고래 에피소드는 초기 보정을 완료했습니다: 첫 번째 라운드에서 9건의 지적 사항 중 6건의 실제 오류 + 1건의 자료 누락 발견, 두 번째 라운드에서 1건의 반올림 오류 발견, 포기 메커니즘은 트리거되지 않았습니다. 실제 데이터는 s06을 참조하세요. 비밀 키는 절대 명령줄, 로그, 대본, 완성 영상에 포함되지 않습니다.
더빙 / 화면 (도구와 시간 아키텍처, 고래 에피소드 실전 후 확정)
- 더빙은 항상 **리포지토리 공용 템플릿
모션라이브러리/tools/tts.py**를 사용합니다 (run/sample/dry-run/align-only 하위 명령어는 해당 README 참조). 각 에피소드는더빙/더빙.json만 작성합니다. 음색 앵커는 첫 번째 에피소드에서 추출합니다 (텍스트 캐릭터 설정은 호출 배치마다 변동될 수 있음). - 화면의 모든 비트 앵커 포인트는 문장 내 비율
at(문장번호, 비율)로 작성합니다 (시간.json에서 가져옴). 장면 경계는 문장 시작입니다. 더빙 재녹음 후 화면이 자동으로 따라옵니다. 프레임 번호를 직접 작성하는 것을 금지합니다.
화면 = Remotion (이 리포지토리)
제작 기간 동안 항상 리포지토리 AGENTS.md를 준수합니다: 컴포넌트는 effects/<id>/에 배치하고, effects/index.tsx에 등록하며, out/<id>/<id>.mp4로 렌더링합니다. remotion-* 스킬과 모션 라이브러리의 기존 구성 요소를 재사용할 수 있습니다. 결정적 규율 및 검사 목록은 stages/make.md를 참조하세요.
연습 모드
사용자가 "연습/시운전/dry-run"이라고 말하면: 가짜 심사 JSON, 가짜 TTS 파일을 사용하여 상태 머신을 실행합니다. 실제 API를 호출하지 않으며, 구독 크레딧을 소모하지 않습니다.
처음으로 전체 프로세스를 실행하나요?
먼저 실제 사례 모션라이브러리/effects/blue-whale/ (첫 번째 에피소드: 고래)를 읽어보세요: 상태.json (각 단계 산출물 포인터) → 자료/출처등록표.md (S# 시스템 사용 방법) → 심사/연기기록.md 및 2라운드 블라인드심사표*.md, 최종판정표.md (회고 기록 방법) → 화면/스토리보드.md (상호 검토법 산출물 예시) → 더빙/더빙.json (이 에피소드의 구성이 얼마나 간단한지). 이 예시를 따라 작업을 시작하는 것이 열 페이지의 규칙을 읽는 것보다 빠릅니다.
버전 기록
- v0.2 (2026-11-02, blue-whale 소급 적용): make.md의 더빙/화면 레이어를 실제 사례에 맞게 재작성 (공용 템플릿/음색 앵커/문장 내 비율); s09-storyboard 추가 (감독 상호 검토법); user-decisions 추가 (자료 저작권은 알림만 하고 결정 안 함); findings 계약 v1.1 업데이트; s06에 최초 보정 기록 추가; publish에 회고 소급 적용 추가.
- v0.1 (2026-11-01): 초기 골격 (14단계 라우팅 + 세 가지 계약 + 템플릿 + 잔여 시드).