Skip to content
Back to skills

Pptx

ASecurity

Professional PowerPoint presentation creation, editing, and automation with support for layouts, templates, charts, images, and formatting. Use when working with .pptx files for: (1) Creating presentations from scratch, (2) Editing existing presentations, (3) Applying templates and themes, (4) Adding charts and visualizations, (5) Bulk slide generation, (6) Presentation automation

  • 29 stars
  • 0 votes
  • 0 copies
  • 15 views
  • Added December 19, 2025
toolspythongobashgitapidatabasedocumentation

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 14 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add AutumnsGrove/ClaudeSkills --skill pptx --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pptx?

Add the live security badge to your README. It updates with every re-scan.

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

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pptx
description: "Professional PowerPoint presentation creation, editing, and automation with support for layouts, templates, charts, images, and formatting. Use when working with .pptx files for: (1) Creating presentations from scratch, (2) Editing existing presentations, (3) Applying templates and themes, (4) Adding charts and visualizations, (5) Bulk slide generation, (6) Presentation automation"
---

# PowerPoint (PPTX) Skill

## Overview

This skill provides comprehensive PowerPoint presentation creation, editing, and automation capabilities using Python's `python-pptx` library. Create professional presentations programmatically with full control over layouts, themes, content, charts, and visualizations.

## Core Capabilities

- **Presentation Creation**: New presentations, templates, metadata, page configuration
- **Slide Management**: Add, duplicate, delete, reorder slides with predefined layouts
- **Content Types**: Text, shapes, images, tables, charts, SmartArt, hyperlinks
- **Design & Formatting**: Themes, color schemes, fonts, fills, borders, effects
- **Advanced Features**: Transitions, animations, embedded objects, video/audio, comments

## Installation

Install the required library:

```bash
pip install python-pptx
# or with uv
uv pip install python-pptx
```

Basic imports:

```python
from pptx import Presentation
from pptx.util import Inches, Pt, Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
```

For complete library setup and supporting packages (Pillow, pandas, matplotlib), see `references/library-setup.md`.

## Core Workflows

### Workflow 1: Creating a Business Presentation

**Goal:** Create a professional presentation with title slide, content slides, and conclusion.

**Steps:**

1. **Initialize Presentation**
   - Create new presentation object
   - Set slide dimensions (standard 16:9 or 4:3)
   - Configure metadata (title, author, subject, keywords)

2. **Add Title Slide**
   - Use title slide layout (typically `prs.slide_layouts[0]`)
   - Set title and subtitle text
   - Apply formatting (font size, color, bold)

3. **Add Content Slides**
   - Use appropriate layouts (bullet, two-column, title-only, blank)
   - Populate placeholders or add text boxes
   - Format text with proper hierarchy

4. **Add Visual Elements**
   - Insert images with proper sizing and positioning
   - Add charts with formatted data
   - Create tables with cell styling

5. **Save Presentation**
   - Save to .pptx format
   - Verify file creation

**Quick Example:**

```python
from pptx import Presentation
from pptx.util import Inches, Pt

prs = Presentation()
prs.slide_width = Inches(10)
prs.slide_height = Inches(7.5)

# Title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Q4 Business Review"
slide.placeholders[1].text = "Prepared by: Jane Doe\nDate: October 25, 2025"

prs.save('presentation.pptx')
```

See `examples/business-presentation.md` for complete implementation.

### Workflow 2: Adding Charts

**Goal:** Create data visualizations with bar, line, and pie charts.

**Steps:**

1. Prepare chart data using `CategoryChartData`
2. Define categories and series
3. Add chart to slide with positioning
4. Format chart (legend, gridlines, labels)

**Quick Example:**

```python
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE

chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('2025', (9.5, 10.8, 11.2, 13.1))

chart = slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED,
    Inches(1), Inches(2), Inches(8), Inches(4.5),
    chart_data
).chart
```

See `examples/chart-examples.md` for all chart types.

### Workflow 3: Working with Images

**Goal:** Add, position, and format images in presentations.

**Steps:**

1. Add image with `slide.shapes.add_picture()`
2. Specify position (left, top) and size (width, height)
3. Calculate centered positioning if needed
4. Optimize images before adding (use Pillow for preprocessing)

**Quick Example:**

