Important: All
scripts/paths are relative to this skill directory. Run with:cd {this_skill_dir} && python scripts/...Or use thecwdparameter ofexecute_shell_command.
npm install -g pptxgenjs): creating presentations from scratchsoffice): presentation-to-PDF conversionpdftoppm is unavailable, a Python fallback path may use pdf2image.PATH; if missing, report the dependency issue and stop (do not keep retrying).TaskGuideRead/analyze contentpython -m markitdown presentation.pptxEdit or create from templateRead editing.mdCreate from scratchRead pptxgenjs.md
bash
# Text extraction
python -m markitdown presentation.pptx
# Visual overview
python scripts/thumbnail.py presentation.pptx
# Raw XML
python scripts/office/unpack.py presentation.pptx unpacked/
Read editing.md for full details.
thumbnail.pyRead pptxgenjs.md for full details.
Use when no template or reference presentation is available.
Don't create boring slides. Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.
Choose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:
ThemePrimarySecondaryAccentMidnight Executive1E2761 (navy)CADCFC (ice blue)FFFFFF (white)Forest & Moss2C5F2D (forest)97BC62 (moss)F5F5F5 (cream)Coral EnergyF96167 (coral)F9E795 (gold)2F3C7E (navy)Warm TerracottaB85042 (terracotta)E7E8D1 (sand)A7BEAE (sage)Ocean Gradient065A82 (deep blue)1C7293 (teal)21295C (midnight)Charcoal Minimal36454F (charcoal)F2F2F2 (off-white)212121 (black)Teal Trust028090 (teal)00A896 (seafoam)02C39A (mint)Berry & Cream6D2E46 (berry)A26769 (dusty rose)ECE2D0 (cream)Sage Calm84B59F (sage)69A297 (eucalyptus)50808E (slate)Cherry Bold990011 (cherry)FCF6F5 (off-white)2F3C7E (navy)
Every slide needs a visual element — image, chart, icon, or shape. Text-only slides are forgettable.
Layout options:
Data display:
Visual polish:
Choose an interesting font pairing — don't default to Arial. Pick a header font with personality and pair it with a clean body font.
Header FontBody FontGeorgiaCalibriArial BlackArialCalibriCalibri LightCambriaCalibriTrebuchet MSCalibriImpactArialPalatinoGaramondConsolasCalibriElementSizeSlide title36-44pt boldSection header20-24pt boldBody text14-16ptCaptions10-12pt muted
Content TypeRecommended LayoutWhyExecutive summary / thesisFull-slide title + subtitle (no body)Punchy opener that sets the tone3-5 key pointsIcon + text rows (icon circles, bold header, description)Scannable, visual rhythm6+ key points2-column grid (icon + text blocks)Space-efficient without making each item tinyTime series dataChart slide (line/bar, large numbers callout)Visual trend recognitionComparison (A vs B)Split column (left vs right) or before/after layoutSide-by-side highlights differencesProcess flowNumbered steps with arrows betweenDirectional flow is intuitiveData-heavy slideMinimal header + one large chart + 1-2 stat calloutsChart is the hero, not bulletsTeam / people introPhoto + name + role card (2x2 or 3 grid)Personal connection via facesQuote / testimonialCentered pull-quote format (large italic, subtle background)Emphasis through whitespaceCall to action / closingBold statement + next step (full-slide impact)Reader remembers the last thing they see
margin: 0 on the text box or offset the shape to account for paddingAssume there are problems. Your job is to find them.
Your first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren't looking hard enough.
bash
python -m markitdown output.pptx
Check for missing content, typos, wrong order.
When using templates, check for leftover placeholder text:
bash
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
If grep returns results, fix them before declaring success.
⚠️ USE SUBAGENTS — even for 2-3 slides. You've been staring at the code and will see what you expect, not what's there. Subagents have fresh eyes.
Convert slides to images (see Converting to Images), then use this prompt:
text
Visually inspect these slides. Assume there are issues — find them.
Look for:
- Overlapping elements (text through shapes, lines through words, stacked elements)
- Text overflow or cut off at edges/box boundaries
- Decorative lines positioned for single-line text but title wrapped to two lines
- Source citations or footers colliding with content above
- Elements too close (< 0.3" gaps) or cards/sections nearly touching
- Uneven gaps (large empty area in one place, cramped in another)
- Insufficient margin from slide edges (< 0.5")
- Columns or similar elements not aligned consistently
- Low-contrast text (e.g., light gray text on cream-colored background)
- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)
- Text boxes too narrow causing excessive wrapping
- Leftover placeholder content
For each slide, list issues or areas of concern, even if minor.
Read and analyze these images:
1. /path/to/slide-01.jpg (Expected: [brief description])
2. /path/to/slide-02.jpg (Expected: [brief description])
Report ALL issues found, including minor ones.
margin: 0 or sufficient clearance)Do not declare success until you've completed at least one fix-and-verify cycle.
Convert presentations to individual slide images for visual inspection:
bash
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide
This creates slide-01.jpg, slide-02.jpg, etc.
To re-render specific slides after fixes:
bash
pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed
PitfallCorrect ApproachText cut off at edgeAdd margin: 0 to text box; leave 0.5" slide marginText overflowing shape boundaryIncrease text box height or reduce font by 2ptTitle accent line (AI hallmark)Use whitespace or background color instead of decorative linesLow-contrast text/iconsAlways check foreground vs background — use contrasting circle for icons on darkOne-off layout repeated across all slidesVary columns, cards, and callouts — monotony loses audienceDefault blue color schemePick a topic-specific palette before startingCentered body textLeft-align paragraphs and lists; center only titlesPlaceholder remnantsAlways `grep -iE "xxxxMixed font pairingsPick one header/body pair and apply consistently across all slidesForgetting pptxgenjs.md layout prop overridesSee pptxgenjs.md — x, y, w, h override auto-layout
IssueWorkaround / Notepptxgenjs no visual previewMust convert to images via soffice → pdftoppm. No runtime render.No Unicode emoji support in pptxgenjsUse image of the emoji, or a simple shape/icon instead.Text box auto-resize differs from PowerPointSet explicit h and margin: 0 on pptxgenjs text objects.Chart data must exist before pptxgenjs chart creationCannot add data series after chart is instantiated — plan all series upfront.Template editing requires XML knowledgeSee editing.md — unpack, manipulate slide XML, repack pipeline.Image aspect ratio distortionAlways specify both w and h matching original aspect ratio; pptxgenjs does not auto-constrain.