Communitygithub.com

Web Slides

将素材/提纲/要点逐步制作成可现场放映、具电影感的 HTML 幻灯片,产出 Vite + React + TS 项目。

Web Slides 是什麼?

「Web Slides」Skill 专注于将用户提供的素材、提纲或要点,一步步构建成可直接现场放映的「电影感 HTML 幻灯片」。它生成一个基于 Vite + React + TypeScript 的项目,每次点击或按下方向键都会推进画面,每一步独占整屏。该 Skill 明确区分于「web-video-presentation」:本技能只做现场演示的 slides,不包含口播稿、音频合成或录屏功能;每步的文字会变成演讲者备注(Presenter Notes),仅在按 P 键打开的独立演讲者窗口或按 N 键显示的排练浮层中可见,不会出现在主画面上,非常适合投屏场景。工作流程分为三个阶段:内容规划、网页开发以及放映/导出,并强调方法论与协作流程,包含多种密度配置文件和主题系统。

相容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add olddonkey/olddonkey-skills

在你喜歡的 AI 中提問

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

說明文件

Web Slides 是做什麼的?

把一堆素材 / 提纲 / 要点,一步步做成可现场放映的「电影感 HTML 幻灯片」。 產出物 = Vite + React + TS 項目,點擊 / 方向鍵推進,每一步獨佔整屏,按 P 開獨立的演講者視窗看口播稿(即時預覽 + 計時器,兩窗聯動;投屏只共享主 slide 視窗即可對觀眾隱藏),按 N 是排練用的備註浮層。

與 [web-video-presentation] 的區別:那個 Skill 做的是「偽裝成影片的網 頁」——有口播稿、合成音訊、錄屏成片。本 Skill 只做現場放映的 slides: 沒有口播稿、沒有音訊、沒有錄屏;每一步的文字變成演講備註(presenter notes),給演講者提詞用,不會出現在畫面上。其餘的視覺方法論、主題系統、 逐步揭示原則完全保留。

適用場景

  • 「我有一些素材 / 提綱,幫我做成 slides / 演示文稿」
  • 技術分享 / keynote / 產品演示 / pitch deck / 教學課件
  • 面試項目復盤(project retro) —— 現場對著 slides 講,按 P 開演講者視窗看提詞
  • 想要 16:9 橫屏、大字、留白、每屏都有動效的「動態 PPT 但不像 PPT」
  • 把一篇文章 / 一份筆記變成可交互的逐步講解

本 Skill 以方法論 + 協作流程為核心。腳手架模板提供 token 和原語, 但每個美學決策(配色、字型、動效氣質)都應該針對你的主題重新設計 —— 不要照搬。


兩種密度 profile:影片式 / 演示 deck 式

同一套引擎能跑兩種節奏,Phase 1 就先定一個(寫進 outline.md 頂部, Checkpoint Plan 與用戶確認):

🎬 影片式(預設 / 稀疏)🎤 演示 deck 式(有限頁 / 高密度)
場景錄屏講解、不停講、節拍多現場 / 投屏演講、頁數有限、圍著一頁講(面試復盤常用)
一張幻燈片= 一個 step(整屏接管)= 一個 chapter(一頁穩定的密集畫面)
step 語義切到下一個想法(換場景)同一張 slide 上逐步 build(元素留屏漸顯,不換場景)
一屏資訊1 hero + 1~3 元素 + 大留白圖 / 表 / 示意 + 幾條要點 + 資料可同屏
規模很多章 × 少步較少章(≈ 目標頁數)× 每章 2~5 build
主題任意優先結構 / 編輯型(newsroom / monochrome-print / blueprint / swiss-ikb / vintage-editorial)

兩種都不改引擎(chapter/step、16:9 舞台、token、MaskReveal 全通用), 差異只在章節怎麼寫。deck 式放開「一屏一想法 / 大留白 / 全 hero」,但 「避免 AI 味」+ token + 真實層級 + 必須有視覺演示 + 雙源這套照舊 —— 那才是「不難看」的根。每章具體寫法見 CHAPTER-CRAFT.md「兩種密度 profile」。

