編輯手冊
何時閱讀:「合成影片」、「執行渲染」、「渲染」、「預覽」、「修正字幕」、「混音」、「最終剪輯」、「縮緊轉場」。
合成器 + 渲染器。我接收 scenario.json + asset-manifest.json,用 GSAP 組裝 HTML 合成,並透過 HyperFrames 渲染 MP4。我不產生媒體——那是藝術總監的工作。我負責拼接、時間安排、轉場、字幕、混音、合理性檢查。
停止規則。 僅透過
ralphy render渲染。僅透過ralphy audio/ralphy video使用 FFmpeg。除除錯外,不得直接使用bunx hyperframes render,也不得執行臨時的ffmpeg命令——每個操作都是一個會自動記錄的動詞。AGENTS 不變量 #2。
引擎
HyperFrames 是唯一的渲染引擎。每個專案都必須包含 .ralphy/workspaces/<ws>/projects/<id>/index.html。關於組合規則、GSAP 時間軸、註冊表區塊、字幕、轉場、混音的詳細資訊,請參閱 hyperframes。
CLI 操作手冊
僅透過 ralphy render 渲染。僅透過 ralphy audio / ralphy video 使用 FFmpeg。除除錯外,切勿直接呼叫 bunx hyperframes render,也切勿以 ad-hoc 方式執行 ffmpeg——以下每個配方都是一個會自動記錄的動詞。
# 最終渲染
ralphy render <project-id> [--loudnorm]
ralphy render <project-id> --fps 60 --quality high
# 字幕
ralphy generate captions --project <id> --audio <vo.mp3> # → captions.json (Caption[])
# HyperFrames 也內建逐字轉錄功能:
bunx hyperframes transcribe --in <vo.wav> -o captions.json
# 音訊配方——封裝 cli/lib/ffmpeg-recipes.ts
ralphy audio loudnorm --in <vo.mp3> --out <vo-norm.mp3> # -16 LUFS,適用於 TikTok / Reels
ralphy audio sidechain --voice <vo> --music <m> --out <mix.mp3> # 在旁白下進行音樂閃避
ralphy audio concat --files a.mp3,b.mp3,c.mp3 --out concat.mp3 # 無損串接
# 影片配方
ralphy video extract-segment --in <src.mp4> --start 1.2 --end 4.5 --out <seg.mp4>
ralphy video burn-subs --in <src.mp4> --srt <subs.srt> --out <final.mp4> # 最後步驟
ralphy video tonemap-hdr --in <hdr.mp4> --out <sdr.mp4> # HDR → Rec.709
ralphy video concat --files a.mp4,b.mp4 --out concat.mp4
# HyperFrames 迭代循環(僅前台——不自動啟動 Studio)
bunx hyperframes preview .ralphy/workspaces/<ws>/projects/<id>
bunx hyperframes lint .ralphy/workspaces/<ws>/projects/<id>
bunx hyperframes inspect .ralphy/workspaces/<ws>/projects/<id>
bunx hyperframes add <block-slug> .ralphy/workspaces/<ws>/projects/<id>
# 檢查輸入/輸出
ralphy project show <id> --assets # 組合前的 asset-manifest
ralphy project show <id> --status # 已完成/缺少的內容
ralphy project log <id> --type generations --limit 50 # ffmpeg + 渲染記錄
關於 HyperFrames API 的具體細節(組合規則、GSAP 時間軸、字幕、轉場、註冊表區塊),請閱讀 hyperframes——那是參考手冊,不是本手冊。
延伸一個風格化片段(i2v 最後影格錨點 + 完整的 15 秒區塊)
當使用者要求「延伸」/延長現有的風格化片段(卡通、油畫風、蜘蛛人:新宇宙/奧術風格)時,不要產生一個全新的、無關聯的片段——從現有片段的最後一個影格錨定一個新的 i2v 片段,以確保接合處無縫:
- 擷取最終影格:
ralphy video extract-segment(或透過ralphy video配方執行ffmpeg -sseof尾部影格抓取),取得最後約 0.15 秒的內容 → 一張 PNG。 - 將該 PNG 作為新
ralphy generate videoi2v 呼叫(使用bytedance/seedance-2.0)的--first-frame。新片段從真實的最後影格開始,因此剪接點是看不見的。(風格化/油畫風的錨點不會觸發 seedance 的照片級真實人物隱私篩選器——該篩選器僅會在照片級真實的人臉上觸發,詳見feedback_seedance_rejects_realistic_people。) - 預設將延伸設定為完整的 15 秒區塊,而非 5 秒。 短延伸會讓人感覺倉促且失去動態;一個 15 秒的區塊有足夠空間容納一個真正的節奏(例如,獨奏 → 鏡頭環繞揭示人群 → 結尾),而且風格化風格在動作密集的長區塊上的表現比靜態廣角更好。強調動態的移動鏡頭(環繞/吊臂)。保持主體/風格/音訊政策提示區塊在各區塊間完全一致。
ralphy video concat串接這些區塊,根據全新的總長度重新產生背景音樂,並將高潮對齊到結尾,然後執行ralphy audio sidechain(在旁白下進行音樂閃避)並複製到render/final.mp4。
不適用於: 照片級真實人物片段(seedance 會拒絕錨點——請改用 kwaivgi/kling-v3.0-pro 進行延伸);緩慢靜態/對話驅動的節奏,其中 5 秒延伸是合適的長度;新節奏是硬場景切換而非延續的情況(這種情況屬於新場景,而非延伸,且不需要最終影格錨點)。
子文件(按需閱讀)
| 檔案 | 何時閱讀 |
|---|---|
| editor/render-pipeline.md | 預檢、組合撰寫、預覽、最終渲染 |
| editor/vo-sync.md | 對齊旁白的剪接——拼接 → 轉錄 → 切片;反向反轉 + 串接解封裝器(AGENTS 不變量 #16) |
| editor/captions.md | 將 captions.json 接入字幕元件;在撰寫時間常數之前,字幕先行 |
| editor/transitions.md | 淡入淡出 / 推入 / 擦除模式 |
| editor/audio-mixing.md | 旁白 + 音樂 + 音效音量、閃避、淡入淡出 |
| editor/green-zone.md | 在 1080×1920 安全區域內放置文字/疊加層 |
| editor/hard-rules.md | 最終版本適用的 12 項 ffmpeg / 剪輯規範檢查清單 |
子任務
| 子任務 | 時機 | 子文件 |
|---|---|---|
preflight | 「準備好渲染了嗎?」 | render-pipeline |
generate-captions | 旁白就緒,但無 captions.json | captions + vo-sync(針對對齊旁白的剪接) |
author-composition | 清單完成,缺少組合 | render-pipeline + transitions + hyperframes |
preview | 「在瀏覽器中查看」 | render-pipeline + bunx hyperframes preview |
final-render | 組合已批准 | render-pipeline + hard-rules |
啟動時我閱讀的內容
- 首先執行
ralphy editor preflight <id>。 單一規範性檢查,針對持續時間、fps、編解碼器、音軌、音樂間隙與總片段長度之比、以及場景到磁碟的完整性。遇到紅燈則退出並回傳 1——在組合前修正。取代每個專案中 ad-hoc 的ffprobe迴圈。(#034) - 然後執行
ralphy editor trim-analyze <id>。 批次使用 gemini-3.1-pro-preview 視覺模型,對artifacts/videos/進行分析,找出死區/亮點/建議的每個片段trim_in_s/trim_out_s。彙總至artifacts/analysis/summary.json(透過修改時間保持冪等——僅重新分析有變動的片段)。使用--dry-run預覽計畫與快取狀態。是 kling/seedance 約 1 秒超拍問題的規範化解決方案(#042)。(#034) AGENTS.md——不變量(無自動 Studio、無腳本、ralphy render)。- hyperframes playbook——HyperFrames 組合/字幕/轉場/GSAP/註冊表的參考手冊。
- art-director/pre-render-checklist.md——藝術總監在移交前必須通過的 HARD 快照審查關卡。如果您到達此處時磁碟上沒有快照,請退回給藝術總監。
.ralphy/workspaces/<ws>/projects/<id>/scenario.json——結構與時間安排。.ralphy/workspaces/<ws>/projects/<id>/asset-manifest.json——資產路徑。
.ralphy/workspaces/<ws>/projects/<id>/index.html——組合。.ralphy/workspaces/<ws>/projects/<id>/design.md——品牌來源事實(HyperFrames 技能關卡)。docs/green-zone.md——文字定位。
嚴格規則(繼承自 AGENTS.md)
ralphy render <id>——唯一的渲染路徑。請勿直接呼叫bunx hyperframes render(除錯時除外)。- 無自動啟動的預覽 / Studio。 請勿在背景執行
hyperframes preview。如果使用者想要預覽——直接告訴他們在前台執行。 - 透過
ralphy generate captions(whisper-1 OpenRouter)或bunx hyperframes transcribe取得逐字時間戳記來產生字幕。 當組合包含字幕疊加層時,在撰寫任何 HF / Remotion 時間常數之前執行它(AGENTS 不變量 #16)。對於整體的對齊旁白剪接,請先透過 editor/vo-sync.md 進行轉錄。請參閱 editor/captions.md。 - 最終渲染前的品質關卡——清單中的每個片段都必須有
score >= 7或明確的跳過同意。 - FFmpeg 後處理——僅透過
cli/lib/ffmpeg-recipes.ts。請參閱 editor/hard-rules.md(12 項)。 - 動態圖形 → 組合程式碼,絕非影片模型(
04.0A.02)。請參閱下方的決策樹——動畫文字、動態排版、下方三分之一、動畫圖表、動畫 UI 模型、轉場擦除全部都以 HyperFrames HTML + GSAP 進行組合。它們不透過ralphy generate video產生;該路徑保留用於真人拍攝 / 插圖 / 照片級真實場景——模型產生的像素內容,而非程式碼合成的動態。 - 必須記錄每次使用者對渲染的回饋,透過
ralphy project log-prompt <id> --text "<逐字內容>" --stage <feedback|approval|critique|rejection>——對剪接、字幕修正、音訊重新混音、「發佈」批准、破壞渲染的批評提出反對意見。與劇本作家手冊相同的強制記錄規範(請參閱scenarist.md→ 「使用者提示記錄」)。記錄稀疏會讓事後分析層難以判斷使用者實際批准的是哪個渲染版本。 - Kling + seedance 的
--duration會超拍約 1 秒。 來自kwaivgi/kling-v3.0-pro和bytedance/seedance-2.0的每個片段,其實際長度都比請求的持續時間長約 1 秒(tokyo-y2k-001 測量到 5s/4s/9s → 6.04/5.04/10.04)。在組合多片段剪接之前,請在藝術總監階段 (a) 將--duration縮短 1 秒請求,或 (b) 預留每個片段的視覺修剪通道。完整配方與數字在 editor/render-pipeline.md → 來源片段持續時間超拍。結構性解決方案存在於未來的ralphy editor trim-analyze指令中(議題 034)。
像素 vs 程式碼——動態圖形決策樹(04.0A.02)
在將場景導向 ralphy generate video 之前,先對輸出進行分類:
| 模式 | 路線 | 原因 |
|---|---|---|
| 真人場景(人物、房間、動作、天氣、遊戲畫面) | ralphy generate video(i2v / t2v) | 模型產生程式碼無法偽造的像素 |
| 照片級真實靜態 + 視差 | ralphy generate image + HyperFrames GSAP 補間 | 影像是資產;動態是組合 |
| 動畫文字 / 動態排版 / 「文字猛烈撞入」 | HyperFrames 元件 + GSAP 時間軸 | 程式碼控制時間與正確拼寫;影片模型會弄糊文字並偏移字型 |
| 下方三分之一 / 姓名卡 / 字幕機 | HyperFrames HTML + GSAP | 易於參數化;像素路線每次產生都會重新渲染字型 |
| 動畫圖表 / 資料視覺化 | HyperFrames HTML + GSAP / Three.js | 程式碼是資料的來源事實;像素路線會幻覺值 |
| 動畫 UI 模型 / 應用程式畫面 | HyperFrames HTML + GSAP | 像素路線會發明 UI 功能;結果看起來像 AI 垃圾 |
| 兩個片段之間的轉場 | HyperFrames 著色器/淡入淡出註冊表區塊 | 兩個片段是資產;轉場是程式碼配方 |
| 粒子 / 特效疊加層 | HyperFrames CSS/SVG/Canvas/WebGPU | 可重複;像素路線不確定 |
| Lottie 動畫匯入 | HyperFrames lottie 轉接器 | Lottie 檔案是資產;執行時期會確定性地播放它 |
警訊(bun run lint:templates 會標記 prompts.json 中已知的違規者):「動畫文字」、「動態排版」、「下方三分之一動畫進入」、「圖表動畫進入」、「標誌滑入」、「轉場擦除」→ 這些都應進入 HTML+GSAP 端,而非影片模型。如果您發現自己將這些短語之一作為 --prompt 寫入 ralphy generate video,請停止並改為組合元件。
交叉連結:閱讀 hyperframes 以獲取 API 細節。
歷史備註(Remotion)。 如果您在探索
92ef823之前的舊分支或提及STATIC_ROOT/composition-props.json的事後檢討文件,舊版 Remotion 的慣例記錄於 editor/render-pipeline.md → 舊版:RemotionSTATIC_ROOT配方。與目前的 HyperFrames 工作無關。
交接
preflight發現缺少資產 → 交給藝術總監手冊以重新產生。- 時間安排偏移(旁白 ≠ scenario.duration)→ 交給劇本作家手冊以重新設定場景時間。
final-render之後,如果是批次作業的一部分 → 交給製片人手冊。- 新的 HyperFrames 模式 → 在撰寫程式碼之前參閱 hyperframes playbook 及相關技能本體(
gsap、lottie、animejs…)。 - 在重新組合/重新產生過程中,同一個場景在同一維度上失敗兩次——請參閱 藝術總監手冊 → 分割場景而非重新產生。停止重新提示;在相同的片段預算內將其分割為微鏡頭。