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(你需要為每個影格分派一個子代理)之外,自行執行所有步驟。請勿在此處放置設計或動畫規則;這些規則位於影格工作子代理、此技能的本地 ../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 遺失時進行初始化。使用 kebab-case 從品牌或網域命名 <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 退出)。一旦腳本以 exit 0 退出,即可繼續下一步 — 無需手動編輯規格。
若 tokens.json 沒有品牌顏色/字型(例如無擷取)→ 腳本會保留預設自己的調色盤,形成一個完整的可發布設計。如果簡報中提及了品牌顏色/字型但擷取遺漏了,請在執行前將它們加到 capture/extracted/tokens.json 中(或使用使用者的 design.md 來填入);僅在映射確實需要時,才在之後手動調整 frame.md。
關卡: build-frame.mjs 以 exit 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 時,註記一個候選藍圖。故事的真實性仍會決定哪些節拍存在 — 切勿強迫節拍去符合藍圖,也切勿僅僅因為有現成的形狀而發明節拍。從 capture/extracted/asset-descriptions.md(標準資產清單)中選擇每個視覺影格的 asset_candidates — 不要瀏覽原始的 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 Audio 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 來決定方法(時間編碼的鏡頭序列、內聯的 Layout 詞彙,以及必需的 ## 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。為每個影格分派一個子代理,儘可能平行執行;否則以批次執行 worker。每個 worker 只負責一個影格。
每個 worker 的上下文必須包含 PROJECT_DIR、frame_id、畫布大小、字幕狀態與保留區域(若啟用字幕),以及 RULES_DIR(此技能 ../hyperframes-animation/rules/ 的絕對路徑)。每個 worker 會讀取 frame.md、STORYBOARD.md 中自己的 ## Frame N 區塊、每個引用的動態對應的本地規則配方(../hyperframes-animation/rules/<id>.md),以及影格的藍圖範本(../hyperframes-animation/blueprints/<id>.md)。每個 worker 只寫入 compositions/frames/NN-*.html。Worker 絕不能編輯 STORYBOARD.md。
當每個 worker 回傳時,協調者在 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
僅在使用者要求時渲染最終 MP4。要渲染,協調者必須產生一個指令,使用正確的組合與品質設定來調用渲染引擎。渲染引擎會輸出 renders/video.mp4。渲染成功後,向使用者確認,並詢問是否需要進一步變更。持續迭代,或宣布完成。
關卡: 檢查已通過,使用者已審查,且最終 MP4 已成功渲染到 renders/video.mp4(如果使用者要求的話)。