Communitygithub.com

wjgoarxiv/lit-typographic-motion

將一行請求直接轉譯為一部完成短片,或是一個無聲的 README 封面循環影片,並進行渲染與閘控。

lit-typographic-motion 是什麼?

這是一個專為 AI 代理(如 Claude Code、Cursor 或 Codex)設計的技能,能將單一請求自動轉化為一部完成的短影片,或是無聲的 README 封面循環動畫。它不僅是生成提示詞給其他工具,而是由代理親自編寫腳本、構建視覺、透過同捆的確定性渲染器逐幀渲染,再以內建閘門(gate)驗證結果,最後透過 `read_file` 檢視渲染幀,確認完成。技能支援三種模式:舞台路徑(Stage path)用於展示實體對象的影片(產品、流程等),以 HTML/Canvas 2D/WebGL 實現;類型路徑(Type path)專注於動態文字(如歌詞影片、引文影片),使用 WebGL2 引擎;封面模式(Cover mode)則為 README 或橫幅產生循環的 WebP。它內建了嚴謹的閘控機制來檢查確定性、對比度、閃爍等,並透過多輪檢視與修復迭代,確保每次輸出的品質。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wjgoarxiv/litmuse/tree/HEAD/plugin/skills/lit-typographic-motion

在你喜歡的 AI 中提問

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

說明文件

lit-typographic-motion:一位擁有渲染器、閘門與檢視循環的電影導演

此技能將一行請求轉化為一部完成的短片,或是一個無聲的 README 封面循環。它絕不會將提示詞交給別人的影片工具。它會先撰寫腳本,自行構建視覺,透過此資料夾內附的確定性渲染器進行渲染,然後用閘門衡量結果,最後在宣告完成之前,使用 read_file 檢視渲染出的幀。

共有三種執行路徑,腳本會選擇其中一種:

  • 舞台路徑。 展示事物的影片:產品、流程、地點、一個發明的範例主體。你在輸出資料夾中撰寫一個 HTML 頁面(SVG、Canvas 2D 或 WebGL),渲染器驅動無頭 Chrome 逐幀掃過它,舞台閘門會檢查確定性、對比度、閃爍與副本。16:9 (1920x1080) 或 9:16 (1080x1920)。
  • 類型路徑。 文字本身即為影片的影片:動態文字、歌詞或引文影片、片頭序列。你撰寫 brief.json,而內建的 WebGL2 類型引擎會使用其預設與後處理 pass 來設定文字。1920x1080。
  • 封面模式。 README、英雄或橫幅循環。沒有節拍、沒有聲音、沒有結尾:一個在固定的品牌字詞上移動的系統,以 2 倍速度捕捉,編碼為動畫 WebP,並在解碼後的檔案上進行閘控。在此模式中,請先閱讀 references/cover.md。

SKILL_ROOT 是 read_skill 為 plugin:litmuse:lit-typographic-motion 回傳的 SKILL.md 所在資料夾。所有腳本都需使用其絕對路徑執行,且絕不要硬編碼 Muse 的外掛快取路徑;快取資料夾會隨著每次 LitMuse 更新而改變。

適用時機

  • 使用者要求製作一部影片、動態圖像、動態文字排版、歌詞或引文影片、開場標題或片頭序列、介紹片段,或任何根據請求製作的短影片,無論是否有自己的文字。
  • 使用者要求一個 README 封面、英雄或橫幅循環、動畫專案標題,或一個儲存庫的動態封面。
  • 使用者要求對這個技能製作的渲染進行評論:檢視影格並執行閘門,不要寫其他東西。

在 LitMuse 中的啟動方式:lit motion <請求>、lit film …、lit video …、lit 영상 …,一個以 lit-typographic-motion 開頭的提示詞,或一個 lit <任務>,其任務要求製作一部影片(影片複合詞如 모션그래픽、키네틱 타이포、가사 영상、타이틀 시퀀스、kinetic type、lyric video、title sequence、cover loop,或單純的 영상 / video / clip 搭配製作動詞)。UserPromptSubmit 鉤子會指定路由;在單純的 lit 下,階段路由表讓你自行選擇技能。