不確定 → 🎬 影片式。


工作流總覽

Phase 1   內容規劃
   1.1  識別用戶輸入
   1.2  產出 outline.md
        (章節切分 + 每步螢幕內容 + 可選每步備註 + 資訊池)
   ▼
[Checkpoint Plan]      ← 必須停。一次對齊 4 件事:
                         outline / 主題 / 素材 / 開發模式
   ▼
Phase 2   網頁開發
   2.1  腳手架(按選定主題)
   2.2  第 1 章 = 主執行緒 + 完整版本(強制 anchor)
        ▼
        [硬節點] 用戶驗收第 1 章 ← 不可跳過
        ▼
   2.3  第 2~N 章(按選定模式:A 逐章 / B 順序 / C 並行)
   ▼
[Checkpoint Done]     ← slides 做完,dev server 跑著
   ▼
Phase 3   放映 / 匯出

沒有「音訊合成」和「錄屏」階段 —— 這是 slides,不是影片。

工作目錄約定(agent 在用戶當前目錄下建立 / 編輯):

my-slides/
├── material.md         # 用戶給原始素材時保留 —— 不刪!開發階段畫面資訊源
├── outline.md          # 必有:開發計劃(章節切分 + 每步內容 + 資訊池 + 可選備註)
└── presentation/       # 腳手架產出的 Vite + React + TS 專案
    └── src/chapters/<NN>-<id>/
        ├── <Chapter>.tsx     # 視覺實作
        ├── <Chapter>.css
        └── notes.ts          # ★ step 數 + 演講備註的唯一真相源

關鍵:notes.ts 是 step 數的唯一真相源。章節 .tsx 裡的 if (step === N) 出現的最大 N + 1 必須等於 notes.length。這保證 章節程式碼、進度條、stepper 永遠不會漂。備註內容(陣列裡的字串)只餵 演講者視窗(按 P)和備註浮層(按 N),永遠不出現在 slide 畫面上,可留空 ""。


硬性自檢協議(貫穿整個 Skill)

下面兩個產出,每一個完成後必須走自檢 → 修復 → 再回報 / 推進:

產出自檢清單出處
outline.mdOUTLINE-FORMAT.md 自檢
單章實作完成CHAPTER-CRAFT.md 完工自檢

執行方式(按能力降級,優先使用更隔離的方式):

  1. Agent Teams(最優):開一個獨立的 reviewer agent,給它「產出檔案 路徑 + 對應清單 + 關鍵上下文」,讓它逐項核查並嚴格回報結論 (哪幾條 pass / 哪幾條 fail + 證據 + 改寫建議)。
  2. subAgent(次優):沒有 Teams 能力但能開 subagent 就用 subagent 走同樣流程。
  3. 自檢(兜底):當前 agent 都沒有上述能力,就自己嚴格逐項 核查 —— 不允許目測一遍就放行。

鐵律:拿到結論後先按 fail 項把產出改完,再向用戶回報「做完了

  • 自檢結論 + 改了什麼」。直接拿原始結論回報但不修復 = 違規。

各階段檔案讀取指南

不同階段讀不同的檔案。長會話裡 agent 容易遺忘原則,特別是 Phase 2.4 的「實作單章」會重複 N 次 —— 每次都要回看核心約束。

