Skip to content
Back to skills

Local Pptx Editor

ASecurity

Edit PowerPoint (PPTX) files locally without Canva API. Use this skill when user provides a PPTX file and wants to modify slides, update text, change images, or restructure content. Maintains original formatting, themes, animations, and layout. Does NOT require Canva. Output goes to output/ folder. Use for: "edit this presentation", "update slide 5", "change PPT text".

  • 7 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
developmentpythongobashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add OpenAnalystInc/10x-Canva-Skills --skill local-pptx-editor --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Local Pptx Editor?

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

Security grade badge for Local Pptx Editor
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/openanalystinc-local-pptx-editor/badge)](https://www.skillsdirectory.com/skills/openanalystinc-local-pptx-editor)

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: local-pptx-editor
description: |
  Edit PowerPoint (PPTX) files locally without Canva API. Use this skill when user provides
  a PPTX file and wants to modify slides, update text, change images, or restructure content.
  Maintains original formatting, themes, animations, and layout. Does NOT require Canva.
  Output goes to output/ folder. Use for: "edit this presentation", "update slide 5", "change PPT text".
---

# Local PPTX Editor Skill

Edit and manipulate PowerPoint files locally without requiring Canva API.

---

## ⚠️ CRITICAL DESIGN PRESERVATION RULES (MANDATORY)

**These rules are NON-NEGOTIABLE. Violating them will break the presentation design.**

### 🚫 NEVER DO THESE THINGS:

1. **NEVER create new text boxes** - Only modify text in EXISTING placeholders
2. **NEVER add new shapes or elements** - Only modify EXISTING elements
3. **NEVER create blank slides** - ALWAYS duplicate an existing slide
4. **NEVER change font sizes** - Unless user EXPLICITLY requests it
5. **NEVER change font colors** - Unless user EXPLICITLY requests it
6. **NEVER change alignments** - Unless user EXPLICITLY requests it
7. **NEVER change positions** - Unless user EXPLICITLY requests it
8. **NEVER change backgrounds** - Unless user EXPLICITLY requests it
9. **NEVER change the theme** - Unless user EXPLICITLY requests it
10. **NEVER modify decorative elements** - Logos, lines, shapes must stay intact

### βœ… ALWAYS DO THESE THINGS:

1. **ALWAYS duplicate existing slides** to create new ones (preserves theme)
2. **ALWAYS replace text within existing placeholders** only
3. **ALWAYS preserve all formatting** when replacing text
4. **ALWAYS analyze slide structure FIRST** before any modification
5. **ALWAYS identify placeholders vs decorative elements** before editing

---

## CRITICAL: Never Modify Original Files

1. **ALWAYS** copy the original to `output/working/` first (scripts do this automatically)
2. **ALL** edits happen on the copy
3. **SAVE** results to `output/pptx/`
4. **ORIGINAL** file remains untouched

## When to Use This Skill

Use this skill when:
- User provides a PPTX file and wants modifications
- Need to update slide content while maintaining design
- Need to add/remove/reorder slides
- Need to modify speaker notes
- **User has NOT explicitly asked to use Canva**

## Available CLI Scripts

All scripts are in `scripts/local/` and must be run with the virtual environment:

```bash
# Windows
.venv\Scripts\python.exe scripts/local/<script_name>.py

# macOS/Linux
.venv/bin/python scripts/local/<script_name>.py
```

### Analysis Scripts (ALWAYS RUN FIRST)

#### pptx_analyze.py - Analyze presentation for safe editing
```bash
# Full analysis
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "path/to/presentation.pptx"

# Analyze specific slide
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "path/to/presentation.pptx" --slide 3

# JSON output
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "path/to/presentation.pptx" --json
```

### Text Modification Scripts

#### pptx_replace_text.py - Find and replace text (preserves formatting)
```bash
# Replace text across all slides
.venv\Scripts\python.exe scripts/local/pptx_replace_text.py "presentation.pptx" \
    --find "Old Text" --replace "New Text"

# Replace on specific slide only
.venv\Scripts\python.exe scripts/local/pptx_replace_text.py "presentation.pptx" \
    --find "Q3" --replace "Q4" --slide 5

# Dry run (preview changes)
.venv\Scripts\python.exe scripts/local/pptx_replace_text.py "presentation.pptx" \
    --find "2023" --replace "2024" --dry-run
```

#### pptx_update_content.py - Update slide title/content
```bash
# Update slide title
.venv\Scripts\python.exe scripts/local/pptx_update_content.py "presentation.pptx" \
    --slide 3 --title "New Title Here"

# Update slide content
.venv\Scripts\python.exe scripts/local/pptx_update_content.py "presentation.pptx" \
    --slide 3 --content "New content paragraph"

# Update with bullet points
.venv\Scripts\python.exe scripts/local/pptx_update_content.py "presentation.pptx" \
    --slide 3 --bullets "Point 1" "Point 2" "Point 3"

# Update both title and content
.venv\Scripts\python.exe scripts/local/pptx_update_content.py "presentation.pptx" \
    --slide 3 --title "New Title" --content "New content"
```

### Slide Structure Scripts

#### pptx_duplicate_slide.py - Duplicate a slide (THE CORRECT WAY to add slides)
```bash
# Duplicate slide 2
.venv\Scripts\python.exe scripts/local/pptx_duplicate_slide.py "presentation.pptx" \
    --source 2

# Duplicate and insert at specific position
.venv\Scripts\python.exe scripts/local/pptx_duplicate_slide.py "presentation.pptx" \
    --source 2 --position 5

# Duplicate with new content
.venv\Scripts\python.exe scripts/local/pptx_duplicate_slide.py "presentation.pptx" \
    --source 2 --title "New Slide Title" --content "New content here"
```

#### pptx_add_slides_from_template.py - Add multiple slides from template
```bash
# Add slides from JSON file
.venv\Scripts\python.exe scripts/local/pptx_add_slides_from_template.py "presentation.pptx" \
    --template 2 --content "slides_content.json"

# Add slides from inline JSON
.venv\Scripts\python.exe scripts/local/pptx_add_slides_from_template.py "presentation.pptx" \
    --template 2 --content '[{"title":"Slide 1","content":"Content"},{"title":"Slide 2","content_items":["A","B"]}]'
```

#### pptx_delete_slide.py - Delete slides
```bash
# Delete slide 5
.venv\Scripts\python.exe scripts/local/pptx_delete_slide.py "presentation.pptx" \
    --slides 5 --confirm

# Delete multiple slides
.venv\Scripts\python.exe scripts/local/pptx_delete_slide.py "presentation.pptx" \
    --slides 3 5 7 --confirm
```

#### pptx_reorder_slides.py - Reorder slides
```bash
# Move slide 3 to position 1
.venv\Scripts\python.exe scripts/local/pptx_reorder_slides.py "presentation.pptx" \
    --order 3 1 2 4 5
```

#### pptx_batch_update.py - Batch update multiple slides
```bash
# From JSON file
.venv\Scripts\python.exe scripts/local/pptx_batch_update.py "presentation.pptx" \
    --updates "updates.json"
```

Updates JSON format:
```json
[
    {"slide_num": 1, "title": "New Title 1"},
    {"slide_num": 2, "content": "New content"},
    {"slide_num": 3, "content_items": ["Bullet 1", "Bullet 2"]},
    {"slide_num": 4, "replacements": {"old": "new", "2023": "2024"}}
]
```

### Utility Scripts

#### safe_copy.py - Create safe working copy
```bash
.venv\Scripts\python.exe scripts/local/safe_copy.py --source "input/presentation.pptx"
```

---

## 3-Mode Workflow

### MODE 1: PLAN

**MANDATORY: Run analysis FIRST**

```bash
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "presentation.pptx"
```

This shows:
- All slides with layout types
- Editable elements (titles, content)
- Decorative elements (DO NOT TOUCH)
- Warnings about what to avoid

### MODE 2: CLARIFY

Ask user to confirm:
- Which slides to modify
- Exact text replacements
- Whether content length is acceptable
- Any specific formatting needs (rarely - should preserve existing)

### MODE 3: IMPLEMENT

Run the appropriate script(s):
1. For text changes: `pptx_replace_text.py` or `pptx_update_content.py`
2. For new slides: `pptx_duplicate_slide.py` or `pptx_add_slides_from_template.py`
3. For deletions: `pptx_delete_slide.py`
4. For reordering: `pptx_reorder_slides.py`

All scripts automatically:
- Create safe copies
- Preserve all formatting
- Save to `output/pptx/`

---

## Example Workflows

### Example 1: Update text on a slide
```bash
# 1. Analyze
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "report.pptx" --slide 3

# 2. Update title
.venv\Scripts\python.exe scripts/local/pptx_update_content.py "report.pptx" \
    --slide 3 --title "Q4 2024 Results"
```

### Example 2: Replace text across presentation
```bash
# 1. Dry run to see what will change
.venv\Scripts\python.exe scripts/local/pptx_replace_text.py "report.pptx" \
    --find "2023" --replace "2024" --dry-run

# 2. Apply changes
.venv\Scripts\python.exe scripts/local/pptx_replace_text.py "report.pptx" \
    --find "2023" --replace "2024"
```

### Example 3: Add new slides from template
```bash
# 1. Analyze to find good template slide
.venv\Scripts\python.exe scripts/local/pptx_analyze.py "report.pptx"

# 2. Add new slides using slide 2 as template
.venv\Scripts\python.exe scripts/local/pptx_add_slides_from_template.py "report.pptx" \
    --template 2 \
    --content '[{"title":"New Section","content":"Introduction to new topic"}]'
```

---

## Output Locations

- `output/pptx/` - Modified presentations
- `output/working/` - Temporary working copies (auto-cleaned)

---

## Supported File Types

- `.pptx` - PowerPoint 2007+ (primary format)
- `.ppt` - Legacy PowerPoint (limited support)

---

## Todo List Tracking (REQUIRED)

**ALWAYS use TodoWrite** to track progress:

```json
[
  {"content": "Analyze presentation structure", "status": "in_progress", "activeForm": "Analyzing slides"},
  {"content": "Identify editable elements", "status": "pending", "activeForm": "Identifying elements"},
  {"content": "Apply text modifications", "status": "pending", "activeForm": "Applying changes"},
  {"content": "Verify output file", "status": "pending", "activeForm": "Verifying output"}
]
```

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.