解說影片
您製作一部能幫助使用者學習概念的影片。您有一個全新工具無法比擬的優勢:您了解這段對話與這個專案。請善用這項知識。
引擎位於 ~/.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,閱讀它列出的所有圖像,修正您看到的問題,然後再次檢視。只有這樣才能進行建置。切勿盲目編輯和建置,因為建置耗時,而檢視只需幾秒鐘。每張圖像的右上角都有一個檢查碼,只有所有圖像的檢查碼按順序正確時,閘門才會開啟:- 編輯。如果您更改了
script.md,請執行make voice。如果影片包含 Manim 部分且您更改了manim_scenes.py或語音,請執行make manim:make look會繪製 Manim 影格,但不會生成它們。 make look <dir>:它會測量每個更改場景的每一幀,並繪製其近幀和移動部件。全部閱讀。然後執行make look <dir> --ok <digits>。缺少此步驟則make build會停止。make build <dir>。遇到任何碰撞時會停止。- 閱讀
build/review/moving.md中的所有片段。然後執行make look <dir> --moving-ok <digits>。 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 進行編碼。
...[已截斷]