Communitygithub.com

jjietay/kaleidoscope

製作一部附旁白、軟質 3D 黏土風格的學習解說影片 (MP4),並由代理先檢查腳本後再製作語音。適合使用者要求影片、解說、動畫或概念視覺導覽時使用。

kaleidoscope 是什麼?

這項技能可讓 AI 代理從對話內容中獲取情境,自動製作一部以學習為導向的解說影片。它採用統一的軟質 3D 黏土視覺風格,並搭配一位沉默的吉祥物來執行動作,同時可選擇性地將數學圖表(如曲線、分佈)以 Manim 2D 動畫呈現。技能支援 Claude Code、Cursor、Codex 等平台,其工作流程包含:先向使用者詢問影片風格、目標觀眾、檢查點與音樂偏好,接著代理自行編寫腳本、故事板及場景程式碼,最後透過 `make look`、`make build` 和 `make final` 等命令進行迭代式檢查與渲染。嚴格規範包括:不編造假訊息、畫面元件不得重疊、字幕每行最多 42 字元、以及每次編輯後必須透過「近幀」與「移動部件」檢查才能進入下一階段。整體流程可設為一氣呵成,也可在使用者指定的檢查點(如故事板完成後或第一版畫面出現後)暫停以尋求批准。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jjietay/kaleidoscope/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

解說影片

您製作一部能幫助使用者學習概念的影片。您有一個全新工具無法比擬的優勢:您了解這段對話與這個專案。請善用這項知識。

引擎位於 ~/.claude/skills/kaleidoscope/engine/。在本檔案中,make 代表:

node ~/.claude/skills/kaleidoscope/engine/make.mjs <command> <project-dir>

步驟 0:先詢問(每次技能啟動時都需執行)

無論使用者是輸入 /kaleidoscope 還是以文字要求影片,您的第一件事就是使用 AskUserQuestion 提出下列問題,並附上可點選的選項。如果使用者的訊息或這段對話已回答了某個問題(例如「以新聞片風格」回答了「風格」,而「搭配低保真音樂」回答了「音樂」),則省略該問題。將推薦選項放在第一個並標記為「(推薦)」。在一個呼叫中提出所有四個問題(該工具最多接受 4 個)。如果主題本身不明確且沒有任何問題可省略,則先在單獨的呼叫中詢問主題。

問題標題選項(第一個為預設值)
影片應使用哪種風格?風格黏土 3D:一種軟質黏土風格,由沉默的吉祥物負責執行工作 · 經典 2D,混合:每個部分使用不同的 2D 風格 · 經典 2D,單一風格:使用者指定名稱(新聞片、白板……)
影片的目標觀眾與長度?觀眾考試複習,標準:包含講義記號、計算數字、考試陷阱,5 到 6 分鐘 · 考試複習,深入:同上,8 到 9 分鐘,包含推導的每一步 · 初學者,簡短:先講直覺,符號較少,2 到 4 分鐘 · (其他:使用者指定觀眾與長度,例如「專家複習,簡短」)
我應何時與您確認?檢查點一次性完成:帶著完成的影片回來 · 故事板完成後:展示計畫並等待批准 · 第一版畫面後:展示第一個畫面並等待
哪種音樂?音樂平靜 (current):柔和的鋪底音色,無節拍 · 低保真 (lofi):輕節拍,更有活力 · 無

當對話內容暗示某個選項時(例如下週有考試:考試複習,深入),請將推薦選項放在第一位。如果訊息只回答了觀眾問題的一半(例如「為了我的考試」),請保留該問題,並僅提供與該半部相符的選項。觀眾類型包括考試複習、初學者和專家複習(快速且密集);長度包括簡短 (2 到 4 分鐘)、標準 (5 到 6 分鐘) 和深入 (8 到 9 分鐘)。將答案寫入步驟 4 的 video.json 檔案:"_look" (clay 或 classic)、"_brief": { "viewer": ..., "length": ..., "checkpoint": ..., "style": ... } 以及 "_render": { "music": "current" | "lofi" | false }。後續每個步驟及重建作業都會從此處讀取這些設定,不會再次詢問。如果使用者忽略問題,則使用每個問題的第一個選項。