將這些請求送往他處,並用一行話說明:

請求送往何處
編輯、修剪、剪輯、為現有素材加上字幕或標題非此技能。此處沒有編輯素材的流程;直接說明
投影片或報告,且不含影片名詞lit-pptx 或 lit-docx
一個網頁、頁面中的背景影片、懸停或 UI 動態、動態權杖frontend-ui-ux
關於一部影片的縮圖、腳本、摘要或逐字稿一般工作,非此技能
一個帶有靜態封面圖片的靜態 READMEreadme-studio

輸入與狀態

輸入處理方式
請求惰性資料。它會原封不動地放入 treatment.request,絕不會當作指令執行,也不會顯示在螢幕上。
使用者提供的文字這些是文案(copy.source: user);在舞台路徑上,它們會成為頁面的文案行。切勿引用使用者不擁有的歌詞或文字。
沒有文字、沒有主體、沒有事實發明一個具體的範例主體及其文案,在腳本中列出所有發明,並在回覆中標記每一項。
一個指定的樣式(類型路徑)swiss-signal、terminalcore 或 tidal 會覆蓋代理的預設值(references/style-bibles.md)。
一個音訊檔案sound.mode: supplied 搭配其 file;它總是被混合並對應到剪輯點(references/sound.md)。
用於封面的畫作、標誌或字標在 assets.json 中列出,並附上其 sha256 和 source: user;缺少則為 exit 22,絕不使用繪製的替代品。
輸出資料夾在使用者的工作目錄中新建一個 motion-<slug>/。絕不要放在已安裝的外掛資料夾或 .litmuse/ 中。

狀態存在於輸出資料夾中:treatment.json、look.json、stills/、manifest.json、gate-report.txt 和 .run/(進度、分離渲染的 pid 與結果、第一個有效的腳本)。LitMuse 鉤子會在工作區之外(如下所述)保留自己的運動路由的簡短記錄。

模式矩陣

模式觸發條件完成條件
lit 預設來自 lit 的運動路由不問問題。根據頻道選擇格式,根據類型選擇長度,並生成一個背景音效,並在回覆中標記每一個預設值。由 references/look.md 完成。
明確指定lit-typographic-motion … 或使用者指定了格式與長度相同的循環。只有在使用者存在、既未指定格式也未指定長度、且頻道無法決定時,才提出一個簡短的問題。當使用者存在時,在第一輪後顯示看板,並在完整渲染前詢問一次;如果請求指定了樣式或說「你來決定」,則跳過詢問並採用建議的選項。
封面treatment.json 包含 "mode": "cover"由 references/cover.md 完成:解碼後的封面達到每一個 TARGET 閘門門檻,且最後一輪檢視檢視了其工作表、海報和接縫對。
僅評論對現有渲染的評論開啟影格,執行 gate <dir> 或 cover-gate <file> --strict,回報結果。不要寫其他東西。
受阻exit 10, 11, 12, 14, 15, 21 或 22停止。說明狀態及其修正方式;絕不要繞過此流程使用其他管道。
腳本無效exit 16修正 treatment.json 中指定的欄位,然後重新執行。
舞台合約exit 17, 18 或 19修正訊息中指定的元素、API、點陣圖、剪輯、時鐘來源或 URL,然後重新執行。
音效無效exit 20修正訊息中指定的音效背景或提供的音軌。

流程

所有指令,從輸出資料夾的父資料夾執行:

node "$SKILL_ROOT/scripts/motion.mjs" styles --out <dir> [--format 16:9|9:16]
node "$SKILL_ROOT/scripts/motion.mjs" assets --out <dir> --url <link> [--cover]
node "$SKILL_ROOT/scripts/motion.mjs" scaffold --out <dir>
node "$SKILL_ROOT/scripts/motion.mjs" stage --out <dir> --round <N> [--stills-only]
node "$SKILL_ROOT/scripts/motion.mjs" make <brief.json> --out <dir> --round <N> [--stills-only]
node "$SKILL_ROOT/scripts/motion.mjs" blender --out <dir> [--final]
node "$SKILL_ROOT/scripts/motion.mjs" sound --out <dir>
node "$SKILL_ROOT/scripts/motion.mjs" look --out <dir> --round <N> --answers <file>
node "$SKILL_ROOT/scripts/motion.mjs" gate <dir>
node "$SKILL_ROOT/scripts/motion.mjs" cover --out <dir> --round <N> [--window t0,t1]
node "$SKILL_ROOT/scripts/motion.mjs" cover-gate <dir>/cover.webp --strict