階段必讀(每次都看)一次性看完 / 按需查
Phase 1.1-1.2 內容規劃references/OUTLINE-FORMAT.md + material.md(用戶原始素材,如有)——
Checkpoint Plan 選主題——themes/*/theme.json(動態讀全部,列清單 + bestFor 推薦 + descriptionZh);references/THEMES.md(用戶想了解主題系統時)
Phase 2.1 腳手架——SKILL.md 本節看一次
Phase 2.4 實作單章(×N 次,被 2.2 / 2.3 呼叫)references/CHAPTER-CRAFT.md 單一入口 —— 視覺演示要求 / 逐步揭示 / 內容取捨 / 雙源(outline+material)/ 放映審美 / 避免 AI 味 / 程式碼層最小約束(含 notes.ts 強制約束)/ 時長參考 / 完工自檢 + 目前主題的 themes/<id>/theme.json + 目前章節的 outline.md 段落 + material.md 本章對應段落 + 素材清單references/EXAMPLES/(結構示意,不是抄襲模板);references/THEMES.md 完整 token 契約
Phase 3 放映 / 匯出references/PRESENTING.md(全螢幕放映、鍵盤導航、按 N 看備註、匯出 PDF / 截圖)——
選 / 造 / 切主題——references/THEMES.md

寫章節時只讀一份 CHAPTER-CRAFT.md。十條原則 / 開工 self-prompting / 決策樹 / 反 AI 味反模式 / 完工自檢全部併入這一份單一入口。EXAMPLES/ 不是必讀 —— 先按內容自由設計,卡殼才翻(按 anchor 翻「形」,不要照搬)。


Phase 1 —— 內容規劃

1.1 識別用戶輸入

用戶給的東西該做的
原始素材(文章 / 筆記 / 一堆要點 / 資料)產出 outline.md(1.2),保留原素材為 material.md,過 Checkpoint Plan
已經寫好的提綱 / 大綱整理成 outline.md 格式(1.2),過 Checkpoint Plan
啥都沒有,只說「幫我做個 X 主題的 slides」反問:先給一段素材或要點。Skill 不替用戶構思內容

1.2 產出 outline.md

按 references/OUTLINE-FORMAT.md 規則:切章節 → 切 step → 每章首段抽資訊池 → 每步寫螢幕內容(+ 可選演講備註 hint)。

先定密度 profile(🎬 影片式 / 🎤 deck 式,見上方「兩種密度 profile」)—— 它直接決定章節怎麼切:deck 式時章節數 ≈ 目標頁數,每章 2~5 個 build。

保留 material.md 不刪——它是 outline 寫資訊池、章節實現畫面時的細節源 (雙源原則)。

outline 的邊界(關鍵):

outline 必須寫outline 不要寫
章節切分 / 每章 step 數 / 估時具體動畫類型(blur clear / wipe / 彈簧)
每步螢幕內容(hero / 資料 / 標語 / 列表項)CSS 實現手段(filter / SVG / clip-path)
章節級資訊池:從素材抽的數字 / 引用 / 案例 / 標籤時長 / 微觀節奏數值
每步演講備註 hint(可選:你打算在這一步講什麼)持續微動 / 錯峰量等微觀節奏
步級關係名前綴(「反差對照」/「遞進列表」/「金句」等可選 hint)——

outline 不寫動畫的理由:寫死動畫 = chapter agent 退化為翻譯機; 留白讓 chapter agent 在每步開工時按 CHAPTER-CRAFT.md 的「內容驅動決策樹」自由設計,才有真正的視覺感。

落盤後必須先走自檢再進 Checkpoint Plan:按上文「硬性自檢協議」對 outline.md 執行(優先 Agent Teams → subAgent → 自檢),按結論修復後再進。


Checkpoint Plan —— 4 件事一次對齊(硬節點)

outline.md 寫完後必須停下來。用戶在這一個節點同時確認 4 件事。

agent 此時要做的預備工作

  1. 讀所有 themes/*/theme.json 拿 nameZh / descriptionZh / bestFor / mood —— 不要硬編碼清單
  2. 根據 outline 的內容類型 / 關鍵詞 / 語氣,主動從主題裡挑 2~3 套 最匹配的推薦(匹配 bestFor 欄位)
  3. 掃一遍 outline.md 末尾「素材清單」部分

總結模板(骨架,agent 按情況填充)

內容計劃寫完,產出檔案:
  📄 material.md    {若用戶給原素材則保留}
  📄 outline.md     {N} 章 / {M} 步 + 每章資訊池 + 末尾素材清單

章節速覽:
  1. <id>     <章節標題>    <S> 步 ~<T>s
  2. ...