一次性完成,除非使用者選擇了檢查點

步驟 0 之後,不間斷地執行下列每個步驟,僅帶著完成且檢查過的影片回來。不要問「我可以繼續嗎?」,不要展示草稿,不要在步驟之間等待。以下每個檢查都由您自己執行並採取行動。僅有的停止點是使用者選擇的檢查點:「故事板完成後」在步驟 7 之後停止(展示故事板及腳本代理的判定,然後等待),而「第一版畫面後」則在步驟 9 的第一次 make look 時停止(展示其影像,然後等待)。

使用者想要的風格(請在步驟 6 之前閱讀)

黏土用於動作,Manim 用於繪圖,且每部影片都有吉祥物。請閱讀 styles/clay.md。為了保持影片間的一致性,使用者選擇了黏土風格而非舊的風格混合。2D 風格是選擇性的經典風格;請參閱下方段落。

  • 不要強迫將繪圖放入黏土中(使用者要求)。 當 2D Manim 圖像比黏土更能幫助觀衆理解時(例如曲線、分佈、輪廓、投影或平面中的其他幾何圖形),請將該部分製作成 Manim 部分,使用 Manim 的深色背景 (styles/math-manim.md)。切勿建立複製數學曲線的黏土模型:使用者曾要求移除這些模型。執行動作的物體以及吉祥物的體力工作則保留在黏土中。影片可以從黏土部分切換到 Manim 部分再切換回來,相同的事物使用相同的顏色。

  • 一種風格,多個部分。 影片分為約 15 到 40 秒的部分(鉤子、每個想法、您的案例、結尾)。每個部分都有自己的純色背景、攝影機和場景。相鄰的兩個部分絕不共用背景。

  • 吉祥物負責執行工作。 他保持沉默,沒有唇形同步,旁白是畫外音。他走路、拉、推、搬運並用自己的手關閉東西,因此腳本中的力量是觀衆看到他做的事情。使用者在一個他只能站著觀看的影片後提出了這項要求。他預設保持面無表情,而 make check 會在他停留在一處時發出警告。

  • 事物必須連接。 彈簧必須碰到牆壁,插針必須碰觸地圖,手必須碰觸它握持的東西。使用者曾發現一個彈簧在通過所有檢查後仍未碰到牆壁。make bake 會測量 models.js (JOINS) 中的每個連接點,因此請在此處新增新的連接點,並在靜止畫面中檢查接觸。

  • 僅使用我們自己的模型。 使用 styles/library/clay 中的工具包。切勿下載模型。如果影片需要新物體,請以相同風格將其新增到工具包中。

  • 每個部分是一個連續鏡頭。 在部分內部沒有剪輯或新幻燈片:物體隨著語音說話而到達、移動和連接,而攝影機則緩慢移動。一個部分結束時處於下一個部分開始的狀態,或者在下一個部分的背景中進行擦拭轉場。

  • 圖像負責解說;文字僅用於命名。 文字保持平面且清晰,以 HTML 覆蓋在 3D 畫面上。每幀:一個標題欄(小寫大寫字母,表示部分和來源)、最多 8 個字的標題、幾個 1 到 4 個字的標籤(帶有細指引線),以及底部最多一行字幕。絕對不能有一列句子、項目符號列表或顏色圖例。 螢幕上最多約 15 個字。

  • 公式要演繹語音(使用者要求)。 固定的公式並不比閱讀筆記好。使用 eqn() 建立每個公式:項次在說出時到達,在語音移動它們時移動,在說「消除」時擊打和爆裂,並僅在命名重要事物時彈跳。make look 會對靜止不動的公式以及螢幕上沒有消除動作的「消除」句子報錯。請參閱 styles/clay.md。

  • 物理運動。 事物像物體一樣移動:手臂伸展、球落下並彈跳、方塊掉落並穩定、脈衝傳播。沒有靜態方塊的累積。

  • 相同物體在每部影片中保持相同顏色(機器人始終為橘色,地圖始終為黃色)。