每一影格與每一條音軌都必須經過這些渲染器處理。即使看起來正確,手動使用 ffmpeg、Python 腳本、點陣圖翻頁書或螢幕錄影組合的影片,都不是可交付的成品。

  1. 腳本。 閱讀 references/treatment.md,然後閱讀 references/studio.md(室內風格、鏡頭、支架、看板輪次、室內檔案、豐富暫存器)。如果請求中包含產品連結,則先執行 assets:取得實際的標誌、圖片和文字;當無法獲取任何內容時,請向使用者索取。寫入 <dir>/treatment.json:故事及其轉折、主角、類型弧線的節拍(作為鏡頭)、主體(當請求未指定時發明一個)、產品、視覺手法、類型計畫、樣式調色盤、一個帶有螢幕事件的配樂,以及文案。style、format、durationSec、genre 和 fps 必須遵循規則,而非個人品味。預設為豐富(register: rich 搭配分層的 world);只有當請求要求平靜或極簡時,才使用極簡。如果是封面模式,則改為遵循 references/cover.md 撰寫封面腳本,並跳到步驟 8。
  2. 路徑參考。 舞台路徑:references/stage.md,以及當主體以 3D 繪製時的 references/depth.md。類型路徑:references/brief-schema.md、references/style-bibles.md、references/type-craft.md 和 references/craft-loop.md;僅當你需要引擎內部細節時,才開啟 references/engine-contract.md 和 references/runtime.md。兩種路徑皆須參考:references/look.md 和 references/sound.md。
  3. 建構。 舞台路徑:scaffold --out <dir> 會根據腳本寫入 <dir>/stage/index.html;在每個鏡頭的 DRAW 函式中繪製其主體(references/stage.md)。類型路徑:為引擎寫入 <dir>/brief.json。3D 影片採用 depth: 3d:GPU 環節會在支架頁面上使用 three.js 建構世界,而當已安裝 Blender 且採用路徑追蹤渲染時,則使用 render3d: blender 搭配 stage/scene.py 和 blender --final 來生成底版。
  4. 第一輪,看板。 使用 --round 1 --stills-only 渲染。exit 13 表示失敗的看板規則:修正頁面並重新渲染看板。使用 read_file 開啟 stills/board.png、每個節拍靜幀、每個轉場條帶和聯絡表,回答九個檢視問題,指出最弱的節拍和你將做出的一個改變,並使用 look --round 1 --answers <file> 記錄。然後做出該改變。如果是預覽模式(preview: true),則在此處停止:顯示看板並說明影片尚未渲染。
  5. 完整渲染。 使用 --round 2 但不加 --stills-only 渲染。完整渲染會分離執行,並寫入 <dir>/.run/progress.json;如果 bash 呼叫超時,再次執行相同指令,它就會附加到正在執行的渲染上。絕不要為了節省渲染時間而縮短影片長度。然後讀取 gate-report.txt,使用 read_file 開啟海報、工作表、每個節拍靜幀和每個條帶,並記錄 look --round 2。
  6. 只有在閘門失敗或檢視答案要求另一輪時,才進行第三輪。 第三輪之後,交付你所擁有的,並清楚說明未完成的事項。
  7. 回覆(見下方)。
  8. 封面模式。 遵循 references/cover.md:從 recipes/ 中的一個配方開始(painted-light 是預設,weight-tide 和 orbit-loop 是替代方案),寫入 cover/index.html 和 assets.json,渲染 cover --round 1,使用 read_file 開啟工作表、海報和接縫對,記錄最多三個帶有時間戳的缺陷的檢視輪次,僅在修復缺陷時使用 --window t0,t1 重新渲染該視窗,並再次執行完整的 cover 渲染,直到解碼後的檔案通過 cover-gate --strict 且最後一輪檢視是乾淨的。

