Same content, four completely different visual styles, all generated with the pptx-from-html skill.
content.md <- The shared content (5-slide Q2 report)
style-exploration.html <- 20 styles on one page for comparison
html/ <- Full 5-slide HTML decks (the design spec)
pptx/ <- Compiled PPTX files (the deliverable)
assets/ <- Background pattern images for PPTX compilation
| Style | Character |
|---|---|
| Neobrutalism | Candy colors, thick black borders, offset shadows. Current web design trend. |
| Chinese Ink | Rice paper, ink wash, red seal stamps. Classical Chinese aesthetic. |
| Pitch Deck Bold | Black/white alternation, enormous numbers, minimal text. YC Demo Day energy. |
| Soviet Constructivism | Red/black/cream only, diagonal compositions, propaganda poster power. |
- Wrote
content.md— the 5-slide content script - Generated
style-exploration.html— 20 styles as thumbnails on one page - Iterated with user — kill/keep/add cycles over 3 rounds until 4 finalists
- Generated complete HTML decks in
html/ - Compiled to PPTX using the
/pptxskill with the HTML as pixel-level spec - QA — rendered PPTX to images, compared against HTML screenshots, fixed issues
We tested SVG as an alternative intermediate format (see ppt-master for a good SVG-based approach). We stayed with HTML for our use case:
-
AI understands HTML better. HTML's layout model (flexbox, grid, CSS) is richer and more natural for the AI. The resulting designs have fewer missing details and better match the user's intent.
-
No custom converter needed. SVG-to-PowerPoint requires a mechanical converter to handle gradients, shadows, text, groups, etc. With HTML, the AI does the translation via the
/pptxskill — making judgment calls about what to render natively vs. what to pre-render as images. No rigid pipeline needed.
Some CSS effects (hard offset shadows, repeating gradients, rotated shapes with borders) can't be reproduced faithfully by PptxGenJS. The workaround:
- Design the element as SVG or HTML/CSS
- Render to transparent PNG at 2x resolution via Playwright
- Place the PNG as an image element in the slide
- Add native text boxes on top for editable text
This is done per element, not per slide — each card or shape gets its own PNG, keeping everything individually adjustable in PowerPoint.
See assets/hatching-pattern.html for a CSS pattern source and assets/*.png
for the rendered tiles.