Communitygithub.com

Video Reel Studio

오케스트레이터가 한 문장을 완성된 세로형 비디오로 변환합니다: 브리프 작성, 모드 선택 (토킹 릴, 몽타주, 팟캐스트, 모션 필름, 웹/앱 데모, 커버 전용), video-ad-editor 파이프라인을 처음부터 끝까지 실행하고, 새로운 컨텍스트로 아랍어 자막 및 시각 검사를 위임하며, 자동 게이트 검사 (소스, 컷, 자막, 프레임, 음량, 트루 피크, 세이프 존, 패키지)에 실패하면 전달을 거부합니다.

Video Reel Studio란 무엇인가요?

Video Reel Studio는 사용자의 한 문장 요청을 완전한 세로형 비디오(릴, 커버 등)로 변환하는 고급 AI 에이전트 스킬입니다. 단순한 비디오 편집기가 아니라, `video-ad-editor`, `montage-video`, `podcast-video`, `motion-video`, `thumbnail-video` 등 5개의 하위 스킬을 오케스트레이션하는 지휘자 역할을 합니다. 사용자가 'منتج الفيديو ده' (이 비디오 제작) 또는 'اعمل كوفر' (커버 만들어 줘) 등의 아랍어 명령을 입력하면, 스킬은 명령에서 의도를 추론하여 적절한 모드(토킹 릴, 몽타주, 팟캐스트, 모션 그래픽, 웹 데모, 커버 전용)를 선택하고, 환경 사전 점검(`preflight.py`)부터 시작해 브리프 작성, 소스 분석, 컷, 자동 자막 생성, 디자인, 렌더링, 인코딩, 커버 제작에 이르기까지 전체 파이프라인을 자동으로 실행합니다. 특히 G-2에서 G8까지 7단계의 자동 게이트(Gate)를 통과해야만 최종 파일이 전달되며, 모든 검사에 실패하면 'fail-closed' 방식으로 전달을 차단하여 품질을 보장합니다. 이 스킬은 오픈코드(OpenCode), 클로드 코드(Claude Code), 코덱스(Codex), 커서(Cursor), 제미나이 CLI(Gemini CLI) 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있도록 설계되었으며, 윈도우와 macOS 환경을 모두 지원합니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/MostaDaoud/video-reel-studio/tree/HEAD/skill/video-reel-studio

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

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

문서

Video Reel Studio — 감독 하나, 엄격한 게이트

이 스킬은 직접 그리고 자르지 않습니다. 5개의 기존 스킬을 감독합니다:

스킬감독이 사용하는 용도
video-ad-editor모든 스크립트(scripts/), 토킹 릴, 캡션, 커버
montage-video음악에 맞춰 대사 없는 클립 몽타주
podcast-video두 대의 카메라 → 릴 또는 16:9 에피소드
motion-video텍스트로 모션 필름 (motion/ 엔진)
thumbnail-video릴 커버 및 YouTube 썸네일

스크립트 루트: .opencode/skills/video-ad-editor/ — 전체 경로를 전달하세요.

플랫폼: Windows 및 Mac

이 스킬은 두 플랫폼 모두에서 작동하도록 작성되었습니다. 차이점은 도구 호출 방식에만 있으며, 로직에는 없습니다:

WindowsMac
Pythonpythonpython3
.sh 스크립트& "C:\Program Files\Git\bin\bash.exe" … (⛔ 일반 bash = WSL 아님)bash …
ChromeC:\Program Files\Google\Chrome\Application\chrome.exe/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
3DGL=gpu (ANGLE/D3D11)Metal 자동
경로D:/work/x 또는 D:\work\x/Users/you/work/x

작업 시작 전, 세션당 한 번:

python scripts/preflight.py        # Mac: python3

검사 항목: Python, ffmpeg/ffprobe, node, bash, Chrome, numpy/scipy, 하위 스킬, 폰트, 아이덴티티 폴더 — 각 시스템에 맞는 설치 명령어(winget on Windows, brew on Mac)를 출력합니다. 게이트 G-2.

