open-slide 是什麼?讓 AI agent 用 React 寫簡報,再由框架處理播放與匯出
open-slide 把簡報內容變成 React 元件:coding agent 負責寫頁面,框架負責 1920×1080 畫布、縮放、導覽、熱更新、視覺檢查與輸出。這篇從安裝、檔案契約到 agent workflow,整理它適合什麼工作。
作者
Seer
日期
2026-08-10
open-slide 的定位:讓 agent 寫投影片,讓 runtime 處理投影片
open-slide 是一款專為 coding agent 設計、以 React 為核心的簡報框架。它的運作邏輯相當直覺:使用者以自然語言描述簡報需求,agent 負責生成 slides/<id>/index.tsx 檔案;後續的畫布縮放、投影片導覽、熱更新(HMR)、簡報播放模式以及檔案匯出等工作,則由 open-slide runtime 處理。
這樣的定位與傳統簡報工具有很大落差。open-slide 定位為簡報執行環境(runtime),負責提供穩定的機制供 agent 進行寫入、預覽、修改與交付。它本身不包含 AI 模型,亦不內建 LLM 對話式 agent。因為投影片本質上依然是 React 元件,除了手動修改程式碼,也可以搭配 Claude Code、Codex 或 Cursor 等具備程式碼編輯能力的 coding agent 來自動化調整。
在 open-slide 中,每頁投影片都以 1920 × 1080 的固定畫布呈現。你可以自由編寫任何 React 結構,不需受限於語法死板的簡報專用 DSL。這代表你的簡報將轉化為一組能納入版本控制(git version control)的前端專案,不再是只能在封閉式軟體 GUI 介面中拖拉的黑盒子。
本文依照目前官方 repository main 分支的 3054b184a5ea8fc7858c56962817825d5ca138e2 commit 進行查核,相關套件版本對應為 @open-slide/core 1.17.1 與 @open-slide/cli 1.4.1。文中提及的指令與功能均取材自官方 README、文件、套件設定與原始碼,版本與功能邊界以這個查核時間點為準。
先看重點
- 輸入契約:以
slides/<id>/index.tsx等模組為主,預設匯出(default export)一組 ReactPage元件陣列。 - 投影片畫布:尺寸固定為 1920 × 1080,運行時會根據瀏覽器視窗自動進行等比例縮放。
- 起手步驟:透過
npx @open-slide/cli init my-slide初始化專案,接著執行pnpm install與pnpm dev啟動開發伺服器。 - Agent 工作流:內建提供
create-slide、slide-authoring、apply-comments、current-slide與create-theme等技能(skills)引導。 - 開發體驗:支援 Vite 熱更新(HMR)、縮圖邊欄(thumbnail rail)、鍵盤導覽、瀏覽器內置檢查器(inspector)、講者備註、簡報者模式與資源管理器。
- 匯出格式:官方文件已明確支援 static HTML 與 PDF;此外,專案原始碼中亦包含將投影片轉換為圖片並打包的 PPTX 匯出工具。
- 部署方式:執行
open-slide build可輸出靜態網頁,方便部署至 Vercel、Cloudflare Pages、Zeabur 或 Netlify 等靜態空間。 - 開源授權:採用 MIT 授權條款。
- 重要限制:該框架的主要作用是將 agent 產生的 React 轉化為可播放的簡報,並不保證簡報內容的品質或排版完全正確,且官方並未提供最低硬體規格與效能測試數據。
它解決的是哪一段問題?
在使用 AI agent 生成簡報的過程中,真正棘手的部分通常落在後續一連串繁雜的前端實作細節,而非單純寫出一段標題:如何維持畫布比例、各分頁的導覽切換、即時預覽、熱更新、全螢幕簡報模式、講者備註、圖片與字型的載入管理,以及最後該以何種格式交付。
open-slide 的出現正是為了解決這類共用的基礎建設問題。它讓 agent 能專注於調整內容、版面與 React 元件,而框架本身則打理好以下的工作劃分:
| 階段任務 | open-slide 負責的部分 | 仍需人工或 Agent 判斷的部分 |
|---|---|---|
| 專案初始化 | 建立專案骨架(scaffold workspace)與 starter slide 範本 | 簡報主題、目標受眾、總頁數與大綱結構 |
| 頁面開發 | 自動載入並解析 slides/<id>/index.tsx 檔案中的 React 頁面 | 頁面具體內容、元件切版、文字精準度與正確性 |
| 即時預覽 | 提供 1920 × 1080 畫布、等比例縮放、縮圖檢視與熱更新 | 檢查內容是否溢出、文字密度是否過高、視覺層級是否清晰 |
| 內容修訂 | 提供瀏覽器檢查器、source marker(註解標記)與開發端 API | 評估本次修改是否會影響其他頁面的樣式或整體主視覺 |
| 成果發表 | 支援全螢幕播放、簡報者模式、靜態編譯與 HTML/PDF 匯出 | 決定最終交付格式,並進行最後的人工檢驗 |
由此可見,open-slide 的核心價值在於將簡報生產轉化為可重複迭代的程式碼工作流:生成程式碼 → 畫面預覽 → 標註修改需求 → 自動回寫原始碼 → 重新驗收。這種設計將原本一鍵生成完美簡報的理想,落實為更具控制力的開發循環。
從安裝到第一份 deck
1. 使用 CLI 建立工作區
根據官方文件說明的起手步驟:
npx @open-slide/cli init my-slide
cd my-slide
pnpm install
pnpm dev
@open-slide/cli 主要作為工作區初始化工具,會為你建立一個隨開即用的開發專案,目錄結構包含:
slides/getting-started/:初始投影片範例。package.json:宣告依賴套件@open-slide/core。open-slide.config.ts:可選用的強型別設定檔。.claude/skills/與.agents/skills/:提供給 agent 的撰寫技能(skills)定義。CLAUDE.md/AGENTS.md:引導 agent 的開發指南文件。assets/、themes/資料夾及其他相關設定檔。
在初始化專案時,CLI 也提供了幾項可調整工作流程的參數:
open-slide init [dir]
open-slide init --force
open-slide init --name <name>
open-slide init --no-install
open-slide init --no-git
套件管理工具支援 npm、pnpm、Yarn 或 Bun。當指定的目標路徑非空資料夾時,初始化程序預設會中止以防止檔案遭到覆蓋,必須明確加上 --force 參數才會強制執行。這項保護措施讓你能在現有專案目錄旁安全地進行測試,不必擔心意外遺失既有資料。
2. 撰寫投影片模組
每組投影片的進入點為:
slides/<kebab-case-id>/index.tsx
最基本的投影片頁面結構如下:
import type { Page, SlideMeta } from '@open-slide/core';
const Cover: Page = () => (
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
background: '#08090a',
color: '#f7f8f8',
}}
>
<h1 style={{ fontSize: 140 }}>Hello, open-slide</h1>
</div>
);
export const meta: SlideMeta = { title: 'Hello, open-slide' };
export default [Cover] satisfies Page[];
開發時需遵循兩個核心規則:檔案的預設匯出(default export)必須是 Page 陣列,且每個頁面元件都應填滿 1920 × 1080 的父容器。你可以在同一個檔案中定義多個元件,陣列中的先後順序即代表投影片的播放順序。
透過 SlideMeta,你可以定義投影片標題、套用主題與建立時間;若需要引入可動態調整的樣式變數,也可以匯出 DesignSystem。官方 core API 還提供了 MorphElement、Steps、Step、頁碼 Hook 及轉場類型(transition types),方便實作跨頁面共享元素動畫、內容漸進式呈現以及細緻的頁面狀態切換。
3. 讓 Agent 接手簡報撰寫
初始化專案時所產生的 skills,是 open-slide 與 coding agent 協作的核心橋樑。其中最常被調用的指令是 /create-slide:
- 釐清簡報主題與受眾定位。
- 確立美術設計風格。
- 估算投影片頁數範圍。
- 設定每頁投影片的文字密度。
- 選擇動畫動態的複雜度(例如:無動畫、微動畫或豐富轉場特效)。
- 規劃投影片結構角色(如封面頁、內容頁、對比頁、引言頁與結尾頁等)。
- 將產出的程式碼寫入
slides/<id>/index.tsx。
相較於直接對 agent 下達籠統的「幫我做份簡報」,這種編排模式更具預測性,因為它在撰寫程式碼前,就先對可能影響整體排版風格的關鍵要素進行了決策收斂。若工作區內已配置了 theme 的 markdown 檔,create-slide 會優先讀取其中的調色盤(palette)、字型樣式、版面配置以及共用元件,確保新生成的簡報與整體風格保持一致。
此外,agent 輸出的內容是通俗易懂的 React 程式碼,避開了格式封閉的 JSON 設定檔。你可以將程式碼直接納入 Git 版本控制,藉由 diff 清楚比對每一頁的修改細節,更能在 agent 搭建好骨架後隨時接手微調。
最有用的迭代迴圈:畫布上的 inspector 加上 source marker
open-slide 最獨特的功能之一,莫過於其視覺化的檢查器(inspector)。在開發伺服器啟動後,你可以在畫布上直接點選元件,調整文字、字型大小、字重、顏色或更換圖片。這些變更一開始會暫存在記憶體中,直到點擊「Save」才會整批回寫至原始碼。
另一種修改途徑是透過程式碼註解(comment marker)來標記:
<div>
{/* @slide-comment id="c-1234abcd" ts="2026-08-10T05:31:19Z" text="..." */}
<h1>Q2 Launch</h1>
</div>
此處的 text 內容在實際運作時會是 base64url 編碼的 JSON,上方程式碼僅為概念示意,不需使用者手動編寫。在正常的使用流程下,只要在瀏覽器檢查器中輸入「將標題改為紅色」或「縮小此行文字」,工具便會自動將對應的 comment 插入對應的 JSX 位置。
接著,只要交由 agent 執行 /apply-comments 指令:
- 掃描專案內所有
slides/*/index.tsx中的@slide-comment標記。 - 解碼註解內容,定位該標記所關聯的 JSX 包覆元素(enclosing element)。
- 由後往前依行號套用變更。
- 移除已處理完成的標記。
- 重新讀取檔案,確認沒有留下未處理的 marker。
這建立起非常流暢的開發循環:檢視畫面 → 點選元素標註意見 → agent 讀取並修改原始檔 → 重新整理確認效果。相較於每次都要費心描述「第三頁右上角那個藍色區塊」,此模式在微調產品投影片或技術分享報告時,顯得更為精準且踏實。
Assets、theme 與 presenter mode
資源管理器(Assets Manager)
每組簡報都可以將專屬的圖片、影片及字型存放在該簡報目錄下的 slides/<id>/assets/ 中;至於跨簡報通用的 logo 或個人頭像等資源,則可以放置於全域的 assets/ 資料夾。
開發介面中整合了資源管理器,讓你能一覽簡報內使用的素材,並支援直接拖曳上傳、重新命名與替換資源,甚至整合了 svgl 方便快速搜尋主流品牌的向量 logo。這種管理方式的好處在於,所有圖片與素材都能與投影片原始碼一同收納在專案中,免去了上傳外部圖床的麻煩,也無須塞在 prompt 裡傳遞。
專案中負責匯出靜態 HTML 的程式碼已支援辨識常見的媒體格式,包含 PNG、JPEG、GIF、SVG、WebP、AVIF 等圖片,MP4、WebM、MOV 影片,Woff、TTF 字型,以及 MP3、WAV、OGG 音訊副檔名。雖然這代表框架內建了資產打包機制,但不同瀏覽器對影片編碼、客製字型與外部樣式表的渲染結果可能存在差異,發布前仍建議在實際的目標瀏覽器進行測試。
主題與設計系統
使用 create-theme 能為專案產出一套主題規範與展示元件,便於重複利用色彩配置(palette)、字型設定(typography)、版面樣式、頁首頁尾元件以及動畫原則。這裡的主題定義與單一簡報中的 design 變數在層級上有所區隔:
- theme markdown:提供給 agent 作為開發時的視覺設計指引。
themes/<id>.demo.tsx:主要用於主題面板(Themes panel)中的視覺預覽。- 簡報內的
design:屬於運行期間(runtime)可讀取並動態調整的設計 token。
如果你需要製作一系列符合品牌規範的投影片,建議先定義好主題,再引導 /create-slide 依循該主題生成內容,如此一來能有效避免每張投影片色彩或字型不一致的窘境。
簡報者模式
open-slide 在運行時提供了全螢幕播放、鍵盤控制導覽、講者備註(speaker notes)、目前與下一頁投影片預覽,以及計時器等完整功能。投影片製作完成後,可以直接在瀏覽器中進入播放狀態,不需額外轉檔成傳統簡報格式即可登台報告。
不過,開發者需留意「簡報播放執行環境」與「最終簡報交付格式」的差異:此簡報者模式專注於瀏覽器端的播放體驗,與 Microsoft PowerPoint 的相容性不可等同視之;在不同瀏覽器與投影環境下仍需自行驗證。
輸入與輸出格式怎麼看?
| 類別 | 官方文件與原始碼可驗證的實作 | 開發實務解讀 |
|---|---|---|
| 投影片原始碼 | 以 index.tsx 等 React/TSX/JSX 模組為主,預設匯出 Page[] | 投影片內容即是程式碼,便於透過 Git diff 檢視變更,也利於 agent 直接編輯。 |
| 中繼資料 | 包含 SlideMeta、theme、createdAt、design、notes、transition | 可直接在程式碼中寫入標題、主視覺主題、講者備註與轉場特效等設定。 |
| 簡報資源 | 支援圖片、影片、字型等專屬或全域資源 | 素材直接收納在專案中,匯出時再由打包工具一併處理。 |
| 開發輸出 | 提供瀏覽器預覽器、縮圖功能、熱更新(HMR)與簡報者介面 | 專為作者編輯、除錯迭代與現場投影播放所設計。 |
| 靜態輸出結果 | 執行 open-slide build 所產生的靜態網頁檔案 | 適合直接部署至靜態網站代管平台,不需常駐應用程式伺服器。 |
| HTML 匯出 | 單一獨立 HTML 檔案;若有附帶資源則會將 HTML 與資產打包在一起 | 方便分發,適合做為可離線開啟播放的簡報副本。 |
| PDF 匯出 | 呼叫瀏覽器的列印流程(print-ready flow)轉存為 PDF | 適合輸出固定版面的靜態簡報,但仍需留意特殊字型與轉場效果是否跑版。 |
| PPTX 匯出 | 專案原始碼中包含以圖片為基礎的 PPTX 匯出模組 | 主要做法是將每頁投影片渲染為圖片並封裝至 PPTX 檔案,不會轉出可編輯的文字框。目前公開的 README 仍以 HTML 與 PDF 作為主要匯出管道。 |
在這些格式中,PPTX 匯出的機制特別需要釐清。從原始碼的 exportSlideAsImagePptx 實作來看,該功能會將每頁投影片以 2 倍像素比例渲染為 PNG 圖片並封裝入簡報包。這種做法屬於「將視覺設計截圖後塞入 PPTX 容器」,並不會把 React 元件轉換為 PowerPoint 的原生文字框、向量圖形或可編輯物件。如果簡報的交付條件是客戶必須能在 PowerPoint 內編輯內文,目前 open-slide 的這套匯出機制可能無法滿足此需求。
技術架構:兩個公開套件加上一個 agent-friendly workspace
open-slide 採用 pnpm 與 Turbo 組成的 monorepo 架構,其核心運作可拆解為以下三個層次:
專案啟動層:@open-slide/cli
此套件版本為 1.4.1,執行環境要求 Node.js 版本為 >=18。它主要負責執行 init 初始化工作,將基礎投影片範本、設定檔、agent 專屬技能(skills)描述以及指引手冊複製到新的工作區目錄。此外,在建置 CLI 時,它會自動將產生的 package.json 中的 @open-slide/core 版本號替換為對應的 core 版本,確保專案範本中的預留字眼不會直接變成使用者安裝時的無效版號。
核心運行層:@open-slide/core
此核心套件版本為 1.17.1,同樣限制 Node.js >=18。其內部主要包含:
- React 簡報環境:建置了首頁入口、投影片檢視器、縮圖側欄、簡報者模式、DOM 檢查器與資源管理介面。
- 開發指令
open-slide dev:用以啟動開發伺服器,支援--port、--host與--open等常見參數。 - 編譯指令
open-slide build:用於導出正式環境的靜態網站,可藉由--out-dir指定輸出路徑。 - 預覽指令
open-slide preview:用來在本機預覽編譯完成的靜態成果。 - Vite 插件:自動掃描
slides/<id>/index.{tsx,jsx,ts,js}檔案,利用虛擬模組(virtual modules)將投影片導出至執行環境,並支援在投影片檔案新增或刪除時觸發自動重載(reload)。 - 開發端 API:提供簡報檢查器、註解回寫、媒體檔案讀寫、資料夾管理及備註更新等後台 API。
套件依賴項涵蓋了 React、React DOM、Vite、Tailwind CSS、Base UI、dnd-kit、React Router、Babel parser、html-to-image 以及 fflate。從這些組成元件來看,它是一個具備視覺化編輯與雙向程式碼回寫能力的 React 專案環境,這與單純的 Markdown 轉網頁編譯器有顯著的差別。
協作規則層:Skills 機制
存放於 packages/core/skills/ 的定義檔是框架與 coding agent 溝通的權威依據。當執行 CLI 初始化時,這些定義會被搬移至 .agents/skills/,並同步在 .claude/skills/ 中建立連結。這些規則檔案規範了:
- 簡報結構的規劃守則。
- 1920 × 1080 畫布比例與字體縮放比例(type scale)。
- 素材管理、主題套用、動畫特效與過場特效的規範。
- 如何解析視覺化檢查器所產生的 comment 語法。
- 當使用者提及「這頁投影片」時,agent 如何透過讀取
current.json定位當前的簡報 ID、頁碼與選取元素。
因此,open-slide 與 AI agent 的整合,核心在於檔案與流程的約定契約。框架本身並不提供特定需要串接 token 的雲端模型服務,開發者可依喜好選用不同的 agent 工具。只要該 agent 能解讀這些 skill 規範、具備專案檔案讀寫能力,並能獨立修改 React 程式碼,就能接入這套工作流。
三種實際使用情境
1. 技術分享與團隊內部簡報
如果想將簡報程式碼、系統架構與流程圖納入版本控制,這是最契合的情境:
- 先透過
/create-slide決定投影片大綱與總頁數。 - 每一頁均能以原生 React 實作圖表、互動流程圖、程式碼高亮區塊(syntax highlighter)與醒目的排版。
- 透過
slide-authoring技能來約束畫布尺寸、字體大小與間距。 - 播放時利用簡報者模式搭配 speaker notes 順暢登台。
- 最終編譯為 static site,直接掛載在公司內部網站或轉為網址分享。
此情境的核心優勢在於簡報與專案原始碼同步存放在 Git 之中,不僅在調整簡報時能檢視 diff 紀錄,也能安心指派 agent 針對特定頁面進行微調。
2. 產品提案與路線圖(Roadmap)
商業提案往往在簡報前夕面臨標題調整、更換產品截圖或修正業務數據的需求。在此情境下,可以先讓 agent 快速產生首版草稿,隨後在瀏覽器中點選要修改的元素,將修改指令寫入為程式碼中的 marker,最後調用 /apply-comments 進行一鍵批次修改。
這套工作流非常適合用在「視覺版面已大致定案,但細部文字仍需反覆琢磨」的場景。但需注意,若簡報需要多人在瀏覽器中即時同步編輯,由於 open-slide 的架構並不屬於雲端協作簡報平台,此時仍應透過 Git 分支、PR(Pull Request)等傳統軟體工程手段來協作開發。
3. Agent 生成並需線上部署的簡報網頁
當簡報需要公開展示或託管於網路、不限於在本機播放時,open-slide 的 static build 機制可將簡報邏輯與靜態素材打包為獨立的靜態網頁專案:
pnpm build
pnpm preview
隨後只需將編譯出的靜態檔案上傳至靜態主機即可。這種模式非常適合產品發表投影片、技術文件中的互動指南、線上課程教材或內部知識庫。需要提醒的是,即使在伺服器上部署成功,網頁中的外部字體、影片格式以及瀏覽器專屬 API 能否在各種裝置上完美運作,仍需在發表前進行實際的跨瀏覽器相容性測試(QA)。
什麼時候不適合用?
1. 交付目標為「可自由編輯的商務 PowerPoint 檔案」
open-slide 的主要渲染結果為 React 渲染出的網頁畫布。即使目前的原始碼中包含了基於圖片的 PPTX 匯出功能,其本質仍是將畫面擷圖打包為簡報包。如果你的主管或客戶要求拿到簡報後,必須能直接在 PowerPoint 裡敲鍵盤修改文字、調整表格內容或編輯向量圖表,請務必選擇原生簡報格式或其他工具。
2. 習慣使用流式排版(Flow Layout)快速產出內容
1920 × 1080 的固定畫布雖然提供了像素級(pixel-level)的精密排版控制,但也意味著開發者仍要自行處理版面排版與尺寸控制。當內文字數超出預期、圖片寬高比例不合、或是因多國語言導致行寬拉長時,都需要自行撰寫 CSS 來防止文字溢出或跑版。這種設計高度有利於追求精緻視覺的簡報,但若你的目標只是快速堆砌文字清單(bullet points),這樣的自由度反而會帶來額外的切版負擔。
3. 指望框架自主決定簡報內容與數據的正確性
儘管 /create-slide 技能能協助大綱生成,檢查器也能加速版面微調,但 open-slide 核心並不在於提供事實查核、品牌語氣審查或簡報結構合理性的評估。AI agent 自動生成的數據、名言引用、圖表內容與規格描述,在正式場合發表前,依然必須由人類進行嚴格的事實審查與校對。
4. 需要完備的雲端協作平台功能
從官方的程式庫與說明文件來看,open-slide 的主力是本機開發環境、開發伺服器以及靜態網頁輸出路徑。目前的公開資料並未將其定位為一套包含使用者帳號、雲端多人共同編輯、細部權限管控、託管儲存空間或提供服務水準保證(SLA)的 SaaS 平台。此類多人協作需求,仍需開發團隊自行結合 Git 分支管理、自動化 CI/CD 以及第三方雲端代管服務來搭建。
授權與版本注意事項
專案根目錄的 LICENSE 採用 MIT 開源協定,這意味著你可自由進行使用、修改、分發與商業應用,唯需在散布時保留版權聲明與授權條款。必須注意的是,此協議僅適用於 open-slide 框架本身的程式碼;簡報中所引用的圖片、客製字型、影片素材、企業品牌商標或外部第三方樣式,其版權與授權範圍仍需開發者自行確認並遵循。
目前官方的 main 分支目前仍在持續更新中,且 @open-slide/core 與 @open-slide/cli 有各自獨立的 npm 版本號。為了建立可重複部署(reproducible)的簡報專案建置流程,強烈建議在專案中鎖定特定的 CLI 與 core 套件版本,並確實提交 lockfile,避免過度依賴無特定版本限制的 npx @open-slide/cli 執行指令。
結語:將簡報開發融入 React 的工程迭代中
open-slide 最值得關注的價值,在於將 agent 的程式碼生成優勢接到前端開發流程。它藉由設計明確的 React runtime,滿足簡報必備的畫布比例、頁面導覽、播放模式、線上檢查與匯出需求。
如果你已經習慣用 Git 控管前端專案、能適應 1920 × 1080 的固定比例畫布,且期望 agent 能直接在投影片原始碼上進行微調,那麼 open-slide 適合用來製作技術分享、產品提案、開發路線圖或互動教學簡報。最務實的做法是將其定位為「AI 協作開發 + React 簡報運行環境」的組合工具,若期望它完全替代傳統 PowerPoint 全功能辦公室套件,則可能與其實際功能定位有所出入。
官方來源
Signals
Visits
--
Waiting for Cloudflare metrics.