IA Content Maker — 白牌影片生產機器
此技能將代理轉變為整個解說影片頻道的製作團隊:腳本、美術、角色切割與骨架、配音、動畫、音效、渲染、縮圖及字幕。所有動畫效果均以程式碼生成(逐幀渲染於 canvas);沒有任何 AI 生成的影片。
白牌: 頻道識別(色板、字體、筆觸、卡片、轉場、節奏、敘述者)透過程式碼隨機抽選一次,並儲存在 dna.json 中。兩個使用相同技能的頻道會產生不同的結果。引擎中沒有任何部分依賴特定的色板、字體或主題。
此功能適用於任何能執行終端命令的代理(Claude Code、Codex、Gemini CLI、Cursor…)。原始的完整規格位於 referencia/especificacao-original.md;此檔案記錄了經過驗證的流程以及實踐中變更的部分。如有衝突,以此檔案為準。
0. 首先:尋找或建立工作區
程式碼在一個 workspace(包含 engine/、dna.json、videos/、library/ 的資料夾)中執行。
- 搜尋現有的工作區(一個
dna.json位於engine/mv.py旁;使用者可指定位置)。 - 如果不存在:執行
bash <skill-folder>/scripts/setup.sh [folder](預設為~/ia-content-workspace)。 安裝 venv、Kokoro、faster-whisper、Playwright/Chromium、OpenCV。需要 Python ≥3.10 和 ffmpeg。 - 如果存在但技能版本較新:執行相同的
setup.sh <workspace>— 它只會更新engine/和templates/,絕不會改動dna.json、videos/或library/。
以下所有命令都在工作區內執行,使用 .venv/bin/python(此處簡稱 py)。
1. 頻道設定(僅一次)
- 詢問:頻道名稱(如果沒有,請在 DNA 抽選後建議 5 個符合其風格的名稱)、主要格式(直式或 16:9)、可用的語音(免費 Kokoro、ElevenLabs/其他,或錄製的自有語音),以及是否已有
dna.json(若有,請複製到工作區)。 - 執行
py engine/mv.py dna— 使用os.urandom的種子來抽選 DNA,解決衝突組合,驗證顏色對比度,儲存dna.json與備份,並下載字型。顯示識別卡(py engine/mv.py cartao)。使用者可以鎖定(--lock traco=indice)或重新抽選某個特徵(py engine/roll_dna.py --reroll <traco>)。切勿手動選擇特徵。 - 將名稱寫入
dna.json的channel.name。 - 無圖像模型的純程式碼美術路線:只有「Chunky rounded-square heads」這個特徵已用程式碼繪製(
engine/art/characters.py)。如果抽選到其他特徵,請鎖定--lock build=3,或按照_head/_torso/_legs模式在characters.py中實作新特徵,或使用圖像模型。 - 設定完成後,頻道的 DNA 即被凍結。每個影片只會重新抽選每個影片專屬的特徵。
2. 每個影片 — 工作流程
使用者起始命令:「做一支影片:[主題],[長度]」(或「make a video: …」)。
| # | 階段 | 命令 | 暫停並顯示給使用者? |
|---|---|---|---|
| 1 | 資料夾 + 每支影片抽選(腳本形式、鉤子、動機、縮圖佈局、重點) | py engine/mv.py novo <slug> | — |
| 2 | 腳本於 videos/<slug>/script.txt(純文字)+ 鏡頭數據(字數、場景數、角色數) | 手動撰寫 | 是:腳本 + 選擇,等待確認 |
| 3 | art.json + 新的 plates/tiles 於 engine/art/plates.py 和 tiles.py(若主題需要) | 手動撰寫 | — |
| 4 | 美術 → 切割 → 骨架 | py engine/mv.py arte <slug> | 顯示美術接觸點 |
| 5 | 語音 + 單字時間 | py engine/mv.py voz <slug> | 告知時長與 Whisper 差異 |
| 6 | video.json + shots 於 videos/<slug>/shots/01_story.js(從 templates/shots_modelo.js 開始) | 手動撰寫 | — |
| 7 | 接觸表(每 2 秒 1 幀)→ 修正 → 重複 | py engine/mv.py contato <slug> | — |
| 8 | 渲染 + 音訊 + QC | py engine/mv.py render <slug> | — |
| 9 | 縮圖 | py engine/mv.py capa <slug> | — |
| 10 | 記錄 + 交付(影片、縮圖、附主題標籤的字幕) | py engine/mv.py log <slug> | 是:已交付 |
在接觸表/靜態幀/渲染中使用 --formato paisagem 會生成 1920x1080;預設為直式 1080x1920。
要檢查特定時間點:執行 py engine/mv.py stills <slug> 0,3.2,10.5。
2.1 規模(隨時長調整)
- 字數:使用 Kokoro pt-BR 約每分鐘 ~205 字(即使速度為 1.0 也很快);使用較慢語音約 ~175 字。
- 場景數:分鐘數 × DNA 的
pace.places_per_min;直式格式下,約每 ~3 秒切換一次(約 20 個 shots/分鐘)。 ~30% 大板(含角色),其餘為特寫瓷磚(每四分一塊 4 個)。 - 主要角色:3 分鐘以下 1–2 個,以上 2–3 個。
- 章節(腳本中以
##標示):2 分鐘以下無;5 分鐘以內 3–4 個;10 分鐘以內 5–8 個。 - 渲染:使用
--partes 4(預設)。3 分鐘以上影片:4–6 個部分。
2.2 直式(Reels/TikTok/Shorts)— 通過驗證的預設
- 無開場或結尾片頭: 語音從第 0 幀開始。
video.json中不包含title和outro_plate。(16:9 使用 DNA 的片頭。) - 第 0 幀永不為空: 鉤子已在畫面上(write/number 的
t0 = sh.start - 0.4)。 - 每個 shot 都呼叫
sh.vert({ vw, vf })— 請參閱referencia/motor.md。 - 僅在直式影片中內嵌字幕(1–3 個單詞,當前朗讀的單詞突出顯示)。16:9 無字幕。
- 安全區域:重要元素不可位於畫面右側高度 50%–80% 之間(應用程式按鈕區)及底部 15%;HUD 位於左側;動機計數器位於右上角。
- 鉤子與結構:請遵循
referencia/retencao.md(已通過留存率驗證)。
3. 風格規則(不可協商)
- 扁平向量,無外框線,最多一個陰影(使用相同的深色),無漸層、無紋理、無表情符號、無頻道標誌、無真人照片。
- 顏色:僅使用色板中的 5 種顏色加上
dna.json中的 11 種程式碼顏色。在 shots 中使用ENGINE.C.<color>、ENGINE.font(px)和ENGINE.rgba(hex, alpha)— 切勿使用固定的十六進位碼或字型名稱。在程式碼美術中使用ROLE["ice"|"stone"|"pine"|"coal"|"berry"](從任何色板計算出的角色)。 - 文字僅出現在世界中的物體上(黑板、招牌、船殼、卡片、螢幕)— 當場景足以承載訊息時,切勿使用懸浮卡片。請在 plate 的空白處(
blanks)書寫。 - 任何物體靜止超過 1 秒;每個角色都應呼吸、眨眼,並配合自己的台詞表演(指、展示、聳肩、慶祝)。每間隔 DNA 的
pace.new_thing_every_s秒出現新事物。 - 連續兩個 shots 絕不使用相同場景。縮放 ≤ 1.33 倍(相對於原始像素)。
- 入場效果使用彈簧/彈跳/ puff,絕不使用簡單淡入。錯誤的想法上要打個大紅叉。
4. 美術
程式碼路線(預設,免費): plates 和 tiles 是 engine/art/plates.py 和 tiles.py 中回傳 (svg, meta) 的函式。Plates:1920x1080 世界座標,空白,中央自由地面,meta 包含 floor_y、blanks(程式碼可寫入的位置)、portals(≥ 400 px,用於轉場縮放)、anchors。Tiles:物體特寫,每四分一塊 4 個(make_art.py 組合 2x2 格並加上白色溝槽,裁剪並轉換 meta)。地圖:經緯度輪廓投影(參見 pacific_map、brazil_map)。角色:每個角色在 art.json 中有一個字典(使用色板顏色,不同角色之間膚色有所變化)。
圖像模型路線(可選): 使用 referencia/especificacao-original.md 中的 style core 生成圖片(請參閱 <art> 章節),儲存到 videos/<slug>/art/ 並使用相同的檔案名稱,在網格圖(*_grid.png)上測量矩形區域後撰寫 JSON meta,其餘管線(切割、骨架、動畫)完全相同。使用色鍵背景(綠色 #00B140,若色板包含綠色則使用洋紅色)且正面無手臂。
5. 語音
- 預設:Kokoro(
mv.py voz),語音來自 DNA 敘述者對照表,速度 1.0–1.1(絕不使用 atempo)。 - 更自然:任何現成的音訊 → 執行
py engine/mv.py voz <slug> --wav arquivo.wav(自有語音、ElevenLabs、Chatterbox…)。腳本必須是朗讀的文字;Whisper 會重新對齊所有內容。 - 減少「機關槍」效果:增加
--pausa-max 0.35 --pausa-manter 0.28。 - 如果超過 5% 的單詞未被偵測到,
voice.py會失敗 — 請重新生成語音,不要強行過關。
6. 渲染前檢查(接觸表)
在渲染前修正:空白或溢出文字的文字板;文字遮住臉部;黑色邊框;漂浮的腳;連續兩次相同場景;超過 DNA 設定的間隔 2 倍以上無新內容;第 0 幀為空;直式影片中文字被邊緣裁切;任何不符合 DNA 的內容(字型、顏色、卡片、轉場)。
渲染後,QC 會標記未規劃的 1 幀跳躍 — 逐一調查(使用 stills)。音訊:動態閘控要求語音 ≥ 15 dB 高於音樂+音效,背景音在 < 1% 的幀中高於前景;輸出 -14 LUFS,峰值 -1 dB。
7. 交付
- 影片:
videos/<slug>/<slug>_vertical.mp4(或 16:9 的<slug>.mp4)以及縮圖。 - 準備好的字幕:第一行 = 鉤子;2–3 句包含主題關鍵詞的句子(搜尋會讀取字幕);問題式號召留言;最多 5 個相關主題標籤(Instagram 有限制)。
- 提醒使用者關於簡化的事實或故事的大眾版本。
mv.py log <slug>— 每支影片的抽選會避免重複過去 5 支影片的形式/鉤子/動機/縮圖。
8. 引擎隨每支影片持續改進
遇到錯誤或限制?請在 engine/ 中修正(絕不僅在單一影片的檔案中),並將教訓記錄在技能資料夾的 referencia/licoes.md 中。在大型修補前請備份 shots。長時間渲染:分成可重做的部分。
參考資料
referencia/motor.md— shots 的 API(S、sh.*、角色、姿勢、直式鏡頭)。referencia/retencao.md— 鉤子結構、結尾號召、節奏。referencia/licoes.md— 所有曾出錯及解決方式的記錄。referencia/especificacao-original.md— 完整規格(DNA 特徵、骨架、動畫、音效)。workspace/exemplos/— 兩個完整影片範例:el-nino(直式,神話 vs 現實)和primeiro-cartao(16:9,按時間順序的故事)。若要研究或重建:複製到videos/並執行mv.py arte+mv.py contato(words.js已準備就緒)。