스크립트 자체가 플랫폼을 감지합니다: _vision.py는 Mac에서는 Apple 도구를, Windows에서는 오픈소스 대안을 선택하고, _chrome_flags.js는 Mac에서는 Metal을, 그 외에는 SwiftShader를 선택하며, 31_device3d.js와 motion/render.js는 두 시스템의 경로에서 Chrome을 찾습니다.

워크플로우: 한 문장 → 완성된 파일

사용자가 파일이나 링크와 한 문장을 제공합니다. 당신이 모든 단계를 제어합니다. 명령을 내리지 말고, 스스로 확인할 수 있는 것은 묻지 마세요. 오직 하나의 질문만 하세요. 결정이 기술적이 아니라 취향에 달린 경우 (어떤 앵글, 어떤 후크, 어떤 문장을 제거할지).

이집트 아랍어 명령 — 사용자가 이렇게 말하면 이 모드입니다

사용자가 말하면모드
«منتج الفيديو ده» · «حوّله لريل» · «اقصّ السكتات» · «هات الكابشن»talking-reel
«اعمل مونتاج من المقاطع دي» · «ركّبهم على الأغنية»montage
«اعمل ريلات من الحلقة» · «عندي كاميرتين» · «الحلقة كاملة»podcast
«اعمل فيديو موشن من النص ده» · «اشرح بالحركة» · «موشن جرافيكس»motion
«اشرح الموقع ده بفيديو» · «ديمو للتطبيق» · «اللينك ده»web-demo
«اعمل كوفر» · «ثمبنيل يوتيوب» · «صورة مصغرة»cover-only
«عايز أعدّل بنفسي» · «اعمله كاب كت» · «افتح الاستوديو»기본 모드 + CapCut / Studio

사용자가 모드를 언급하지 않아도 됩니다. 문장에 동사 + 파일이 있으면 이 표에서 모드를 유추하여 진행합니다.

빠른 파이프라인

#단계산출물게이트
-2환경 점검: preflight.py (Windows/Mac)도구 보고서G-2
-1아이덴티티 (선택): 먼저 질문 — 저장됨 / 새로 만들기 / 기본값theme.json + brand.mdG-1
0요청 읽고 brief.json 작성약속 + 모드 + 길이G0
1소스: 복사, 프레임 검사, 조명src.movG1
2컷 + 전사 + 보정 + 캡션cut.json a.json caps.jsonG2 · G3 · G3b
3디자인: 모션, 장면, 미리보기scenes*.js + sheet.jpgG4b
4전체 렌더링out/ = duration×30G4
5인코딩 + 마스터 + 번역ad-master.mp4 .srtG5
6커버 + 썸네일 + 모바일 미리보기cover.jpg …G6 · G6b
7전달 보고서gates.mdG8

세부 사항 및 정확한 명령어 ← references/pipeline.md. 역할 및 에이전트에게 넘겨야 할 때 ← references/roles.md. 각 게이트 조건 및 한계 ← references/gates.md. 아트 방향: 첫 장면 전에 styles/pack.json(10개)에서 스타일 선택 — python scripts/style_pack.py apply "<work>" <id> — 스타일이 움직임과 질감을 결정하고, 브랜드가 색상을 결정 ← references/styles-adapted.md.

-1a) 에이전트 및 모델 — 아이덴티티 전에

ai.json은 어떤 작업보다 먼저 작성됩니다: 에이전트는 환경에서 알 수 있으므로(그 안에서 작업 중이므로), 묻지 마세요. 모델이 명확하지 않은 경우 단 하나의 질문만 하세요:

"어떤 모델로 작업할 건가요? 이름만 — 장면 크기와 리뷰 방식을 맞추려고요."

