Communitygithub.com

husniadil/dalang

Dalang — 將任何主題變成完整的動畫影片(旁白、免費本地 AI 語音、音樂、音效、HyperFrames 視覺效果):腳本 → 語音 → 逐字時間軸 → 視覺效果,每個階段由代理自行把關。支援任何主題、語言與平台(Shorts、Reels、TikTok、YouTube、Instagram),風格化且忠於真實。當使用者要求從主題、想法、文章或筆記生成影片、動畫、解說或短影音時使用(「做一支關於 X 的影片」、「bikinin video tentang Z」),或倫理地借鑑參考影片風格。不適用於剪輯或為現有素材加字幕。

dalang 是什麼?

Dalang 是一個 AI 代理技能,能將任何主題轉化為完整的動畫影片,涵蓋旁白、免費本地 AI 語音、音樂、音效以及 HyperFrames 視覺效果。其工作流程嚴格遵循腳本 → 語音 → 逐字時間軸 → 視覺效果的順序,每個階段都由代理本身自主把關,無需使用者頻繁介入。該技能支援多種語言與平台(如 YouTube、TikTok、Instagram),並提供兩種操作模式:預設的 Express 模式(使用 Canvas 2D 快速產出)與精密的 Studio 模式(基於 Three.js,支援參考面板與審查)。Dalang 的核心原則是「視覺優先」與「先有文字再有畫面」,確保每個畫面變動都對應到語音的特定字詞,並透過子代理(建構者、檢查者、研究者)分工完成腳本、語音、資產、品質檢查與最終渲染,主代理負責協調而非親力親為。此技能特別適合用於生成說明影片、動畫短片或任何主題的視覺化解說,且內建緊湊的 Token 使用策略與自主模式,可在使用者僅提供主題後自動完成整部影片。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/husniadil/sandalkuilang-dalang/tree/HEAD

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Dalang — 從主題到影片

模式與風格,在簡報(Brief)中詢問,並在其後鎖定(references/looks.md)。模式:Express(預設;在 Canvas 2D 中進行 2.5D 製作,請見 references/express.md)或 Studio(精準製作:three.js、程式碼優先的英雄鏡頭、參考面板、基準測試、審查)。風格:等角系列(主要為 isometric-world,另有 cutaway、blueprint)或 object-studio(在淺色背景上展示單一主體的模型)。3D 風格不會自動將影片切換至 Studio 模式。在第 6 步開始後更改風格:請停止所有建構者,重寫 SPEC.md,並在一則訊息中重新啟動所有組;旁白與語音則保持不變。

原則

第 7 點僅適用於 Studio 模式;其餘原則在兩種模式下皆適用。

  1. 視覺論文優先(references/looks.md):風格的編號規則決定每個畫面與品質控制。object-studio:淺色攝影棚、一個重點色、主體佔據畫面 60–70%、單一輸入機器、真實樂器、固定鏡頭。
  2. 文字優先,畫面最後:腳本通過 → 語音 → 每個字詞都標記時間 → 視覺效果。
  3. 螢幕上的每個變化都對應到一個字詞,依據時間數據。
  4. 主體在每個鏡頭中都必須有動作;僅有相機對著靜止畫面的鏡頭只是幻燈片。
  5. 測量,不要猜測:每個報告的數字都必須來自紀錄檔或腳本。
  6. 所有問題一次問完,不中斷使用者。 所有問題都在第 1 步提出;之後不再等待使用者。當檢查通過後,自行通過 4 個關卡,用一行話說明,然後直接執行到完成影片。後續的更改視為新一輪。在最後一關之前(第 3 關的風格幀與鉤子範例除外)不進行最終品質的渲染。
  7. 風格化,忠於真實。 每部影片使用一種風格;不使用現成素材、照片級渲染、生成的影像或片段。零件、比例、規模和行為必須符合真實參考(references/visual-direction.md §1)。
  8. 頂級工作室,絕不誇張:風格幀、打磨、審查評分表。草稿以 10 fps 渲染;最終版本以 --quality high --fps <brief fps> 渲染,並通過所有檢查。
  9. 預設免費。 僅在使用者要求時才使用付費或計量服務(ElevenLabs、HeyGen),並標註「付費」。偏好使用可用於商業用途的許可證;若非如此則需說明。