```python
# Add image with auto-scaled aspect ratio
pic = slide.shapes.add_picture('logo.png', Inches(1), Inches(1), height=Inches(2))

# Center image on slide
pic.left = int((prs.slide_width - pic.width) / 2)
pic.top = int((prs.slide_height - pic.height) / 2)
```

See `examples/image-handling.md` for advanced techniques.

### Workflow 4: Creating Tables

**Goal:** Add structured data tables with formatting.

**Steps:**

1. Define table dimensions (rows, cols)
2. Add table with positioning
3. Set column widths
4. Populate headers with bold formatting and background color
5. Fill data cells with proper alignment

**Quick Example:**

```python
table = slide.shapes.add_table(4, 3, Inches(1.5), Inches(2), Inches(7), Inches(3)).table

# Header formatting
cell = table.cell(0, 0)
cell.text = "Product"
cell.text_frame.paragraphs[0].font.bold = True
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(0, 51, 102)
```

See `examples/table-examples.md` for advanced formatting.

### Workflow 5: Editing Existing Presentations

**Goal:** Modify existing PowerPoint files.

**Steps:**

1. Open presentation with `Presentation('file.pptx')`
2. Iterate through slides to find content
3. Modify text, shapes, or add new elements
4. Save with same or different filename

**Quick Example:**

```python
prs = Presentation('existing.pptx')

# Find and update text
for slide in prs.slides:
    for shape in slide.shapes:
        if hasattr(shape, "text") and "Old Name" in shape.text:
            shape.text = shape.text.replace("Old Name", "New Name")

prs.save('updated.pptx')
```

See `examples/editing-presentations.md` for slide copying and advanced editing.

### Workflow 6: Using Templates

**Goal:** Apply consistent branding with master slides and templates.

**Steps:**

1. Start with template file: `Presentation('template.pptx')`
2. Examine available layouts
3. Add slides using template layouts
4. Apply brand colors consistently

**Quick Example:**

```python
prs = Presentation('corporate_template.pptx')

# Use template layouts
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
content_slide = prs.slides.add_slide(prs.slide_layouts[1])

# Layouts inherit master formatting
prs.save('branded_presentation.pptx')
```

See `references/templates-and-themes.md` for master slide customization.

### Workflow 7: Bulk Slide Generation

**Goal:** Generate multiple slides automatically from data.

**Steps:**

1. Load data from CSV, JSON, or database
2. Create presentation object
3. Iterate through data records
4. Generate one slide per record
5. Populate slide with record data

**Quick Example:**

```python
import pandas as pd

df = pd.read_csv('employee_data.csv')
prs = Presentation()

for _, row in df.iterrows():
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = row['Name']
    # Add employee details to slide body

prs.save('employee_directory.pptx')
```

See `examples/bulk-generation.md` for complete implementations.

## Design Principles

### Color & Typography
- Use 60-30-10 color rule (60% primary, 30% secondary, 10% accent)
- Ensure WCAG AA contrast ratios (4.5:1 minimum)
- Limit to 2 font families maximum
- Minimum body text: 18pt for readability

### Layout & Composition
- Follow rule of thirds for element placement
- Maintain minimum 0.5" margins on all sides
- Limit to 5-7 elements per slide
- Use consistent alignment (snap to grid)

### Visual Hierarchy
- Size indicates importance (larger = more important)
- Use color contrast for emphasis
- Follow Z-pattern for content flow

### Chart Best Practices
- Choose appropriate chart type (bar for comparison, line for trends, pie for parts-of-whole)
- Limit to 3-5 colors maximum
- Always label axes and include data labels
- Use gridlines sparingly

For complete design guidelines, see `references/design-best-practices.md`.

## Common Patterns

### Brand Color Application

```python
BRAND_COLORS = {
    'primary': RGBColor(0, 51, 102),
    'secondary': RGBColor(0, 153, 204),
    'accent': RGBColor(255, 102, 0)
}

# Apply to text
shape.text_frame.paragraphs[0].font.color.rgb = BRAND_COLORS['primary']

# Apply to fill
shape.fill.solid()
shape.fill.fore_color.rgb = BRAND_COLORS['secondary']
```

### Centered Element

```python
def center_shape(shape, prs):
    """Center shape on slide."""
    shape.left = int((prs.slide_width - shape.width) / 2)
    shape.top = int((prs.slide_height - shape.height) / 2)
```

