Communitygithub.com

GraySilver/explainloop

將文章、網址、貼上文字或指定章節轉換為 1–3 個簡短、無聲且具解釋性的 GIF,並保留可編輯的場景原始碼。當使用者想要動畫化的文章插圖或文字轉 GIF 的視覺說明時使用;不適用於靜態圖表或有旁白的影片。

explainloop 是什麼?

ExplainLoop 是一個專為 AI 代理與開發工具設計的技能,能將文字內容(文章、網址、貼上文字或特定章節)轉換為 1–3 個簡短、無聲且具解釋性的 GIF 動畫。它保留原始來源的事實狀態,並遵循使用者指定的章節、數量、風格、尺寸與輸出位置。此技能支援多種輸出比例(16:9、4:3、1:1、9:16),並產生可編輯的 `.scene.mjs` 場景原始碼,確保每次渲染結果一致。ExplainLoop 特別強調視覺品質與設計原創性:它會根據內容規劃、場景食譜與視覺品質指南進行設計,並使用內建元件庫(如人物、訊息、文件、時間軸)組合場景,而不是直接複製範本。技能會先建立證據地圖,確保每個 GIF 都基於真實的來源段落,然後再進行佈局與動畫設計。對於批次處理,它會檢查場景中繼資料的一致性,並在最終渲染前進行預覽與修正。此技能專為需要快速、高品質文字轉 GIF 視覺說明的開發者與技術寫作者設計,支援 Claude Code、Cursor 等 AI 代理工具,並可與其他技能或工作流程整合。

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

在你喜歡的 AI 中提問

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

說明文件

explainloop 是做什麼的?

建立原創、可讀的動畫,解釋所提供文字中的主張、順序、比較或變化。保留來源的事實狀態以及使用者選擇的章節、數量、樣式、尺寸和目的地。視覺參考是設計詞彙,而不是逐場景複製的範本。

輸入與選擇

  1. 閱讀完整的提供文字。對於網址,使用可用的瀏覽工具;如果無法擷取內容,請要求使用者提供文字。對於本機 Markdown/TXT,請讀取檔案及其相鄰標題;scripts/outline.mjs --input /absolute/path/article.md [--section "Heading"] 會回報標題範圍、字元數,以及展開的內部大綱是否有用。請勿從標題推斷文章內容。
  2. 如果使用者指定了標題、段落、引文或範圍,則僅選取該段落作為 GIF 主題;僅使用周圍文字來解析上下文。否則,請找出最多三個值得動畫化的不同關係。優先選擇可觀察的事件、前後對比、因果關係、比較或數值變化,而非口號。製作 1–3 個 GIF;絕不要用薄弱的主題來湊數。
  3. 為每個 GIF 建立一個精簡的證據地圖:確切的來源段落或位置、主張狀態(事實、測量值、報告結果、提議或意見)、焦點物件、視覺上改變了什麼,以及一句結論。保留單位和限定詞。僅在該變化能教會靜止畫面無法說明的內容時才選擇 GIF。請勿捏造資料、產品 UI、引文或結果。同一主題的多個長寬比版本必須保留此地圖。
  4. 當選取的內容在移除標記後超過 6000 個字元 或 有超過五個頂層章節時,請在選擇最強的 1–3 個 GIF 之前建立展開的內部主題大綱。繼續自動執行;僅在閱讀來源後請求的段落或重要主張仍然不明確時才提問。特定選取的章節會單獨測量其內容。

在選擇主題或處理不確定性時,請閱讀 content-planning.md。此技能不需要完整的旁白影片腳本或語音核准。

視覺決策

  • 在組合場景之前,請閱讀 scene-recipes.md 和 visual-quality.md。建立支援的關係、焦點物件、閱讀順序、類型階層、小工具狀態和動作節拍。先設計完整的結果畫面,然後讓先前的動作引導至該畫面。對於新場景,先在內部比較兩個材料上不同的縮圖構圖,然後選擇能較少競爭細節地解釋來源的那一個。在選擇特定主題的視覺系列時,請閱讀 design-directions.md;在選擇畫布處理方式時,請閱讀 backgrounds.md。樣式預設提供權杖;場景仍然需要原創的佈局。不要將每個主題都放在相同的 kit.page 頁首/頁身/頁尾排列中。
  • 從使用者的視覺指示開始。對於產生多個 GIF 或長寬比的單一請求,在編寫場景之前選擇一個批次樣式:從 styles.md 中選擇單一預設,以及共用的背景、色板、字型角色、線條/圓角處理和動作特徵。該批次中的每個場景都使用相同的 meta.style 和共用的核心 styleOverrides;變換構圖和語義物件來解釋每個主題。不要為每個 GIF 選擇新的預設。僅在使用者明確要求混合樣式時才使用不同樣式。
  • 當排版承載場景時,請閱讀 font-catalog.md。比較兩個已安裝的字型配對與段落,並在場景中記錄所選的角色。在渲染前驗證實際解析的 CJK 字型和字形;不要默默地替換缺少的顯示字型。目錄也列出了可選的獨立安裝的開放字型。此技能不會下載或捆綁字型。
  • 使用 components.md 中的元件組合具體物件:人物、訊息、文件、任務、時間軸、測量值及其關係。當解釋需要 UI 細節時,使用更豐富的電子郵件、日曆或訊息小工具;不要發明真實產品的介面。使用打包的 Lucide 子集作為常見的小圖示。在新增任何外部藝術作品之前,請查閱 sources-and-licenses.md。
  • 預設使用原始向量物件。僅在無法使用向量元件清楚解釋具體主題時,才使用提供的圖像、經過適當授權的插圖或生成的點陣圖藝術作品。保持圖像與所選樣式一致,並記錄其來源。不要默默地用通用圖示取代特定的真實主題。
  • 每個可見的動作都應回答改變了什麼、物件去了哪裡,或結果如何產生。當相關部分作為一個整體移動時,從一個動作進度中揭示它們;讓重要資訊以謹慎的順序安頓下來,並在退出時反轉該順序。在為焦點物件和文字保留清晰區域之後,才從 backgrounds.md 中選擇十種畫布處理方式之一;使其幾何形狀與文章的關係匹配,並使用目錄的拒絕條件。保持文字在文章寬度下可讀。沒有來源資料就不要顯示圖表值。避免長時間的靜止停留和突然的首尾影格跳躍,因為它們會讓循環感覺斷裂。在審查類似缺陷時,請查閱 failure-cases.md。