通用目的。 任何主題、語言、平台。切勿開啟另一個 video/<slug>/ 資料夾;除非使用者選用系列套件(references/brief.md 中的「Series kit」),否則不保留任何內容。engine/three/ 是一個工具箱,而非限制:如果某個主體它沒有,則根據其自身法則建模,或在不需要 3D 的風格中呈現。

語言。 使用使用者的語言聊天。每個 AskUserQuestion 都以英文提出。 切勿從姓名推斷語言。

快速工作,節省 Token

  • 一部影片 = 一個對話階段;狀態儲存在檔案中。恢復:node <skill-dir>/scripts/state.mjs next、BRIEF.md 以及 PRODUCTION.md 的結尾。

  • 子代理類型,當列出時:建構者(修正輪次、腳本、語音)使用 dalang-builder,每個評判使用 dalang-checker,事實查核使用 dalang-research;否則使用通用類型。

  • 技能版本:首先說出 next 的 DALANG v…;切勿使用 git。

  • 懶惰讀取:每個步驟,只讀取 state.mjs next --print 印出的內容,一次全部讀取(第 0 步也會印出第 1 步的內容;第一次執行 approve <n> 會印出下一步的內容:沒有 next 回合,不提前使用 --step);僅在需要時才「查閱」。切勿完整讀取參考文件、引擎 README 或 lessons.md,或重複讀取任何章節;對於 /hyperframes,只讀取必要的指南。

  • 輸出簡潔:使用 --json 過濾;切勿印出 words.json、*.response.json 或完整日誌;背景輸出以位元組為單位(tail -c 1500)。場景變更使用 Edit 呼叫,切勿使用 sed -i 或寫入整個檔案。

  • 場景程式碼保留在建構者子代理中。 主代理切勿寫入或讀取 src/ 或 assets/*.js(生成的資料除外;風格幀則交給建構者)。試播、每個群組、組裝以及每個修正輪次都交給一個新的建構者(上次的報告 + 路徑,其預算在 look-build.md / express.md 中)。審查者永遠不是建構者。

  • 影像保留在子代理中。 主代理切勿 Read 靜止畫面、條狀圖、工作表、範圍圖或風格幀:子代理取得路徑和 next 的「For the subagent」命令,然後回傳文字判決。例外:style-frames/src/ 的作者在每次首次寫入前,會打開每個 review/refs-board-<frame>.jpg 一次。

  • 每項工作指定模型,從不詢問:state.mjs next 會印出每個步驟的子代理工作及其模型和努力程度(state.mjs models:列出所有模型,以及 top/mid/light 的含義)。

  • 升級,絕不重複。 失敗的工作(紅色、無法使用、留下 P0 問題)會交給高一級的新代理:努力程度(低 → 中 → 高),然後模型(light → mid → top);top · high 為上限:留下 P0 問題時需分類(hero-asset.md §3)。絕不降級或重複;已完成的工作絕不重新執行。≤ 3 個複製或時間修正:降一級。記錄每項設定。

  • 主代理負責協調,絕不親自執行工作。 你的回合會重新讀取對話階段(大約是子代理的 10 倍);循環(寫入 ↔ lint、拍攝 ↔ 重拍、修正 ↔ 檢查)在單一工作中執行(步驟 3–4 也是如此);每次回覆喚醒你:一個工作執行到得出判決;一起啟動的 N 個工作,在該訊息結束時加上 wait.mjs . --expect N(timeout: 600000):一個回合,一行話。執行器(express.mjs / studio.mjs <step>)是一個前景呼叫(timeout: 600000),當它在約 9 分鐘內結束時使用,絕非鏈式或輪詢。Agent 提示包含工作和路徑(≤ 15 行;它透過 next --step <n> --sub 讀取)。檢查者寫入他們的判決檔案,建構者寫入 review/reports/<job>.md;兩者都簡短回覆,絕不重新打字。state.mjs log 與步驟的命令一起使用 &&,而不是單獨的回合。

  • 緊湊:workspace.mjs init 設定自動壓縮(200K);在第 2–4 關時,說一次 /compact 是安全的。

  • 預設並行。 獨立的工作在一則訊息中啟動,每個代理在自己的檔案上工作。繁重的工作(VoxCPM、渲染、檢查、快照)單獨執行,絕不與模型工作並行;使用 while kill -0 <pid> 排隊。一起執行:預檢 ‖ 主題問題;參考 ‖ 研究任務;第 1 關之後,語音任務 ‖ 資產,但不要有場景;在第 2 關時,規劃器和音樂;第 6 步 Studio:試播,然後所有群組;Express:所有群組同時啟動,無需試播(一個乾淨的拍攝本身會透過 express.mjs after-voice 通過第 1–2 關;規劃器執行 express.mjs scaffold .);第 7 步草稿檢查,然後審查者 ‖ 小測驗 ‖ 設定 / 現實檢查;第 8 步 POST.md 在渲染期間執行。

  • 先做便宜的,再做昂貴的:在正式拍攝前使用 --sample;當只有 {} 有變動時使用 --from-response;迭代時拍攝快照;修正批次進行;QC 使用 --fps 10 --quality draft;只做一次最終渲染。

  • 使用者的要求優先:若某條規則與之抵觸,用一行話標記;切勿默默忽視。

  • 訊息簡短:說明改變了什麼、需要決定什麼、提供連結;等待時,提供下一關的時鐘時間;超過約 2 分鐘的步驟需提供預計時間。

專案檔案(video/<topic-slug>/)

使用 state.mjs log "<step> | <output> | <problems or ->" 記錄。該資料夾就是 HyperFrames 專案;從該資料夾執行命令。僅編輯 *.tpl.html;node <skill-dir>/scripts/fill_times.mjs src/index.tpl.html index.html 會重新生成 index.html(絕不手動編輯,且沒有第二個根目錄的 .html)。

步驟

步驟執行內容結束標誌讀取文件(references/)
0 設定執行 preflight.mjs,修正其報告的問題,建立專案資料夾PRODUCTION.mdbrief.md §0
1 簡報先確定主題,現在提出所有問題BRIEF.mdbrief.md §1
2 參考(可選)測量工藝,絕不抄襲reference-measurements.mdmeasure-reference.md
3 腳本執行研究、寫作、通讀任務;使用 approve 1 執行 lint 檢查第 1 關script-voice.md §3
4 語音執行一個語音任務;after-voice 進行填充,通過第 1–2 關第 2 關script-voice.md §4
5 風格建立 SPEC.md、英雄鏡頭、分鏡圖、資產、風格幀、基準測試第 3 關look-build.md §5
6 建置建構者,依據 BEATS/WORDS 的時間,音訊混音index.html,lint 檢查通過look-build.md §6
7 QC草稿、檢查、條狀圖、審查者、小測驗、修正輪次第 4 關qc.md §7
8 最終資產檢查、高品質渲染、重新檢查final.mp4、POST.md、報告qc.md §8

在每個步驟:關卡經由 state.mjs approve <n> --by agent 通過(依序執行;它會執行關卡檢查,若有錯誤則拒絕並顯示錯誤訊息;之後編輯過的關卡檔案會標記為 STALE 直到重新批准);BRIEF.md 規則規定了格式和語言;僅在獲得說話者許可後才能使用錄製或克隆的語音;頁面僅在 Claude 的內建瀏覽器中開啟,絕不使用使用者的 Chrome;在 PRODUCTION.md 中記錄每個步驟和問題;系列反饋透過 series.mjs note 傳遞,而非記憶。

自主模式

如果使用者提供主題後離開,則使用他們所說的內容,否則:Express 模式;YouTube 16:9,60–90 秒(短影音使用 9:16 比例,片長 ≤ 60 秒);使用他們的語言;object-studio(Studio 模式:isometric-world);「現代平衡」風格;一般觀眾;VoiceStudio,預設語音,依照 brief.md 第 0 步(若在第 4 步前未準備好則停止並說明)。首先在 PRODUCTION.md 中寫入「使用預設值」,記錄每個決策,完成影片。發布規則:references/qc.md 中的「使用者離開」章節(若 audio_qc.mjs 以 exit 2 狀態停留,則在交接時指名,絕不通過)。跳過安裝提議(記錄它們)。切勿編輯已安裝的技能。

當問題發生時

執行 grep -n -i '<word>' <skill-dir>/references/lessons.md。

相關技能