adnaan-reel
將 Adnaan 的原始影片轉換為與已核准參考編輯完全相同的影片。在進行任何操作之前,請先查看 assets/style/v8_contact_sheet.jpg — 已核准的 reel-08 風格測試,採用 v7「MINT」風格,自 2026-10-17 起為 house 預設風格(場景位於 examples/reel-08-v7/):TALK 節拍中他全螢幕出現 + 我們的 Kinetic 字幕,VISUAL 節拍在灰色紙板上展示圖標光碟、光碟鏈和移動攝影機,以及簽名縮放。請先閱讀 references/style.md 中的「v7」部分 — 它會覆蓋較舊章節中任何衝突的地方;v6 的聲音規則、安全區域、可讀性規則和動作原則仍然適用。藝術指導具有約束力,位於 references/style.md;場景語法(如何將影片拆分為場景以及有哪些場景類型)位於 references/scenes.md。風格即程式碼:共享執行環境 templates/runtime/paper.css + paper.js(世界、Kinetic 字體、基本元素、Lasseter 原則動作)+ v7.css + v7.js(v7:圖標光碟、光碟鏈、縮放至光碟或卡片、攝影機、區域遮罩),以及每種場景類型在 templates/scenes/ 中各有一個起始範本(v7:talk、talk_depth、visual、chain、card);slots.py prepare 將它們安裝到每個場景中,因此一個場景大約是 150 行程式碼、位置和一個自訂物件。
舊版 PAPER 風格(紅色紙張 + 手繪標記層 marker.css/marker.js、分割色帶、reel-06/07 — assets/style/v6_contact_sheet.jpg、v7_contact_sheet.jpg、examples/reel-06/、reel-07/)是 init-brand --look paper,僅在他要求時使用。較舊的點子庫:examples/reel-04/、reel-05/ 和 references/motion-ideas.md(襯線編輯風格:examples/reel-03/、init-brand --type editorial)。
您永不觀看影片 — 您讀取它:逐字稿、決策點的連續靜幀,以及驗證工具來轉錄剪接點。
原則
- 每個節拍都是一個場景,採用兩種模式之一 (v7)。 整個影片由 8–18 個全螢幕 HyperFrames 場景連續組成,基於鎖定的剪接,每個節拍在節拍表中選擇一種模式:TALK(他全螢幕,我們的 Kinetic 字幕覆蓋在他身上 — 鉤子、轉場、觀點、收尾、行動呼籲;
talk,或當有東西位於他後方時使用talk_depth)和 VISUAL(無說話者;板子、圖標光碟、扁平向量道具、真實頁面、移動攝影機 — 每個解釋、列表項目、範例;visual)。他在螢幕上的時間約佔整個影片的 50%;沒有他在場時,VISUAL 場景不應超過約 8 秒。簽名縮放(每個影片 1–3 次:他的畫面縮入當前光碟鏈或左側小卡片,chain/card;V.grow將他帶回以呈現收尾)連結了兩種模式。小卡片出現 0–2 次。列表影片的地圖是光碟鏈 (V.chain)。長螢幕錄影是demo類型。 - 文字即字幕。 無副標題。Kinetic Inter Tight 900 短語在口語單詞上精準落地,字體大(主要字體 170–270 px 創作,套用 house 0.94 倍
--type-scale;透過顏色強調,無斜體;v7:炭灰色帶柔和光暈覆蓋在畫面上,一個薄荷色主要單詞,薄荷色僅用於主要字體大小)。螢幕上的文字僅限於他實際說出的單詞(ASR 拼寫的人名固定) — 加上一個可選的文字鉤子(他撰寫的第 0 幀標題)。 - 展示真實事物,使用真實標誌。 他提到的每個產品、儲存庫、網站、檔案或框架都真實呈現:瀏覽器卡片中的捕獲頁面、真實儲存庫名稱、星數計數、真實標題和零件名稱。
他提到的每個工具或公司都使用其官方標誌(
fetch.py logo,記錄為official),在名稱旁邊或應用程式卡片的晶片/藥丸中作為未經修改的<img>顯示 — 如果有標誌存在,絕不重新繪製、重新著色或以純文字藥丸替代。允許說明性 UI;但禁止虛構數字、引言或貼文。 - 先批准計劃,然後再構建所有內容。 一個節拍表 → 批准 → 所有場景並行構建 → 組裝 → 自我檢查 → 交付。自動駕駛模式(「直接做」)跳過等待。
- 絕不無聊,永遠動畫化。 每個場景都有一個主要創意,包含真實動作(事物處理、打開、合併、堆疊、沿虛線路徑移動、從灰色翻轉到強調色)加上持續的生命力,並且每個動作都遵守 Lasseter 原則(
references/animation-principles.md:預期、過衝 + 穩定、重疊、弧形、舞台、次要動作、一個誇張的節拍、退出比進入快)。執行環境預設實現了這一點;自訂物件也必須如此。如果一個場景可以是一張靜態投影片,請重做。豐富性是 house 等級 (reel-05),受 v6 調和: 一次大約兩個焦點元素,格線中 35–50% 為空白(基於內容的指南,非硬性限制)— 一個主要物件 + 1–3 個次要微動畫,用於表現句子 — 一個執行操作的游標、實際數字滾動到其數值、栩栩如生的圖標、柔和的物理效果、有個性的角色、有表現力的文字、主要圖標落在其對應單詞上 (references/motion-ideas.md)。 - 頂層使用乾淨的扁平向量 (v7) — 薄荷風格中無手繪標記。 圖標光碟使用白色 Phosphor 字形(
fetch.py icon、V.disc),乾淨的向量筆劃自行繪製(連接器、底線、放大鏡邊框 — 等寬,無抖動),具有動感個性的扁平向量主要物件,真實文字後方的薄荷色螢光筆。桃色僅用於資料。(舊版紙張風格保留紅色氈頭標記筆 + Caveat 筆記,hf/marker.js。) - 始終可讀。 所有內容都在安全區域內(已測量),真實頁面作為大條帶(≥ 0.85,約 45 px 文字),口語短語後方有螢光筆,無半透明文字,他衣服上的文字清晰可辨(v7:炭灰色 + 光暈,主要字體大小為薄荷色;紙張風格:在實色紙張上),晶片/標誌/塗鴉在手機上足夠大。他明確要求了這一點。IG 安全區域 (v6): 底部 20% 無內容,y 1200 以下 x 900 以右無內容(Like/Comment/Share 區域)— CTA 位於左下/中央。
- 聲音支援語音 — 30% 規則 (v6)。 無米老鼠式音效:0:00–0:04 內有 1–2 個強烈的觸覺聲音,然後僅有結構性轉場(第 1/2/3 點、模式切換、大螢幕截圖滑入、CTA 落地)— 70 秒內約 10–14 個提示,來自低沉溫暖的 v6 音效包(
assets/sfx/v6_*:印章、重擊、砰聲、紙張、咻聲、啪聲),低通濾波至 5 kHz。代理在beats.json中將這些節拍標記為"role": "hook" | "structural";scenes.py edl(預設--sfx-policy sop)保持其他部分靜音。混音: 語音在前,SFX −16…−22 dB,ElevenLabs Music 背景音樂(器樂,與敘事弧線同步)在語音下方 −22…−26 dB 透過--music,最後 3 秒提升 +2.5 dB。 - 展示前先驗證。 每個剪接點都被轉錄,每個場景都經過檢查表,組裝好的影片進行快速掃描和抽樣。如果您不會發佈它,就不要呈現它。
硬性規則
- 場景構建前須先批准節拍表(除非使用自動駕駛模式)。
- 逐段提取 → 無損拼接用於剪接 (render.py),剪接點處 30 ms 音頻淡出,絕不在單詞內剪接,邊緣填補,僅使用逐字稿,每個來源快取。
- 每個填充剪接和每個剪接點都使用
verify_cuts.py驗證 — whisper 會讓結尾單詞提前結束,且audio_env.py tighten會吞掉軟單詞結尾(「code」、「immediately」、「base」、「use」在參考編輯中都被剪掉了;「works」在 reel-05 中丟失了「s」,而 ASR 仍讀作「works」)。讀取每個剪接行及其 ⚠ TAIL/HEAD 能量標誌(故意的填充剪接也會標記 — 這是預期的);當真實單詞被剪掉時,將範圍結束時間擴展到建議時間,重新探測直到乾淨。 - 永遠不要從
edit/渲染部分或測試 EDL。 render.py 會在 EDL 旁邊寫入base.mp4和timeline.json—edit/中的測試 EDL 會覆蓋真實的 base。使用scenes.py preview <id>預覽一個場景;使用verify_cuts.py --probe測試剪接。 - 場景 EDL 僅來自
scenes.py edl。 它會對每個場景進行幀捕捉,預捲 12 ms 並在每個場景下方保持 0.1 秒 — 如果沒有這樣做,render.py 的疊加同步會在每個場景邊界洩漏一個原始素材幀。然後scenes.py flashcheck <render> --edit-dir edit:0 個意外的原始素材幀(它會將每個幀與 base.mp4 進行比較 — reel-05 的天花板是紙張顏色,因此舊的角落測試是盲目的;計劃中的fullscreen/demo視窗來自 slots.json 並且是預期的)。 - 每個場景一個子代理,全部在一條訊息中生成。 當
check_sheet.jpg/motion_strip.jpg到達時進行審查;使用 SendMessage 向同一代理發送修復(它會保留上下文)。每個場景恰好是其 TASK.md 的幀數(slots.py 預設了它,check會強制執行)— 在scenes.py edl之前使用 ffprobe 驗證所有計數;1 幀的誤差意味著剪接點處的間隙或重疊。 - 透過執行環境確保品牌忠誠度。 場景使用
paper.css/paper.js+v7.css/v7.js(薄荷風格)或marker.css/marker.js(紙張風格),如所安裝 — 永不編輯,永不為每個場景重新實現(帶有自己卡片或文字引擎的場景將在審查中被拒絕)。僅使用 brand.css 標記;捆綁字體保證已加載;絕不繪製或重新著色標誌(僅來自官方檔案的真實標誌,已記錄);一種強調色。絕不克隆付費字體 — 如果他想要商業字體,他購買許可證並將檔案放入;在此之前使用最接近的 OFL 字體(Bootzy TM → Inter Tight 900,當前預設)。全域性變更(字體、卡片大小、緩動)在templates/runtime/中進行一次,然後執行scenes.py runtime+scenes.py rerender。 - 透過
fetch.py下載,透過capture.py捕獲(兩者都記錄來源 + 權利);交付前執行fetch.py credits→credits.md。第三方頁面作為對他所推薦事物的評論顯示,在瀏覽器卡片中框起,絕不冒充為他的。 - 所有輸出在
<project>/edit/中。 絕不寫入技能目錄內部。 - 剪接前進行鏡像檢查:在全解析度靜幀中放大他衣服/背景上的任何文字或標誌(連續靜幀太小 — reel-06 中反轉的「SAN DIEGO」補丁僅在場景審查時才被發現,並導致每個說話者片段重新剪接)。反轉 →
"mirror": true。 - 可讀性是審查關卡 (style.md「可讀性」):一個場景若有像素超出安全區域、不可讀的頁面、幽靈文字、深色布料上的文字或手機上太小的晶片/塗鴉,將返回給其代理。
- 信任時間戳,而非報告:當代理說「已重新渲染」後,檢查
render.mov是否比其輸入更新(reel-06 v01 報告了一次從未實際發生的重新渲染)。
設定
與 video-edit 相同的工具鏈(詳見 install.md):ffmpeg/ffprobe 附帶 libass + zscale、uv(輔助腳本以 uv run --project <skill_dir> <skill_dir>/helpers/<name>.py … 執行)、轉錄(ElevenLabs 金鑰 → Scribe;否則 Apple Silicon mlx 透過 uv sync --extra mlx;否則 whisper.cpp)、用於 HyperFrames 的 Node 22+(npx --yes hyperframes …)、用於 capture.py 的 Google Chrome。<skill_dir> 是包含此檔案的資料夾(~/.claude/skills/adnaan-reel)。
新鮮度(每次會話一次,在任何渲染之前): 技能調用未鎖定版本的 npx --yes hyperframes,它會解析為最新的已發佈 CLI(場景 package.json 中的鎖定僅供 npm run 使用,我們從不調用)。使用 npx --yes hyperframes --version vs npm view hyperframes version 確認,並在任何 HyperFrames 技能過時時執行 npx --yes hyperframes skills check → npx --yes hyperframes skills update(2026-10-14 時它們落後了 10 個版本)。在 project.md 中記錄 CLI 版本;如果版本提升後渲染看起來與之前的影片不同,請說明。
輔助腳本
| 輔助腳本 | 功能 |
|---|---|
| `scenes.py init-brand --edit-dir E [--look mint | paper] (mint = v7 house 預設) [--accent red |
fetch.py icon <name…> --edit-dir E [--weight fill] | v7 圖標光碟字形:Phosphor(MIT)SVG → icons/<name>.svg,記錄為 open-source;在 slot 的 "assets" 中列出為 icons/<name>.svg,使用 V.disc({icon: name})(名稱:phosphoricons.com) |
scenes.py words --edit-dir E | 每個剪接片段,附帶輸出開始時間、幀和單詞 — 在此選擇場景邊界 |
scenes.py cut-speaker --edit-dir E [--only ids] | 每個場景:base.mp4 視窗 → hf/assets/speaker.mp4(靜音;幀精確搜尋;最後一個場景以結束停頓凍結填充)+ speaker_cut.webm(他的遮罩)用於 talk_depth / cutout 場景 + 複製場景的 "assets";在中期構建剪接修復後使用 --only |
scenes.py edl --edit-dir E [--beat-gain-offset -3] | edl.json + animations/slots.json + 渲染 → edl_scenes.json(幀捕捉、預捲、0.1 秒保持、無字幕)+ 每個場景的 beats.json → 來自 ElevenLabs 音效包的定時 audio[] 提示 |
scenes.py preview <id> --edit-dir E | 一個場景及其語音 → verify/<id>_preview.mp4(安全:永不觸及 base) |
scenes.py flashcheck <video> --edit-dir E [--allow] | 與 base.mp4 匹配的幀(= 顯示的原始素材)在計劃的 talk/talk_depth/chain/card/fullscreen/demo 視窗之外(必須為 0);沒有 --edit-dir 則進行角落顏色測試,該測試會容忍場景自身的暗角 |
scenes.py runtime --edit-dir E / scenes.py rerender --edit-dir E [--jobs 4] [--only ids] | 將共享執行環境重新安裝到每個場景中 / 並行重新渲染所有場景並驗證幀數 — 數分鐘內完成整個影片的重新造型(新字體、卡片大小、緩動) |
| `capture.py --edit-dir E --name n --rea |
...
[因翻譯而截斷]