---
name: video-clone
description: 參考影片風格克隆器 — 使用者給一支參考影片（本機檔案、螢幕錄影或 YouTube/網址）加上一句需求（「做一支類似風格的影片，主軸是…」），就拆解它的剪法與視覺風格、判斷屬於哪種風格、交給對應的製作 skill，寫分鏡、做動畫、逐格自我審查，最後輸出 MP4 並依回饋修改。Use whenever the user supplies a reference video or link and asks for a video "like this", "in this style", "clone/模仿/參考這支的風格/剪法", or asks to add a new video style to the registry.
---

# video-clone：參考影片 → 風格拆解 → 生成新影片

這個 skill 是總指揮。**所有產出都照 `CONTRACT.md` 的檔名與欄位寫**（App 前端直接讀那些檔案畫畫面；CLI 使用時也照寫，方便之後接到 App）。
在 App 裡時，每一輪只做被指定的階段（拆解 / 企劃 / 修改企劃 / 生成 / 修改成片）；**前製企劃被使用者核准之前，不准開始正式生成**。
使用者沒有素材時，先用 `scripts/fetch_assets.py` 從授權安全的來源（Openverse CC0/CC BY、Pixabay、Freesound）找；不夠可以自己上網搜尋。每個素材都把來源、作者、授權記進 assets/ASSETS.md，授權不明的標「授權未確認」並告訴使用者。

它自己不畫任何東西，負責的是：拆解參考片、選出正確的製作 skill、把關品質、跟使用者對焦。

**目標是驚艷、讓人起雞皮疙瘩，不是「沒有錯」。** 驚艷來自高潮設計：找出參考片打動人的那 1–2 刻，設計我們的對應高潮
（鋪陳 → 屏息 → 落在重拍的爆發 → 停住），把力氣集中在那幾鏡，並且一律用連續影格和參考片並排比，不看單張。
流程照這份文件走；每個階段做完都用一兩句話告訴使用者現在做到哪。

## 0. 收件

使用者會給：
- **參考影片**：本機檔案、螢幕錄影，或網址（YouTube 等）。網址用 analyze.py 內建的 yt-dlp 下載，僅供分析風格。
- **需求**：主題 / 主軸 / 情感方向 / 長度 / 比例。沒說的用預設（30 秒、16:9），不要一次追問一大串。
- （選配）**配樂音檔**與 **LRC 歌詞檔**。

在 `projects/<短代號>/` 開新專案；分析結果放 `projects/<代號>/analysis/`。

## 1. 拆解參考片

```bash
python .claude/skills/video-clone/scripts/analyze.py "<檔案或網址>" --out projects/<代號>/analysis
```

它會自動處理：手機螢幕錄影的 UI 裁切、黑邊、切點偵測、平均鏡頭長度、BPM 與拍點、左右聲道相位相反（錄音常見）、音量正規化、最熱鬧的 30 秒段落，
以及**每個鏡頭的運鏡（shot_details：推近/拉遠/平移/環繞/靜止 + 快慢）與畫面數據（亮度、對比、暗部比例、飽和度、主色）**，`look_summary` 是整支的摘要。

然後**用 Read 打開 `sheet_1fps.jpg` 和 `sheet_scenes.jpg` 實際看**，搭配 `report.json` 寫 `analysis/STYLE.md`：
- **媒材**（必填、放第一行）：2d-painted（水彩／墨線）· 2d-crayon（蠟筆／色鉛筆繪本）· 2d-vector（扁平向量、動態圖像）· 2d-pixel（像素）·
  2d-paper（剪紙／定格）· 2d-lineart（白板／手繪線稿解說）· 2d-cel（日式動畫賽璐璐）· 3d-stylized · 3d-photoreal · live-action。這是選 skill 的硬條件