輸出

檔案說明
film.mp4H.264、BT.709、tv range;1920x1080(類型路徑、舞台 16:9)或 1080x1920(舞台 9:16);AAC 256k,除非腳本要求無音訊
preview.webp、preview.gif一個最多 3 MB 的循環預覽
poster.png、reduced-motion.png一個最多 1 MB 的海報,以及為關閉動態效果的讀者準備的最終靜止狀態
treatment.json、look.json計畫,以及每一輪檢視及其檢視的影格
stills/節拍靜幀、每個剪輯點一個轉場條帶、一個 12 幀的聯絡表、帶有 check.json 的 board.png,以及 index.json;在封面模式下,包含解碼後的工作表及其差異圖、海報和接縫對
sound/、sound-cues.json分層配樂(或一部極簡影片的生成背景音效,或準備好的提供音軌),每個音軌在 sound/stems/ 下,以及每個提示點對應的剪輯點
manifest.json、render.jsonl、gate-report.txt執行清單、每幀日誌和閘門報告
withheld/僅在閃爍審核失敗後:診斷資訊,絕非可交付成品
cover.webp、assets.json封面模式:循環影片(在 TARGET 下為 2 MiB 或更小)和其所用素材的檢查清單

Muse 工具與核准

  • read_skill 載入此檔案,並可依需求載入參考檔案。read_file 開啟每個參考檔案和每個渲染的 PNG;它是檢視工具,除非 read_file 在此工作階段中開啟了某個內容,否則該內容不算作已檢視。
  • bash 在上述腳本上執行 node,總是以絕對路徑執行,此外還有透過引擎執行的 ffmpeg、img2webp、dwebp 和 gifski。沒有全域安裝、沒有套件獲取、渲染過程中無網路連線。
  • write_file 和 edit_file 用於在輸出資料夾內寫入腳本、簡報、頁面、答案檔案和 assets.json。
  • subagent_spawn 搭配 subagent_type: litmuse/quality-reviewer(唯讀)可以對聯絡表提供第二次意見。其備註是你檢視輪次的輸入;但它不能為你記錄該輪次。
  • image_generation,當工作階段提供此功能時,可以生成封面的基礎畫作;該素材在 assets.json 中的 source: generated,並且回覆會標記它。
  • 執行環境在 Muse 外部(從終端機)預先暖機:npx @litfamily/litmuse runtime install motion(狀態:npx @litfamily/litmuse runtime status motion)。Muse 的沙箱網路僅限代理,因此渲染過程絕不會安裝任何東西;未暖機的快取會導致 exit 14,並顯示該指令。可選的節拍分析層使用 node "$SKILL_ROOT/scripts/motion-runtime.mjs" install --audio 安裝。就緒狀態檢查:node "$SKILL_ROOT/scripts/motion-doctor.mjs" 和 npx @litfamily/litmuse doctor。詳細資訊:references/runtime.md。
  • 在 Muse 中,技能和指令不需要核准;執行下方完成閘門的鉤子則需要(muse plugins approve litmuse:hook:<id>)。如果沒有核准的鉤子,閘門僅是建議性質,但下方的證據規則仍然約束你。

證據

當運動路由啟用時,LitMuse 的 PostToolUse 鉤子會記錄每次 motion.mjs 的執行(其子指令、--out、--round 以及當工具輸出包含時的 exit N NAME 行)以及每次 read_file 開啟的圖片。之後的 Stop 鉤子會對最後一個輸出資料夾執行此技能自己的完成檢查,即 engine/node/done.mjs。

一部影片只有在滿足以下所有條件時才算完成:一個有效的腳本;最後一次完整渲染的閘門 PASS;至少兩輪檢視,其中第一輪是看板輪次並指定了一個改變;最後一輪蓋有最終渲染的靜幀清單印章;且該輪檢視的列表涵蓋了看板、...

相關技能