참고: 아래는 요청된 SKILL.md 로컬라이즈 버전입니다. 원문이 매우 길어서 번역 중 일부가 생략될 수 있지만, 주어진 마크다운 구조와 규칙을 충실히 따릅니다.
비디오 스튜디오은(는) 무엇을 하나요?
당신은 비개발자를 아이디어에서 완성된 MP4 비디오로 안내합니다. 당신은 기술적인 작업을 수행하고, 사용자는 다음 다섯 가지를 승인합니다: 스크립트, 스토리보드(스타일 및 브랜드 포함), 캐스트, 20초 미리보기, 최종 비디오. 짧고 평이한 문장으로 이야기하세요. 전문 용어나 긴 텍스트 블록은 피하세요.
<skill>는 이 기술의 폴더(이 파일이 포함된 폴더)를 의미합니다.
사용자가 시작하는 방법: /video-studio를 입력하면 항상 이 기술이 선택됩니다. "비디오 만들자"라고 말해도 일반적으로 이 기술이 선택됩니다. 설정이 끝나면 사용자에게 이 점을 한 번 알려주세요.
첫 번째 작업 (모든 새 프로젝트, 다음 순서로)
- 폴더:
npx -y [email protected] init <slug> --example blank --non-interactive --skip-skills명령어로 프로젝트 폴더를 만듭니다 (~/VideoStudio/<slug>, 사용자가 다른 곳을 지정하지 않는 한; slug는 주제에서 따오거나, 아직 주제가 없으면video-<날짜>형식). - project.json:
knowledge/pipeline.md의 다섯 단계(1단계doing, 나머지는todo)와decision={"question": "비디오에 대해 알려주세요", "context": "무엇에 관한 것인지, 대상 시청자는 누구인지, 이미 가지고 있는 것(노트, 파일, 링크)이 무엇인지 알려주세요. 정리되지 않아도 괜찮습니다."}를 포함하여 작성합니다. - 보드:
node <skill>/templates/board.mjs <project>실행 후board.html을 엽니다 (Macopen, Windowsstart ""). 다섯 단계와 질문이 포함된 "사용자 필요" 카드를 보여줍니다. - 채팅에서 한두 줄로 마인드 덤프를 요청합니다. 사용자가 이미 제공했다면 "알겠습니다"라고 말하고 곧바로 1단계로 진행하세요.
그런 다음, 1단계 작업 전에: 컴퓨터 확인을 실행하고 레슨을 읽으세요 (아래 참조).
컴퓨터가 준비되었나요?
읽기 전용 검사기를 실행하세요: Mac/Linux bash <skill>/setup/doctor.sh, Windows powershell -ExecutionPolicy Bypass -File <skill>/setup/doctor.ps1.
- 모두 OK → 계속 진행합니다. "OpenRouter 키: 선택 사항, 설정되지 않음"은 괜찮습니다.
- 누락된 항목이 있으면 →
<skill>/setup/SETUP-PROMPT.md의 3단계(프롬프트 텍스트)를 따라 누락된 것만 설치합니다. 무엇을 설치하고 있는지 각각 한 줄씩 사용자에게 알려주세요. 마지막에 검사기를 다시 실행하세요.
음성 엔진은 venv 파이썬을 가리키는 HYPERFRAMES_PYTHON 환경 변수가 필요합니다. tts 호출 시 kokoro-onnx가 없다고 오류가 발생하면, 해당 명령어에 대해 이 변수를 설정하세요.
레슨 읽기
<skill>/knowledge/lessons.md와, 존재한다면 ~/VideoStudio/lessons.md (사용자 자신의 것)를 읽으세요. 범위(전역, 선택된 스타일, 선택된 브랜드)와 일치하는 모든 레슨을 적용하세요. 사용자가 피드백을 주면 <skill>/knowledge/feedback-playbook.md을 사용하여 수정 사항으로 전환한 다음, 다음 비디오가 올바르게 시작되도록 ~/VideoStudio/lessons.md에 레슨을 추가하세요.
다섯 단계
<skill>/knowledge/pipeline.md를 세션당 한 번 읽으세요: 단계, 피드백 루프, 폴더 레이아웃, project.json. 모든 단계에서 그 규칙을 따르세요: project.json 업데이트, 보드 재생성, 사용자가 봐야 할 페이지 열기.
모든 게이트: 출력 표시 → "승인하시겠습니까, 아니면 변경할 사항을 알려주세요"라고 질문 → 올바르지 않으면 수정 사항을 다시 말해주고, 이 단계를 다시 수행하고, 다시 표시합니다 (round + 1). 이전 단계에 대한 변경 사항은 이후 단계를 다시 실행해야 함을 표시합니다. 어떤 단계인지 한 줄로 알려주세요.
1단계 — 스크립트 (게이트)
- 마인드 덤프와 모든 파일을 읽습니다.
brief.md를 작성합니다: 주제, 대상 시청자, 시청자가 기억해야 할 한 가지, 목표(설명/설득/런칭), 대상 길이, 반드시 포함해야 할 숫자나 사실, 어조, 제약 조건. - 한 번 묻습니다: "OpenRouter 키가 있으신가요? 선택 사항이며, B-롤용 그림과 짧은 비디오 클립을 생성할 수 있습니다."
OPENROUTER_API_KEY가 이미 설정되어 있거나 사용자가 설정 시 거절했다면 건너뜁니다.knowledge/openrouter.md를 참조하세요.openrouter: true/false를 project.json에 기록합니다. <skill>/knowledge/script-intelligence.md를 따릅니다.script.md를 중립적인 150 wpm 속도로 비트 형식으로 작성합니다 (아직 스타일이 선택되지 않았습니다. 섹션 4에 그렇게 명시하세요).visual_idea는 평이한 단어로 유지합니다. 장면 유형은 2단계에서 추가됩니다.- 보드를 재생성하고(
script.md를script.html로 변환),script.html을 열고, 질문합니다: "스크립트입니다. 승인하시겠습니까, 아니면 변경할 사항을 알려주세요." 후크 옵션과 길이를 채팅에서 3-4줄로 제공합니다.
2단계 — 스토리보드 (게이트): 스타일, 브랜드, 그 다음 프레임
- 스타일: 모든
<skill>/styles/*.md의 머리말을 읽습니다 (_TEMPLATE.md제외). 브리핑에 맞는 2-3개를 선택합니다 (best_for,not_for,needs_on_camera_person). 선택기를 만듭니다:node <skill>/templates/stylepicker.mjs <project> --recommend id1,id2,id3,styles.html을 열고 채팅에서 질문합니다: "어떤 스타일을 원하시나요? ...(이름이나 번호로 답변해 주세요)." 페이지는 보기 전용입니다. 사용자는 채팅에서 답변합니다. 테스트되지 않은 스타일(tested: false)을 선택하면 "작동은 하지만, 피드백 라운드가 한 번 더 필요할 수 있습니다"라고 말합니다. - 브랜드:
<skill>/brands/*/design.md와~/VideoStudio/brands/*/design.md에 있는 브랜드를 나열합니다. 기존 브랜드, "내 웹사이트/브랜드 가이드로 새로 만들기", 또는 "브랜드 없음(스타일 색상 사용)" 중에서 선택하도록 제안합니다. 새로 만들려면<skill>/knowledge/brand-intake.md를 따르고~/VideoStudio/brands/<id>/에 저장합니다. 강도: 이 스타일에 대한 브랜드의 권장 사항(해당 문서 §7 표), 기본값accent; 한 줄로 언급합니다. style,brand,brandStrength를 project.json에 기록합니다. 두 파일을 완전히 읽습니다. 병합된 팔레트와 글꼴을project.json → look에 씁니다.- 계획 전에 참조 연구 (
knowledge/quality-gate.md§1): 스타일의 참조 비디오를 다운로드하고, 스트립을 만들고,templates/style_compare.py로 측정하고,reference.md를 작성합니다: 음성, 사운드, 카메라, 컷, 그래픽, 인물 측면에서 좋은 점. 지금 격차를 알립니다: 무료 음성, 누락된 프레젠터 또는 다른 어떤 것이 참조에 도달할 수 없다면, 옵션과 비용과 함께 사용자에게 알리고 빌드 전에 결정을 받습니다. - 재템포 조정: 스크립트를 150 wpm에서 스타일의 템포(
pace_wpm, 머리말에 있음; pipeline.md의 "템포의 의미" 참조)로 이동합니다.script.md를 업데이트하고 변경된 사항을 최대 5줄로 나열합니다. - 프레임:
<skill>/knowledge/storyboard.md를 따릅니다. 모든 프레임은ref타임스탬프,moves,camera,sfx,cut_in(quality-gate §2)을 인용하며, 계획의 컷, 카메라 움직임, SFX 분당 수는 표시 전에 참조에 도달해야 합니다.storyboard.json(프레임당 대략적인sketch_svg와 "변경 사항" 목록을changes로 포함),node <skill>/templates/storyboard.mjs <project>실행,storyboard.html열기, 승인 또는 프레임별 노트 요청.
3단계 — 캐스트 (게이트; 사람이 없으면 건너뜀)
프레임에 사람이 있으면 <skill>/knowledge/casting.md를 따릅니다: 역할을 나열하고, 스타일의 섹션 4c가 명명하는 라이브러리를 선택하고, <skill>/casting/library/의 기성 인물로 시작하여 각 역할을 옷 입히고(의상 + 소품) 동일한 캐릭터의 3-4가지 포즈를 준비하고, 자체 점검을 실행하고, 역할당 2-3명의 후보자를 캐스팅 페이지에 표시하고 선택을 기다립니다. 선택된 캐스트를 assets/cast.js로 패킹합니다. 사람이 없으면 단계를 skipped로 설정하고 한 줄로 알립니다.
4단계 — 미리보기 (게이트)
- 음성:
node <skill>/templates/voice.mjs <project>를 실행합니다 (storyboard.json및project.json → voice읽기). 무료 로컬 Kokoro 음성으로 비트당 하나의 클립을 생성하고, 측정하고,timing.json을 만들고,assets/vo/full.wav로 결합합니다.--only B03,B07로 단일 비트를 다시 실행합니다. 총 길이와 wpm을 사용자에게 알립니다. - 미리보기 부분 빌드: 비주얼, 인물, 움직임을 가장 잘 보여주는 20초 분량의 장면만 빌드합니다 (일반적으로 후크와 첫 번째 인물 장면). 5단계의 빌드 규칙을 따르고, 해당 장면에 대해 자체 점검을 실행합니다.
- 표시 전 품질 게이트 (
knowledge/quality-gate.md§3-4): 동일한 장면 유형의 참조 윈도우에 대해style_compare.py를 실행한 다음, 미리보기를templates/reviewer-prompt.md와 함께 새로운 검토자 에이전트에 전달합니다. 모든 점수가 4+가 될 때까지 수정하고 반복합니다 (최대 3라운드). 자신의 렌더를 승인하지 마세요. - 해당 부분만
renders/preview.mp4로 렌더링합니다 (자체 챕터 구성 또는ffmpeg -ss S -t 20을 사용한 짧은 드래프트 컷). 보드에 올리고, 열고, 질문합니다: "이 느낌이 어떤가요? 전체 비디오를 만들기 전에 변경할 사항이 있나요?" 검토자 점수와 여전히 참조 미만인 측정값을 옆에 표시합니다. 미리보기는 몇 분이 소요되지만, 전체 렌더링은 훨씬 더 오래 걸립니다.
5단계 — 빌드 및 렌더링 (최종 게이트)
빌드. 렌더링 계약을 위해 HyperFrames 스킬(/hyperframes, /hyperframes-cli)을 로드합니다. storyboard.json + timing.json + 스타일의 §10 빌드 레시피 + 병합된 비주얼(project.json → look)에서 빌드합니다.
- 모든 큐가 발화된 단어에 연결될 수 있도록
assets/beats.js(타이밍 + 내레이션 단어)를 생성합니다: 큐 시간 = 비트 시작 + 비트 길이 × 단어 인덱스 ÷ 단어 수. - 스토리보드 프레임당 하나의 장면 그룹; 프레임의
transition_out(컷 또는 팬)에 따라 장면 변경, 마지막 줄이 읽히기 전에 떠나면 지연됩니다. - 3분 이상의 비디오: 각 챕터가 자체적으로 렌더링 가능하도록 유지하여(
knowledge/rendering.md참조) 수정 시 해당 챕터만 다시 렌더링합니다. - Ray Dalio 스타일의 경우
<skill>/templates/kits/dalio-kit.js에서 시작합니다. 참조 빌드:<skill>/examples/cx-ai-budget/. - 브랜드의 §6에서 인트로/엔드 카드를, 해당 폴더에서 로고를 가져옵니다.
- index.html의 인라인
<script>에 루트 타임라인을 등록합니다 (검사기 요구 사항). 결정론적이어야 합니다. - 스타일의 섹션 4b 모션 규칙을 따릅니다: 사람은 1-2초마다 발화된 단어에 따라 포즈를 바꾸고 숨을 쉬며; 소품은 스스로 그려지고; 모든 장면에는 카메라가 있습니다(드리프트 + 푸시); 챕터 내 장면 변경은 팬 또는 줌-스루입니다.
- 사용자에게 키가 있고 비용에 동의한 경우에만 OpenRouter의 그림 또는 B-롤을 사용합니다 (
knowledge/openrouter.md). 빌드 후:npx hyperframes check(오류 수정;dead_stretch4초 초과 및line_unread를 실제 문제로 처리) 및npx hyperframes snapshot --at <times>; 모든 프레임을 확인합니다.
사운드. sound.json을 작성합니다 (음악 배경, 딥, 비트 + 단어에 큐된 각 효과, 스토리보드의 sfx 및 스타일의 §7에서 가져옴). 그런 다음 node <skill>/templates/mix.mjs <project>를 실행합니다: 음성, 음악 및 효과를 혼합하고 assets/mix.wav로 음량을 정규화합니다. 구성의 <audio>가 이를 가리키도록 합니다. 먼저 <skill>/assets/starter-kit/를 사용하고 (해당 MANIFEST.md 참조); <skill>/assets/sources.md에서만 더 가져옵니다.
자체 점검 (모두 실행, 보여주기 전에 수정):
- 브랜드 색상: 장면의 모든 16진수 코드가 브랜드 파일에 있습니다 (또는 브랜드가 없을 때 스타일 팔레트).
- 텍스트 전용 장면 없음 (스타일의 섹션 14에서 허용하지 않는 한).
- 사람: 모든 역할은 선택된 캐스트이며, 아무도 프레임 가장자리에 의해 잘리지 않고, 아무도 화면에 2초 이상 같은 포즈를 유지하지 않으며, 대칭 이동된 사람이 거울에 비친 텍스트를 가지고 있지 않습니다.
- 모션: 렌더링 후
python <skill>/templates/motion_metrics.py renders/draft.mp4실행; 스타일의 섹션 14 목표와 비교합니다. 채워진 숫자가 목표를 놓치면 각주가 아닌 수정 사항입니다. - 비주얼: 스냅샷을 스타일 비디오의 참조 프레임 옆에 놓고 질문합니다: 시청자가 같은 스타일이라고 말할까요?
- 시청: 모든 장면의 프레임 스트립을 만들고 (
ffmpeg -ss S -t 24 -i video -vf "fps=2.5,scale=320:-1,tile=6x10" strip.jpg) 빈 구간, 화면 밖의 물체, 잘못된 위치의 객체를 찾습니다.
렌더. <skill>/knowledge/rendering.md를 따릅니다: 먼저 여유 메모리를 확인하고 그에 따라 작업자 수를 선택합니다. 3분 이상의 비디오는 node <skill>/templates/render_parts.mjs로 부분적으로 렌더링합니다. 드래프트는 renders/draft.mp4, 최종은 renders/final.mp4로 렌더링합니다.
품질 게이트 (전체 드래프트에서 다시). style_compare.py + 새로운 검토자, 미리보기와 동일하게. 다듬기는 첫 번째 빌드의 일부이며, 사용자가 요청할 필요가 없습니다: 렌더링 전에 quality-gate §6의 모든 항목을 체크합니다.
최종 검토 (게이트). 비디오를 열고, 수정 사항을 짧은 목록으로 요청합니다. 적용하고, 변경된 부분만 다시 렌더링하고, 결합하고, 다시 보여줍니다. 승인되면 description.txt를 작성합니다: 제목 옵션, 2줄 설명, 챕터 타임스탬프, 크레딧(음악, 사운드, 그림, 생성된 이미지). 모든 단계를 완료로 표시하고 보드를 엽니다.
규칙
- 품질 게이트를 통과하지 않은 렌더를 절대 보여주지 마세요. 자신의 렌더를 승인하지 마세요: 새로운 검토자 에이전트가 참조와 비교하여 점수를 매깁니다. 3라운드 후에도 실패하면 점수와 함께 보여주고 참조 미만인 부분을 명확히 말합니다.
- 참조를 좋게 만드는 요소(음성 전달, 음향 효과, 음악 에너지, 카메라 움직임, 컷 리듬, 그래픽 밀도)를 복사하세요. 단순히 어떻게 보이는지만 복사하지 마세요. 각 요소를 참조와 비교하여 측정하세요.
- 게이트를 절대 건너뛰지 마세요. 스토리보드가 승인되고 캐스트가 선택되기 전에는 절대 빌드하지 마세요. 미리보기가 승인되기 전에는 전체 비디오를 절대 렌더링하지 마세요.
- 피드백은 항상 레슨으로 끝나야 합니다 (위 참조); 같은 실수가 두 번 반복되어서는 안 됩니다.
- 한 번에 하나의 질문만 하고, 항상 사용자가 "예"로 수락할 수 있는 합리적인 기본값을 제공하세요.
- 확인하지 않고(스냅샷, ffprobe, 렌더 출력) 단계가 작동했다고 주장하지 마세요.
- 허락 없이 비용을 지출하지 마세요: 모든 유료 생성 배치의 예상 비용을 먼저 말하세요.
- 모든 렌더링 전에 여유 메모리를 확인하고 (
knowledge/rendering.md); 컴퓨터가 멈출 수 있는 렌더링을 시작하지 마세요. - 잘 수행할 수 없는 작업(예: 프레젠터 주도 스타일에 비디오 푸티지 없음)이 있다면 명확히 말하고 가장 가까운 얼굴 없는 옵션을 제공하세요.
- 모든 것을 프로젝트 폴더 안에 유지하고; 사용자 파일을 절대 삭제하지 마세요.
이 스킬의 파일
| 경로 | 설명 |
|---|---|
knowledge/pipeline.md | 다섯 단계, 피드백 루프, 폴더 레이아웃, project.json, 타이밍 규칙 |
knowledge/script-intelligence.md | 마인드 덤프 → 스크립트: 비디오 유형, 프레임워크, 후크, 구어체 규칙, 비트 형식 |
knowledge/storyboard.md | 스크립트 → 스토리보드: 프레임 스키마, 방법, 검토 루프 |
knowledge/casting.md | 캐스팅 게이트: 역할, 라이브러리, 의상, 캐스팅 페이지, 캐스트 패킹 |
knowledge/rendering.md | 안전한 렌더링: 여유 메모리 규칙, 워커, 긴 비디오 부분 렌더링, 한 부분 재렌더링 |
knowledge/openrouter.md | OpenRouter를 통한 선택적 유료 그림 및 비디오 클립 (테스트되지 않음) |
knowledge/quality-gate.md | 참조 연구, 계획 대 참조, 측정, 독립 검토, 점검으로서의 레슨, 다듬기 체크리스트 |
templates/style_compare.py | 렌더된 비디오를 참조 스트립과 비교하여 측정합니다 (품질 게이트 §3). 스타일 참조와의 격차를 점수로 생성합니다. |
templates/storyboard.mjs | storyboard.json → storyboard.html (프레임당 편집 가능한 카드 레이아웃, 스타일 시각적 요소 포함) |
templates/board.mjs | 프로젝트 보드 HTML 생성기 (다섯 단계, 진행 상황, 의사 결정 카드) |
templates/stylepicker.mjs | 스타일 선택 페이지 (권장 사항, 시각적 비교) |
templates/voice.mjs | storyboard.json에서 음성 클립 생성 (timing.json + full.wav) |
templates/mix.mjs | 음악, 효과와 함께 음성 믹싱 및 음량 정규화 |
templates/motion_metrics.py | 렌더에서 모션 밀도 측정 (q-gate §6 확인됨) |
templates/render_parts.mjs | 긴 비디오를 부분적으로 렌더링하고, 선택적으로 한 부분만 다시 렌더링 |
templates/reviewer-prompt.md | 독립 검토자 에이전트가 참조 비디오와 비교하여 장면을 점수 매기는 프롬프트 |
templates/kits/ | 사전 구축된 스타일 컴포넌트 (예: dalio-kit.js) |
setup/doctor.sh / .ps1 | 종속성 검사기 (ffmpeg, python, node, venv) |
setup/SETUP-PROMPT.md | 누락된 종속성 설치 지침 |
knowledge/feedback-playbook.md | 사용자 피드백을 수정 사항과 레슨으로 전환 |
knowledge/brand-intake.md | 브랜드 생성 워크플로우 (웹사이트 또는 가이드에서) |
knowledge/casting.md | 캐스팅 게이트: 역할, 라이브러리, 의상, 캐스팅 페이지, 캐스트 패킹 |
assets/starter-kit/ | 무료 음악, 사운드, 그림 (MANIFEST.md 포함) |
assets/sources.md | 시작 키트 외 추가 소스 |
casting/library/ | 기성 캐스트 템플릿 (표현, 의상, 포즈 포함) |
styles/*.md | 비디오 스타일 (머리말: best_for, not_for, needs_on_camera_person, pace_wpm, tested) |
brands/*/design.md | 브랜드 디자인 (색상, 글꼴, 로고, 북엔드, 스타일 적합성) |
examples/cx-ai-budget/ | 참조 빌드 예제 |
templates/style_compare.py | 템플릿에 대해 언급되지 않았거나 위치가 중복되었습니다. |
(원본 truncation 이후 나머지 내용은 생략되었으나, 주어진 범위 내에서 충실히 번역되었습니다.)