- 鏡頭清單：把 `shot_details` 整理成表（編號、秒數、內容、運鏡與快慢、亮暗），企劃會逐鏡對照這張表
- 配色與色彩弧線、角色造型語言
- 剪接：鏡頭數、平均鏡頭長度（秒與拍）、切點是否對拍、轉場種類
- 敘事結構：有沒有故事、開頭結尾是否呼應、有沒有反覆出現的符號（motif）、笑點怎麼設計
- 字幕 / 文字的用法
- 畫面裡若出現製作工具或開源專案連結，記下來（可能直接就是對應的 skill）

**找高潮**：report.json 的 `audio.peak_candidates`（音樂蓄力後爆發）與 `flashes`（閃白格）是線索。每個候選用
`scripts/clip_strip.py analysis/source.mp4 --range a:b --out analysis/peak_<n>.jpg` 抽 12fps 連續影格實際看，
確認真正的爆點，寫 `analysis/peaks.json`（格式見 CONTRACT.md）：怎麼鋪陳、有沒有屏息、爆點那一格發生什麼、停多久、聲音、用了哪些手法、為什麼打得到人。

把拆解結果精簡回報給使用者（一張表 + 3–5 個「這支好看的關鍵」+ 高潮在哪裡、靠什麼）。

## 2. 選風格 → 選製作 skill

讀 `styles/` 底下所有 `*.md`（`_TEMPLATE.md` 除外）。每個檔案的 frontmatter 有 `engine`（交給哪個 skill）、`medium` 與 `priority`，內文有「辨識特徵」。
**engine 對應的 `.claude/skills/<engine>/` 資料夾不存在的風格直接跳過**（使用者沒有安裝那個引擎，例如開源版不附的 Remotion skills）。
- **先過濾媒材**：只考慮 `medium` 與參考片媒材相同的風格；沒有同媒材的風格時，選畫面最接近的媒材並在 why 說明（live-action 參考片 → 用最接近的 2D 媒材重現，並告訴使用者）。
  **目前只做 2D**（3D 賽道暫停，`styles/_disabled/` 裡的風格不參與選擇）。參考片是 3D／擬真時，選最接近的 2D 風格，
  重現它的節奏、運鏡、構圖、光影氣氛與字卡手法（例如黑底＋光暈、慢推、灰白兩階標語），並在 route.json 的 why 與回報裡明說
  「參考片是 3D，這支用 2D 重現」——不要默默降級。
- 在同媒材的風格裡，拿 STYLE.md 對辨識特徵打分，選最符合的；平手看 priority。
- 使用者明確指定風格或工具時，以使用者為準。
- **都不符合**：挑最接近的 engine 做，並在做完後依 `_TEMPLATE.md` 新增一個風格檔，讓下次能直接對應（告訴使用者新增了什麼）。
- 告訴使用者：判斷成哪個風格、用哪個 skill、為什麼。

然後**載入該 engine skill**（Skill 工具），接下來的製作細節以它的指示為準，並遵守該風格檔的「製作預設」與「已知的坑」。

## 3. 配樂（有音樂的風格才需要）

- 用使用者提供的音檔。沒有的話請使用者提供（可以是他自己合法取得的檔案或螢幕錄音）；不要自行下載商業歌曲。
- 再跑一次 analyze.py 分析那個音檔（`--out projects/<代號>/analysis/song`），拿到 BPM、拍點、最熱鬧的段落。
- 報告有 `silent: true` → 請使用者重錄（Windows 剪取工具要打開「系統音訊」）；`phase_inverted: true` 或底噪 > -45 dB → 可以先用，但告訴使用者音質上限，建議換正式音檔。
- 從小節線切段：`ffmpeg -ss <start> -t <len> -i audio.wav -af "loudnorm=I=-14:TP=-1.5,afade=t=in:d=0.08,afade=t=out:st=<len-2>:d=2" -c:a aac -b:a 192k assets/clip.m4a`，讓第 0 秒落在拍點上（offset = 0）。
- 所有鏡頭時間用「拍」寫，換音檔只需改 BPM/offset。

