Communitygithub.com

QuantumCoderSys/stickman-story-reels

將病毒式短篇故事腳本轉換為動畫火柴人直式 Reels(1080×1920 MP4,適用於 Instagram Reels、TikTok 和 YouTube Shorts),包含 ElevenLabs 語音、逐字字幕、合成音效、螢幕時鐘和「留言投票」結尾。

stickman-story-reels 是什麼?

Stickman Story Reels 是一個完整的多步驟 AI Agent 技能,可將簡單的故事前提轉換為 60-90 秒、適合社群媒體的垂直影片。它會先根據經過驗證的病毒式腳本規則撰寫具有鉤子(hook)、轉折(twist)和雙選項投票的腳本,接著在程式碼中繪製火柴人分鏡,然後透過 ElevenLabs 合成畫外音、產生逐字字幕、加入音效設計,最後輸出為含封面圖和發文文案的 1080×1920 MP4 檔案。這套工作流程完全基於確定性工具鏈:使用 Node.js(用於 HyperFrames 合成)和 Python CLI,無需影像模型或圖庫素材。使用者可免費進行草稿預覽(含無聲計時),僅在最終渲染時才需負擔 ElevenLabs 語音合成費用。這項技能支援選擇式互動故事系列,包含系列聖經(bible)管理和續集自動銜接功能,適用於恐怖、驚悚、生存或劇情類的極短篇故事。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/QuantumCoderSys/stickman-story-reels/tree/main

在你喜歡的 AI 中提問

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

說明文件

Stickman Story Reels

將一個前提轉變為完成的 60-90 秒垂直 Reel:一個為觀看時間打造的鉤子優先腳本、用程式碼繪製的火柴人分鏡、含逐字字幕的畫外音、音效設計,以及一個讓人留言並期待第二集的二選一投票。此技能源自 PlotVote 互動故事 (@plotvote) 的工作流程。

整個流程是確定性的:你撰寫 episode.json(腳本、時間、動作)和 scenes.js(繪圖),而 scripts/reel.py 完成其餘工作(語音 → 音效 → 建置 → 檢查 → 渲染)。不需要影像模型、圖庫素材,也不需要付費工具(語音除外)。

設定(每台機器一次)

檢查 python3 --version(3.9+)、ffmpeg -version 和 node --version(18+)。第一次渲染時會透過 npx 下載 HyperFrames 和無頭 Chrome;這是正常現象,大約需要一分鐘。對於語音,使用者需在專案資料夾的 .env 檔案中設定 ELEVENLABS_API_KEY=...(或匯出為環境變數)。請勿印出金鑰。若無金鑰,所有功能仍可在 --draft 模式下正常運作(無聲,按實際速度計時)。

在每個終端機工作階段中定義此 shell 函數(是函數,而非字串變數,以便在 zsh 和 bash 中都有效)。以下命令會用到它:

reel() { python3 "<此技能的資料夾>/scripts/reel.py" "$@"; }

工作流程

1. 理解需求

  • 「製作這個故事」 給予清晰前提 → 撰寫一個強而有力的腳本並建置。
  • 「給我選項」或「腳本點子」 → 提供 3 個完整的選項(請參考手冊 §10),讓他們選擇,然後建置。
  • 「下一集」或「X 贏了投票」 → 繼續系列:從上一集的後果開始,揭曉之前的線索,給予真正的答案,逐步升級,新的投票(手冊 §9)。如果有系列聖經,請先閱讀。
  • 僅腳本(或沒有 shell 可用)→ 提供腳本表格,以及 episode.json 和 scenes.js(如果他們要自己渲染)。

2. 撰寫腳本

每次都要先閱讀 references/viral-script-playbook.md。 它包含了決定觀眾是否能在 3 秒內留下的規則。當構思一個前提、系列或季度時,也請閱讀 references/story-engines.md。