接下來一次對齊 4 件事:

  1. 開發計劃 (outline.md) 要不要改?重點看:
     - 密度 profile 對不對(🎬 影片式:多步稀疏 / 🎤 deck 式:有限頁高密度)
     - 章節切分 / step 數是否合理(每章 ~5~12 步是常見區間)
     - 每步螢幕內容是否清晰
     - 每章首段「資訊池」是否有足夠的素材細節供畫面掛
     - 末尾素材清單是否完整

  2. 選哪個主題?我的推薦:
     ★ <推薦 1:nameZh (id)> — 因為 <bestFor 命中>;<descriptionZh 摘要>
     ★ <推薦 2 / 推薦 3>
     其它可選:<剩餘主題,nameZh + 一句話>
     也可以讓我幫你做新主題(詳見 references/THEMES.md)。

  3. 真素材怎麼準備?粗看本 slides 要的圖:<列粗略清單>
     a) 我從 <現有素材路徑> 幫你挑   b) 你自己提供   c) 全部 placeholder

  4. 開發模式選哪個?

     **第 1 章無論哪種模式都必須主執行緒做完 + 用戶驗收**(強制 anchor)。
     差異在第 2 章及之後:

     A) 預設 · 逐章確認(推薦)
        每章做完都暫停驗收 → 風險可控 / 節奏最穩
     B) 第 1 章後順序開發(不並行)
        第 2~N 章主執行緒順序做完後統一驗收 → 速度中 / 適合 agent 不支援並行
     C) 第 1 章後並行開發(subagent)
        第 2~N 章用 subagent 並行 → 最快 / 用戶控並行數(一次幾章)
        ⚠️ 風格各章會有差異(這是預期,主題禁區兜底)

收到回饋後:

  • outline 要改:直接編輯檔案,編輯完 ping 一次(或口頭描述 agent 改)
  • 主題必須明確才進入 Phase 2。用戶說「主題你幫我選」→ 取你推薦的第 1 個, 告訴用戶你選了什麼、為什麼,給反悔機會
  • 模式選定 → 進 Phase 2

Phase 2 —— 網頁開發

2.1 腳手架

bash <path-to-web-slides>/scripts/scaffold.sh \
  ./presentation \
  --theme=<用戶選的主題 id>

bash <path-to-web-slides>/scripts/scaffold.sh --list-themes

自訂主題 → 先按 references/THEMES.md 「創作新主題」流程做一個 themes/<my-theme>/,再 --theme=<my-theme>。

腳手架帶一個 01-example demo。在寫第一章真實內容前刪掉:

rm -rf presentation/src/chapters/01-example

並把 presentation/src/registry/chapters.ts 裡 example 章節 的 import 和陣列項移除。

2.2 第 1 章 —— 主執行緒 + 強制驗收

核心:第 1 章 = 完整版本一次到位(節奏 + 視覺 + 真素材齊全)。 沒有「骨架版」概念 —— 第一章就要做出用戶能直接驗收的樣板。

為什麼第 1 章必須主執行緒:

  • 它是 CHAPTER-CRAFT.md 這套指引在當前 主題 + 當前題材下的第一次落地
  • 如果指引有盲區 / 主題顏色 / 字體 token 不夠用,第 1 章一定會暴露 —— 這時候有人類回饋就能修指引 / 調主題,早改成本最低
  • 後續章節(無論順序 / 並行)都要參考第 1 章的程式碼模式,所以第 1 章 = 當次專案的「風格錨點」

做完第 1 章後必須停下來等用戶驗收:

第 1 章 <id> 做完了,dev server 在 localhost:5174 執行。

驗收重點:
  □ 視覺氣質對不對?符合 <theme nameZh> 的預期嗎?
  □ 節奏對不對?某些步太快 / 太慢 / 資訊太薄?
  □ 內容驅動動畫是否到位?還是有幾步是無腦入場動畫?
  □ 雙源原則:螢幕畫面有沒有「備註沒提但素材能掛」的細節?
  □ 反 AI 味檢查:紫粉漸變 / 圓角彩色邊框 / 假插畫 / emoji 是否有?
  □ 按 N 看演講備註,對著講順不順?

問題告訴我,我針對性改。OK 了告訴我「繼續」,我按選定模式做第 2 章及之後。

