Work on an EXISTING PowerPoint with the DeckCraft engine in one command: render any slide (or all) to PNG for a visual check, convert pptx to PDF (with notes or handout layouts), to an outline, or to an animated GIF, print its structure as JSON, and edit it with a JSON command list (new slides, text boxes, tables, charts, replace text) without opening a window. Use for: thumbnails or previews of a deck, pptx to PDF/handouts, deck to outline, adding or changing slides in a given deck, checking what a deck looks like. For a NEW deck from an outline use deck-builder. Triggers: preview slides, render deck, pptx to pdf, handouts, edit this presentation, deck outline, slide images.
Say it in your own words; the assistant finds this recipe by itself. Examples:
Work on an EXISTING PowerPoint with the DeckCraft engine in one command: render any slide (or all) to PNG for a visual check, convert pptx to PDF (with notes or handout layouts), to an outline, or to an animated GIF, print its structure as JSON, and edit it with a JSON command list (new slides, text boxes, tables, charts, replace text) without opening a window. Use for: thumbnails or previews of a deck, pptx to PDF/handouts, deck to outline, adding or changing slides in a given deck, checking what a deck looks like. For a NEW deck from an outline use deck-builder. Triggers: preview slides, render deck, pptx to pdf, handouts, edit this presentation, deck outline, slide images.
python3 /skills/deck-craft/scripts/deck.py <verb> … wraps deckcraft-cli, a native engine that
reads and writes real .pptx without PowerPoint or LibreOffice. Every verb prints one OK … line or
one ERROR … line. Inputs the person uploaded are in /work/in; write results to /work/out.
| Need | Command |
|---|---|
| Preview slides as images | deck.py render /work/in/deck.pptx /work/out/preview → preview/slide-01.png … (add --slide 3 for one) |
| pptx → PDF | deck.py convert /work/in/deck.pptx /work/out/deck.pdf (--layout handouts --per-page 3 or --layout notes) |
| Outline of a deck as Markdown | deck.py outline /work/in/deck.pptx /work/out/outline.md |
| What is in it (slides, layouts, theme) | deck.py info /work/in/deck.pptx |
| Edit a deck | deck.py edit /work/in/deck.pptx /work/out/deck.pptx --script /work/edit.json |
| Animated GIF of the deck | deck.py convert /work/in/deck.pptx /work/out/deck.gif |
/work/edit.json is a list of commands, each {"command": "...", "params": {...}}. Useful ones
(deckcraft-cli commands lists all 321, deckcraft-cli describe slide.new explains one):
[
{"command": "slide.go", "params": {"index": 2}},
{"command": "slide.new", "params": {"layout": "titleAndContent", "title": "Next steps", "body": "Pilot one team\nMeasure 90 days\nDecide"}},
{"command": "insert.textBox", "params": {"rect": [60, 440, 840, 60], "text": "Confidential"}},
{"command": "insert.chart", "params": {"type": "column", "rect": [80, 120, 800, 380], "categories": ["Q1", "Q2", "Q3"], "series": [{"name": "Revenue", "values": [7.2, 8.1, 9.1]}]}},
{"command": "text.replace", "params": {"text": "2026", "with": "2027"}},
{"command": "slide.delete", "params": {"index": 19}}
]
Positions are points on a 960×540 slide (rect = [x, y, w, h]); slide indices start at 0;
slide.new inserts after the current slide and makes it current. Render the result afterwards to
check it (deck.py render … --slide N), and give the person the links.
SKILL.mdscripts/deck.pyWritten by Percerno, MIT licence.