將腳本撰寫為表格(# · voice · spoken · on screen),目標約 210-230 字(以一般速度約 85 秒)。執行手冊中的語音前檢查清單。人們最常犯錯的是:第一幀必須有動作;5 秒內必須交代地點、時間和人物;每個決定都必須通過 12 歲兒童測試;角色必須用第一人稱說出自己的揭露;投票選項是兩個具體的單詞行動,且兩邊都有代價;投票後的低語線索必須指向先前埋下的伏筆。

如果使用者要求了選項,或者可能想在花費點數前先批准,請顯示腳本表格並等待。否則,繼續進行。

3. 建立 Reel 骨架

reel new reels/<slug>-part1 --title "<Title> — Part 1"

這會根據一個小型可運作的起始範本建立 episode.json 和 scenes.js。用你的故事取代兩者。

4. 繪製分鏡(scenes.js)

閱讀 references/drawing-kit.md,並開啟 examples/sundown-part1/scenes.js 作為模式庫(一隻生物探出身子、一個拉遠的地圖、逐行揭露的規則牆、定格動畫生物、窗邊的驚險一幕、一台會說話的收音機、樹林裡的手電筒、選擇分歧、一個封面)。

根據你的腳本表格,每個分鏡一個函數。每個函數回傳一個 1080×1920 的 SVG,由工具庫輔助函數(defs()、sky()、forest()、cabin()、room()、water()、stick()、kid()、creature()、phone()、radio()、chip()、ring()、splitChoice()…)建構而成。如果工具庫沒有某個場景(例如水上樂園、火車、沙漠),這很正常:使用矩形、路徑和輔助函數來繪製,並遵循繪圖工具庫的「建立新的場景」一節。為所有應該在特定詞語出現時移動或顯示的元素設定 id。讓臉部保持在字幕帶(y 1180-1380)和右側 140 像素之外。為封面(主題放在標題下方)和投票卡片插圖添加 mode。

5. 設定劇集(episode.json)

閱讀 references/episode-format.md。 為每個場景設定:draw、say 台詞、kenburns 效果,以及對齊特定詞語的 animate 條目("at": "faster")。然後:設定語音(為其他角色加上 fx 和字幕 tag)、包含時鐘的 HUD 藥丸、手動放置的 sfx 音效、背景音樂提示、投票場景(兩個選項、插圖、線索台詞)、cover 和 post(包含 {vote_line} 的說明文字、置頂留言、posts_at)。關於語音、音效和字幕,請參考 references/sound-voice-posting.md。

6. 草稿預覽(免費)

reel voice reels/<slug> --draft     # 無聲,實際速度計時
reel sound reels/<slug>
reel build reels/<slug>
reel check reels/<slug>
reel snap  reels/<slug> --at scenes  # 每個分鏡兩張靜態圖(或 --at 0.5,12,30.5 秒)

檢視 reels/<slug>/snaps/ 中的每張靜態圖。修正繪圖工具庫中可讀性規則所警告的問題:太暗而無法閱讀的內容、字幕下方的臉部、太小的主體、時機不對的揭露。check 必須顯示「Check passed」(如果檢查失敗,all 會在渲染前停止)。以下警告是預期且可接受的:「nested structure」、「track too dense」、「composition file too large」以及插圖「overflowing」它們的裁切區域。

7. 語音與渲染

reel all reels/<slug>               # 語音 (ElevenLabs) → 音效 → 建置 → 檢查 → 渲染
reel frames reels/<slug> --every 2  # 整個 Reel 的聯絡表,供檢閱

檢查輸出的長度(60-90 秒;如果過長,減少鋪陳)。檢視 renders/review.png:主體是否可讀、字幕是否清晰、命名的物體是否在其對應的詞語出現時移動、投票卡和線索插圖是否顯示。聆聽第一行;如果某個詞可能被誤聽,更改該詞後重新配音(只有更改過的台詞會花費點數)。

8. 交付

提供使用者 renders/<slug>.mp4、renders/cover.png 和 POST.md(說明文字、置頂留言、替代文字、投票截止時間)。如果是系列作品,請在 Reel 資料夾旁撰寫或更新 bible.md:角色設定、世界規則、正史、線索,以及針對每個投票選項的一行描述,說明下一集如何開始(見 story-engines §4)。

命令

命令功能
reel new <dir> --title "…"建立 Reel 資料夾骨架
reel voice <dir> [--draft]語音 + 逐字時間 → timing.json、assets/audio/narration.wav
reel sound <dir>合成 19 種音效 + 環境背景音
reel build <dir>編譯 index.html、cover/、POST.md
reel check <dir>HyperFrames 語法檢查、版面配置與對比度檢查(失敗時以非零退出碼終止)
reel snap <dir> --at scenes從合成畫面產生 PNG 靜態圖,每個分鏡兩張(或 --at 1,5.5,9 秒)
reel render <dir> [--draft]輸出 -14 LUFS 的 MP4 + cover.png + 聯絡表
reel all <dir> [--draft]語音 → 音效 → 建置 → 檢查 → 渲染(檢查失敗則停止)
reel frames <dir> --every 2整個渲染後 MP4 的檢閱表

疑難排解

  • "word" isn't spoken there: 時間參考使用字幕中的拼寫,且僅在該場景中搜尋;錯誤訊息會顯示該場景說了些什麼。對於第二次出現的詞,使用 word#1;對於其他場景中的詞,使用 sN:word;對於偏移量,使用 start+0.2;對於絕對時間,使用 12.5s。
  • 找不到語音: 使用預設名稱(Liam, Brian, George, Daniel, Callum, Bill, Roger, Chris, Eric, Will, Harry, Charlie, River, Adam, Sarah, Matilda, Jessica, Alice, Lily, Laura, Bella)或語音 ID。
  • 點數用完: 已經配音的台詞會被快取;加值後重新執行 voice。
  • 出現空白或黑色畫面: 該組的 JavaScript 錯誤。check 會顯示錯誤;修正後重新執行 build。
  • 長度超過 90 秒: 刪減鋪陳台詞和形容詞;保留鉤子、轉折、投票和線索。
  • npx 或 node 錯誤: 安裝 Node 18+;首次執行時讓 npx 下載 HyperFrames 和 Chrome。

此技能包含的內容

  • scripts/reel.py:CLI。scripts/synth.py:19 種音效和背景音(持續低音、風聲、脈動、嗡鳴、水聲),全部為合成。
  • assets/kit.js:繪圖工具庫。assets/runtime.js、assets/base.css:字幕、HUD 和投票卡。
  • references/:viral-script-playbook.md(務必閱讀)、story-engines.md(前提、系列、聖經)、episode-format.md(規格)、drawing-kit.md(繪圖)、sound-voice-posting.md(語音、音效、字幕、發文、安全)。
  • examples/sundown-part1/:一個完整的 89 秒第一集(episode.json + scenes.js)。examples/starter/:由 new 命令使用的 4 個分鏡起始範本。examples/script-pitches.md:另外五個完整的第一集腳本(THE WHEEL, LAST CAR, LOW TIDE, 3:33, ROW ONE)。

相關技能