
A real PowerPoint, not a picture or HTML.
🥇 The FIRST deck-generation plugin for DeepSeek Harness (dsh) 🥇
pptwise.com · 简体中文 · Install (hand it to your AI) · Commands · IR · Themes · Agent skill · ModLens (vision)
## Talk to us Issues are welcome any time. [Open one](https://github.com/liustack/pptwise/issues/new/choose), or follow **[@liustack](https://x.com/liustack)** on X. Share what you made with pptwise, which harness you use, and what the next release should solve. New releases land there first. ## Highlights **⚡ Tell your AI what to cover, get the deck.** You bring the intent, the engine turns semantic page kinds and typed components into a coherent theme-bound deck. The same bound input renders the same output every time. **✏️ Open it in PowerPoint and keep working.** Every heading, bullet, and chart bar opens in PowerPoint for you to retype and restyle. Chart and table figures are the exception: to change the numbers, have your AI rebuild that page. Start from 24 factory themes, copy one into your workspace, or extract colors and fonts from a deck your company already uses. **🔌 Installs into the agent you already use.** One command puts pptwise into DeepSeek Harness, Claude Code, or any agent that reads a skill folder (Codex and friends), and it knows how to build a deck the moment it lands. **🔁 Revisions without describing everything again.** One command opens a live preview in your browser. Tell your AI what to change in plain words, and the page refreshes itself as each revision lands. **🔒 No account, no API key to render, no network at render time.** Install it and it works. Node 22.19+ or Bun is all you need on the machine. Optional stock-photo search uses the user's own Pexels key. ## Install **Step 1, hand it to your AI.** Send it this line: > Install pptwise following https://raw.githubusercontent.com/liustack/pptwise/main/INSTALL.md, then run the health check and tell me the result. **On DeepSeek Harness, send this instead.** There pptwise is a native plugin rather than a skill folder, so it has its own guide. You pick the line, not your agent: an agent cannot reliably tell which harness it is running in. > Install pptwise following https://raw.githubusercontent.com/liustack/pptwise/main/INSTALL-dsh.md, then run the health check and tell me the result. There is no step 2. Your AI puts the skill folder where your harness reads it, and the skill brings its own version-pinned launcher, so there is no CLI to install by hand. pptwise renders a PPTX entirely locally: no API key, no account, nothing to configure for render. Optional stock-photo search needs the user's own Pexels key. The only prerequisite is Node 22.19+ (or Bun). ## Quick start IR v5 is one JSON file describing a complete bound deck. Every content page names its semantic `kind`. The theme menu turns that kind into a visual face. ```json { "version": "5", "filename": "hello.pptx", "theme": { "id": "brief" }, "slides": [ { "type": "cover", "heading": "Hello pptwise", "subheading": "A first native deck" }, { "type": "content", "kind": "points", "heading": "Why it works", "components": [ { "type": "bullets", "items": ["Semantic IR in", "Theme-menu lookup", "Native DrawingML out"] } ] }, { "type": "ending", "heading": "Thanks" } ] } ``` Save that as `deck.json`, then run: ```bash pptwise validate deck.json pptwise render deck.json -o out/hello.pptx pptwise preview deck.json -o out/review --html ``` Choose a theme from `pptwise themes --json` by matching `occasions` and `identity`. Compare two to four candidates before binding: ```bash pptwise theme try brief,swiss,memo ``` Create a complete independent v2 theme by copying a preset, forking a palette, or extracting an Office brand: ```bash pptwise theme new --from brief -o themes/acme.theme.json --id acme pptwise theme fork acme --primary "#0B5FFF" -o themes/acme-blue.theme.json --id acme-blue pptwise brand extract corp.pptx -o themes/acme-brand.theme.json --id acme-brand --from brief ``` A deck project binds one theme in `deck.spec.json`, then keeps page content in `pages/