場景原始碼與渲染

預設交付項目是 1600×900、16:9、30 fps、4–7 秒的無聲 GIF。使用者偏好會覆蓋這些預設值。其他內建輸出設定檔是 4:3(1200×900)、1:1(1200×1200)和 9:16(900×1600);也接受自訂像素尺寸。僅輸出請求的長寬比;如果沒有指定,則使用 16:9。不要為了減小檔案大小而默默地降低解析度或 fps。

撰寫一個導出 meta 和 draw(t, kit) 的 .scene.mjs 檔案;meta.width/height 是邏輯設計畫布,而 --output-size 設定點陣圖像素。draw 接收經過的秒數並從 kit.page(...) 或 kit.svg(...) 回傳完整的 SVG。將證據地圖放在 meta.sourceRefs 中。來源必須是確定性的:相同的場景和時間,產生相同的 SVG。請參閱 scene-format.md、assets/examples/message-filter.scene.mjs 和 assets/examples/multi-ratio/。

對於單一請求中的多個長寬比,為每個長寬比建立一個單獨的可編輯場景,並渲染所有請求的版本。為方形或直式空間重新組合佈局;切勿拉伸、裁剪或黑邊處理橫向場景作為最終結果。螢幕文案可能會為較窄的畫面而縮短,同時保留相同的證據、數字、主張狀態和要點。保持動畫的因果順序在不同版本之間一致。

除非使用者選擇其他目的地,否則將 <article-slug>-01.gif 和 <article-slug>-01.scene.mjs(以及連續的主題編號)儲存在目前工作目錄下的 generate/images/ 中,適用於單一的 16:9 輸出。對於多長寬比的請求,在兩個副檔名之前附加 -16x9、-4x3、-1x1 或 -9x16;對於自訂長寬比,使用 -WIDTHxHEIGHT。將工作影格保留在暫存目錄中。場景原始碼是可編輯的交付項目;不要將生成的 PNG 影格留在其旁邊。

從載入的技能路徑解析此技能目錄為 SKILL_ROOT。

對於兩個或更多場景的批次,首先執行 node "$SKILL_ROOT/scripts/check-batch.mjs" --scene /absolute/first.scene.mjs --scene /absolute/second.scene.mjs(為每個場景重複 --scene)。在渲染前修正任何預設或共用權杖的不匹配。這會檢查場景中繼資料。當影像感知可用時,使用相同的 --scene 參數執行 scripts/preview-batch.mjs,並比較場景本機顏色、字型、小工具細節和背景處理的實際結果影格。僅在使用者明確要求混合樣式時才跳過批次樣式檢查。

渲染並檢查每個請求的 GIF:

node "$SKILL_ROOT/scripts/render.mjs" --scene /absolute/path/to/name.scene.mjs --out /absolute/path/to/name.gif --output-size 1600x900
node "$SKILL_ROOT/scripts/inspect.mjs" /absolute/path/to/name.gif

render.mjs 需要 Node、rsvg-convert、ffmpeg 和 ffprobe;它會檢查可用性並回報缺少的工具,而不是安裝一個。請求的輸出尺寸必須與場景的邏輯畫布具有相同的長寬比,每個像素維度最多 4096。當靜態預覽有用時,使用 --poster /absolute/path/to/preview.png。

對於以品質為優先的生成,請遵循 scene-recipes.md 中的條件式預覽和修訂工作流程。如果此代理實際上可以看到影像像素,請執行 node "$SKILL_ROOT/scripts/preview.mjs" --scene /absolute/path/to/name.scene.mjs --temporal-strip [--display-width 720],檢查四個關鍵影格和八個取樣影格,並在最終渲染前修正具體的視覺缺陷。最多進行兩輪視覺修訂。如果代理無法看到影像像素,請跳過視覺審查和預覽;僅出於技術檢查的目的進行渲染並執行 inspect.mjs。不需要 Playwright。inspect.mjs 檢查尺寸、影格數、持續時間、完整解碼、重複影格和最長的確切靜態執行;它無法判斷視覺潤飾。

交付

連結每個 GIF 及其場景原始碼。說明它說明了哪個來源段落、任何重要的推論、所選樣式,以及實際尺寸/fps/持續時間/檔案大小。如果指定了輸入章節,請確認每個場景都來自該章節。除非實際完成,否則請勿聲稱已渲染輸出或進行了視覺審查;當視覺審查不可用時,請明確說明。

此技能適用於簡短的無聲 GIF。對於單一靜止的架構圖像,請使用靜態圖表工作流程;對於有旁白的 MP4,請使用影片工作流程。

相關技能