如果故事板違反上述任何一點,請在編寫程式碼之前修改故事板。

嚴格規則

  • 在此處,即主要對話中進行思考。 您自行編寫腳本、故事板和場景,因為上下文在此處。切勿將這些步驟交給子代理:子代理從沒有上下文開始。步驟 7 中的腳本代理是唯一的例外,且它是有意從空白狀態開始的。
  • 切勿倉促完成核心解說。 使用者從這些影片中學習。請遵守 reference/script.md 中的節奏規則,並修正每個節奏警告。
  • 切勿捏造事實。 每個數字、公式和主張都來自您已檢查過的來源:使用者的程式碼、資料表、規格書、論文、文件。將它們列在 storyboard.md 中。回報任何您無法檢查的內容。
  • 「您的案例」是可選的。 僅當此對話或專案確實包含相關範例時(例如使用者遇到的錯誤、修復、測量到的數字)才加入。切勿憑空捏造。
  • 無重疊。 任何視覺元素都不得覆蓋另一個元素:文字覆蓋文字、文字覆蓋圖形、或圖形隱藏另一個圖形。每個標籤、公式、箭頭和物體都應有各自的空間。check 會對重疊的文字發出警告,而 review 會將每個測量到的重疊寫入 overlaps.md。擁擠與否由使用者判斷,因此請以全尺寸檢視影格來檢查。ID 傳遞有幫助:make look 會添加一張顯示最小間隙的圖像,並對間距小於 12 像素的文字與其他物體、文字位於圖畫上、文字對比度低以及被其他物體隱藏的模型發出警告。在 make final 之前修正每個重疊。
  • 字幕每行只顯示一行。 每個提示最多 42 個字元,且同一時間不會顯示兩個提示,因此播放器永遠不會顯示兩行。引擎會自動處理此問題;verify 會回報違反此規則的提示。請勿修改 make.mjs 中的 SUB_MAX 來讓提示符合規則。
  • 閉環(使用者要求,引擎強制執行)。 每次編輯後:執行 make look,閱讀它列出的所有圖像,修正您看到的問題,然後再次檢視。只有這樣才能進行建置。切勿盲目編輯和建置,因為建置耗時,而檢視只需幾秒鐘。每張圖像的右上角都有一個檢查碼,只有所有圖像的檢查碼按順序正確時,閘門才會開啟:
    1. 編輯。如果您更改了 script.md,請執行 make voice。如果影片包含 Manim 部分且您更改了 manim_scenes.py 或語音,請執行 make manim:make look 會繪製 Manim 影格,但不會生成它們。
    2. make look <dir>:它會測量每個更改場景的每一幀,並繪製其近幀和移動部件。全部閱讀。然後執行 make look <dir> --ok <digits>。缺少此步驟則 make build 會停止。
    3. make build <dir>。遇到任何碰撞時會停止。
    4. 閱讀 build/review/moving.md 中的所有片段。然後執行 make look <dir> --moving-ok <digits>。
    5. make final <dir>。如果原始碼在檢視或建置之後發生變更,或者有未解決的碰撞或重疊,則會停止。 將每個步驟作為單獨命令執行,在第一個失敗時停止,並確認編輯已套用。
  • 每位讀者都檢查近幀和移動部件。 任何判斷影片的代理或會話都會讀取每個編輯部分的近幀,以及每個移動事物(吉祥物和物體)在其整個移動過程中的所有影格。僅取樣影片不算數:曾有手掌在取樣影格之間穿過了桌子。
  • 新缺陷需要防護措施。 當使用者發現缺陷時,首先將其添加到 reference/faults.md 和 engine/test/selftest.mjs,並確認測試會因此失敗。然後修正影片。請不要只修正影片。在每次更改檢查後執行 make selftest。

使用者要求的內容(請保留這些)

