Create, edit, and analyze PowerPoint slide decks. Use when the user asks to build presentations, modify existing PPTX files, generate slides from data, or extract content from slide decks.
npx @senso-ai/shipables install Chippers255/data-presentationsBuild polished PowerPoint slide decks — from scratch or by editing existing templates.
There are three execution paths. Pick the one that matches the task:
| Task | Path | Tools |
|---|---|---|
| Build a new deck from nothing | Create (pptxgenjs, JavaScript) | Node.js script |
| Modify an existing .pptx file | Edit (unpack XML, edit, repack) | Python scripts + Edit tool |
| Read or analyze a .pptx file | Read (markitdown + thumbnails) | Python scripts |
Use when no template or reference file is provided.
Plan the deck — decide slide count, layout variety, color palette, and typography. See references/design-principles.md for palettes, font pairings, layout patterns, and spacing rules.
Write a Node.js script that uses pptxgenjs to generate the deck. The script should be
a standalone .js file the user can keep and re-run.
See references/pptxgenjs-api.md for the full API reference
including text, shapes, images, icons, charts, tables, and slide masters.
Run it:
node generate-slides.js
Run visual QA — see the QA section below. The first render always has problems.
# prefix — "FF0000" not "#FF0000"opacity propertybreakLine: true between text array items, not \nbullet: true, never unicode "•" characterscharSpacing not letterSpacing (the latter is silently ignored)margin: 0 on text boxes when aligning precisely with shapes/iconsconst makeShadow = () => ({ ... })offset must be non-negative — use angle: 270 for upward shadowsROUNDED_RECTANGLE with rectangular accent overlaysUse when the user provides a .pptx file to modify or a template to populate.
Analyze the file:
python scripts/thumbnail.py input.pptx
python -m markitdown input.pptx
Review the thumbnail grid to see layouts. Review markitdown output for text content.
Unpack:
python scripts/office/unpack.py input.pptx unpacked/
Structural changes first (before editing any content):
python scripts/office/add_slide.py unpacked/ slide2.xml<p:sldId> from ppt/presentation.xml<p:sldId> elements within <p:sldIdLst>Edit content — read each slide's XML, find placeholder text, replace with final content. Use the Edit tool for all XML changes. See references/xml-editing.md for formatting rules.
Clean:
python scripts/clean.py unpacked/
Pack:
python scripts/office/pack.py unpacked/ output.pptx --original input.pptx
Run visual QA — see below.
<a:p> — never concatenate into one text run<a:pPr> from original paragraphs to preserve line spacing“ ” ‘ ’xml:space="preserve" on <a:t> elements with leading/trailing spacesadd_slide.py# Extract all text
python -m markitdown presentation.pptx
# Visual thumbnail grid
python scripts/thumbnail.py presentation.pptx
# Raw XML access
python scripts/office/unpack.py presentation.pptx unpacked/
The first render always has problems. Your job is to find them.
python scripts/office/soffice.py input.pptx output.pdf
rm -f slide-*.jpg
pdftoppm -jpeg -r 150 output.pdf slide
ls -1 "$PWD"/slide-*.jpg
Always rm -f slide-*.jpg first to clear stale images. After fixes, rerun all four commands.
Inspect every slide image for:
Check for placeholders:
python -m markitdown output.pptx | grep -iE "\bx{3,}\b|lorem|ipsum|\bTODO|\[insert"
Do not declare success until at least one full fix-and-verify cycle completes.
These contain detailed API docs, loaded on demand: