Communitygithub.com

k8s-animate

建立一個3Blue1Brown風格的Manim影片,使用官方Kubernetes圖示解釋Kubernetes流程,可選擇加入旁白。僅由人類手動觸發——只有當使用者輸入 /k8s-animate 時才執行;絕不自行啟動。

k8s-animate 是什麼?

k8s-animate 是一個 AI 助手技能,專門為 Kubernetes 專家與開發者設計,能將 Kubernetes 流程(例如 kubeadm join)轉換為高品質的 3Blue1Brown 風格動畫解說影片。此技能基於 Manim 與 Kokoro TTS 引擎,可輸出帶旁白或靜音的 MP4 影片,適合用於教學、講座或自我學習。 主要特色包含: - 使用官方 Kubernetes 社群圖示(CC-BY-4.0),確保元件視覺正確性。 - 支援多種平台(macOS、Linux),並提供腳本自動安裝所有依賴(包含 PyTorch、系統套件)。 - 具有完整的工作流程:環境檢查、故事板協商、場景撰寫、預覽與最終渲染。 - 可選旁白(預設開啟),支援多種語音(af_heart、am_michael、am_fenrir)。 - 輸出高解析度(1080p60)MP4,並自動檢查音訊串流。 此技能要求使用者透過 /k8s-animate 命令手動觸發,因此能確保僅在明確指示下執行,避免意外渲染耗時影片。對於需要視覺化 Kubernetes 運作機制的開發者與講師來說,這是一個極具價值的工具。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wielenmaker/k8s-animate/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

建立 Kubernetes 解說影片

輸出為 MP4 格式的講座影片:圖形化、動畫化、幾乎沒有文字,也無字幕。

引數 voiceover=on|off(預設 on)。 on 會使用本地 Kokoro TTS 語音進行旁白;off 則產生無聲影片,且絕不安裝或載入 Kokoro。

引數 setup: 僅安裝,不產生影片。執行完下方「檢查環境」步驟後即停止。

兩個資料夾。 SKILL 是技能的基礎目錄(包含此檔案的資料夾)。裡面含有 .venv/、icons/、references/ 和 scripts/。OUT 是 <使用者工作目錄>/<主題>,每個影片會建立一個。場景檔案、media/ 和最終的 MP4 都放在 OUT 中,絕不放在 SKILL 裡(更新或移除技能時會刪除 SKILL)。請使用絕對路徑,不要依賴當前目錄。

此技能附帶的內容

  • icons/:官方的 Kubernetes 社群圖示(標記集合,CC-BY-4.0)。僅使用這些圖示來表示 Kubernetes 元件和資源。 絕不重新繪製、重新著色成其他東西,或將有此圖示的元件替換為通用形狀。對於沒有圖示的概念(如 CSR、憑證、封包、iptables 規則),則使用參考資料中的簡單形狀,例如 Doc 和 Packet。
  • references/node_join.py:一個完整且已通過核准的範例(kubeadm 節點加入)。請複製其風格、色板與輔助類別。
  • references/kokoro_service.py:將 Kokoro-82M 插入 manim-voiceover 的程式碼。
  • references/kit.py:共用的色板、輔助工具、Explainer 基礎場景以及 voiced(Scene)。新的場景從此檔案匯入。
  • scripts/setup.sh [voiceover=on|off] [--yes]:回報缺少的項目並列印安裝計畫(macOS、Arch、Debian/Ubuntu);只有加上 --yes 時才會安裝。
檔案元件檔案元件檔案元件
apikube-apiserverpodPodcmConfigMap
etcdetcdrsReplicaSetsecretSecret
schedkube-schedulerdeployDeploymentpvPersistentVolume
c-mkube-controller-managerstsStatefulSetpvcPersistentVolumeClaim
c-c-mcloud-controller-managerdsDaemonSetscStorageClass
kubeletkubeletjobJobnsNamespace
k-proxykube-proxycronjobCronJobsaServiceAccount
control-plane控制平面節點svcServicerole / c-roleRole / ClusterRole
node工作節點epEndpointsrb / crbRoleBinding / ClusterRoleBinding
hpaHorizontalPodAutoscaleringIngressquotaResourceQuota
crdCustomResourceDefinitionnetpolNetworkPolicylimitsLimitRange

