PowerPoint Factory 以程式碼生成可編輯企業簡報,並以 QA 把關匯出
Corporate PowerPoint decks with AI, for free: slides as code, QA as the gate
作者公開 MIT 授權的 PowerPoint Factory,將結構化投影片配方轉成可編輯的企業 PowerPoint 簡報,並以 QA 作為匯出門檻;工具本身免費,AI 圖片、影片和音樂則需 Kubeez credits。
Ask an AI chat to "make me a board deck" and you usually get one of three things:
- A wall of Markdown you still have to paste into PowerPoint.
- A picture of slides that nobody can edit.
- A
.pptxwhere the text spills off slide 4, the chart is a screenshot, and the closing slide says "Thank you! Questions?"
I wanted a fourth option: the AI writes the deck, a machine proves it is correct, and a second AI with fresh eyes judges it. That project is PowerPoint Factory. It is MIT-licensed and you can clone it today.
The sample: a 20-slide Q4 board review for Halden Logistics, a fictional company. Every shape, chart and table is native and editable in PowerPoint.
What "free" means here
- The factory is free. MIT license, no SaaS seat, no per-deck fee, no watermark.
- The toolchain is free. Bun, LibreOffice (headless rendering), poppler and open metric-compatible fonts (Carlito, Caladea, Liberation, Gelasio).
- AI images are optional. Generated photos, video and music come from Kubeez and cost credits. Without a key you get labeled placeholders and everything else still builds. Results are cached and committed, so you never pay twice for the same image.
-
You bring the agent. It is built for Claude Code, and any agent that reads
AGENTS.mdcan drive it. You can also write the recipes by hand: they are just TypeScript.
A slide is data, not coordinates
Every slide is a small typed recipe, one file per slide. You pick a layout by the message you want to land, not by where boxes go:
// slides/06-margin-bridge.ts
import { slide } from "@/slide";
export default slide({
layout: "waterfall",
eyebrow: "Results",
title: "Pricing and routes added $19M of operating profit; wage inflation took back $6M",
steps: [
{ label: "Q4 2025", value: 46, total: true },
{ label: "Pricing", value: 9 },
{ label: "Route consolidation", value: 6 },
{ label: "Wage inflation", value: -6 },
{ label: "Q4 2026", value: 55, total: true },
],
prefix: "$",
suffix: "M",
source: "Halden finance; operating profit, $M",
notes: "The operational levers more than offset wage inflation.",
});
That becomes this. Real shapes, not an image:
This is why AI is good at it. An LLM is bad at pixel geometry and good at structured data. Layouts handle the geometry, so the model only has to get the content and the story right.
There are 23 built-in layouts: cover, agenda, summary, stats, chart, waterfall, table (with RAG status and Harvey balls), 2×2 matrix, process, timeline, roadmap, next steps, references and more. Charts (column, bar, stacked, line, area, pie, doughnut) are native PowerPoint charts, so finance can still click in and fix a number.
![]() |
![]() |
| Native table with highlight and total rows | Gantt roadmap with a "today" line |
The part that makes it corporate-grade: QA
Generating a .pptx is easy. Generating one you would send to a board is not. So every build runs about 40 checks, and each one comes with a → fix hint the agent can act on:
- Layout: text overflow, measured with metric-twin fonts so wrapping matches PowerPoint; overlaps; safe margins; minimum font sizes; titles kept to two lines or fewer.
- Accessibility: WCAG AA contrast against the real backdrop, including photos and translucent scrims; alt text; real title placeholders so outline view and screen readers work.
- Copy discipline: at most 6 bullets and about 70 words per slide, no placeholder text, no emoji, and a list of banned slop words ("leverage synergies", I'm looking at you).
- Story and charts: action titles, a source line on data slides, no pies with negative values, axes that start at zero, and no "Thank you" closer. The deck ends on decisions.
- Rendered pixels: LibreOffice renders every slide to PDF and PNG, then checks for blank slides, ink touching the edge, and a pixel diff against an approved baseline.
The output folder gives you, and the agent, everything needed to look at the result: a contact sheet, one PNG per slide, a QA report, and an outline containing only the titles. If the titles alone don't tell the story, the deck isn't done.
The loop
git clone https://github.com/sebyx07/power-point-factory && cd power-point-factory
bin/setup # bun install, .env, checks LibreOffice + poppler + fonts
bin/deck loop # build + QA + screenshots of the sample deck
bin/deck new acme q1-review board-update --theme ledger
claude # then: /deck acme "Q1 board review — revenue 2M, +11%…"
The /deck command follows the same workflow a consultant would:
- Ghost deck. Write the action titles first. Each is one sentence with the takeaway, 15 words or fewer.
- Recipe. One file per slide, with the layout chosen by the message.
-
bin/deck loop. Fix every ✖ until QA passes. - Look. The agent reads the contact sheet and the full-size screenshots.
-
Fresh eyes. A separate
deck-revieweragent, which never saw the recipe, judges the screenshots and returns ship, fix or rebuild. -
Export.
bin/deck exportis QA-gated and writesCompany - Title - date.pptx/.pdf.
The agent is also told never to invent facts. A missing number becomes a TBD in the speaker notes and is listed back to you. It never ends up on a slide, and QA fails if one does.
Real photography without a stock-photo subscription: Kubeez
Stock photos are where a lot of corporate decks die: the same handshake, the same glass tower, and a license nobody checked. The factory gets its imagery from Kubeez instead, and it's what makes the sample deck look like an agency made it:
Every photo in the Halden deck is a Kubeez generation, including the cover and the warehouse shots.
Why it fits a slides-as-code workflow so well:
- One API for every kind of media. Images (text-to-image and image-to-image), video (text-to-video and image-to-video), music beds and background removal, so you can make transparent cut-outs of products or people. You can pick the model per job and choose resolutions up to 4K on models that support it.
-
Slide-shaped output. Request
16:9for full-bleed slides,3:4for a half-slide cover,1:1for objects or21:9for banners. No cropping. -
The agent can use it directly. There's a REST API for builds and an MCP server (
mcp.kubeez.com) so Claude Code can generate and preview media in the conversation. -
Built for caching. The factory hashes each prompt spec and stores the result in the deck's
assets/generated/folder, which you commit. Rebuilds are offline and free, and teammates who clone the repo never pay again for the same image.
bin/kubeez generate "aerial photo of a logistics hub at dawn, 35mm, natural light" --aspect 16:9
bin/kubeez remove-bg ./assets/product.png
bin/kubeez balance
In a recipe, an image is just a prop. The factory generates it on the first build and reads it from the cache after that. Add KUBEEZ_API_KEY to .env and you're set.
Brand once, reuse forever
Each company gets a "brand brain": BRAND.md for voice, logo rules, colors and approved facts, brand.ts for theme tokens, plus logos and reusable photos. Four built-in themes (cobalt, ledger, graphite, terracotta) all pass a WCAG AA test, and extendTheme puts your colors on top. A brand-reviewer agent checks claims and logo use against BRAND.md before anything ships.
Motion without the effect soup
Pick one motion profile per deck: none (for read-ahead decks), subtle (the default, a fade transition), build (click reveals) or keynote (Morph). Per-slide effect soup isn't an option.
Try it
- Repo: https://github.com/sebyx07/power-point-factory
- Want to see the result without installing anything? The sample
.pptxand PDF are committed. - AI images, video and music: https://kubeez.com. Get an API key at https://kubeez.com/settings/api-keys.
- Issues and PRs are welcome. The repo is maintained by an AI agent that triages, reviews and merges on green CI.
If you build a deck with it, I'd like to see the contact sheet. Drop it in the comments.
來源:DEV Community · dev.to




