Convert PowerPoint presentations to Obsidian Page notes with text extraction, tables, and images.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add DavidROliverBA/ArchitectKB --skill pptx-to-page --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Pptx To Page?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/davidroliverba-pptx-to-page)More formats (shields.io, HTML) on the badges page.
---
context: fork
---
# Skill: PowerPoint to Page
Convert PowerPoint presentations to Obsidian Page notes with text extraction, tables, and images.
## When to Use
This skill should be invoked when the user:
- Asks to "convert a PowerPoint to a page note"
- Mentions "/pptx-to-page" explicitly
- Wants to import a presentation into the vault
- Needs to extract slides as images for viewing in Obsidian
- Has a .pptx or .ppt file to process
## Parameters
- **PPTX Path**: Path to the PowerPoint file (can be in Downloads, vault, or anywhere)
- **Page Title** (optional): Custom title for the Page note (defaults to presentation filename)
- **Mode** (optional): `quick` (default) or `visual`
- `quick`: Fast docling extraction with text, tables, embedded images
- `visual`: Full slide rendering as PNG images (requires LibreOffice)
## Process
### Step 1: Locate the PowerPoint File
If the user provides a partial path or just a filename:
1. Check `~/Downloads/` first
2. Check vault `+Attachments/` folder
3. Ask user for full path if not found
### Step 2: Choose Processing Mode
Ask the user (or infer from context):
**Quick Mode** (default - recommended for most uses):
- Uses docling for fast text/table extraction
- Uses python-pptx for speaker notes and embedded images
- Processing time: ~1 second for 50 slides
- Best for: searchable content, meeting notes, documentation
**Visual Mode** (when visual fidelity needed):
- Uses LibreOffice to render full slide images
- Processing time: 1-2 minutes for 50 slides
- Best for: design reviews, exact visual reference
### Step 3: Quick Mode Processing (Docling)
```python
from pathlib import Path
from docling.document_converter import DocumentConverter
from pptx import Presentation
import os
def process_pptx_quick(pptx_path, output_dir, title):
"""Quick mode: docling + python-pptx extraction"""
# 1. Docling for text and tables
converter = DocumentConverter()
result = converter.convert(pptx_path)
doc = result.document
markdown_content = doc.export_to_markdown()
tables_count = len(doc.tables) if hasattr(doc, 'tables') else 0
pictures_count = len(doc.pictures) if hasattr(doc, 'pictures') else 0
# 2. python-pptx for speaker notes and embedded images
prs = Presentation(pptx_path)
speaker_notes = []
embedded_images = []
for slide_num, slide in enumerate(prs.slides, 1):
# Extract speaker notes
if slide.has_notes_slide:
notes = slide.notes_slide.notes_text_frame.text.strip()
if notes:
speaker_notes.append((slide_num, notes))
# Extract embedded images
for shape in slide.shapes:
if hasattr(shape, "image"):
img = shape.image
img_filename = f"{title} - Slide {slide_num:02d} - Image {len(embedded_images)+1}.{img.ext}"
img_path = output_dir / img_filename
with open(img_path, "wb") as f:
f.write(img.blob)
embedded_images.append((slide_num, img_filename))
return {
'markdown': markdown_content,
'tables_count': tables_count,
'pictures_count': pictures_count,
'speaker_notes': speaker_notes,
'embedded_images': embedded_images,
'slide_count': len(prs.slides)
}
```
### Step 4: Visual Mode Processing (LibreOffice)
Only use if visual mode requested. Check dependencies first:
```bash
# Check for LibreOffice (for PPTX to PDF conversion)
which soffice || brew install --cask libreoffice
# Check for poppler (for PDF to image conversion)
which pdftoppm || brew install poppler
# Check for Python libraries
python3 -c "import pdf2image" 2>&1 || pip3 install pdf2image
```
Then convert PPTX → PDF → PNG images at 200 DPI.
### Step 5: Create Page Note
**Quick Mode Output Format:**
```markdown
---
type: Page
title: <Presentation Title>
created: YYYY-MM-DD
modified: YYYY-MM-DD
tags:
- presentation
- slides
- pdf-import
sourceType: PPTX
processedWith: docling
slides: <count>
tables: <count>
---
# <Presentation Title>
> Extracted from `<original-filename.pptx>` using docling
**Slides**: <count> | **Tables**: <count> | **Images**: <count>
---
## Content
<docling markdown output - includes headings, text, tables>
---
## Speaker Notes
### Slide 3
<notes content>
### Slide 7
<notes content>
---
## Embedded Images
### Slide 1
![[<title> - Slide 01 - Image 1.png]]
### Slide 4
![[<title> - Slide 04 - Image 1.jpg]]
![[<title> - Slide 04 - Image 2.png]]
---
## Related
- [[<linked meeting note if applicable>]]
```
**Visual Mode Output Format:**
```markdown
---
type: Page
title: <Presentation Title>
created: YYYY-MM-DD
modified: YYYY-MM-DD
tags:
- presentation
- slides
sourceType: PPTX
processedWith: libreoffice
slides: <count>
---
# <Presentation Title>
Source: `<original-pptx-filename>`
Total Slides: <count>
---
## Slide 1
![[<title> - Slide 01.png]]
---
## Slide 2
![[<title> - Slide 02.png]]
---
...
```
### Step 6: Link to Context (if applicable)
Ask the user if they want to link this page to:
- A specific meeting note (most common for presentations)
- A project note
- An ADR (if it's architecture-related)
Suggest adding it to the meeting note's "Slides" section.
## Mode Selection Guide
| Use Case | Recommended Mode |
|----------|-----------------|
| Meeting notes reference | Quick |
| Technical documentation | Quick |
| Searchable archive | Quick |
| Design review | Visual |
| Exact visual reference needed | Visual |
| Large presentations (50+ slides) | Quick |
| Offline/slow machine | Quick |
## Success Message
**Quick Mode:**
```
✅ Page note created: `Page - <title>.md`
📊 Slides processed: <count>
📋 Tables extracted: <count>
🖼️ Embedded images saved: <count> to +Attachments/
💬 Speaker notes captured: <count> slides
⚡ Processing time: <X.XX> seconds
🔗 Link in meeting notes with: `[[Page - <title>]]`
```
**Visual Mode:**
```
✅ Page note created: `Page - <title>.md`
📊 Total slides rendered: <count>
🖼️ Slide images saved to: +Attachments/
⏱️ Processing time: <X> minutes
🔗 Link in meeting notes with: `[[Page - <title>]]`
```
## Error Handling
Common errors and solutions:
1. **PPTX not found**: Ask user for correct path
2. **Docling import error**: `pip3 install docling`
3. **python-pptx import error**: `pip3 install python-pptx`
4. **LibreOffice missing** (visual mode): `brew install --cask libreoffice`
5. **poppler missing** (visual mode): `brew install poppler`
6. **Corrupted PPTX**: Inform user, suggest opening in PowerPoint first
7. **Password-protected**: Cannot process, ask user to remove password
## Performance Comparison
| Presentation Size | Quick Mode | Visual Mode |
|------------------|------------|-------------|
| 10 slides | ~0.2 sec | ~20 sec |
| 25 slides | ~0.4 sec | ~50 sec |
| 50 slides | ~0.8 sec | ~2 min |
| 100 slides | ~1.5 sec | ~4 min |
## Examples
### Example 1: Quick Mode (Default)
```
User: /pptx-to-page ~/Downloads/Project_Update.pptx
```
### Example 2: Visual Mode
```
User: /pptx-to-page SAP_Architecture.pptx visual
```
### Example 3: With Meeting Link
```
User: Convert the Datasphere presentation and add it to today's meeting note
```
### Example 4: With Custom Title
```
User: Convert SAP_BTP_2026.pptx to a page called "Cloud Platform Architecture 2026"
```
## Integration with Other Skills
This skill works well with:
- `/meeting` - Add presentation to meeting notes
- `/project-status` - Include project presentations
- `/adr` - Attach architecture diagrams from slides
- `/weekly-summary` - Reference key slides in summaries
## Dependencies
**Quick Mode (minimal)**:
- `docling` - Text and table extraction
- `python-pptx` - Speaker notes and embedded images
**Visual Mode (additional)**:
- LibreOffice - PPTX to PDF conversion
- poppler (pdftoppm) - PDF to PNG conversion
- `pdf2image` - Python wrapper for poppler
## Notes
- Quick mode is **~100x faster** than visual mode
- Quick mode extracts actual text (searchable, copyable)
- Visual mode preserves exact slide appearance
- Always copy the original PPTX to `+Attachments/` for reference
- Speaker notes are only available via python-pptx (both modes can include them)
- Consider using quick mode first, then visual mode for specific slides if needed
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!