.claude/skills/pptx-to-page/SKILL.md
--- 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 f
npx skillsauth add DavidROliverBA/ArchitectKB .claude/skills/pptx-to-pageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Convert PowerPoint presentations to Obsidian Page notes with text extraction, tables, and images.
This skill should be invoked when the user:
quick (default) or visual
quick: Fast docling extraction with text, tables, embedded imagesvisual: Full slide rendering as PNG images (requires LibreOffice)If the user provides a partial path or just a filename:
~/Downloads/ first+Attachments/ folderAsk the user (or infer from context):
Quick Mode (default - recommended for most uses):
Visual Mode (when visual fidelity needed):
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)
}
Only use if visual mode requested. Check dependencies first:
# 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.
Quick Mode Output Format:
---
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:
---
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]]
---
...
Ask the user if they want to link this page to:
Suggest adding it to the meeting note's "Slides" section.
| 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 |
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>]]`
Common errors and solutions:
pip3 install doclingpip3 install python-pptxbrew install --cask libreofficebrew install poppler| 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 |
User: /pptx-to-page ~/Downloads/Project_Update.pptx
User: /pptx-to-page SAP_Architecture.pptx visual
User: Convert the Datasphere presentation and add it to today's meeting note
User: Convert SAP_BTP_2026.pptx to a page called "Cloud Platform Architecture 2026"
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 summariesQuick Mode (minimal):
docling - Text and table extractionpython-pptx - Speaker notes and embedded imagesVisual Mode (additional):
pdf2image - Python wrapper for poppler+Attachments/ for referencetools
--- context: fork --- # /youtube Save a YouTube video as both a Weblink (quick reference) and a detailed Page (full analysis). ## Usage ``` /youtube <url> /youtube <url> <optional title override> ``` ## Examples ``` /youtube https://www.youtube.com/watch?v=0TpON5T-Sw4 /youtube https://youtu.be/abc123 AWS re:Invent Keynote ``` ## Prerequisites This skill uses the MCP Docker YouTube tools: - `mcp__MCP_DOCKER__get_video_info` - Video metadata - `mcp__MCP_DOCKER__get_transcript` - Full trans
data-ai
Create and manage git worktrees for parallel agent sessions
testing
--- context: fork --- # /wipe Generate a context handoff summary, clear the session, and resume in a fresh conversation. Detects environment and provides automated (tmux) or manual workflow. ## Usage ``` /wipe /wipe quick # Minimal handoff, just essentials /wipe detailed # Comprehensive handoff with full context ``` ## Instructions When the user invokes `/wipe`: ### Phase 1: Detect Environment First, check the terminal environment: ```bash echo "Environment Detection:"
data-ai
--- context: fork --- # /weekly-summary Generate comprehensive weekly summary from daily notes, meetings, tasks, and project updates using parallel sub-agents. ## Usage ``` /weekly-summary /weekly-summary --last-week /weekly-summary --from 2026-01-01 --to 2026-01-07 /weekly-summary --output page # Create Page note instead of just outputting ``` ## Instructions This skill uses **5 parallel sub-agents** to gather data concurrently from different vault areas, then synthesizes a comprehensi