Communitygithub.com

marsik641/space-shorts

우주 단편 숏츠(≤30초, EN) 제작 파이프라인의 2~4단계: worktree에서 사실 조사, 시각적 브리프, 스크립트, 장면, 히어로 프레임, 승인용 초안 영상 제작 후 두 대의 렌더 PC 공용 큐를 거쳐 최종 릴리즈(MP4 + publish_en.md)까지 완료하고 브랜치를 main에 병합합니다. 사용 상황: "옵션 N 만들기", "/make-video", "X에 대한 영상 실행", "업로드 패키지".

space-shorts란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)가 사용자의 대략적인 아이디어나 기존의 ideas 파일에서 선택된 옵션을 바탕으로 30초 이내의 영어 우주 과학 숏폼 영상을 완전 자동으로 제작하는 엔드투엔드 파이프라인입니다. 스킬의 핵심은 'The Universe Inside Out' 채널의 품질 기준을 충족하는 시네마틱한 영상 제작에 있으며, 사실 조사 및 검증, 시각적 브리프 작성, 대본 작성(6~8세그먼트, 55~70단어), 시퀀스 및 장면 설계, 타이밍 프리뷰, 히어로 프레임 생성, 비평가(시네마/와우)의 피드백을 통한 반복 개선, 최종 렌더링 및 QA, 그리고 repo에 릴리즈하는 전 과정을 다룹니다. 모든 렌더링 및 무거운 연산(TTS, 음악, 빌드)은 두 대의 지정된 렌더 PC의 공용 큐를 통해 비동기적으로 처리되며, 에이전트는 텍스트 기반 작업에 집중할 수 있습니다. 각 단계는 명확한 체크포인트와 커밋 규칙을 가지며, 사용자의 명시적인 승인 이후에만 최종 렌더링으로 진행되도록 설계되어 안정적이고 예측 가능한 워크플로우를 제공합니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/marsik641/space-shorts/tree/HEAD/.agents/skills/make-video

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

/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 → Claude EnterWorktree path / Codex workdir.
  • Blender, TTS, 음악, 빌드 — 큐를 통해서만: 작업이 제출되면 채팅은 텍스트 작업을 계속 진행.
  • 각 블록 후 — 모델 트레일러와 함께 type(<ep>): … 커밋. 턴 종료 — clean tree.

파트 A — 승인 전까지

  1. 에피소드. 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에서 에피소드.
  2. 사실: 연구원 + 사실 확인자 (docs/workflows.md) → facts.md (모든 숫자는 링크 포함, 시각적 참조). 커밋.
  3. 시각적 브리프 visual_brief.md (역할 「연출가」): 참조, 첫 프레임, money shot, 팔레트, 조명, 카메라 및 각 샷의 이벤트, 규칙, 예산. 비평가 「시네마/와우」 브리프 검토 → 수정. 커밋.
  4. 대본 script_9x16.json (EN): 68 세그먼트, at(초) 앵커, 2929.5초 (≤ 30.0 엄격), ≈ 55~70 단어; 첫 문장 — 사실 기반 후크; 마지막 문장은 시작으로 연결 (루프). en_cap — 숫자, | — 수동 줄바꿈 (docs/pipeline.md, 「자막 및 타이틀」 참고). 채널 음성 — Kokoro af_heart ×0.98. 커밋.
  5. 씬 및 샷. 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. 커밋.
  6. 타이밍 프리뷰: 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.
  7. 히어로 프레임: 샷별 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시간이 안 되도록 함.
  8. 비평 (docs/workflows.md): 「시네마/와우」 (샷 평가 110, < 8 — 재작업, 최대 3라운드), 구성, 리듬/후크, 사실 ( docs/quality.md의 4가지 블로커 전용); 선택사항: 독창성, 사운드. 수정 → 67단계 반복. 보고서 — 에피소드 내 파일로 저장, 라운드별 커밋 fix(<ep>): 비평 기반 수정, 라운드 K.
  9. 초안 영상 전체 (docs/approval.md, 1a): 샷에 draft 함수 + 에피소드별 preview_movie.py를 submit task로 실행. 생성 안 됨 — 초안 영상 없이 승인 진행, 메시지에 "초안 영상: 없음".
  10. 승인: docs/approval.md 템플릿 기반 메시지 + 파일 (히어로 프레임, 초안 영상). 상태 커밋. 멈추고 응답을 기다려라. 수정 — 해당 단계로 돌아감.

파트 B — 「ok」 후: DoD까지 (docs/approval.md의 중단 외 질문 금지)

  1. 히스토리에 승인 기록. 합의된 큐 시트 및 publish_en.md (docs/publish.md 기준, 규칙은 목록으로) 준비. 커밋 chore(<ep>): 렌더 승인됨 (사용자 수정 사항은 본문에).
  2. 최종 렌더. python tools/render_queue.py submit final episodes/<ep>/episode.json --approved '사용자 승인: 날짜, 채팅 컨텍스트'. 플래그는 이미 받은 동의를 기록하며, 대체하지 않음. 사용자에게 — 작업 ID, PC, ETA. Worker가 PC를 선택하고, 120프레임 단위로 렌더링, 프레임체크 수행, TTS, 음악, mix, build_edit, 빌드, 머신 QA 및 릴리즈. 채팅은 종료 가능.
  3. 상태 및 오류. status --json (진행률 — cursor/steps; 작업 완료 전 프레임은 snapshot 스냅샷에 저장, out/<ep>/ 아님). failed — 스냅샷 내 단계 로그; 일시적 환경 오류 — retry JOB; 코드/대본 수정 — cancel JOB, worktree에서 수정, 필요시 새 승인, 새 작업. Framecheck FAIL — RERENDER 분석, 스냅샷(및 원격)에서 불량 프레임 제거, retry JOB --rerender-shots vN. pause/resume — 청크 사이. 상위 bash 종료 금지.
  4. 시각적 QA. needs_review = 머신 검사 및 패키지 준비 완료. PNG out/<ep>/9x16/qa_en/ 및 마스터: 히어로 프레임보다 나빠서는 안 됨 (노이즈, 뭉개짐, 과다 노출, 깜빡임), 안전 영역, 자막, 싱크 어긋남, 루프. 이상 없음 — python tools/render_queue.py accept JOB; 결함 — 수정 및 새 작업.
  5. 전달. 두 파일 out/<ep>/release/ 사용자에게 제공 (Claude — SendUserFile). 렌더 중 소스 변경됨 — 커밋 전에 스냅샷의 publish와 편집 JSON 비교 확인.
  6. 기록. episodes/INDEX.md (샷, 기법, 음성, 키, 후크), README.md 에피소드 테이블, ✅ 주제 docs/channel.md, 초/프레임 측정 docs/timings.md, 교훈 — 관련 문서에 기록. 커밋 docs(<ep>): 기록 및 교훈 (에피소드 코드, edit_9x16_en.json, publish_en.md; out/ 제외).
  7. 병합. python tools/video_wt.py finish — clean → release → accept → git merge main → check_episode 및 테스트 → ff main → out/<ep>/ 메인 복사본으로 이동. 충돌 — worktree에서 해결, 커밋, 반복. 그런 다음 worktree 종료 (Claude — ExitWorktree keep) 및 메인 복사본에서 python tools/video_wt.py remove epNNN; 앱에서 시작한 worktree (start --here)는 제거하지 않음. 그제야 — 「완료」.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