powerpoint-presentations
PowerPoint Presentations
Quick Reference
| Task | How |
|---|---|
| Create from scratch | get_slide_design_reference → create_presentation (PptxGenJS). Read pptxgenjs.md. |
| Create from template | get_presentation_layouts → delete_slides (strip content) → add_slide → update_slide_content. Do NOT use create_presentation. |
| Edit existing | analyze_presentation → update_slide_content. Read editing-guide.md. |
| Verify | preview_presentation_slides after every change |
Design Ideas
Don't create boring slides. Plain bullets on a white background won't impress anyone.
Before Starting
- Pick a bold, content-informed color palette: The palette should feel designed for THIS topic.
- Dominance over equality: One color dominates (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.
- Dark/light contrast: Dark backgrounds for title + conclusion slides, lighter tints for content slides. Or commit to dark throughout for a premium feel.
- Commit to a visual motif: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles, thick single-side borders.
Color Palettes
Choose colors that match your topic — don't default to generic blue.
| Theme | Primary | Secondary | Accent |
|---|---|---|---|
| Midnight Executive | 1E2761 (navy) |
CADCFC (ice blue) |
FFFFFF (white) |
| Teal Trust | 028090 (teal) |
00A896 (seafoam) |
02C39A (mint) |
| Forest & Moss | 2C5F2D (forest) |
97BC62 (moss) |
F5F5F5 (cream) |
| Berry & Cream | 6D2E46 (berry) |
A26769 (dusty rose) |
ECE2D0 (cream) |
| Coral Energy | F96167 (coral) |
F9E795 (gold) |
2F3C7E (navy) |
| Ocean Gradient | 065A82 (ocean) |
1C7293 (teal) |
21295C (midnight) |
| Charcoal Minimal | 36454F (charcoal) |
F2F2F2 (off-white) |
212121 (black) |
| Cherry Bold | 990011 (cherry) |
FCF6F5 (off-white) |
2F3C7E (navy) |
| Sage Calm | 84B59F (sage) |
69A297 (eucalyptus) |
50808E (slate) |
| Warm Terracotta | B85042 (terracotta) |
E7E8D1 (sand) |
A7BEAE (sage) |
For Each Slide
Every slide needs a visual element — image, chart, icon, or shape. Text-only slides are forgettable.
Layout options:
- Two-column (text left, illustration right)
- Icon + text rows (icon in colored circle, bold header, description below)
- 2x2 or 2x3 grid (image one side, content blocks the other)
- Half-bleed image (full left or right) with content overlay
Data display:
- Large stat callouts (big numbers 60-72pt with small labels below)
- Comparison columns (before/after, pros/cons, side-by-side options)
- Timeline or process flow (numbered steps, arrows)
Visual polish:
- Icons in small colored circles next to section headers
- Italic accent text for key stats or taglines
Typography
| Header Font | Body Font |
|---|---|
| Georgia | Calibri |
| Arial Black | Arial |
| Calibri Bold | Calibri Light |
| Cambria | Calibri |
| Trebuchet MS | Calibri |
| Element | Size |
|---|---|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt muted |
Font pairings: Georgia + Calibri (classic), Arial Black + Arial (modern), Calibri Bold + Calibri Light (corporate). Left-align body text; center only titles and stats.
Spacing
- 0.5" minimum margins from edges
- 0.3-0.5" between content blocks
- 0.5"+ breathing room below titles
Avoid (Common Mistakes)
- Plain bullets on white background — always fill slides with a palette color
- Default PowerPoint blue (#4472C4) — signals "auto-generated"
- Don't repeat the same layout — vary columns, cards, and callouts across slides
- Don't center body text — left-align paragraphs; center only titles and stats
- Don't skimp on size contrast — titles need 36pt+ to stand out from 14-16pt body
- Don't mix spacing randomly — choose 0.3" or 0.5" gaps and use consistently
- Don't style one slide and leave the rest plain — commit fully or keep it simple throughout
- Don't create text-only slides — add shapes, icons, charts, or accent elements
- Don't forget text box padding — set
margin: 0when aligning text with shapes at same x-position - Don't use low-contrast elements — text AND icons need strong contrast against background
- NEVER use accent lines under titles — use whitespace or background color instead
- Don't overcrowd slides — max 4 bullets; split to multiple slides or use 2x2/3-column grid
See design-guide.md for visual element code patterns (accent bars, icon circles, side stripes, cards).
Workflow
A. Create from scratch (no template)
- Call
get_slide_design_referencefor palette and layout ideas - Call
create_presentationwithslidesparameter (PptxGenJS). Read pptxgenjs.md for the full API.
B. Create from a template (user uploaded a .pptx template)
Do NOT use create_presentation — that ignores the template entirely and recreates from scratch.
Instead, use the template file as the base:
get_presentation_layouts("template-name")— see available layout namespreview_presentation_slides— inspect visual style (colors, logo, footer, chrome elements)delete_slides("template-name", [indices of all content slides], "working-name")— strip example content, keep masters/layoutsadd_slide("working-name", layout_name, position, "working-name-v2")— add slides using the template's own layouts (inherits background, logo, footer automatically)update_slide_content(...)— fill in text and images
This preserves the template's slide master, theme, logo, footer, and background — things create_presentation cannot replicate.
C. Edit existing presentation
Read editing-guide.md for detailed workflows. Then: analyze_presentation → identify element IDs → update_slide_content.
Verify
Call preview_presentation_slides after any modification. Assume there are problems — inspect carefully.
When continuing a deck across conversation turns: Do NOT re-preview existing slides just to check the design system. The palette, fonts, and layout decisions from the previous turn are already in the conversation history — use that. Only re-preview if you need to verify the visual state after a modification.
Rules
- Batch all edits in ONE
update_slide_contentcall. Parallel calls cause data loss. output_namemust differ frompresentation_name.- All slide indices are 0-based EXCEPT
preview_presentation_slideswhich uses 1-basedslide_numbers. - Filenames: letters, numbers, hyphens only.
QA (Required)
Assume there are problems. Your job is to find them.
Your first render is almost never perfect. Approach QA as a bug hunt, not a confirmation step.
Visual QA
Call preview_presentation_slides and visually inspect the screenshots. Look for:
- Overlapping elements (text through shapes, lines through words)
- Text overflow or cut off at edges
- Elements too close (< 0.3" gaps) or cards 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 (light text on light background, dark text on dark background)
- Low-contrast icons without a contrasting background circle
- Text boxes too narrow causing excessive wrapping
- Inconsistent font sizes or styles across similar elements
Verification Loop
- Generate →
preview_presentation_slides→ inspect screenshots - List issues found (if none found, look again more critically)
- Fix with
update_slide_content - Re-verify affected slides — one fix often creates another problem
- Repeat until a full pass reveals no new issues
Do not declare success until you've completed at least one fix-and-verify cycle.
Tool Reference
get_slide_design_reference
Get design guidelines, color palettes, typography rules, and layout patterns.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic |
str | No (default "all") | "colors", "typography", "layouts", "pitfalls", "all" |
create_presentation
Create a new presentation with custom-designed slides (16:9 widescreen).
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | Filename without extension (letters, numbers, hyphens only) |
slides |
list or null | Yes | List of {"custom_code": "..."} dicts, or null for blank |
Example tool_input:
{
"presentation_name": "my-deck",
"slides": [
{"custom_code": "let slide = pres.addSlide();\nslide.background = { color: '1E2761' };\nslide.addText('Welcome', { x: 0.6, y: 2.5, w: 10, h: 1.5, fontSize: 44, bold: true, color: 'FFFFFF', align: 'center' });"}
]
}
IMPORTANT: custom_code uses pres in scope. Create slides with pres.addSlide(). Colors are 6-digit hex WITHOUT '#'. Do NOT reuse option objects across multiple addText/addShape calls. See pptxgenjs.md for full API.
analyze_presentation
Analyze structure with element IDs and positions for editing.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | Presentation to analyze |
slide_index |
int | No | Analyze a specific slide only |
include_notes |
bool | No (default false) | Include speaker notes |
update_slide_content
Update one or more slides with operations in a single call.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | Source file |
slide_updates |
list | Yes | List of update operations |
output_name |
str | Yes | Output filename (MUST differ from source) |
Supported actions per operation: set_text, replace_text, replace_image. See editing-guide.md for details.
add_slide
Add a new blank slide at a specific position.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | Source presentation |
layout_name |
str | Yes | Layout name from get_presentation_layouts |
position |
int | Yes | 0-based index (-1 to append at end) |
output_name |
str | Yes | Output filename |
After adding, populate content with update_slide_content.
delete_slides
| Parameter | Type | Required |
|---|---|---|
presentation_name |
str | Yes |
slide_indices |
list[int] | Yes (0-based) |
output_name |
str | Yes |
move_slide
| Parameter | Type | Required |
|---|---|---|
presentation_name |
str | Yes |
from_index |
int | Yes (0-based) |
to_index |
int | Yes (0-based) |
output_name |
str | Yes |
duplicate_slide
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | |
source_index |
int | Yes (0-based) | Slide to duplicate |
output_name |
str | Yes | |
insert_position |
int | No (default -1) | Where to insert copy; -1 appends after source |
update_slide_notes
| Parameter | Type | Required |
|---|---|---|
presentation_name |
str | Yes |
slide_index |
int | Yes (0-based) |
notes_text |
str | Yes |
output_name |
str | Yes |
list_my_powerpoint_presentations
List all presentations in workspace. No parameters needed.
get_presentation_layouts
Get available slide layouts from a presentation.
| Parameter | Type | Required |
|---|---|---|
presentation_name |
str | Yes |
preview_presentation_slides
Get slide screenshots for visual inspection.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name |
str | Yes | Presentation to preview |
slide_numbers |
list[int] | Yes | 1-based slide numbers (not 0-based) |