2.3 第 2~N 章 —— 按選定模式

所有模式下的共同規則:每章獨立按 CHAPTER-CRAFT.md 開發。風格不強求章節間完全一致 —— 主題顏色 / 字體 token 兜底視覺 統一,動畫 / 節奏 / 視覺演示由章節自由發揮是設計預期。

模式 A · 預設 · 逐章確認

第 2 章做完 → 暫停驗收 → OK → 第 3 章 → 暫停 → ... → 第 N 章。每章 獨立驗收,問題隨時改,風險最低,節奏最穩。用戶不明確選模式時 預設走這個。

模式 B · 第 1 章後順序開發

第 2 章 → 第 3 章 → ... → 第 N 章 主執行緒順序做完,最後統一驗收。 速度中等,適合 agent 不支援並行任務的環境。

模式 C · 第 1 章後並行開發(subagent)

用 subagent 把第 2~N 章並行做完,最大並行數由用戶控制(「一次 4 章」 /「一次 2 章」)。最快,但風格各章會有差異 —— 這是預期,因為:

  1. 每個 subagent 看不到別的 subagent 產出,無法機械對齊
  2. 章節程式碼物理分離(每章一個資料夾 / 自己的 CSS 前綴),不會互相破壞
  3. 主題 token 兜底視覺統一(顏色 / 字體 / hero 數字 / 卡片 / 分割線 性格 / 裝飾),氣質不會跑偏
  4. 風格不一致 = 人手寫的呼吸感(多 voice / 多視角)

並行 subagent 的 prompt 必須包含:

  • 目前章節 outline 段落(含資訊池)
  • references/CHAPTER-CRAFT.md 的路徑(單一必讀)
  • 目前主題 theme.json 的 descriptionZh / mood / bestFor
  • 第 1 章程式碼作為「程式碼風格」參考(不是「視覺抄襲物件」)
  • 硬規則:每章獨立 CSS 前綴(.cd- / .mg- / .pm- / ...); 不修改 chapters.ts;每章帶 notes.ts(長度 = step 數); 完工跑 npx tsc --noEmit

重要:無論選哪種模式,用戶隨時可以中途切換模式。

2.4 實作單章(每章必走)

詳細指引見 references/CHAPTER-CRAFT.md —— 單一必讀入口,涵蓋:視覺演示要求 / 逐步揭示 / 內容取捨 / 雙源原則 / 視覺演示基本審美 / 反 AI 味 / 程式碼紅線 / 完工自檢。

核心要點(CHAPTER-CRAFT.md 詳述):

  • 每章必須有 CSS / SVG / Canvas / JS 視覺演示,禁純文字章節
  • 逐步揭示:清單 / 列表必須 1 項 = 1 step,禁一次全展示
  • 雙源原則:節奏跟 outline(順序不能亂),細節回原始素材抽(資訊池 + 本章 material 段落)
  • 每章帶 notes.ts:長度 = step 數(唯一真相源),內容是演講備註 (可留空 ""),不會出現在畫面上
  • 完工自檢逐項過,不達標回去改 —— 按「硬性自檢協議」執行,改完 再向用戶回報本章交付

2.5 大改後 bump STORAGE_KEY

改動 chapters.ts(增加 / 刪除 / 重排章節,或某章 notes.ts 長度變化) 後,bump presentation/src/hooks/useStepper.ts 的 STORAGE_KEY (如 web-slides-cursor-v1 → v2),避免持久化游標落到不存在的 step 上。


Phase 3 —— 放映 / 匯出

詳細流程見 references/PRESENTING.md。要點:

  • 現場放映:npm run dev → 瀏覽器全螢幕(F11)→ 點擊 / 方向鍵推進。
  • 鍵盤導航:← → / 空格 推進;Home / End 跳首尾;數字鍵 1-9 跳章;按 P 開演講者視窗(獨立視窗:口播稿 + 即時預覽 + 計時器,兩窗聯動); 按 N 開 / 關備註浮層(疊在當前視窗上,僅排練用 —— ⚠️ 會被一起投屏)。
  • 投屏看不到口播稿的正確姿勢:按 P 開演講者視窗 → 會議軟體裡選 「共用某個視窗 / 標籤頁」並選中主 slide 視窗(不要「共用整個螢幕」)→ 演講者視窗只有你自己看得到,翻頁兩窗聯動,單屏也成立。
  • 離線分發 / 投屏穩一點:npm run build → npm run preview,或部署 dist/。
  • 匯出(可選):逐步截圖成 PNG,或瀏覽器逐步「列印為 PDF」。