답변즉시 효과
강력 + vision 모델6–8 장면, 깊이 있는 순간, 하위 에이전트를 통한 시각 검토
강력 but vision 없음4–6 장면, 숫자만 검토 + sheet.jpg에 대한 사용자 눈
빠름/저렴검증된 패턴에서 3–5 장면, 미리보기 한 번, 게이트당 한 번
작은 컨텍스트전사를 창으로 나누고, 전체 텍스트를 읽지 않음
  • 에이전트: opencode · claude-code · codex · cursor · gemini-cli — preflight.py가 프로젝트 마커를 ai.json과 비교합니다.
  • 기능을 알 수 없으면 null로 남깁니다 → 스킬이 보수적으로 작동합니다 (숫자 + 눈).
  • 세부 사항 및 전체 매트릭스 ← references/ai-fit.md.

-1b) 아이덴티티 — 선택적 온보딩 (강요하지 마세요)

첫 비디오 요청 시, 어떤 스크립트보다 먼저 하나의 질문만 하세요:

"시작하기 전에: 아이덴티티를 한 번 설정할까요 (5분: 색상, 폰트, 톤, 금지사항)? 아니면 저장된 아이덴티티를 사용할까요? 아니면 기본값으로 진행하고 나중에 변경할까요?"

사용자 응답수행할 작업
«저장된 아이덴티티 있음»python scripts/onboard.py list ← 이름 언급 ← apply <work> <slug>
«설정할게요»7가지 질문 ← new ← card ← 카드 표시 ← apply
«기본값으로 진행»같은 프로젝트에서 다시 묻지 않음; 기본값 #0B0C0C · #F4F2EE · #19C3AE · Cairo · chunk
«바빠요»비디오 시작하고, 첫 전달 후 아이덴티티 제안
  • 7가지 질문 (이름, 핸들, 대상 청중, 톤, 클 투 액션, 색상, 금지사항) ← references/onboarding.md.
  • 이미지/로고가 있음? 추측 대신 scripts/00_theme_refs.py로 팔레트 추출.
  • G-1: ink/bg 대비 ≥ 4.5, acc/bg ≥ 3, onAcc/acc ≥ 4.5. 실패 시 onboard.py new가 저장을 거부.
  • 아이덴티티는 ~/.config/opencode/brands/<slug>.json에 저장되며 이후 모든 프로젝트에서 사용됨.

⛔ 묻지 않고 온보딩을 시작하거나, 색상 때문에 프로젝트를 중단하거나, 7개 이상의 질문을 하지 마세요.

G0 — 브리프 (건너뛰지 마세요)

어떤 스크립트보다 먼저 <work>/brief.json을 작성하세요. 템플릿: assets/brief.template.json.

  • promise = 시청자가 처음 3초 안에 이해하는 것. 한 문장. 쓸 수 없으면 요청을 이해하지 못한 것입니다.
  • mode는 6개 중 하나. 요청이 두 가지 모드에 모두 해당하면 사용자 의도에 가장 가까운 것을 선택하고 이해한 내용을 한 문장으로 말하세요.
  • length_s = 현실적인 범위 (릴 45–90초; 긴 클립은 하나의 릴이 아닌 여러 릴).
  • must_keep = 삭제하거나 변경할 수 없는 이름과 숫자.

Gate G0: 세 가지 모두 존재하는가? 아니오라면 하나의 질문을 하고 계속 진행하세요.

지휘: 누가 결정하는가

당신이 주도합니다. 각 단계마다 허락을 기다리지 말고, 당신을 관리하는 에이전트에게 작업을 넘기지 마세요.

  • 스스로 확인하세요 모든 기술적 사항: 길이, 프레임, 오디오, 크기, 세이프 존.
  • 판단만 위임하세요, 판단이 깨끗한 메모리로 더 나을 때: 아랍어 검토, 이미지 검토.
  • 에이전트는 읽고 판단만 합니다 — 쓰거나 그리지 않습니다. 프롬프트 템플릿은 references/roles.md에 있습니다.

