media-use: 오디오/이미지 소싱 전에
/media-use를 호출하여 HeyGen 카탈로그에서 BGM/SFX/이미지를 확인하세요. 기존 자산을 등록하려면--adopt를 먼저 실행하세요./media-use스킬을 참조하세요.
제품 출시를 HyperFrames로
이 스킬을 사용하여 제품을 캡처하고, 브랜드를 이해하며, 출시 비디오를 계획하고, HyperFrames에서 프레임별로 비디오를 제작하세요.
0단계 전에 경로를 확인하세요. 당신은 오케스트레이터입니다. 각 단계를 실행하고, 게이트를 확인한 후에만 다음 단계로 진행하세요. 이 스킬은 마케팅, 출시, 홍보 또는 공개되는 제품을 대상으로 합니다. "당사 사이트 홍보"와 같은 요청도 포함되며, 목적이 프로모션인 경우에 해당합니다. 다른 의도는 다른 곳으로 안내하세요: 일반적인 비출시 웹사이트 둘러보기 ->
/general-video; 제품이 없는 주제 설명 ->/faceless-explainer; GitHub PR ->/pr-to-video; 기존 영상에 자막 추가 ->/embedded-captions; 짧은 내레이션이 없는 모션 그래픽 ->/motion-graphics. 사용자가 "비디오 만들어 줘"라고만 말하거나 경로가 불확실한 경우, 먼저/hyperframes를 읽으세요.
당신은 오케스트레이터입니다. videos/<project>/ 디렉토리에서 작업하세요. 단계를 순서대로 실행하고 각 게이트를 통과한 후에 계속 진행하세요. 사용자 게이트 단계는 0단계, 3단계, 6단계입니다. 5단계를 제외한 모든 단계를 직접 수행하세요. 5단계에서는 프레임당 하나의 하위 에이전트를 파견합니다. 디자인 또는 모션 규칙은 여기에 두지 마세요. 해당 규칙들은 프레임 작업 하위 에이전트, 이 스킬의 로컬 ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/, 그리고 hyperframes-creative에 있습니다.
워크플로우: 0단계 설정 -> hyperframes.json; 1단계 캡처 -> capture/; 2단계 디자인 시스템 -> frame.md; 3단계 스토리보드/스크립트 -> STORYBOARD.md 및 SCRIPT.md; 3.1단계 오디오 -> audio_meta.json; 4단계 비주얼 디자인 -> 보강된 STORYBOARD.md; 5단계 프레임 -> compositions/frames/NN-*.html 및 index.html; 6단계 최종 렌더링 -> renders/video.mp4.
0단계: 설정 및 개요
목표: 핵심 비디오 개요를 확정하고 필요한 경우 HyperFrames 프로젝트를 생성합니다.
hyperframes.json이 없는 경우에만 초기화합니다. <project>는 브랜드 또는 도메인 이름을 케밥-케이스로 지정합니다(예: acme-promo). 워크스페이스 이름이나 타임스탬프는 절대 사용하지 마세요.
npx hyperframes init "videos/<project>" --non-interactive --example=blank — init은 설치된 스킬들을 GitHub의 최신 버전과 비교하여 업데이트가 필요한 경우 전역 세트를 업데이트합니다.
개요를 묻기 전에 로그인 상태를 표시하세요 — npx hyperframes auth status를 실행하고 출력 내용을 그대로 전달하세요 (바꿔 말하거나 다시 작성하지 마세요). 음성/BGM이 HeyGen을 사용할지 로컬 엔진을 사용할지 알려주며, 로그인하지 않은 경우 로그인 방법을 알려줍니다. 로그인하지 않은 경우, 사용자가 선택할 때까지 중단하고 기다리세요 — 로그인하거나, 로컬 엔진으로 계속 진행하려면 "go"/"offline"이라고 말하세요 — 개요 또는 다른 질문을 하기 전에 기다리세요. 이를 단순한 참고 사항이 아닌 실제 결정 포인트로 취급하세요. 선택 사항을 개요 질문에 포함시키지 말고, 키를 저장소별 .env 파일에 작성하지 마세요. (자율 모드에서는 상태를 기록하고 오프라인으로 계속 진행하세요.) ../hyperframes-media → Preflight에서 표준 지침을 참조하세요.
게이트: hyperframes.json이 존재하고, 앵글, 길이, 화면 비율, 언어가 확정되었으며, 로그인 상태가 표시되었습니다(로그인됨 또는 오프라인 계속 진행).
1단계: 자산 캡처
목표: 비디오에 필요한 원본 자료, 브랜드 신호, 사용 가능한 자산을 수집합니다.
입력을 분류하고 경로를 선택하세요. 명시적 URL -> 캡처하고 사이트를 내레이션 및 자산에 사용합니다. 붙여넣은 스크립트/개요 -> 그대로 user_script.txt로 저장하고, 한 번 "그대로 사용할까요 아니면 재구성할까요?"라고 물어보고, 답변을 VO_MODE에 저장한 다음 캡처 대상을 확인합니다: 텍스트 내 URL -> 사용; 브랜드 이름만 -> WebSearch, 한 줄로 URL 확인 후 크롤링; URL/사이트 없음 -> 캡처 불가 경로.
캡처 실행: npx hyperframes capture "<URL>" -o ./capture
GEMINI_API_KEY, GOOGLE_API_KEY 또는 OpenRouter 키가 존재하면 캡처가 자동으로 자산에 캡션을 추가하여 capture/extracted/asset-descriptions.md에 저장합니다. 이는 검토 게이트가 아닙니다. 비전 키가 없으면 DOM 컨텍스트를 사용하고 계속 진행하세요.
캡처 불가 경로: 수동으로 capture/extracted/tokens.json, capture/extracted/visible-text.txt, capture/extracted/asset-descriptions.md, capture/assets/를 생성하세요. tokens.json은 { "title": "", "description": "", "colors": [], "fonts": [] } 형식이어야 합니다. 가능하면 개요에서 제목/설명을 채우세요. visible-text.txt에는 전체 개요 또는 스크립트가 포함됩니다. asset-descriptions.md에는 사용자가 자산에 대한 메모를 제공하지 않는 한 캡처된 자산이 없다고 명시해야 합니다.
게이트: capture/extracted/tokens.json, capture/extracted/visible-text.txt, capture/extracted/asset-descriptions.md, capture/assets/가 존재합니다. 브랜드를 한 문장으로 명확하게 설명할 수 있어야 합니다. asset-descriptions.md를 주요 자산 목록으로 취급하세요. 실제 캡처 후에 이 파일이 없으면 캡처가 불완전하다고 보고하고 중단하세요. capture/BLOCKED.md가 존재하면 해당 지침을 따르세요.
2단계: 디자인 시스템
목표: 제공된 프레임 프리셋 중 하나를 선택합니다. 스크립트가 이를 이 비디오의 frame.md + 캡션 스킨으로 변환합니다.
당신은 하나의 판단만 내리면 됩니다 — 어떤 프리셋을 사용할지. ../hyperframes-creative/references/design-spec.md를 읽고, 브랜드와 개요에 가장 잘 어울리는 프리셋을 선택하세요. 그런 다음 실행하세요:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .
스크립트는 나머지를 결정론적으로 처리합니다: 프리셋의 FRAME.md를 복사하여 frame.md로 만들고, 이를 capture/extracted/tokens.json의 브랜드 토큰에 리믹스합니다 (브랜드 색상을 프리셋의 역할별 색상 키(잉크, 캔버스, 강조)에 매핑하고, 키/구조/컴포넌트는 유지하며, 프리셋의 표시+본문 글꼴을 브랜드의 것으로 교체). 프리셋의 캡션 스킨을 .hyperframes/caption-skin.html에 복사하고, 자체 검증합니다 (매핑이 깨지면 exit 1). 0으로 종료되는 즉시 다음 단계로 진행하세요 — 사양을 수동 편집하지 마세요.
브랜드 색상/글꼴이 없는 tokens.json (예: 캡처 없음) -> 스크립트는 프리셋 자체 팔레트를 유지하여 완전히 출시 가능한 디자인을 제공합니다. 개요에 캡처에서 누락된 브랜드 색상/글꼴이 언급된 경우, 실행 전에 capture/extracted/tokens.json에 추가하세요 (또는 사용자의 design.md를 사용하여 채우세요). 매핑이 정말로 필요한 경우에만 이후에 수동으로 frame.md를 조정하세요.
게이트: build-frame.mjs가 0으로 종료되었습니다 — frame.md가 명명된 프리셋에서 존재하고, (프리셋에 캡션 스킨이 있는 경우) .hyperframes/caption-skin.html이 캡션 스킨 소스로 존재합니다.
3단계: 스토리보드 및 스크립트
목표: 개요와 캡처된 자료를 승인된 프레임별 스토리 계획으로 전환합니다.
references/story-design.md, ../hyperframes-animation/blueprints-index.md, ../hyperframes-core/references/storyboard-format.md, ../hyperframes-core/references/script-format.md를 읽으세요. 이를 사용하여 STORYBOARD.md를 작성하고, 내레이션이 필요한 경우 SCRIPT.md를 작성하세요.
story-design.md를 스토리 청사진, 훅, 설득 로직, 비트, VO_MODE, 자산 선택에 사용하세요. 소프트 가이드로, ../hyperframes-animation/blueprints-index.md의 역할→청사진 메뉴를 참조하세요: 각 비트에 대해 적합한 청사진 ID가 있으면 후보로 기록하세요. 어떤 비트가 존재하는지는 스토리 진실이 결정합니다 — 청사진에 맞추기 위해 비트를 강제로 만들지 말고, 입증된 형태가 있다고 비트를 만들어내지 마세요. 각 비주얼 프레임의 asset_candidates는 capture/extracted/asset-descriptions.md (표준 목록)에서 선택하세요 — 원시 capture/assets/를 탐색하지 마세요. 해당 목록이 없거나 사용할 수 없는 경우가 아니면 사용자에게 자산을 선택하도록 요청하지 마세요. 스토리보드 및 스크립트 참조 문서의 정확한 필수 필드를 사용하세요.
초안 작성 후, 프레임별 요약을 보여주세요. 같은 메시지에서 사용자에게 두 가지를 물어보세요: (a) 승인 또는 변경 요청, (b) 스토리보드 기본 구조의 라이브 미리보기를 원하는지 여부 (npx hyperframes preview) — 예라고 답한 경우에만 엽니다. 승인될 때까지 반복하고, 미리보기 선택을 6단계로 전달하세요.
게이트: STORYBOARD.md가 존재하고, 모든 비주얼 프레임에 asset_candidates가 있으며, 내레이션이 필요한 경우 SCRIPT.md가 존재하고, 사용자가 프레임별 계획을 승인했습니다.
3.1단계: 오디오
목표: 승인된 스크립트에서 내레이션, 단어 타이밍, 음악, 오디오 메타데이터를 생성합니다.
3단계 승인 후 오디오를 시작하세요. 백그라운드에서 실행한 후 4단계로 계속 진행하세요.
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json &
오디오 스크립트는 내레이션, 단어 타이밍, HeyGen 음악 라이브러리에서 BGM 조회, 타이밍 메타데이터를 처리합니다. BGM 분위기는 스토리보드의 music: 필드에서 가져옵니다. 이는 생성이 아닌 검색을 위해 HeyGen 오디오 API를 사용하며, TTS와 동일한 ~/.heygen 자격 증명을 사용합니다. 제공자 세부 정보는 ../hyperframes-media/references/tts.md를 읽으세요.
내레이션이 없고 SCRIPT.md도 없는 경우 음성 생성을 건너뜁니다. 스토리보드에 음악 분위기가 있으면 BGM이 계속 실행될 수 있습니다.
게이트: 오디오 작업이 시작되었거나 프로젝트가 무음으로 표시되었습니다.
4단계: 프레임 비주얼 디자인
목표: 각 스토리보드 프레임에 비주얼 방향, 레이아웃 의도, 모션 선택을 추가합니다.
STORYBOARD.md를 제자리에서 편집하세요. 다른 스토리보드를 만들지 마세요. 색상, 타이포그래피, 레이아웃 느낌, 스타일에 대한 진실 공급원으로 frame.md를 사용하세요.
references/visual-design.md, ../hyperframes-animation/blueprints-index.md, references/motion-language.md, ../hyperframes-animation/rules-index.md를 읽으세요. visual-design.md를 방법(시간 코드가 지정된 샷 시퀀스, 인라인 레이아웃 어휘, 필수 ## Video direction 블록)에 사용하세요. 각 프레임의 샷 모양을 선택하려면 ../hyperframes-animation/blueprints-index.md를 사용하세요. 모션에는 motion-language.md(모션 어휘 + 모션 원칙)와 ../hyperframes-animation/rules-index.md(유효한 규칙 이름)를 사용하세요 — 모션 이름을 직접 만들지 마세요.
모든 비주얼 프레임에 대해 visual-design.md의 방법에 따라 시간 코드가 지정된 샷 시퀀스를 STORYBOARD.md에 작성하세요: 프레임의 청사진을 선택(또는 구성)하고, 이 제품의 콘텐츠로 인스턴스화하며, 각 Scene의 공개를 보이스오버에 맞춰 진행하여 프레임이 처음에 모든 정보를 보여주고 멈추는 대신 전체 지속 시간 동안 발전하도록 하세요. Scene별로 레이아웃과 모션을 인라인으로 명시하세요(어휘는 visual-design.md 및 motion-language.md에 있음). 하나의 비디오 전체에 대한 ## Video direction 블록을 추가하세요.
스토리, 스크립트, 자산 선택, asset_candidates, transition_in 또는 캡처된 원본 자료를 변경하지 마세요. 이 단계에서는 HTML을 작성하지 마세요.
비주얼 디자인이 확정된 후 명명된 자산을 스테이징하세요:
node <SKILL_DIR>/scripts/stage-assets.mjs --storyboard ./STORYBOARD.md --hyperframes .
게이트: 모든 비주얼 프레임에 시간 코드가 지정된 샷 시퀀스가 있고, 공개가 보이스오버에 맞춰져 있으며(처음에 모든 정보를 보여주지 않음), ## Video direction이 존재하고, assets/에 명명된 자산이 포함되어 있습니다.
5단계: 프레임 제작
목표: 모든 스토리보드 프레임을 HTML 컴포지션으로 제작하고 재생 가능한 비디오를 조립합니다.
오디오가 시작된 경우 3.1단계 오디오가 완료될 때까지 기다리세요. 그런 다음 지속 시간을 동기화하고 SFX를 가져오세요. 무음인 경우 둘 다 건너뜁니다.
node <SKILL_DIR>/scripts/audio.mjs sync-durations --audio-meta ./audio_meta.json --storyboard ./STORYBOARD.md
node <SKILL_DIR>/scripts/audio.mjs fetch-sfx --storyboard ./STORYBOARD.md --hyperframes .
지속 시간 동기화는 기계적입니다: 실제 음성 지속 시간이 우선합니다. 무음 프레임은 추정치를 유지합니다. 동기화된 지속 시간을 수동 편집하지 마세요.
파견 전에 sub-agents/frame-worker.md 및 ../hyperframes-core/references/subagent-dispatch.md를 읽으세요. 프레임당 하나의 하위 에이전트를 파견하며, 가능하면 병렬로, 그렇지 않으면 웨이브로 작업자를 실행하세요. 각 작업자는 정확히 하나의 프레임을 받습니다.
각 작업자 컨텍스트에는 PROJECT_DIR, frame_id, 캔버스 크기, 캡션 상태 및 캡션이 활성화된 경우 keep-out 대역, 그리고 이 스킬의 ../hyperframes-animation/rules/에 대한 절대 경로인 RULES_DIR이 포함되어야 합니다. 각 작업자는 frame.md, STORYBOARD.md의 자체 ## Frame N 블록, 인용된 각 모션에 대한 로컬 규칙 레시피(../hyperframes-animation/rules/<id>.md), 프레임의 청사진 템플릿(../hyperframes-animation/blueprints/<id>.md)을 읽습니다. 각 작업자는 compositions/frames/NN-*.html만 작성합니다. 작업자는 절대 STORYBOARD.md를 편집해서는 안 됩니다.
각 작업자가 반환되면 오케스트레이터는 해당 프레임을 STORYBOARD.md에서 animated로 표시합니다.
오디오 타이밍이 존재하면 백그라운드에서 캡션을 제작하고 인덱스를 조립하세요:
node <SKILL_DIR>/scripts/captions.mjs build --storyboard ./STORYBOARD.md --audio-meta ./audio_meta.json --hyperframes . --out ./caption_groups.json &
node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard ./STORYBOARD.md --hyperframes .
captions.mjs는 프로젝트의 .hyperframes/caption-skin.html(2단계에서 복사됨)을 캡션 모양으로 사용하여 frame.md의 브랜드 토큰을 주입합니다. 스킨이 없으면 내장된 기본 필을 렌더링합니다. captions: skipped (<reason>)는 유효합니다. 명시적으로 건너뛴 경우 캡션 없이 계속 진행하세요.
게이트: 모든 프레임이 animated로 표시되고, index.html이 존재하며, 캡션이 제작되었거나 명시적으로 건너뛰어졌습니다.
6단계: 마무리
목표: 조립된 비디오를 확인하고, 사용자 승인을 받고, 최종 MP4를 렌더링합니다.
전환 효과를 주입하고, 검사를 실행하고, 검토를 위해 일시 중지한 다음 렌더링하세요.
node <SKILL_DIR>/scripts/transitions.mjs inject --storyboard ./STORYBOARD.md --hyperframes .
node <SKILL_DIR>/scripts/transitions.mjs verify --storyboard ./STORYBOARD.md --index ./index.html
npx hyperframes lint
npx hyperframes validate
npx hyperframes inspect
npx hyperframes snapshot --at <frame-midpoints>
snapshot은 캡처된 프레임을 하나의 콘택트 시트(snapshots/contact-sheet.jpg)로 결합합니다. 훑어보고 명백히 깨진 것이 없으면 넘어가세요 — 여기에 오래 머무르지 마세요.
명령이 실패하면 stderr를 표시하고 중단하세요 — 복구 명령을 연달아 실행하지 마세요. 직접 수정하세요: compositions/frames/NN-*.html에 대한 가장 저렴한 안전한 편집을 수행한 다음 실패한 검사를 다시 실행하세요.
검사 통과 후 사용자 검토를 위해 일시 중지하세요. 비디오는 조립되어 Studio에서 보고 편집할 수 있습니다. 3단계와 6단계에서 미리보기를 한 번만 관리하세요: 사용자가 이전에 요청했다면 열고, 거절했다면 제공하며, 사용자가 이미 Studio에서 검토 중이라면 다시 묻지 마세요.
미리보기: npx hyperframes preview
렌더링: npx hyperframes render --out ./renders/video.mp4