Inspects .pptx slides for structural issues like bounding box overlaps, font/color inconsistencies, text fragmentation, and design problems via Python analysis and visual review. Use for post-creation QA or auditing user uploads.
npx claudepluginhub bayramannakov/ai-personal-os-skills --plugin linkedin-research-postThis skill uses the workspace's default tool permissions.
A systematic quality audit for PowerPoint presentations. Catches layout bugs, design inconsistencies, readability problems, and structural anti-patterns that make slides look unpolished.
Evaluates presentation slides with 12-point checklist for cognitive load, one idea per slide, assertions titles, element limits, accessibility, and TED/MIT best practices.
Processes .pptx files: extracts text with markitdown, thumbnails, XML unpack; edits presentations; creates decks with pptxgenjs.
Reads, extracts text from, edits, and generates .pptx presentations using Python scripts and pptxgenjs. Handles templates, thumbnails, XML unpacking.
Share bugs, ideas, or general feedback.
A systematic quality audit for PowerPoint presentations. Catches layout bugs, design inconsistencies, readability problems, and structural anti-patterns that make slides look unpolished.
Post-creation QA (integrated): After generating a .pptx with the pptx skill, run this inspection before delivering the file. Think of it as the compiler warnings step — you wouldn't ship code without checking for errors.
Standalone audit: When a user uploads a .pptx and asks you to review it, inspect it, or check for issues.
The inspection has two complementary layers. Both are needed — programmatic analysis catches structural issues humans miss (overlapping coordinates, font inconsistencies), while visual inspection catches aesthetic issues code can't judge (awkward spacing, visual weight imbalance).
Run the structural analyzer on the .pptx file:
python <this-skill-directory>/scripts/inspect_slides.py presentation.pptx
This script unpacks the PPTX XML and checks for:
The script outputs a JSON report. Review it, but don't just parrot it — use it as input to your own judgment.
Convert slides to images and inspect them visually:
# Use the pptx skill's conversion pipeline (from the pptx skill's scripts directory)
python <pptx-skill>/scripts/office/soffice.py --headless --convert-to pdf presentation.pptx
rm -f slide-*.jpg
pdftoppm -jpeg -r 150 presentation.pdf slide
ls -1 "$PWD"/slide-*.jpg
Then view each slide image. Read references/checklist.md for the full visual inspection checklist. The key categories:
After both analysis passes, produce a structured report. The report has three output modes — use all three:
A) In-chat issue list — A concise summary in conversation, organized by severity:
B) Annotated analysis — For each slide with issues, describe what's wrong and where. Reference specific elements by their position (e.g., "the title text on slide 3 overlaps with the right-side image").
C) Structured report file — Save a markdown report to the filesystem:
# Slide Inspection Report
## Summary
- X critical issues, Y warnings, Z suggestions
- Overall quality: [Poor / Needs Work / Good / Excellent]
## Slide-by-Slide Findings
### Slide 1: [slide title]
- [severity] [category]: [description]
...
## Cross-Slide Consistency
- Font usage: [findings]
- Color palette: [findings]
- Layout patterns: [findings]
- Code snippet styling: [findings]
- Illustration consistency: [findings]
## Recommendations
1. [prioritized fix]
2. ...
Elements whose bounding boxes intersect are the #1 visual bug. The programmatic analyzer catches coordinate overlaps, but visual inspection catches cases where elements are technically separate but visually collide (e.g., a descender from line 1 touching an ascender from line 2).
Common culprits:
This is one of the most common AI-generated slide problems. Instead of:
// ❌ BAD: Separate addText() calls for each line
slide.addText("Line 1", { x: 1, y: 1, w: 8, h: 0.4 });
slide.addText("Line 2", { x: 1, y: 1.5, w: 8, h: 0.4 });
slide.addText("Line 3", { x: 1, y: 2, w: 8, h: 0.4 });
It should be:
// ✅ GOOD: Single text box with breakLine
slide.addText([
{ text: "Line 1", options: { breakLine: true } },
{ text: "Line 2", options: { breakLine: true } },
{ text: "Line 3" }
], { x: 1, y: 1, w: 8, h: 1.5 });
The programmatic analyzer detects this by looking for sequences of text boxes at the same x-position with incrementing y-positions and similar widths. This pattern causes:
Code on slides needs special treatment to be readable. The inspection checks:
These span the entire deck, not individual slides:
Slides are a visual medium — dense text belongs in a document, not a deck.
Use these guidelines to assign severity:
| Severity | Criteria | Examples |
|---|---|---|
| 🔴 Critical | Content is unreadable, missing, or visually broken | Text cut off, elements overlapping making text illegible, code in proportional font |
| 🟡 Warning | Noticeable quality issue that looks unprofessional | Inconsistent fonts across slides, uneven spacing, missing code background, "one box per line" pattern |
| 🟢 Suggestion | Minor polish that would elevate the deck | Slightly tighter margins possible, illustration style could be more unified, color palette could be tighter |
If this was a post-creation QA step: Fix all Critical and Warning issues before delivering. Re-run the inspection after fixes to verify — one fix often creates new problems (e.g., making a text box taller to prevent overflow may push it into the element below).
If this was a standalone audit: Present the report to the user and offer to fix the issues. Prioritize Critical → Warning → Suggestion.
Own scripts (bundled with this skill):
scripts/inspect_slides.py — Programmatic XML analysisFrom the pptx skill (locate via available_skills → pptx → location):
scripts/office/soffice.py — PDF conversion for visual inspectionscripts/office/unpack.py — XML extraction (used internally by inspect_slides.py if needed)System tools (pre-installed in the environment):
pdftoppm (Poppler) — PDF to imagesdefusedxml — Safe XML parsing (pip install defusedxml if missing)Path resolution at runtime: When this skill triggers, resolve <this-skill-directory> to the directory containing this SKILL.md. Resolve <pptx-skill> by finding the pptx skill's location from available_skills. For example, if the pptx skill is at /mnt/skills/public/pptx/, its soffice script is at /mnt/skills/public/pptx/scripts/office/soffice.py.