首先,保持此技能更新 — 靜默執行,無需詢問:
npx hyperframes skills update pr-to-video。若一切為最新,則快速無操作;否則在使用前,它會刷新此技能及其依賴的核心領域技能。
media-use:在獲取音訊/圖片/標誌之前,請呼叫
/media-use從 HeyGen 目錄和品牌標誌官方來源解析 BGM/SFX/圖片。先執行--adopt以註冊現有資產。請參閱/media-use技能。
PR 轉 HyperFrames
使用此技能來攝取 GitHub 拉取請求,理解變更,規劃程式碼變更解說,並在 HyperFrames 中逐影格建構影片。輸入是程式碼變更(透過 gh 讀取),而非網站 — 除了貢獻者的頭像外,沒有攝取步驟,也沒有真實資產。
入口是
/hyperframes。 您是協調者。執行每個步驟,驗證其關卡,然後才繼續。此技能用於 GitHub 拉取請求(程式碼變更)。任何其他意圖、僅「製作影片」或任何不確定性 → 先讀取/hyperframes— 意圖層擁有所有路由決策,且直接抵達此處的新創作若無BRIEF.md,仍會透過它處理(設定的開啟規則)。
您是協調者。在解析的外部 PROJECT_DIR 中工作,預設絕不進入呼叫者儲存庫。按順序執行步驟並在繼續前通過每個關卡。使用者關卡是步驟 0、步驟 3 和步驟 6。在步驟 0 之前閱讀 ../hyperframes-core/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/ + assets/<login>.png;步驟 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:設定
目標:帶著已確認的簡報進入 — 包括 PR 參考(完整 URL、<owner>/<repo>#<N> 參考,或在已檢出儲存庫中的「此 PR」)— 建立 HyperFrames 專案,並使簡報持久化。風格始終為 程式碼編輯(在步驟 2 固定,無需詢問)。
簡報由意圖層確認,而非此處提出的問題。 開啟規則,依序:(1) BRIEF.md 存在 → 讀取它且不問任何問題 — 簡報已確定,其 flow/storyboard 衍生出模式(簡報合約 § 1)。(2) 無 BRIEF.md 但專案存在(磁碟上的 hyperframes.json / STORYBOARD.md)→ 從分鏡的前置資料和記錄的偏好恢復;絕不重新審問一個半建成的專案。(3) 兩者皆無 — 直接抵達此處的新創作請求 → 讀取 /hyperframes 並執行其意圖層(references/intent-interview.md):它會檢查配方和記住的預設值,並進行此路由的問題 — 包括 PR 大小 → 長度原則(完整存在於 ../hyperframes/references/routes/pr-to-video.md)— 然後交回鎖定的簡報。編輯請求跳過所有這些 — 直接進行編輯。
在執行任何其他工作之前,先解析專案目錄。保留使用者提供的專案目錄;否則使用解析器列印的持久化外部快取位置。切勿在呼叫者儲存庫中建立 videos/:
PR="<url | owner/repo#N>"
if [ -n "${EXPLICIT_PROJECT_DIR:-}" ]; then
PROJECT_DIR="$(node <SKILL_DIR>/scripts/project-dir.mjs --pr "$PR" --project-dir "$EXPLICIT_PROJECT_DIR")"
else
PROJECT_DIR="$(node <SKILL_DIR>/scripts/project-dir.mjs --pr "$PR")"
fi
echo "PR-to-video project: $PROJECT_DIR"
node <SKILL_DIR>/scripts/preflight.mjs
能力預檢在提取、故事工作、音訊或影格分派之前執行。如果已安裝的 CLI 無法執行此技能所需的驗證命令,請停止並顯示其升級說明,而不是先耗費此執行的上下文。
僅在 $PROJECT_DIR/hyperframes.json 缺失時才初始化。其基本名稱來自 PR,例如 acme-sdk-pr-1842;切勿使用工作區名稱或時間戳。
npx hyperframes init "$PROJECT_DIR" --non-interactive --example=blank --skill=pr-to-video — init 檢查已安裝技能與 GitHub 上最新的技能,並在有任何過時時更新全域集合。
以下每個相對路徑命令都以 $PROJECT_DIR 作為其工作目錄執行。沒有明確 subshell 的範例意指 (cd "$PROJECT_DIR" && …);切勿變更呼叫者儲存庫的工作樹。
在 init 之後立即寫入 BRIEF.md(絕不在此之前 — init 拒絕非空目錄):意圖層鎖定的簡報,格式依照 ../hyperframes-core/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 § 提供者。
關卡: hyperframes.json 和 BRIEF.md 存在;PR 參考已擷取到簡報中;偏好支援的答案已被記錄(簡報合約 § 2);登入狀態已被顯示(已登入,或繼續離線)。
步驟 1:攝取 PR(無擷取)
目標:提取 PR 的事實並將其摺疊到專案中,作為資訊來源。沒有網站擷取。fetch-pr.mjs 確定性地執行 gh — 透過分頁的 gh api 完成檔案清單,這樣大型 PR 就不會在約 100 個檔案處截斷,並且僅寫入 capture/pr.json + capture/diff.patch(無暫存目錄)。對於已合併的 PR,它還會將盡力而為的 shipped_version(+ version_source)解析到 pr.json 中,這樣結束卡片就可以引用真實版本,而不是虛構一個。然後 ingest.mjs 離線地將其摺疊到合成的擷取套件中。
PR="<url | owner/repo#N | N>"
# 確定性地提取 PR:執行 gh,透過分頁的 gh api 完成檔案清單
# (因此大型 PR 不會在約 100 個檔案處截斷),僅寫入 capture/pr.json +
# capture/diff.patch — 無暫存目錄。gh auth / not-found / private 錯誤在此以 exit 1 退出。
(cd "$PROJECT_DIR" && node <SKILL_DIR>/scripts/fetch-pr.mjs --pr "$PR" --out-dir ./capture)
# 離線轉換 → capture/extracted/{tokens.json (colors:[] → 程式碼編輯色板),
# visible-text.txt (簡報), people.json (貢獻者, 已過濾機器人, name+login,
# avatarFile=assets/<login>.png)}.
(cd "$PROJECT_DIR" && node <SKILL_DIR>/scripts/ingest.mjs \
--pr-json ./capture/pr.json --diff ./capture/diff.patch --out-dir ./capture/extracted)
# 人員部分的一個網路步驟 — 將每個貢獻者的 GitHub 頭像下載到
# assets/<login>.png,用於結尾致謝。盡力而為;始終以 exit 0 退出。
(cd "$PROJECT_DIR" && node <SKILL_DIR>/scripts/fetch-people-avatars.mjs \
--people ./capture/extracted/people.json)
如果 fetch-pr.mjs 以 exit 1 退出(gh auth / not found / private),則報告其 stderr 並停止 — 請勿虛構 PR 內容。如果 ingest.mjs 以 exit 1 退出,則讀取其 stderr(通常是格式錯誤的 pr.json)、修正並重新執行(確定性)。fetch-people-avatars.mjs 始終以 exit 0 退出;缺少頭像僅表示沒有對作者的結尾致謝。
people.json 為那些 gh 已命名(PR 作者、提交作者、mergedBy)的貢獻者攜帶一個 name — 其餘(審查者/評論者/受讓人,gh pr view 僅提供一個裸 login)則為 null。在步驟 3 中寫入結尾致謝之前,為將實際出現在該影格上的 1-6 個人自行解析任何 null 的 name:gh api users/<login> --jq .name(您已經有 gh — 無需為此編寫腳本)。如果 GitHub 也沒有該使用者的公開名稱,則在螢幕上回退到登入名稱,並從旁白行中刪除該人員(請參閱 story-design.md 的致謝部分 — 旁白仍然必須說出姓名,絕不能說原始處理代碼)。
關卡: capture/pr.json、capture/diff.patch、capture/extracted/tokens.json、capture/extracted/visible-text.txt 和 capture/extracted/people.json 存在;您可以用一個清晰的句子說明 PR 的變更。assets/<login>.png 是盡力而為 — 其缺失不是失敗。
步驟 2:設計系統
目標:採用程式碼編輯影格預設;腳本將其轉換為此影片的 frame.md + 字幕外觀。
風格是固定的 — 程式碼編輯(溫暖的編輯風格;專為 diff 設計的海軍藍程式碼表面)。執行:
node <SKILL_DIR>/scripts/build-frame.mjs --preset code-editorial --hyperframes .
腳本將程式碼編輯預設的 FRAME.md 複製為 frame.md,將其與 capture/extracted/tokens.json 中的任何品牌代幣重新混合(PR 沒有 → colors:[]/fonts:[] 保留程式碼編輯自己的色板,一個完整的設計),將預設的字幕外觀複製到 .hyperframes/caption-skin.html,並自我驗證(在映射錯誤時以 exit 1 退出)。只要它以 exit 0 退出就繼續 — 無需手動編輯。
關卡: build-frame.mjs 以 exit 0 退出 — frame.md 從程式碼編輯預設存在,且 .hyperframes/caption-skin.html 作為字幕外觀來源存在。
步驟 3:分鏡和劇本
目標:將 PR 轉換為已批准的逐影格解釋計劃。
閱讀 ../hyperframes-creative/references/story-spine.md(鉤子語言、證據前的價值、作為提案的分鏡)、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。從簡報的 length 設定前置資料 duration: — 一個粗略的期望;組合階段會報告實際剪輯與其的比較。
使用 story-design.md 了解 PR 原型(更新日誌 / 功能展示 / 修正說明 / 重構導覽)、PR 原生影格類型、鉤子、說服、節拍、每個影格的單字預算和結尾致謝。順序來自敘事設計,而非 diff 的檔案順序 — 解釋變更,不要逐條朗讀 diff。作為軟性指南,查閱 ../hyperframes-animation/blueprints-index.md 中的角色→藍圖選單:對於每個節拍,以其候選藍圖暗示的形狀撰寫旁白,並在合適時標記該候選 blueprint: ID(故事真相仍決定哪些節拍存在 — 切勿強迫節拍適應形狀)。展示 2–4 個真實的 diff 片段(來自 capture/diff.patch),每個是一個小的可讀片段;為影格的 scene 中想要的每個 code-* 區塊命名。影格不攜帶 asset_candidates,除了 credits 結尾(1–6 個 assets/<login>.png 頭像)。使用分鏡和劇本參考中的精確必填欄位。
草稿完成後,執行審查循環的計劃審查 — ../hyperframes-core/references/review-loop.md § 1:打開看板(不要詢問是否要 — 從 PROJECT_DIR 在背景執行預覽),將計劃作為提案呈現,並問兩個問題 — 批准或更改,以及草圖優先(推薦)或跳過。透過聊天或看板的評論檔案進行反饋循環,直到獲得批准。這是一個檢查點關卡(簡報合約 § 1):在自主模式下,沒有看板,也沒有需要詢問的內容 — 作為提醒發布相同的摘要並繼續;草圖折疊到建構中,唯一預覽問題在步驟 6 出現。
關卡: STORYBOARD.md 存在,每個影格都有必需的敘事欄位,SCRIPT.md 在需要旁白時存在,並且使用者已批准該計劃(自主:摘要已作為提醒發布)。
步驟 3.1:音訊
目標:從已批准的劇本生成旁白、單字時間、音樂和音訊元數據。
在步驟 3 批准後開始音訊。在背景執行它,然後繼續步驟 4。
在呼叫之前,從使用者的要求中選擇旁白語音。 如果請求指定了語音、性別或語調,則選擇一個匹配的語音 ID 並透過 --voice <id> 傳遞它。管線預設值否則為 Marcia(女性)(HeyGen)/ am_michael(Kokoro)— 因此像「男性語音」這樣的請求會被靜默忽略,除非您傳遞了該標誌。語音 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。當使用者在此執行中明確選擇了語音時,記錄它
…
[已截斷以進行翻譯]