| name | azure-pptx |
| description | Use this skill any time a .pptx file is involved â as input, output, or both. This includes creating, reading, editing, or modifying presentations. Trigger whenever the user mentions "deck," "slides," "presentation," or references a .pptx filename. This project uses the Microsoft Azure PowerPoint Template (Light). |
| license | Proprietary. LICENSE.txt has complete terms |
PPTX Skill
åºèª: Anthropic PPTX Skill ãããŒã¹ã«ããããžã§ã¯ãåºæã®ã«ãŒã«ã远å ã
ãðãããŒã¯ã®ããã»ã¯ã·ã§ã³ã¯æ¬ãªããžããªå°çšã®ã«ãŒã«ã§ãããããŒã¹ã¹ãã«ã«ã¯å«ãŸããªãã
Quick Reference
Reading Content
uv run python -m markitdown presentation.pptx
uv run scripts/thumbnail.py presentation.pptx
uv run scripts/office/unpack.py presentation.pptx unpacked/
Editing Workflow
Read references/editing.md for full details.
- Analyze template with
thumbnail.py
- Unpack â manipulate slides â edit content â clean â pack
This project uses the Azure template. Read references/azure-template.md for template-specific details (fonts, layout indices, placeholder mappings, bullet rules). ð
ð ãã®ãããžã§ã¯ãåºæã®å¶çŽ
.pptx ãæ°èŠäœæã»ç·šéããå ŽåãMicrosoft Azure PowerPoint Template (Light) ã®å©çšã¯å¿
é
- ãã³ãã¬ãŒãã䜿ããã«ãŒãããçµãæ¡ããéåžžæ¡ãšããŠéžãã§ã¯ãªããªã
- ãã³ãã¬ãŒãæªäœ¿çšã®
.pptx ãäœã£ãæç¹ã§ããã®ãããžã§ã¯ãã§ã¯èŠä»¶æªé
- ããŸããã³ãã¬ãŒããªãã§äœã£ãŠãããšã§æŽããããšããé²ãæ¹ãäžå¯
è£è¶³: python-pptx / pptxgenjs ã®å©çšã«ã€ããŠ
äžèšã§çŠæ¢ããŠããã®ã¯ããã³ãã¬ãŒãã䜿ããã«ãŒãããäœããããšã§ãããããŒã«èªäœã®å©çšã§ã¯ãªãã
- â
python-pptx ã§ ãã³ãã¬ãŒã .potx/.pptx ãéã㊠ã¹ã©ã€ããç·šéã»è¿œå ã»åé€ãã â ãã³ãã¬ãŒãå©çš
- â python-pptx ã§
Presentation() ã空ããäœã â ãã³ãã¬ãŒãæªäœ¿çš
- â pptxgenjs ã§ç¬èªãã¶ã€ã³ã®ã¹ã©ã€ããçæãã â ãã³ãã¬ãŒãæªäœ¿çš
ð äŸå€
次ã®å Žåã«éãããã³ãã¬ãŒãæªäœ¿çšæ¡ãæ€èšããŠããã
- ãŠãŒã¶ãŒããã³ãã¬ãŒãäžèŠãšæç€ºããå Žå
- æ¢åãã³ãã¬ãŒãã§ã¯ç©ççã«è¡šçŸã§ãããä»£æ¿æ¡ã®æ€èšããŠãŒã¶ãŒãæç€ºçã«æ±ããå Žå
äžèšä»¥å€ã§ã¯ããã³ãã¬ãŒãæªäœ¿çšæ¡ãèªåã®å€æã§æ¡çšããªãã
ð å®è£
åãã§ãã¯
ã¹ã©ã€ãäœæãå§ããåã«ãå°ãªããšã次ã確å®ããããšã
- ã©ã® Azure template layout ã䜿ãã
- ç»åäžå¿ã®ã¹ã©ã€ãããç»å + æ¬æã®äœµçœ®ã
- å³è¡šãå€éšç»åã䜿ãå Žåãããã 1 ã¹ã©ã€ãã§èªããã
- èªããªãå Žåãç»ååã蟌ã¿ã諊ããŠå¥è³æåç
§ã«åãæ¿ããã
ãã®ç¢ºèªãããã«ãäœããããæ¹æ³ãã§æ°èŠçæãžé²ãŸãªãããšã
ð ãã®ãªããžããªã§åŸãéçšã¡ã¢
- Azure template åºæã®ã¬ã€ã¢ãŠãéžæãThank you ã®äœ¿ãæ¹ãdraw.io å³ã®è²ŒãèŸŒã¿æ¹ã¯
references/azure-template.md ã«è¿œèšããŠç®¡çãã
- æŠèŠå³ã倧ããã㊠1 ã¹ã©ã€ãã§èªããªãå Žåãå³ã®è²Œã蟌ã¿ãå¿
é ã«ããªããã¹ã©ã€ãã«ã¯èŠç¹ã ããèŒããå³ã¯å¥è³æåç
§ã«åãæ¿ããŠãã
SKILL.md ã«ã¯ãã〠template ã䜿ããããã©ãããé åºã§é²ããããã®æ¹éã ããæžããåå¥ã¬ã€ã¢ãŠãã®éçšè©³çŽ°ã¯æã¡èŸŒãŸãªã
- åååºåããã®ãŸãŸå®ææ±ãã«ããªãã
markitdown ãš soffice -> pdftoppm ã®äž¡æ¹ã§å
容ãšèŠãç®ã確èªããŠããä»äžãã
ð ãã³ãã¬ãŒãããæ°èŠäœæ
ãã³ãã¬ãŒããããŒã¹ã«æ°èŠãã¬ãŒã³ããŒã·ã§ã³ãäœãå ŽåãXML çŽæ¥æäœã§ã¯ãªã python-pptx ã䜿ãã
ãªã XML çŽæ¥æäœã§ã¯ãªã python-pptx ã: ãã³ãã¬ãŒãã® XML æ§é ã«ã¯ã¹ã©ã€ãéã®çžäºåç
§ïŒsldIdLstãp14:sectionLstãpresentation.xml.relsïŒã倿°å«ãŸãããXML çŽæ¥æäœã§ã¹ã©ã€ããåé€ãããšå€å
åç
§ãæ®ããPowerPoint ãç Žæãšå€å®ãããpython-pptx ã¯ãããã®åç
§ãå
éšã§ç®¡çãããããç XML æäœããå®å
šã§ããããã ãã以äžã®ã¹ã©ã€ãåé€ã³ãŒã㯠_sldIdLst çã® private API ã«äŸåãããããpython-pptx ã®ããŒãžã§ã³æŽæ°æã«ã¯åäœç¢ºèªãå¿
èŠã
æé
- ãã³ãã¬ãŒãã .pptx ã«å€æ:
.potx ã zip ãšããŠéãã[Content_Types].xml å
ã® presentationml.template.main+xml ã presentationml.presentation.main+xml ã«çœ®æã㊠.pptx ãšããŠä¿å
- python-pptx ã§éã:
Presentation('template.pptx') ã§ã¹ã©ã€ããã¹ã¿ãŒã»ã¬ã€ã¢ãŠããå«ãç¶æ
ã§éã
- äžèŠã¹ã©ã€ããåé€: ãã³ãã¬ãŒãã®ãµã³ãã«ã¹ã©ã€ããåé€ïŒäžèšã³ãŒãåç
§ïŒ
- æ°èŠã¹ã©ã€ãã远å :
prs.slide_layouts[N] ããã¬ã€ã¢ãŠããéžã³ãprs.slides.add_slide(layout) ã§è¿œå
- ã³ã³ãã³ããèšå®: ãã¬ãŒã¹ãã«ãã«ããã¹ãã»è¡šã»ç»åãæ¿å
¥
- ä¿å:
prs.save('output.pptx')
python-pptx ã§ã®ã¹ã©ã€ãåé€
def delete_slide(prs, slide_index):
"""æå®ã€ã³ããã¯ã¹ã®ã¹ã©ã€ããåé€ããã"""
rId = prs.slides._sldIdLst[slide_index].get(
"{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id"
)
prs.part.drop_rel(rId)
del prs.slides._sldIdLst[slide_index]
for i in range(len(prs.slides) - 1, -1, -1):
delete_slide(prs, i)
Creating from Scratch
ð ãã®ãªããžããªã§ã¯äŸå€æã®ã¿äœ¿çšã Azure template å©çšãåæã®ããããŠãŒã¶ãŒãæç€ºçã«äŸå€ãèªããå Žåã®ã¿äœ¿ãã
Read references/pptxgenjs.md for full details.
ð ã¹ã©ã€ãã³ã³ãã³ãã®ã«ãŒã«
èšèé£ã
- ããã¹ããã©ã¯ãã£ã¹ããèªåããªã©ã®ææ§ã»åé·ãªè¡šçŸãé¿ããå
·äœçã«äœãã©ãããããæžã
- AIãšãŒãžã§ã³ãã®åäœãšããŠåœç¶ã®ããšïŒçæãååŸãåæãªã©ïŒã«ãèªåãã¯ä»ããªã
- ææ§ãªçšèªã¯å
·äœçãªå¯Ÿè±¡ã«çœ®ãæããïŒäŸ: ããã¹ããã©ã¯ãã£ã¹ãâãBicepã¹ããŒããããµãŒãã¹æšå¥šæ§æãïŒ
ããŒã«ã»æ©èœã®åºæãæèšãã
ð Copilot CLI / MCP ããŒã«ç޹ä»ã¹ã©ã€ããäœãå Žåã®ã«ãŒã«ãäžè¬çãªã¢ãŒããã¯ãã£è³æãæ¥åè³æã«ã¯æ©æ¢°çã«é©çšããªãã
- ããŒã«ãæ©èœãã¹ã©ã€ãã§èª¬æããéã¯ãæäŸå
ãå¿
ãæèšãã
- Azure MCP Server ã®ããŒã«ïŒaks, bicepschema, applens çïŒ
- MS Learn MCP Server ã®ããŒã«ïŒmicrosoft_docs_search, code_sample_search çïŒ
- Copilot CLI çµã¿èŸŒã¿æ©èœïŒ/research, /model, /skills çïŒ
- Copilot CLI SkillïŒazure-pptx, azure-drawio çïŒ
- ã°ã«ãŒããããïŒå€ªåïŒïŒã€ã³ãã³ãããããµãé
ç®ã§æ§é åãã
- ããŒã«åã ãåæãããäœãã§ããããæ·»ããïŒäŸ: ãapplensãâãapplensïŒãåé¡ã®èšºæãšè§£æ±ºãæ©èœïŒã§åé¡ãæ€åºãïŒ
èŽè¡èŠç¹ã§ã®æ€èšŒ
- ã¹ã©ã€ããæžãéã¯ãèŽè¡ããããèŠãŠçè§£ã§ãããïŒæ¬¡ã«äœãç¥ããããïŒããèæ
®ãã
- æœè±¡çãªèª¬æã«ã¯å
·äœäŸïŒããŒã«åãã³ãã³ãäŸããŠãŒã¹ã±ãŒã¹ïŒãæ·»ãã
- å°éçšèªããµãŒãã¹åãååºã®å Žåã¯ãäœã§ããããè£è¶³ãã
ã¹ã©ã€ãæ§æã»é åº
- åãã«ããŽãªã»ããŒãã®ã¹ã©ã€ãã¯é£æ¥ããã
- ã¹ã©ã€ãã®è¿œå ã»ç§»ååŸã¯ãå€ç«ããã¹ã©ã€ãããªããå
šäœã確èªãã
- åã®ã¹ã©ã€ãã§èšåããæŠå¿µããåŸã®ã¹ã©ã€ãã§èª¬æãããé åºãæèãã
Design Ideas
ð ãã³ãã¬ãŒãå©çšæã®æ³šæ: Azure template ã¯ãã©ã³ãã«ã©ãŒïŒAzure Blue ç³»ïŒã»ãã©ã³ãïŒSegoe UIïŒãåºå®ãããŠããã以äžã® Color Palettes / Typography ã»ã¯ã·ã§ã³ã¯ãã³ãã¬ãŒãæªäœ¿çšæïŒpptxgenjsïŒã®åèã§ãããAzure template å©çšæã¯ãã³ãã¬ãŒãã®ã¹ã¿ã€ã«ã«åŸãããšãã¬ã€ã¢ãŠãæéã»ã¹ããŒã·ã³ã°ã»Data display ã®èãæ¹ã¯åèã«ããŠããã
Don't create boring slides. Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.
Before Starting
- Pick a bold, content-informed color palette: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still "work," you haven't made specific enough choices.
- Dominance over equality: One color should dominate (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, light for content ("sandwich" structure). 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. Carry it across every slide.
Color Palettes
Choose colors that match your topic â don't default to generic blue. Use these palettes as inspiration:
| Theme | Primary | Secondary | Accent |
|---|
| Midnight Executive | 1E2761 (navy) | CADCFC (ice blue) | FFFFFF (white) |
| Forest & Moss | 2C5F2D (forest) | 97BC62 (moss) | F5F5F5 (cream) |
| Coral Energy | F96167 (coral) | F9E795 (gold) | 2F3C7E (navy) |
| Warm Terracotta | B85042 (terracotta) | E7E8D1 (sand) | A7BEAE (sage) |
| Ocean Gradient | 065A82 (deep blue) | 1C7293 (teal) | 21295C (midnight) |
| Charcoal Minimal | 36454F (charcoal) | F2F2F2 (off-white) | 212121 (black) |
| Teal Trust | 028090 (teal) | 00A896 (seafoam) | 02C39A (mint) |
| Berry & Cream | 6D2E46 (berry) | A26769 (dusty rose) | ECE2D0 (cream) |
| Sage Calm | 84B59F (sage) | 69A297 (eucalyptus) | 50808E (slate) |
| Cherry Bold | 990011 (cherry) | FCF6F5 (off-white) | 2F3C7E (navy) |
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 on right)
- Icon + text rows (icon in colored circle, bold header, description below)
- 2x2 or 2x3 grid (image on one side, grid of content blocks on other)
- Half-bleed image (full left or right side) 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
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 Font | Body Font |
|---|
| Georgia | Calibri |
| Arial Black | Arial |
| Calibri | Calibri Light |
| Cambria | Calibri |
| Trebuchet MS | Calibri |
| Impact | Arial |
| Palatino | Garamond |
| Consolas | Calibri |
| Element | Size |
|---|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt muted |
Spacing
- 0.5" minimum margins
- 0.3-0.5" between content blocks
- Leave breathing roomâdon't fill every inch
Avoid (Common Mistakes)
- Don't repeat the same layout â vary columns, cards, and callouts across slides
- Don't center body text â left-align paragraphs and lists; center only titles
- Don't skimp on size contrast â titles need 36pt+ to stand out from 14-16pt body
- Don't default to blue â pick colors that reflect the specific topic
- 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 images, icons, charts, or visual elements; avoid plain title + bullets
- Don't forget text box padding â when aligning lines or shapes with text edges, set
margin: 0 on the text box or offset the shape to account for padding
- Don't use low-contrast elements â icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds
- NEVER use accent lines under titles â these are a hallmark of AI-generated slides; use whitespace or background color instead
QA (Required)
Assume 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.
Content QA
uv run python -m markitdown output.pptx
Check for missing content, typos, wrong order.
When using templates, check for leftover placeholder text:
uv run python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
If grep returns results, fix them before declaring success.
Visual QA
â ïž 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:
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.
Verification Loop
- Generate slides â Convert to images â Inspect
- List issues found (if none found, look again more critically)
- Fix issues
- 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.
Converting to Images
Convert presentations to individual slide images for visual inspection:
uv run 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:
pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed
Dependencies
ð ãã®ãªããžããªã§ã¯ pip ãçŽæ¥äœ¿ããªãã uv addïŒãããžã§ã¯ãäŸåïŒ/ uv pip installïŒã°ããŒãã«ïŒ/ PEP 723 ã€ã³ã©ã€ã³ã¡ã¿ããŒã¿ïŒåäžãã¡ã€ã«ã¹ã¯ãªããïŒã§ç®¡çããããšã以äžã¯å¿
èŠãªããã±ãŒãžã®äžèЧã§ãããã€ã³ã¹ããŒã«ã³ãã³ãã¯ãªããžããªã®èŠçŽã«åŸãã
markitdown[pptx] â text extractionïŒxlsx èªã¿åãã«ã¯è¿œå ã§ openpyxl ãå¿
èŠïŒ
Pillow â thumbnail grids
defusedxml â XML parsingïŒoffice scripts å
šè¬ã§äœ¿çšïŒ
lxml â XML validation and schema checkingïŒvalidators ã§äœ¿çšïŒ
pptxgenjsïŒnpmïŒ â creating from scratch
- LibreOffice (
soffice) â PDF conversion (via scripts/office/soffice.py)
- Poppler (
pdftoppm) â PDF to image conversion