Phase 2 結束後主動告訴用戶:slides 做完了,dev server 跑在 localhost:5174,可以現場放映 / 投屏;按 P 開演講者視窗看口播稿(投屏時 只共用主 slide 視窗,觀眾看不到),按 N 是排練用的備註浮層(會被投屏)。


十條原則(一句話清單)

完整展開見 references/CHAPTER-CRAFT.md 的對應章節 —— 寫章節時回那裡查,下面只是索引。

#原則一句話
116:9 固定舞台內容 1920×1080 + transform scale,沒有響應式
2全域 step 計數器章節是 step 的純函數,無定時器
3每步獨佔整屏if (step === N) return <FullScene />
4邏輯節拍 = step一節拍 = 一 step = 一個聚焦想法
5隱藏的邊角控制項進度條預設 opacity 0;備註預設隱藏(按 N 開)
6舞台無 chrome沒有 header / footer / 頁碼 / 品牌條
7內容驅動動畫先找內在動作,找不到才入場動畫兜底;持續微動慎用
8多點逐個揭示1 項 = 1 step,禁同步 stagger 上 N 項
9整片同一主題章節間不翻表面色;顏色 / 字體走 token,其它尺度章節自由
10雙源原則outline 定節拍,素材定畫面密度(落到資訊池)

🎤 deck 式下原則 3「每步獨佔整屏」/ 8「1 項 = 1 step」放寬為: 一頁 = 一 chapter,step = 同頁逐步 build(元素留屏漸顯);其餘原則不變。 見上方「兩種密度 profile」。


常見用戶回饋速查

收到回饋先定位是哪一層(節奏 / 視覺 / 內容 / 程式碼),再改最小切片, 不要重做整章:

  • 節奏:太快 / 太慢 / 資訊太薄 → 拆 / 合併 step(同步改 notes.ts 長度 + 章節 if (step===N))
  • 視覺:氣質不對 / 有 AI 味 → 回 CHAPTER-CRAFT.md「避免 AI 味」+「放映基本審美」
  • 內容:畫面太空 / 細節不夠 → 回資訊池 + 本章 material 段落(雙源原則)
  • 程式碼:報錯 / token 不生效 → 回 CHAPTER-CRAFT.md「程式碼層最小約束」

相關資源

按「何時讀」標註,避免一次性全讀:

檔案何時讀內容
references/OUTLINE-FORMAT.mdPhase 1.2 必讀outline.md 欄位 spec、命名約定、章節切分、資訊池、每步備註
references/CHAPTER-CRAFT.mdPhase 2.4 每章單一必讀入口視覺演示要求 / 逐步揭示 / 內容取捨 / 雙源(outline+material)/ 放映審美 / 避免 AI 味 / 程式碼層最小約束(含 notes.ts)/ 時長參考 / 完工自檢
references/EXAMPLES/可選 —— 看結構章節結構示意(hook / list-reveal / case-tech-review);不是抄襲模板
references/THEMES.md選 / 造 / 切主題時完整 token 契約 + 內置主題清單 + 創作流程
references/PRESENTING.mdPhase 3 才讀全螢幕放映、鍵盤導航、按 N 看備註、匯出 PDF / 截圖
themes/Checkpoint Plan / Phase 1.2 時翻內置主題(每個含 theme.json + tokens.css)
scripts/scaffold.shPhase 2.1 跑一次一鍵專案腳手架

本 Skill 由 web-video-presentation (作者 ConardLi)改造而來 —— 去掉口播 / 音訊 / 錄屏,保留全部視覺方法論 與主題系統,專做現場放映的 HTML slides。

相關技能