插件安裝: 在執行設定或更新命令前,請先遵循 插件執行規則(當此技能位於 HyperFrames 插件內時)。獨立安裝則保留下方的更新說明。
首先,保持此技能最新 — 在執行前請先與用戶確認:
npx hyperframes skills update faceless-explainer。若一切為最新,則快速無操作;否則會更新此技能及其依賴的核心技能,再讓你依賴它們。
媒體使用:在獲取音訊/圖片/標誌前,請調用
/media-use從 HeyGen 目錄解析 BGM/SFX/圖片,並從官方來源獲取品牌標誌。先執行--adopt以註冊現有資產。詳見/media-use技能。當主機應用程式提供自己的音樂或音效工具時,請使用它們處理音樂和音效。
無臉解說 → HyperFrames
使用此技能將一段文字轉換為解說影片:選擇設計系統、規劃教學故事,並在 HyperFrames 中逐幀構建。無臉意味著每個視覺效果都是後續發明的 — 沒有擷取步驟,也沒有真實的資產清單。
入口是
/hyperframes。你是協調者。執行每個步驟、驗證其關卡,然後再繼續。此技能用於 從文字解說主題,沒有產品和網站需要擷取。任何其他意圖、單純的「製作影片」或不確定時 → 先閱讀/hyperframes— 意圖層擁有所有路線決策,而全新創作若無BRIEF.md直接到達此處,仍會經過它才能進行(設定的開場規則)。
你是協調者。在 videos/<project>/ 中工作。按順序執行步驟,並在繼續前通過每個關卡。用戶關卡步驟為:步驟 0、步驟 3、步驟 6。在步驟 0 前閱讀 ../hyperframes/references/brief-contract.md — 它定義了關卡類型,以及 BRIEF.md 的 flow/storyboard 如何推導出控制步驟 3/4/6 關卡的模式。自行執行所有步驟,除了步驟 5(你為每個畫面分派一個子代理)。不要在此處放置設計或動作規則;這些規則位於畫面處理子代理、此技能的本地 ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/ 以及 hyperframes-creative。
工作流程:步驟 0 設定 → hyperframes.json;步驟 1 簡報 → capture/extracted/;步驟 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 專案,並使簡報持久化。
簡報由意圖層確認,而非在此處提問。 開場規則,依序:(1) BRIEF.md 存在 → 讀取它,不問任何問題 — 簡報已定案,其 flow/storyboard 推導出模式(簡報合約 § 1)。(2) 無 BRIEF.md 但專案存在(磁碟上有 hyperframes.json / STORYBOARD.md)→ 從分鏡的前置資料和已記錄的偏好繼續;永遠不要重新詢問一個已部分建成的專案。(3) 兩者皆無 — 直接到達此處的新創作請求 → 閱讀 /hyperframes 並執行其意圖層(references/intent-interview.md):它檢查配方和已記住的預設、執行此路線的問題(../hyperframes/references/routes/faceless-explainer.md),並返回已鎖定的簡報。編輯請求略過所有這些 — 直接進行編輯。
僅在 hyperframes.json 遺失時初始化。以 kebab-case 格式從主題命名 <project>,例如 compound-interest-explained;切勿使用工作區名稱或時間戳。
npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=faceless-explainer — init 會檢查已安裝技能與 GitHub 上最新版本的差異,並在必要時更新全域技能集。
初始化後,將 <PROJECT_ROOT> 設為 videos/<project>,並在該目錄中執行所有後續的相對路徑命令。在下方命令中,. 代表 <PROJECT_ROOT>;切勿將 .media、capture 或輸出檔案寫入呼叫者目錄。
在 init 後立即寫入 BRIEF.md(永遠不要在此之前 — init 會拒絕非空目錄):意圖層已鎖定的簡報,格式參考 ../hyperframes/references/brief-format.md。解析 <MEDIA_DIR> 為已安裝的 /media-use 技能目錄。然後使用 node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes . 記錄每個偏好支援的答案(brief-format.md 指定了子集)。如果意圖層採用了配方,執行 node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <name>;它會將配方的 frame.md 複製到專案中(步驟 2 將被跳過)並返回步驟 3 可以草稿的骨架。配方補充答案,而非批准;審查關卡仍會執行。
在通過設定前顯示登入狀態 — 執行 npx hyperframes auth status 並逐字輸出其結果。它會報告語音/BGM 將使用 HeyGen 還是本地引擎,以及當未登入時如何登入。應用其中一個分支:
- 協作模式: 等待用戶登入或明確選擇
offline/go。 - 自主模式: 宣告狀態並透過可用的本地引擎繼續。
當沒有離線提供者時,不要靜默省略所需功能;應指出阻礙。不要將此決策摺疊到其他問題中,或將金鑰寫入每個儲存庫的 .env。身份驗證所有權和離線備援:/media-use references/setup-providers.md § Providers。
關卡: hyperframes.json 和 BRIEF.md 存在;偏好支援的答案已記錄(簡報合約 § 2);登入狀態已顯示(已登入,或繼續離線模式)。
步驟 1:簡報(無擷取)
目標:將用戶的文字作為資訊來源納入專案。無需網站擷取,也無需真實資產 — 這是無臉解說。
逐字儲存用戶的完整輸入,然後手動建立合成擷取套件:
capture/extracted/visible-text.txt— 完整的文章/筆記/主題/簡報,逐字照錄。這是 資訊 的來源,而非故事模板(步驟 3 將重新塑造它)。capture/extracted/tokens.json—{ "title": "", "description": "", "colors": [], "fonts": [] }。從簡報中填入title/description。除非用戶明確提供了品牌顏色或字型,否則將colors/fonts留空 — 若有提供則加入(無論如何,設計預設會提供完整的色板)。
如果用戶貼上了腳本或希望保留其措辭,請逐字儲存為 user_script.txt;VO_MODE(逐字或重構)來自 BRIEF.md — 意圖層在腳本到達時會詢問。僅在簡報缺少此資訊時,在此處詢問一次,並將答案儲存以備步驟 3 使用。
不要 執行 npx hyperframes capture(沒有 URL)。不要建立 asset-descriptions.md 或填寫 capture/assets/ — 無臉視覺效果將在步驟 4-5 中發明,而非擷取。唯一的例外:如果用戶提供了真實圖片,請將其放置在 public/<basename> 下,並在步驟 3 中註明。
關卡: capture/extracted/visible-text.txt 和 capture/extracted/tokens.json 存在;你能用一句清晰的句子說明解說的主題和目標受眾。
步驟 2:設計系統
目標:選擇一個內建框架預設;腳本將其轉換為此影片的 frame.md + 字幕外觀。
當 BRIEF.md 中指定了 style_preset — 用戶在意圖層的展示中親眼選定 — 使用它;僅在簡報未指定時,由你進行判斷。然後你做一個決定 — 選擇哪個預設:閱讀 ../hyperframes-creative/references/design-spec.md 並瀏覽 ../hyperframes-creative/frame-presets/;選擇視覺風格最符合主題、語調和目標受眾的預設。然後執行:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .
腳本會以確定性方式完成其餘工作:複製預設的 FRAME.md → frame.md 並將其 重新混合 到 capture/extracted/tokens.json 中的任何品牌 token 上(品牌顏色按角色映射到預設的顏色鍵;預設的顯示+正文字型替換為品牌的),複製預設的字幕外觀到 .hyperframes/caption-skin.html,並自我驗證(映射損壞時退出碼 1)。只要腳本退出碼為 0 即可繼續 — 不要手動編輯規格。
無臉解說通常 沒有品牌顏色/字型(tokens.json 的 colors/fonts 為空)→ 腳本保留預設的色板,這是一個完整的可出貨設計。僅當用戶指定了品牌顏色/字型時,才在執行前將其加入 tokens.json,並且僅在映射確實需要時才手動調整 frame.md。
關卡: build-frame.mjs 退出碼為 0 — frame.md 來自指定的預設,並且(當預設包含時).hyperframes/caption-skin.html 作為字幕外觀來源存在;所選預設已記錄為偏好(--key style_preset --workflow <this workflow>,簡報合約 § 2)。
步驟 3:分鏡和腳本
目標:將文字轉換為經批准的逐幀教學計畫。
閱讀 ../hyperframes-creative/references/story-spine.md(鉤子語言、價值先於證據、作為提案的分鏡、可追溯來源的視覺效果)、references/story-design.md、../hyperframes-animation/blueprints-index.md、../hyperframes/references/storyboard-format.md 和 ../hyperframes/references/script-format.md。使用它們來編寫 STORYBOARD.md,並在需要旁白時編寫 SCRIPT.md。從簡報的 length 設定前置資料 duration: — 一個粗略的期望;組合階段會報告實際剪輯長度與此值的比較。
使用 story-design.md 來決定解說結構(概念/如何做/列表/故事)、鉤子策略、清晰度技巧、情感節奏、類型枚舉映射和 VO_MODE。影片的順序來自 敘事設計,而非輸入文字的段落順序 — 重新排序、合併、省略、壓縮。作為 軟性指南,查閱 ../hyperframes-animation/blueprints-index.md 中的角色→藍圖選單:對於每個節拍,撰寫其候選藍圖暗示的形狀的旁白,並在符合時標記該候選 blueprint: id。教學真相仍決定哪些節拍存在 — 永遠不要為了符合藍圖而強加節拍,也不要因為有可用的經過驗證的形狀而發明節拍。無臉視覺效果是後續發明的,因此畫面 不 帶有資產清單:除非用戶提供了真實的 public/<basename> 圖片,否則將 asset_candidates 留空。使用分鏡和腳本參考文件中的確切必填欄位。
草稿完成後,執行審查循環的計畫通行 — ../hyperframes/references/review-loop.md § 1:將計畫作為提案呈現,並問兩個問題 — 批准或修改,以及 先看草圖(推薦)或跳過。回饋以聊天回覆的形式到達;循環直到批准。這是一個 檢查點關卡(簡報合約 § 1):在自主模式下沒有什麼可問的 — 將相同的摘要作為提示發布並繼續;草圖融入建構中,而最終預覽及其一個問題將在步驟 6 出現。
關卡: STORYBOARD.md 存在,每個畫面都有必需的敘述欄位,需要旁白時 SCRIPT.md 存在,且用戶批准了逐幀計畫(自主模式:摘要已作為提示發布)。
步驟 3.1:音訊
目標:從已批准的腳本生成旁白、單詞時間戳、音樂和音訊元資料。
在步驟 3 批准後開始音訊處理。在背景執行它,然後繼續步驟 4。(登入狀態已在步驟 0 中顯示;引擎會自動回退。)
在調用前根據用戶的要求選擇旁白語音。 如果請求指定了語音、性別或語調,選擇一個匹配的語音 ID 並以 --voice <id> 傳遞。管道預設值為 HeyGen 上的 Marcia(女性) / Kokoro 上的 am_michael — 因此像「男聲」這樣的請求如果沒有傳遞標誌則會被靜默忽略。語音 ID 是特定於提供者的;根據步驟 0 登入狀態選擇的提供者解析:HeyGen(已登入)透過 node <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list(或 GET /v3/voices?engine=starfish);Kokoro(離線)透過 <MEDIA_DIR>/audio/references/tts.md 中的語音表(前綴 am_/bm_ 男性,af_/bf_ 女性)。當用戶沒有表達偏好時,在管道預設值之前回退到已記住的語音(簡報合約 § 2),並說明你使用了哪一個;僅在兩者都沒有命名時省略 --voice。當用戶在此次運行中明確選擇了語音,記錄它(prefs.mjs record --key voice)。
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --voice <voice-id> &
音訊腳本處理旁白、單詞時間戳、從 HeyGen 音樂庫查詢 BGM 以及時間元資料。BGM 情緒來自分鏡的 music: 欄位。這使用 HeyGen Audio API 進行檢索,而非生成,並使用與 TTS 相同的 ~/.heygen 憑證。關於提供者的詳細資訊,請閱讀 ../media-use/audio/references/tts.md。當主機應用程式的自有工具製作音樂或音效時,將檔案放在 assets/ 下,並在 audio_meta.json 檔案中列出,標記為 "source": "host":音樂作為 bgm { "path": "assets/…", "source": "host" },並在分鏡中設定 music: none;音效作為 sfx 條目 { "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <its length>, "source": "host" }。每次音訊傳遞都會保留這些,而帶有主機音效的畫面不會獲得查詢到的提示。
如果沒有旁白且沒有 SCRIPT.md,則跳過語音生成。如果分鏡有音樂情緒,BGM 仍可能執行。
標準的完全靜音標記(在重複使用此音訊模型的工作流程間共享):STORYBOARD.md 頂部 YAML 區塊中的 music: none,無 SCRIPT.md,且 無 sfx: 提示或主機音訊。該組合標記專案為靜音 —