### Text Auto-Fit

```python
from pptx.enum.text import MSO_AUTO_SIZE

text_frame = shape.text_frame
text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE  # Shrink text
# or
text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT  # Expand shape
```

## Troubleshooting Quick Reference

**"ModuleNotFoundError: No module named 'pptx'"**
```bash
pip install python-pptx
```

**"AttributeError: 'NoneType' object has no attribute..."**
- Check placeholder indices: `[p.placeholder_format.idx for p in slide.placeholders]`
- Verify layout has expected placeholders

**Images not found**
- Use absolute paths: `os.path.abspath('image.png')`
- Verify file exists: `os.path.exists(img_path)`

**Text doesn't fit**
- Enable auto-fit: `text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE`
- Truncate long text with ellipsis

**File size too large**
- Compress images before adding (use Pillow)
- Resize images to presentation dimensions (1920x1080 max)

For complete troubleshooting, see `references/troubleshooting.md`.

## Helper Scripts

The `scripts/pptx_helper.py` module provides utility functions:

- `create_presentation()`: Initialize with defaults
- `add_title_slide()`: Add formatted title slide
- `add_bullet_slide()`: Add slide with bullet points
- `add_image_slide()`: Add slide with centered image
- `add_chart_slide()`: Add slide with chart
- `add_table_slide()`: Add formatted table
- `apply_brand_colors()`: Apply consistent color scheme
- `optimize_images()`: Batch optimize images

**Usage:**

```python
from scripts.pptx_helper import create_presentation, add_title_slide, add_chart_slide

prs = create_presentation(title="My Presentation")
add_title_slide(prs, "Main Title", "Subtitle")
add_chart_slide(prs, "Sales Data", chart_type='bar',
                categories=['Q1', 'Q2', 'Q3', 'Q4'],
                values=[10, 20, 15, 25])
prs.save('output.pptx')
```

## Additional Resources

### Documentation
- python-pptx: https://python-pptx.readthedocs.io/
- API Reference: https://python-pptx.readthedocs.io/en/latest/api/
- GitHub: https://github.com/scanny/python-pptx

### Detailed References
- [Library Setup & Installation](./references/library-setup.md)
- [Design Best Practices](./references/design-best-practices.md)
- [Templates & Themes](./references/templates-and-themes.md)
- [Advanced Techniques](./references/advanced-techniques.md)
- [Common Pitfalls](./references/troubleshooting.md)

### Examples
- [Complete Business Presentation](./examples/business-presentation.md)
- [Chart Examples (Bar, Line, Pie)](./examples/chart-examples.md)
- [Image Handling](./examples/image-handling.md)
- [Table Examples](./examples/table-examples.md)
- [Editing Existing Presentations](./examples/editing-presentations.md)
- [Bulk Generation from Data](./examples/bulk-generation.md)

### Design Resources
- Microsoft Design Templates: https://templates.office.com/powerpoint
- Color Palette Tools: Coolors.co, Adobe Color
- Free Stock Images: Unsplash, Pexels

## Best Practices Summary

1. Always use templates for consistent branding
2. Optimize images before adding to presentation
3. Limit text on each slide (5-7 bullet points max)
4. Use high contrast for readability
5. Test on target device before presenting
6. Keep file size manageable (<20MB for email)
7. Use speaker notes for detailed talking points
8. Follow 6x6 rule: Max 6 bullets, max 6 words per bullet
9. Validate data before creating charts
10. Use consistent spacing and alignment

---

**When to Use This Skill:**
- Creating business presentations from data
- Automating report generation
- Bulk slide creation from databases
- Template-based presentations
- Educational content with charts/images
- Converting documents to slides

Files in this skill

  • README.md7.9 KB
  • SKILL.md12.1 KB
  • examples/bulk-generation.md12.1 KB
  • examples/business-presentation.md5 KB
  • examples/chart-examples.md7 KB
  • examples/editing-presentations.md8.1 KB
  • examples/image-handling.md9 KB
  • examples/table-examples.md9.6 KB
  • references/advanced-techniques.md5.3 KB
  • references/design-best-practices.md4.9 KB
  • references/library-setup.md2.8 KB
  • references/templates-and-themes.md3.4 KB
  • references/troubleshooting.md8.4 KB
  • scripts/pptx_helper.py27.8 KB

Attribution

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

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.