게이트: fail-closed

python scripts/gate_runner.py "<work>" --safe
  • 테이블을 출력하고 gates.json + gates.md를 작성하며, blocker가 있으면 exit 1로 종료합니다.
  • blocker가 열려 있으면 전달하지 않습니다. "한번 해보고 보자" 없음.
  • 게이트당 최대 2번 시도. 세 번째 = 원인을 이해하지 못한 것 → 스크린샷과 게이트 텍스트를 증거로 사용자에게 질문하고 중단.
  • 게이트를 비활성화하거나 --maxmb를 올리거나 "작으니까" 경고를 무시하는 것은 금지입니다. 이는 조작입니다.

엄격한 규칙

  1. 캡션은 그의 말을 정확히 베낀 것 — 지어내지 말고, 이유 없이 단어를 삭제하지 말며, 보정 시 단어 수를 유지하세요.
  2. 세이프 존 우선 — y 0–150 또는 y 1620–1920 영역, 또는 오른쪽 버튼 열에 텍스트를 넣지 마세요.
  3. theme.json의 색상만 사용; 사용자 동의 없이 이미지에 색상 보정을 전혀 하지 마세요.
  4. 화면의 모든 숫자는 facts.md 또는 그의 말에서 가져온 것 — 임의의 숫자 사용 금지.
  5. 게시나 예약 없음. 파일만 전달.
  6. 커버는 필수 — 첫 프레임이며 모바일 화면 크기로 읽을 수 있어야 함 (cover_phone.jpg).
  7. 크기와 음량은 품질의 일부: ≤29MB, −14 LUFS, 피크 ≤ −1.0 dBTP.

작동 모드

  • 토킹 릴 (기본값): talking-reel — 전체 비디오가 전체 화면을 채우고, 그래픽은 상단 벨트 또는 그 뒤에 위치.
  • 대사 없는 클립: montage — 10–20개 클립 + 오디오 트랙 필요. 같은 샷 재사용 금지.
  • 팟캐스트: podcast — 두 대의 카메라. 작성된 후크 필수.
  • 모션 필름: motion — 기본적으로 내레이션 없음 (audio.py --no-bed --lufs -20). 3D는 GL=gpu 필요.
  • 웹사이트/앱: web-demo — 27_web_capture.js 후 30_demo.js (또는 31_device3d.js).
  • 커버 전용: cover-only.

전달 보고서

두 줄, 그 다음 짧은 테이블:

길이 · 컷 수 · 크기 · 음량 · 피크
게이트 7/7 ✅ (또는 허용 가능한 경고 + 이유)
파일: mp4 · srt · txt · cover.jpg
아무것도 게시되지 않았습니다.

토큰 경제

  • 단계당 하나의 명령어로, 41개의 개별 명령어가 아닙니다.
  • 6개의 개별 이미지 대신 한 장의 시트 (sheet.jpg).
  • 전체 파일을 읽지 마세요: 함수는 grep -n, 로그는 tail -5.
  • 필요할 때만 참조 — 이 파일 + 단계에 적합한 참조 하나.
  • 다른 방법으로 답할 수 없는 시각적 질문이 아니면 이미지를 표시하지 마세요.

예상되는 실패 (놀라지 마세요)

증상원인해결책
UnicodeEncodeErrorWindows에서 utf-8 없이 쓰기PYTHONUTF8=1 설정 (스크립트는 수정되었지만 의존하지 마세요)
3D 멈춤Chrome 경로 / /work 경로CHROME이 정확하고 GL=gpu 설정됨 (31_device3d에서 수정됨)
캡션 지연/누락캡션 생성 후 컷 변경02_captions.py 재실행 후 G3
압축 후 높은 피크AAC가 피크를 상승시킴커버 경로에 alimiter 또는 06c_loudfix.sh
전사 환각방언/영어 용어02a_whisper_check.py --fix 실행 후 고정된 단어 수로 수정

관련 스킬