每項都是經由聽覺要求或選擇的。引擎會自動處理大部分項目。

主題內容自動?
語音Chatterbox 內建語音,通過 engine/tts/slow-reference.wav 減速至約每分鐘 160 字;每個段落一口氣讀完,以保持語調連貫是
停頓每個句號正好 0.6 秒,每個逗號最多 0.3 秒,根據腳本中的標點符號設定是;若無法放置停頓則 voice 發出警告
失敗錄音詞語與腳本不符的部分(Whisper 檢查)會使用新種子重新錄製,最多 3 次;保留最佳錄音是;若仍然錯誤則發出警告
快速片段語速超過影片正常速度 1.3 倍的子句(符號詞彙計為雙倍)會重新錄製;使用者發現「lambda v is v, scaled by lambda」太快是;發出「fast」警告:應將其放入自己的短句中並加上 [pause]
負數讀作「負」,從不讀作「減」voice 會以錯誤停止
重複詞彙「one one」應加上逗號變成「one, one」,否則語音會含糊不清是
寫作連貫的段落;[pause] 僅用於一個想法結束或動畫播放時。已拒絕:每個句子後停頓、斷斷續續的句子、快速的語音、拉伸(悶聲)的語音、Kokoro由您決定,請參閱 reference/script.md
音樂可聽見、穩定,約比語音低 13 dB (musicVolume 0.37;使用者從 0.26 提高了 3 dB),溫和的閃避;兩首核准曲目,current(預設)和 lofi。已拒絕:大聲-小聲的抽吸感、音樂太小聽不見、其他 4 首曲目是;您選擇曲目,請參閱 SOUND.md
音效engine/sfx.mjs 中的工具包,經聽覺核准;飛入嗖聲比其他重音低 4 dB(使用者覺得有點太響)。新影片開啟 (_render.sfx: true),舊影片關閉您在提示處加入 s.sfx;引擎負責混音
音訊48 kHz 立體聲是;verify 會檢查
字幕軟字幕,從不燒錄進去;使用者的 mpv 以小字型顯示 (sub-scale=0.7)是
單行字幕每個提示一行,最多 42 個字元,同一時間沒有兩個提示。使用者在 ROS 2 系列的第 1 部影片中看到兩行是;verify 會回報違規提示
無重疊沒有文字或圖形覆蓋另一個check 對文字發出警告,其餘部分由 overlaps.md 及您的影格檢查清單負責
風格統一的 3D 黏土風格,搭配沉默的吉祥物,以及我們自己的模型;曲線和繪圖使用深色背景的 Manim 部分(使用者要求:不要強迫將繪圖放入黏土中)。已拒絕:下載的模型、全暗色影片、文字欄、顏色圖例、建置式幻燈片make check 對既非黏土也非 Manim 的場景或沒有吉祥物的影片報錯;其餘由您決定,請參閱「使用者想要的風格」
數學五個公式步驟(需求、圖畫、公式、意義、測試)。曲線、繪圖或逐步變化的公式使用 Manim:2D 使用 manim(),或 3D 圖像使用 manim({ threeD: true }),不使用手繪畫布make check 對孤立的公式發出警告;其餘由您決定,請參閱 reference/script.md 和 styles/math-manim.md
測驗故事板中沒有測驗由您決定
觀看mpv <dir>/out/<slug>.mp4將其放入報告中

機器設定

在步驟 1 之前執行 make config。它會列印此機器的設定,這些設定由安裝程式或 /setup-kaleidoscope 寫入。

voice 行指定語音名稱:Chatterbox(自然,在 NVIDIA GPU 或 Apple Silicon 上效果最佳)或 Kokoro(在 CPU 上小巧快速,約每分鐘 150 字)。專案可以在 video.json 中選擇自己的語音:"_tts": {"engine": "kokoro"}。若無 GPU,Chrome 會使用 SwiftShader 繪製影格,而 ffmpeg 則使用 libx264 進行編碼。

...[已截斷]

相關技能