Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Pptx Render

ASecurity

Use when the user asks to "render pptx", "show pptx slide", "compare with pptx", "pptx to image", "export pptx slide", "original slide", "show me the original", "what does the pptx look like", or needs to extract a specific PPTX slide's content for visual comparison.

21 stars
0 votes
0 copies
0 views
Added 9/19/2026
toolspythonbash

Works with

cli

Security Analysis

A100/100

Scanned 9/19/2026

Install to Claude Code

$npx -y skills add edwinhu/workflows --skill pptx-render --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pptx Render?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Pptx Render
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/edwinhu-pptx-render/badge)](https://www.skillsdirectory.com/skills/edwinhu-pptx-render)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: pptx-render
description: >
  Use when the user asks to "render pptx", "show pptx slide",
  "compare with pptx", "pptx to image", "export pptx slide",
  "original slide", "show me the original", "what does the pptx look like",
  or needs to extract a specific PPTX slide's content for visual comparison.
user-invocable: false
---

**Announce:** "I'm using pptx-render to extract PPTX slide content."

# PPTX Slide Inspector

**What this skill carries** — grep `references/` for any subject the names below miss:
!`d=${CLAUDE_SKILL_DIR}; command -v skill-toc >/dev/null 2>&1 && exec skill-toc "$d"; s=$HOME/.claude/skills/plugin-utils/bin/skill-toc; [ -x "$s" ] && exec "$s" "$d"; echo "(skill-toc unavailable: references and scripts are NOT listed here — install the plugin-utils plugin, or start a new session so its bin/ reaches PATH)"`

Extracts content from PPTX slides using `python-pptx`. Primary use case: understanding what a PPTX slide contains (shapes, text, positions, images) for comparison against Typst slides, especially diagrams and visual items (VIS-* in content inventories).

## Prerequisites

| Tool | Source |
|------|--------|
| `python-pptx` | pixi project dependency |

## Step 1: Identify the PPTX File and Slide Number

If the user references a content inventory item (e.g., VIS-3, DQ-7), look up its PPTX slide number:

```bash
grep "VIS-3\|the-item-id" inventory/content-inventory-XX.md
```

## Step 2: Extract Slide Shapes

```python
from pptx import Presentation
import json

prs = Presentation('path/to/slides.pptx')
slide = prs.slides[SLIDE_NUM - 1]  # 0-indexed

for shape in slide.shapes:
    info = {
        'name': shape.name,
        'left_in': round(shape.left / 914400, 2),
        'top_in': round(shape.top / 914400, 2),
        'width_in': round(shape.width / 914400, 2),
        'height_in': round(shape.height / 914400, 2),
    }
    if shape.has_text_frame:
        info['text'] = shape.text_frame.text
    if shape.shape_type == 13:  # MSO_SHAPE_TYPE.PICTURE
        info['is_image'] = True
    if shape.has_table:
        info['is_table'] = True
        info['rows'] = len(shape.table.rows)
        info['cols'] = len(shape.table.columns)
    print(json.dumps(info))
```

## Step 3: Extract Images (if needed)

To save embedded images from a slide:

```python
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

prs = Presentation('path/to/slides.pptx')
slide = prs.slides[SLIDE_NUM - 1]

for i, shape in enumerate(slide.shapes):
    if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
        image = shape.image
        ext = image.content_type.split('/')[-1]
        with open(f'/tmp/pptx-slide-{SLIDE_NUM}-img-{i}.{ext}', 'wb') as f:
            f.write(image.blob)
        print(f'Saved image {i}: {image.content_type} ({shape.width/914400:.1f}x{shape.height/914400:.1f} in)')
```

## Step 4: Interpret the Layout

Shape positions use inches from top-left corner:
- `left_in` / `top_in`: position of shape's top-left corner
- Standard slide is 10" × 7.5" (widescreen) or 10" × 5.63" (16:9)
- Shapes with `is_image: true` and generic names ("Picture 5") are usually clipart
- Group shapes may contain sub-shapes (connectors, arrows) — inspect `.shapes` on groups

## Classifying Slide Content

| Shape Pattern | Likely Content |
|--------------|----------------|
| Multiple text boxes + arrows/lines at specific positions | **Substantive diagram** — reproduce in Typst |
| Single large `Picture` shape filling the slide | **Clipart/stock photo** — skip or replace |
| `Table` shape | **Data table** — reproduce as Typst `#table` |
| Text boxes only, no connectors | **Text slide** — no diagram needed |
| Group shapes with AutoShapes inside | **Flow diagram** — extract sub-shapes |

## Quick Reference

```python
# One-liner to dump all shapes from slide N
uv run python3 -c "
from pptx import Presentation; import json
prs = Presentation('PPTX_PATH')
for s in prs.slides[N-1].shapes:
    d = {'name': s.name, 'text': s.text_frame.text if s.has_text_frame else None,
         'pos': f'{s.left/914400:.1f},{s.top/914400:.1f}',
         'size': f'{s.width/914400:.1f}x{s.height/914400:.1f}'}
    print(json.dumps(d))
"
```

## Rendering slides to PDF/PNG

For actual rasterization (not content extraction), use the shared x2t wrapper — ONLYOFFICE x2t is stateless and parallel-safe, unlike soffice:

```bash
# pptx -> PDF (all slides, then split with pdftoppm if per-slide PNGs needed)
python3 ${CLAUDE_SKILL_DIR}/../../scripts/doc_render.py deck.pptx deck.pdf
# pptx -> PNG (first slide only)
python3 ${CLAUDE_SKILL_DIR}/../../scripts/doc_render.py deck.pptx slide1.png
```

**Do NOT call `soffice --headless` directly** — it silently fails on macOS (returns 0, no output) due to profile lock issues. The wrapper prefers `x2t` and only falls back to soffice where x2t is absent.

Attribution

edwinhuedwinhu
View sourceMore from edwinhu →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API to manage tasks, coordinate with other agents, and follow company governance. Use when you need to check assignments, update task status, delegate work, post comments, set up or manage routines (recurring scheduled tasks), or call any Paperclip API endpoint. Do NOT use for the actual domain work itself (writing code, research, etc.) — only for Paperclip coordination.

798221 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1023330 votes
View all in tools →