Manim 會移除這些 SVG 內嵌的文字,而且 api、c-m、sched、kubelet、k-proxy 共用相同的齒輪圖示。務必使用 Icon(name, label) 輔助函式來標示圖示。

工作流程

1. 檢查環境

執行 bash SKILL/scripts/setup.sh voiceover=<on|off>。如果顯示 Ready.,就繼續。否則它會列出缺少的項目和安裝計畫(在該機器上首次執行時):將計畫顯示給使用者,並在安裝前徵求同意。

  • 確認後,再加上 --yes 重新執行一次。這個過程很慢(包含 torch、系統套件),所以請在背景執行或設定較長的逾時時間。
  • 如果計畫中包含 sudo 指令而你無法輸入密碼:請給使用者自行執行的指令(! bash SKILL/scripts/setup.sh voiceover=<on|off> --yes)。
  • Kokoro 是免費的、採用 Apache-2.0 授權(適合付費課程)、離線運行且品質接近商業等級;如果使用者不想使用,建議 voiceover=off。

2. 同意故事板

如果尚未提供主題,請先詢問。然後在對話中提議一個故事板,等待核准,因為渲染需要數分鐘:

  • 6 到 12 個節拍,每個節拍包含:一個 1 到 3 個字的步驟標籤、螢幕上移動的物件、一句口語句子。
  • 透過動作敘述故事:方框中的圖示、弧形上的封包、表示狀態的顏色變化。螢幕上僅有簡短的標籤。
  • 事實必須符合目前 Kubernetes 版本。如果不確定某個細節,請直接說明,不要猜測。

3. 撰寫場景

以 references/node_join.py 為模型:

  • 一個作為類別屬性的 NARRATION 字典(節拍 → 句子),每個節拍一個方法;Explainer.construct 在 with self.voice(line): 內部依序執行它們。
  • 在 OUT/<主題>.py 中撰寫,使用 from references.kit import *,繼承 Explainer,並在底部加上 <Name>Voiced = voiced(<Name>)。節拍方法為 def beat(self, i)。無聲的 <Name> 與有旁白的 <Name>Voiced 來自同一份程式碼。
  • 切勿將場景檔案命名為標準函式庫模組的名稱(例如 operator.py 會破壞 Python 的匯入)。
  • 重複使用色板(深色 #0b1220、K8s 藍 #326ce5、金色令牌、青色網路、琥珀色 NotReady、綠色 Ready)以及輔助函式 Icon、Packet、Doc、Step、Pill、send。
  • 類別要小,程式碼要精簡。
  • 以旁白中實際發音的方式拼寫術語:kubeadm → "kube admin"、etcd → "et-cee-dee"、kubectl → "kube control"。

4. 預覽,然後渲染

從 OUT 目錄執行 manim:PYTHONPATH=SKILL SKILL/.venv/bin/manim --media_dir OUT/media ...。

  1. 預覽:... -ql <主題>.py <Name>,然後用 ffmpeg 抽取約 8 幀製成一個聯絡表,查看一次。修正重疊、被裁切的標籤,以及過暗或不易閱讀的文字。
  2. 最終渲染:... -qh <主題>.py <Name>(當 voiceover=off 時),或 <Name>Voiced(當 voiceover=on 時)。將 OUT/media/videos/<主題>/1080p60/<Name>.mp4 複製到 OUT/<主題>.mp4。
  3. 如果 voiceover=on,確認 MP4 包含音訊串流(使用 ffprobe)。
  4. 完成後開啟 MP4(macOS 上使用 open;Linux 上使用 xdg-open,若無顯示器則僅列印路徑)。

回報 MP4 的絕對路徑、長度、需要注意聽的部分(不常見術語的發音),並提醒使用者圖示需要標註「Kubernetes 社群圖示,CC BY 4.0」(片尾已顯示)。語音選項:af_heart(預設)、am_michael、am_fenrir;可用 voiced(<Name>, voice="am_michael") 指定。

相關技能