Video Shotcraft (프로젝트 에디션)
전체 상위 스킬은 skills/video-shotcraft/에 있습니다 (git commit e1d15d9, 완전 클론, 편집 금지). 이 파일은 라우터 역할을 하며, 상위 스킬을 대체하지 않습니다. 빌드 전에 skills/video-shotcraft/SKILL.md 전체를 읽고, 아래 맵을 사용하여 모든 기능에 접근하세요. 경로는 별도 표시가 없으면 skills/video-shotcraft/ 기준입니다.
프로젝트 기본값 (상위 스킬의 "모드 선택" 재정의)
- 모드: 자율 자유 생성 (
references/pipeline.md, 스테이지 0-7, 스테이지별 확인 없음). 사용자가 요청할 때만 전환: "dùng template" →template/TEMPLATE.md; "cùng làm / duyệt từng bước" →references/guided-free-creation.md; 단일 샷 →references/shots/에서 카드 선택. - 스테이지 0-3 (제품 브리프, 시각적 방향, 샷 매핑, 스토리보드)은 이 프로젝트의
docs/<video>/brief.md+script.md로 충족됩니다. 샷 테이블(| # | time | shot | key motion |)과 함께 디자인 스펙에 반영하세요. - 스타일은 브리프에서 비롯되며, 다른 비디오나 Ink Press 템플릿을 따라하지 않습니다. 모션 문법과 조정된 파라미터는 차용하되, 색상과 폰트는 다시 입히세요. 대상은 9:16 1080×1920이므로 16:9 레시피는 픽셀 단위로 복사하지 말고 다시 레이아웃해야 합니다.
- 비디오당 하나의 파일만 렌더링:
out/<video_id>-<voice-slug>-reel.mp4(BGM 포함),scripts/pipeline.py render통해 처리. BGM 없는 버전은 렌더링하지 마세요 (사용자 결정 사항이며, 상위 스킬의 두 버전 규칙과 최종 검토 항목 A8을 재정의합니다).
기능 맵
| 필요 | 방법 |
|---|---|
| 샷 시각적 찾기/선택 | 갤러리: cd gallery && python3 -m http.server 4178 → http://localhost:4178/library.html (150개 클립, gallery/media/에 있음, 인덱스는 gallery/api/library.json) |
| 샷 레시피 (~124 카드) | references/shots/<category>/ (카메라, 데이터, 효과, 상호작용, 오프닝, 아웃트로, 리듬, 트랜지션, 타이포그래피, UI-진입); 머리말을 스캔하고 선택한 카드를 전체 읽기 |
| 튜닝된 참조 코드 | demos/<category>/; 선택한 각 카드의 정확한 데모 TSX 읽기 (카드의 "参考实现"). 카드 이름만으로 다시 작성하지 말 것. "known pitfalls/命门" 파라미터는 약화시키지 말 것 |
| 전체 비디오 아크 | references/sequences/promo-energy-arc.md |
| 재사용 가능 컴포넌트 | assets/lib/ (PageCam, ClipCard, DigitRoll, FlashCut, Caption, FlatPanel, VerticalTicker, 헬퍼). src/로 복사하여 사용, 크로스 임포트 금지 |
| 실제 페이지 캡처 (주제에 웹사이트/앱이 있는 경우) | assets/scripts/capture-template.mjs (2배 전체 페이지 텍스처 + 요소 컷아웃 + layout.json) |
| 미학 자체 점검 | references/aesthetic-rules.md (빌드 중에 확인, 최종에만 하지 말 것) |
| 사운드 | references/sound-design.md; 오디오는 assets/audio/ (bgm/ 5트랙, sfx/<category>/ 149파일; 라이선스 정보는 assets/audio/ATTRIBUTION.md) |
| 강한 비트 BGM | references/music-beat-sync.md (먼저 BPM 분석, 그 다음 비트에 스토리보드 작성) |
| 독립 최종 검토 | references/final-review.md (컨텍스트 초기화 서브에이전트) |
| 작업대 (완성 비디오 시각적 조정/내보내기) | references/workbench.md, node workbench/scripts/open.mjs <project> → http://localhost:5198 (src/workbench.ts 매니페스트 필요, 전달 후 제공) |
| Jianying 드래프트 내보내기 | references/jianying-export.md (요청 시에만) |
| 소셜 게시 | references/publish-upload-post.md (요청 시에만, 먼저 드라이런, unknown에서 재실행 금지) |
| 바로 사용 가능한 전체 비디오 + 테마 | template/ (Ink Press, 9 팔레트, template/THEMES.md); 요청 시에만 |
| 프로덕션 용도 아님 | shot-polish/ (상위 스킬 내부 재설계 노트), agents/openai.yaml (Codex UI 메타데이터), demos/_legacy |
빌드 루프 (프로젝트)
- 타임라인 먼저 (
src/<name>Timeline.ts): 샷 지속 시간 = 측정된 음성 + 약 0.5초 (아웃트로 +1.4초); SFX 오프셋은 샷 시작 기준. - 장면별: 갤러리/라이브러리에서 카드 선택, 카드 + 데모 TSX + 필요한
assets/lib컴포넌트 읽기, 브리프 스타일에 맞게 조정. 선택한 카드는docs/<video>/design-spec.md에 기록. - 각 장면 후:
npx tsc --noEmit, 그 다음npx remotion still src/index.ts <CompId> out/qa/<id>-<frame>.png --frame=N(샷당 2프레임 이상)으로 PNG 읽기. 스타일 변경 후 스틸 다시 렌더링. - 오디오:
skills/video-shotcraft/assets/audio에서 선택한 파일을public/audio/<video_id>/로 복사, 출처/라이선스를docs/<video>/assets-manifest.md에 기록. 프로덕션 워크플로우 Phase 7 목표에 맞게 믹싱 (BGM 베드는 음성 아래 12–18dB, 음성이 말하는 동안 4–6dB 더 덕킹), 고정 비율 사용 금지. python3 -I scripts/pipeline.py render <video_id>로 렌더링,ebur128/volumedetect로 음량 확인, 연락처 시트 생성.- 컨텍스트 초기화 서브에이전트로
references/final-review.md+skills/viral-tech-video-creator/references/qa-checklist.md에 따라 독립 검토, 발견 사항 수정 후 재렌더링. - 전달 후: 작업대 제공 및 (요청 시에만) Jianying 내보내기/게시.
결정론: Date.now()/Math.random() 사용 금지. 안전 영역: 하단 210px 내 텍스트 금지. 상위 작성자 크레딧 및 쇼케이스 초대는 선택 사항: 전달 시 최대 한 번만 언급, 사용자가 관심을 보일 경우에만.