
Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
This skill takes a real PowerPoint deck and builds speaker notes from the slide content, not from guesses. It extracts text and structure, renders slides, runs OCR on visual regions, and prepares a review packet before writing clean notes into the PowerPoint notes pane.
Builders who need slide-grounded speaker scripts for academic presentations in Codex or Claude Code.
You can turn a real `.pptx` into rehearsal notes and injected speaker notes without re-explaining each slide by hand.
Reads titles, body text, placeholders, text boxes, tables, charts, OOXML text, and existing notes.
Renders each slide to PNG so visual content can be checked directly.
Collects text from screenshots, images, labels, and other visual regions into a per-slide inventory.
Packages evidence for a vision-capable reviewer or human to confirm complex slides.
Generates a rehearsal document and a clean notes version, then injects the clean notes into the PPTX.
Uses a per-slide budget with pause-aware pacing so the script fits the target talk length.
speaker-v8.skill
/ppt-speech-writer

speaker is a Codex skill project for academic presentations. It reads a real .pptx, combines text extraction, PPTX structure inspection, slide rendering, OCR, and vision review, then generates grounded speaker notes and injects the clean script into PowerPoint's speaker notes pane.
Current skill package:
speaker-v8.skill
Internal skill name:ppt-speech-writer
This release focuses on tighter, evidence-grounded output and realistic speech pacing.
[PAUSE] marks. This fixes the previous problem where a "15-minute" script ran to ~1,800 words and overran to ~30 minutes; a 15-minute talk now targets roughly 1,300–1,400 words. Both Chinese and English notes are tuned per slide.SKILL.md now computes and records a per-slide budget so each slide stays within the overall time target, and the timing table reports words/characters, budget, and pauses with a TOTAL row.read_slides.py --mode compact). Drops redundant raw OOXML dumps and non-visual geometry while keeping picture bounding boxes, producing much smaller intermediate JSON.visual_inventory.py --ocr-scope image-regions). OCR runs only on picture/media regions (text boxes, tables, and charts already come from XML), with an automatic full-slide fallback. Includes robustness fixes: byte-safe OCR decoding and symlink path resolution.vision_review.py --format compact). The shared review prompt and result schema are hoisted to the top level instead of being repeated per slide; Markdown is now optional.show notes to print the complete notes.Many presentation-note tools only read text boxes. That misses charts, screenshots, SmartArt, axes, legends, tables, and text embedded in images. This skill is designed to keep speaker notes grounded in the actual slides:
flowchart TD
A[Input .pptx] --> B[Structured Extraction]
B --> C[Render Slides to PNG]
C --> D[OCR and Visual Inventory]
D --> E[Vision Review]
E --> F[Deck Comprehension Brief]
F --> G[Narrative Arc]
G --> H[Slide-by-Slide Display Notes]
H --> I[Clean Notes JSON]
H --> J[Display Version DOCX or Markdown]
I --> K[Inject Notes into PPTX]
K --> L[Output PPTX with Speaker Notes]
graph LR
XML[PPTX XML] --> INV[Visible Element Inventory]
TEXT[Text Boxes] --> INV
TABLE[Tables] --> INV
CHART[Native Charts] --> INV
IMAGE[Rendered Slide Images] --> INV
OCR[OCR Text] --> INV
VISION[Vision Review] --> INV
INV --> NOTES[Grounded Speaker Notes]
| Feature | Description |
|---|---|
| Text extraction | Extracts titles, body text, placeholders, and text boxes |
| Table extraction | Reads row and column text from PowerPoint tables |
| Chart extraction | Attempts to read native chart titles, categories, series, values, axes, and legends |
| OOXML fallback | Extracts additional slide XML text not exposed by python-pptx, including some SmartArt or grouped-shape text |
| Slide rendering | Renders slides to PNG so the final visual presentation can be inspected |
| OCR | Optionally reads text in screenshots, images, small labels, and other visual regions |
| Vision review | Produces a review packet for a vision-capable agent or human reviewer |
| Notes injection | Writes clean speaker notes into the PowerPoint notes pane |
| Display document | Generates a complete rehearsal document as .docx, with Markdown fallback when python-docx is unavailable |
ppt-speech-writer/
├── SKILL.md
└── scripts/
├── read_slides.py
├── render_slides.py
├── visual_inventory.py
├── vision_review.py
├── write_display_docx.py
└── inject_notes.py
speaker-v8.skill
Claude Code compatibility:
.claude/skills/ppt-speech-writer -> ../../ppt-speech-writer
CLAUDE.md
Download or use the packaged skill:
speaker-v8.skill
Install it using your Codex client's skill import flow. Once installed, use it when you need speaker notes, presenter notes, a speech script, or narration for a real .pptx file.
For Claude Code, this repository includes a project skill at .claude/skills/ppt-speech-writer. Open Claude Code from the repository root and invoke:
/ppt-speech-writer
If Claude Code is already running, use /reload-skills after pulling updates.
Use speaker / ppt-speech-writer to write a 15-minute academic presentation script
for this PowerPoint deck. Inject the clean script into speaker notes and also
generate a complete display-version rehearsal document.
The skill will:
.pptx.work/.Before writing notes, the skill must explicitly confirm the output language. It does not infer the note language from the language you use in chat.
Most users only need the top-level deliverables:
| Top-level output | Purpose |
|---|---|
<deck-stem>-with-notes.pptx | PowerPoint file with speaker notes injected |
<deck-stem>-display.docx | Complete rehearsal script with slide labels, transitions, glossary, and timing table |
<deck-stem>-display.md | Markdown fallback when python-docx is unavailable |
<deck-stem>-vision-review.md | Markdown packet for human or vision-agent review |
Intermediate files are grouped under work/:
<deck-stem>-speaker-output/
├── <deck-stem>-with-notes.pptx
├── <deck-stem>-display.docx
├── <deck-stem>-display.md
├── <deck-stem>-vision-review.md
└── work/
├── slide_extract.json
├── visual_inventory.json
├── vision_review_packet.json
├── vision_review.json
├── display_document.json
├── notes.json
└── rendered_slides/
python scripts/read_slides.py "/path/to/deck.pptx" \
--output "<deck-stem>-speaker-output/work/slide_extract.json"
Reads text boxes, tables, charts, picture objects, OOXML text, and existing notes.
python scripts/render_slides.py "/path/to/deck.pptx" \
--output-dir "<deck-stem>-speaker-output/work/rendered_slides"
Renders slides to PNG. The script tries LibreOffice / soffice first and falls back to macOS Quick Look when available.
python scripts/visual_inventory.py \
--extract "<deck-stem>-speaker-output/work/slide_extract.json" \
--rendered-dir "<deck-stem>-speaker-output/work/rendered_slides" \
--output "<deck-stem>-speaker-output/work/visual_inventory.json" \
--ocr auto
Combines structured extraction, rendered slide paths, and OCR text into a per-slide coverage inventory.
python scripts/vision_review.py \
--inventory "<deck-stem>-speaker-output/work/visual_inventory.json" \
--output "<deck-stem>-speaker-output/work/vision_review_packet.json" \
--markdown "<deck-stem>-speaker-output/<deck-stem>-vision-review.md"
Prepares review prompts and evidence for a vision-capable agent or human reviewer.
python scripts/write_display_docx.py \
--input "<deck-stem>-speaker-output/work/display_document.json" \
--output "<deck-stem>-speaker-output/<deck-stem>-display.docx"
Writes the display-version rehearsal document. If python-docx is missing, it writes a Markdown fallback.
python scripts/inject_notes.py \
--input "/path/to/deck.pptx" \
--output "<deck-stem>-speaker-output/<deck-stem>-with-notes.pptx" \
--notes "<deck-stem>-speaker-output/work/notes.json" \
--mode replace
Injects clean notes into the PowerPoint notes pane.
flowchart LR
A[One Grounded Source] --> B[Display Version]
A --> C[Clean Version]
B --> D[DOCX or Markdown for rehearsal]
C --> E[Injected into PPT notes pane]
| Version | Content | Use |
|---|---|---|
| Display version | Slide labels, separators, transitions, pauses, emphasis marks, glossary, timing table | Rehearsal and review |
| Clean version | Spoken text only | Injected into PowerPoint speaker notes |
Useful dependencies:
python-pptx for PPTX structure extraction and speaker-note injectionsoffice for high-quality slide renderingqlmanage as a rendering fallbacktesseract for OCRpython-docx for Word display documentsIf a dependency is missing, the skill uses the strongest available evidence and reports the limitation. For complex charts, screenshots, SmartArt, and image-only slides, final notes should not be produced without vision review.
This skill aims to cover and explain visible slide elements as completely as possible. It does not claim that scripts can automatically understand every visual element with perfect semantic accuracy.
Why:
The skill improves reliability through script-based discovery, rendering, OCR, vision review, and explicit coverage notes. Uncertain elements must be marked, not invented.
After modifying the source folder, rebuild the .skill package:
zip -r speaker-v8.skill ppt-speech-writer -x '*/__pycache__/*'
The .skill file is a fixed package. Editing ppt-speech-writer/ does not automatically update an already packaged or installed skill.
.pptx fileSign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
Topic in, narrated explainer video out. A Claude Code / Codex skill that turns any topic into a black-canvas motion-graphics explainer video with TTS voiceover, subtitles and a chapter progress bar. Chinese or English; every frame drawn in code with Remotion.
Public repository for Agent Skills
Open-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)
Agent skill for beautiful, verifiable architecture, workflow, sequence, data-flow, and lifecycle diagrams—self-contained HTML with motion and crisp export.
A skill to stop your coding agent from burying the answer. ADHD-friendly output.