## 4. 分鏡

寫 `projects/<代號>/STORYBOARD.md`：Logline、世界觀與色彩弧線、motif、主角情緒弧線、鏡頭表（拍數 · 轉場進 · 事件 · 反應 · 鏡頭運動）。
學參考片的**手法**（節奏、轉場、構圖、motif、呼應結構、笑點設計），內容與角色全部原創。

**逐鏡對照（克隆風格的核心）**：先把參考片的鏡頭清單分成段落（開場、每個賣點、謝幕…），我們的每個鏡頭都要對應到一個參考鏡頭：
plan.json 每個 shot 填 `ref_shot`（參考片鏡頭編號）、`ref_what`（那個鏡頭用了什麼手法），以及具體的 `camera`（engine 能直接用的規格：
運鏡種類、鏡頭焦段、主體佔畫面比例 fill、拍哪個部位 region、景深、起訖角度）。運鏡種類與快慢要跟參考鏡頭一致（參考是慢推，我們就慢推；
參考幾乎每鏡都在動，我們也不能有死的靜止鏡頭）。純字卡的比例、明暗比例、平均鏡頭長度要跟參考片接近（誤差 ±30%）。
寫完自己檢查：把 plan 的鏡頭和 `shot_details` 逐列對一次，不一致的要改，或在 notes 寫理由。

**高潮先設計**：plan.json 的 `peaks` 對應 analysis/peaks.json，寫清楚鋪陳、屏息、爆點（hit_s 對拍）、停住、聲音與手法（參考用的一個都不少）；
peaks 裡的鏡頭標 `hero: true`。核准前先把每個爆點那一格做到成片品質，和參考片同一格並排成 `out/check/key_<n>_vs_ref.jpg`，
放在 style_frames 最前面給使用者看；比參考片弱就繼續改，不要交出去。

**變化**：同一場景＋同一機位不超過片長 40%，高潮之間換場景或視角；鋪陳段每 1–1.5 秒畫面要有新東西，不要一個構圖停著等爆點。
要有情緒弧線（想要什麼 → 等待或阻礙 → 高潮時得到），不只是能量往上。

給使用者看分鏡並簡短說明；使用者說過「你自己決定」就直接開做。

## 5. 製作：一關一關過，不要堆到最後才審

缺陷在哪裡產生就在哪裡攔下，後面才不會一直疊在壞掉的東西上。App 會照這個順序派 agent（CLI 單獨跑時也照這個順序自己做）：

1. **企劃核准前**：plan.json 的 `required_inputs` 列出只有使用者能給的東西（歌詞文字、自家角色設計圖、產品照、Logo）。
   沒提供也沒略過就不能核准，生產中不會再卡在「缺歌詞」。
2. **導演建置**：共用素材、角色定義、分段（`build/production.json`，每段 2–5 鏡）。
3. **角色關**：先出角色設定圖（正面、表情 8+、本片會用到的姿勢 6+）→ 全新對話的審查員用人眼清單看全解析度裁切 → 不過就修，過了才開始做鏡頭。
   2D 向量角色一律用 `assets/vector_rig/`（骨架＋一體輪廓；見它的 README），不准用圓形、長方形另外拼頭、身體、手臂。
4. **分段製作＋即時審查**：多個製作 agent 平行做不同段；每段一做完，就由一個全新的審查員看那一段的每鏡 sheet、strip 與角色裁切，
   不過就退回同一個製作 agent 修（最多 3 輪）。
   hero 鏡頭可以用特製姿勢、誇張變形、衝擊格、smear、光芒、粒子、鏡頭震動；做完用 clip_strip.py `--vs` 和參考高潮逐格並排比。
   **不准用閃白或轉場蓋掉做不到的動作或該被看見的那一刻。** 動作一律看 12fps 連續影格判斷（跳格、瞬移、該動不動、僵硬整塊旋轉）。
5. **組裝**（跑 `motion_check.py` 抓黑格、片尾硬切黑、意外靜止；確認有音軌）→ **最後評審**：先做**高潮對決**（我們的高潮 vs 參考片高潮，連續影格並排），
   輸給參考片就不能交件；分數以參考片為尺（4 = 和參考片並排不顯得陽春），每項附證據、逐鏡打分；再看接縫、連戲、節奏、字幕，並核對之前每一個「已修正」。

人眼清單（每一關都用）：四肢都接在身上、有脖子、沒有接縫或雙層描邊、跟角色設定圖一致、線寬一致、沒有穿模、主體夠大、字看得清楚、
沒有色帶或閃爍、動作有預備與跟隨。看不清楚就裁切放大再看。

**修正要附證據**：每個「已修正」都寫進 fixes.json，附修改前後的全解析度裁切；審查員先核對，說修好但沒修好會原樣退回。
**needs_user**：只有使用者能提供的東西（歌詞、設計圖…）不算缺陷，寫進 `needs_user`，系統會暫停並請使用者提供或略過，不會一直重修。

輸出後回報：路徑、長度、解析度、每鏡一句話內容，並**誠實列出還沒做好或暫代的部分**。

### 歌詞字幕
使用者在 App 貼上歌詞文字（或放 `inputs/lyrics.txt` / `.lrc`），用他提供的音檔自動對時：
`python .claude/skills/video-clone/scripts/align_lyrics.py <音檔> inputs/lyrics.txt --out analysis/lyrics/subs.lrc [--start s --end s]`
（faster-whisper 的字詞時間只當量尺，文字一律用使用者貼的；輸出 .lrc 與 .json，每句附匹配度，匹配度低的句子用前後插值）。
字幕只能來自這些檔案，不自行聽寫或補寫歌詞。

## 6. 依回饋修改

使用者會用「第幾秒哪裡怪」回饋。只改對應鏡頭，重渲染那段影格（painted-animation：刪掉 `out/frames` 對應範圍再 `--frames`），重新編碼。

## 規則

- **角色**：
  - **使用者自己擁有的角色可以直接用**：使用者提供自家角色／吉祥物的設計圖（放在 inputs/），就照它製作並保持造型一致，不必換成原創。
    **設計圖就是規格**：比例、眼睛、手腳、配色照圖量（不要拿引擎內建的同名角色改），配件綁在臉的錨點上；角色關、鏡頭審查、評審都要把設計圖和畫面並排比。
  - **使用者點名要用的角色可以直接用**：自己上網找它的造型（衣服、髮型、配件、配色）照著做，不要拒絕或換成「神似原創」。
  - 使用者沒指定角色時用原創角色。
- **歌詞**：只使用使用者提供的 LRC / 歌詞文字，不自行寫出歌詞；分鏡與回報中也不要引用歌詞內容。
- **參考片**：只學風格與手法，不複製它的畫面、角色、Logo 或素材。
- **媒材**：目前只做 2D（3D 賽道暫停，見第 2 步）；不做的是生成真人實拍影像或真實人物的臉。
- **使用者自己的產品**：使用者提供產品照片時，用它重建產品（blender-product-film 的 prep_product.py）。標語與賣點只用產品上印的資訊或使用者給的資料，不自編規格或數字；其他品牌的名稱與 Logo 不放進片裡。
- 有疑問但不影響方向的細節，用合理預設先做，完成後再列出來讓使用者調。

## 擴充新風格

使用者要加風格時：複製 `styles/_TEMPLATE.md` 成 `styles/<name>.md`，填 engine（必須是 `.claude/skills/` 下已安裝的 skill；沒有的話先幫使用者找並安裝可信的開源 skill，裝前掃過腳本），填辨識特徵、製作預設、已知的坑。每次製作中踩到新坑，都回頭補進對應風格檔的「已知的坑」。
