PPT Speech Script Generator
Generate a structured, oral-style speech script from an existing PowerPoint presentation.
When to Use
- User has an existing
.pptx file and wants a speech script to go with it
- User says: "generate a speech script", "write speaker notes", "写演讲稿", "生成讲稿"
- This is NOT for creating PPT files — use the
pptx skill for that
Workflow
Step 1: Extract Content
Extract text, visual layout, and embedded images from the presentation using three methods in parallel:
Text extraction:
python3 -m markitdown <pptx_file>
Visual layout (thumbnail grid):
python3 skills/pptx/scripts/thumbnail.py <pptx_file> <output_dir>/thumbnails --cols 5
Image extraction (unpack media files):
python3 skills/pptx/ooxml/scripts/unpack.py <pptx_file> <output_dir>/unpacked
Then:
- Read the thumbnail grid image(s) to understand the visual structure of each slide
- Build a slide-to-image mapping by reading the relationship files:
- Parse
ppt/slides/_rels/slideN.xml.rels for each slide
- Extract
Target="../media/imageX.ext" references to find which images belong to which slide
- For slides with important images (charts, architecture diagrams, screenshots), read the original image from
ppt/media/ using the Read tool for detailed visual analysis
- Skip generic/decorative images (backgrounds, logos, icons) — focus on content-carrying images
- Prioritize: architecture diagrams, data charts, comparison tables, workflow diagrams, product screenshots
Image analysis guidelines:
- For architecture/flow diagrams: describe the components, data flow direction, and key relationships
- For data charts: read exact numbers, axis labels, and trends
- For comparison tables: extract the key differentiators
- For product screenshots: describe what the user interface shows
- For photos/decorative images: brief description only, don't over-analyze
This image analysis enables the speech script to accurately describe visual content that markitdown cannot capture (since markitdown only extracts text, not image content).
Step 2: Analyze Presentation Structure
Before writing, analyze the deck:
- Identify sections — group slides into logical sections (intro, body sections, conclusion)
- Identify hidden slides — thumbnail.py reports hidden slides; exclude them from the script
- Identify slide types — title, content, data, diagram, comparison, section divider, closing
- Note visual elements — charts, images, diagrams that need verbal explanation
- Estimate timing — allocate time per slide based on content density
Timing guidelines:
| Slide type |
Suggested time |
| Title/cover |
30s - 1min |
| Agenda |
30s - 1min |
| Section divider |
15 - 30s |
| Content (light) |
1 - 1.5min |
| Content (dense) |
1.5 - 2.5min |
| Data/chart |
1.5 - 2min |
| Diagram/architecture |
2 - 3min |
| Demo/code |
2 - 3min |
| Summary |
1 - 2min |
| Closing/Q&A |
30s |
Step 3: Write the Speech Script
Generate a complete speech script following these principles:
Output Format
---
title: "PPT Title — Speech Script"
slides: <total visible slides>
estimated_time: "XX-XX minutes"
audience: "<target audience>"
---
# PPT Title — Speech Script
> Audience: <target audience> | Date: <date if available>
Estimated duration: XX minutes (including Q&A). Suggested time per slide is noted in brackets.
---
## Slide 0 — Slide Title [30s]
Speech content here...
---
## Slide 1 — Slide Title [1min]
Speech content here...
---
...
## Predicted Q&A
### Q1: <likely question>?
Answer key points...
### Q2: <likely question>?
Answer key points...
### Q3: <likely question>?
Answer key points...
Writing Principles
Oral style — Write as if speaking to the audience, not reading a document
- Use conversational connectors: "Let's look at...", "The key takeaway here is...", "Now, moving on to..."
- Avoid academic or written-style phrasing
Don't read the bullets — The script should EXPLAIN and EXPAND on slide content, not repeat it
- Slide says "Cost reduced 34.8%" → Script says "We brought per-query cost down by over a third — from 9 cents to under 6 cents. At million-user scale, that's millions of dollars saved per month."
Per-slide length: 80-200 words (Chinese) or 60-150 words (English)
- Section dividers and title pages: shorter (30-60 words)
- Dense data or architecture slides: longer (150-250 words)
Smooth transitions — Each slide's script should naturally flow from the previous one
- End of previous slide's conclusion → Beginning of next slide's topic
- Use transitional phrases: "That brings us to...", "With that context in mind...", "So how do we solve this?"
Highlight key points — Use bold or verbal cues for emphasis
- "The most important number on this slide is..."
- "If you remember one thing from today..."
Explain visuals — For charts, diagrams, and images, guide the audience through what they're seeing
- "Looking at this architecture diagram, data flows from left to right..."
- "The blue bars represent the baseline, and the orange bars are our optimized results..."
Audience awareness — Tailor depth and terminology to the stated audience
- CTO audience → focus on strategic impact, cost, and scalability
- Developer audience → focus on implementation details and code
- Business audience → focus on ROI, user impact, and market context
Q&A section — Prepare 3-5 predicted questions
- Include "tough but fair" questions the audience is likely to ask
- Provide concise answer key points (not full scripts)
- Consider the audience's perspective and concerns
Language
- Default: Match the language of the PPT content
- User override: If user specifies a language (e.g., "in Chinese", "in English"), use that
- Mixed content: If PPT has mixed languages, use the dominant language unless told otherwise
Step 4: Save Output
Save the speech script to the same directory as the PPT file:
# Output path: same directory as input, named speech-script.md
<pptx_dir>/speech-script.md
If a speech-script.md already exists, ask the user before overwriting.
Dependencies
These should already be available from the pptx skill:
- markitdown:
pip install "markitdown[pptx]" — text extraction
- thumbnail.py:
skills/pptx/scripts/thumbnail.py — visual layout analysis
- unpack.py:
skills/pptx/ooxml/scripts/unpack.py — PPTX unpacking for media extraction
- LibreOffice: for PDF conversion (used by thumbnail.py)
- Poppler: for PDF-to-image conversion (used by thumbnail.py)
Edge Cases
Very large presentations (50+ slides):
- Group consecutive similar slides into sections
- Summarize repetitive slides rather than scripting each individually
- Note in the script: "Slides X-Y cover [topic] — walk through highlights"
Image-heavy / text-light slides:
- Use the slide-to-image mapping to read original images from
ppt/media/ at full resolution
- Describe what the audience sees based on direct image analysis
- For images that cannot be read (e.g., unsupported format), fall back to thumbnail grid analysis
- Flag slides where content is still unclear: "[Note: This slide contains a visual element — verify description against actual slide]"
Hidden slides:
- Exclude from the main script
- Optionally note them at the end: "Note: Slides X, Y, Z are hidden and not included in this script"
No text content (pure image deck):
- Extract all images via unpack and read each one directly for full-resolution analysis
- Use thumbnail grid for overall slide layout understanding
- Generate descriptive narration based on per-image analysis
- Clearly note which descriptions are based on visual interpretation
Quality Checklist
After generating the script, verify:
1---2name: ppt-speech-script3description: Generate a speech script from an existing PowerPoint presentation. Use this skill when the user has a .pptx file and wants a speaker script, presentation notes, or talk script to accompany it. Triggers on: 'speech script', 'speaker notes', 'talk script', 'presentation script', '演讲稿', '讲稿'4license: Proprietary. LICENSE.txt has complete terms5---67# PPT Speech Script Generator89Generate a structured, oral-style speech script from an existing PowerPoint presentation.1011## When to Use1213- User has an existing `.pptx` file and wants a speech script to go with it14- User says: "generate a speech script", "write speaker notes", "写演讲稿", "生成讲稿"15- This is NOT for creating PPT files — use the `pptx` skill for that1617## Workflow1819### Step 1: Extract Content2021Extract text, visual layout, and embedded images from the presentation using three methods in parallel:2223**Text extraction:**24```bash25python3 -m markitdown <pptx_file>26```2728**Visual layout (thumbnail grid):**29```bash30python3 skills/pptx/scripts/thumbnail.py <pptx_file> <output_dir>/thumbnails --cols 531```3233**Image extraction (unpack media files):**34```bash35python3 skills/pptx/ooxml/scripts/unpack.py <pptx_file> <output_dir>/unpacked36```3738Then:391. Read the thumbnail grid image(s) to understand the visual structure of each slide402. Build a **slide-to-image mapping** by reading the relationship files:41 - Parse `ppt/slides/_rels/slideN.xml.rels` for each slide42 - Extract `Target="../media/imageX.ext"` references to find which images belong to which slide433. For slides with important images (charts, architecture diagrams, screenshots), **read the original image** from `ppt/media/` using the Read tool for detailed visual analysis44 - Skip generic/decorative images (backgrounds, logos, icons) — focus on content-carrying images45 - Prioritize: architecture diagrams, data charts, comparison tables, workflow diagrams, product screenshots4647**Image analysis guidelines:**48- For **architecture/flow diagrams**: describe the components, data flow direction, and key relationships49- For **data charts**: read exact numbers, axis labels, and trends50- For **comparison tables**: extract the key differentiators51- For **product screenshots**: describe what the user interface shows52- For **photos/decorative images**: brief description only, don't over-analyze5354This image analysis enables the speech script to accurately describe visual content that `markitdown` cannot capture (since markitdown only extracts text, not image content).5556### Step 2: Analyze Presentation Structure5758Before writing, analyze the deck:59601. **Identify sections** — group slides into logical sections (intro, body sections, conclusion)612. **Identify hidden slides** — thumbnail.py reports hidden slides; exclude them from the script623. **Identify slide types** — title, content, data, diagram, comparison, section divider, closing634. **Note visual elements** — charts, images, diagrams that need verbal explanation645. **Estimate timing** — allocate time per slide based on content density6566**Timing guidelines:**67| Slide type | Suggested time |68|------------|---------------|69| Title/cover | 30s - 1min |70| Agenda | 30s - 1min |71| Section divider | 15 - 30s |72| Content (light) | 1 - 1.5min |73| Content (dense) | 1.5 - 2.5min |74| Data/chart | 1.5 - 2min |75| Diagram/architecture | 2 - 3min |76| Demo/code | 2 - 3min |77| Summary | 1 - 2min |78| Closing/Q&A | 30s |7980### Step 3: Write the Speech Script8182Generate a complete speech script following these principles:8384#### Output Format8586```markdown87---88title: "PPT Title — Speech Script"89slides: <total visible slides>90estimated_time: "XX-XX minutes"91audience: "<target audience>"92---9394# PPT Title — Speech Script9596> Audience: <target audience> | Date: <date if available>9798Estimated duration: XX minutes (including Q&A). Suggested time per slide is noted in brackets.99100---101102## Slide 0 — Slide Title [30s]103104Speech content here...105106---107108## Slide 1 — Slide Title [1min]109110Speech content here...111112---113114...115116## Predicted Q&A117118### Q1: <likely question>?119Answer key points...120121### Q2: <likely question>?122Answer key points...123124### Q3: <likely question>?125Answer key points...126```127128#### Writing Principles1291301. **Oral style** — Write as if speaking to the audience, not reading a document131 - Use conversational connectors: "Let's look at...", "The key takeaway here is...", "Now, moving on to..."132 - Avoid academic or written-style phrasing1331342. **Don't read the bullets** — The script should EXPLAIN and EXPAND on slide content, not repeat it135 - Slide says "Cost reduced 34.8%" → Script says "We brought per-query cost down by over a third — from 9 cents to under 6 cents. At million-user scale, that's millions of dollars saved per month."1361373. **Per-slide length**: 80-200 words (Chinese) or 60-150 words (English)138 - Section dividers and title pages: shorter (30-60 words)139 - Dense data or architecture slides: longer (150-250 words)1401414. **Smooth transitions** — Each slide's script should naturally flow from the previous one142 - End of previous slide's conclusion → Beginning of next slide's topic143 - Use transitional phrases: "That brings us to...", "With that context in mind...", "So how do we solve this?"1441455. **Highlight key points** — Use bold or verbal cues for emphasis146 - "The **most important** number on this slide is..."147 - "If you remember one thing from today..."1481496. **Explain visuals** — For charts, diagrams, and images, guide the audience through what they're seeing150 - "Looking at this architecture diagram, data flows from left to right..."151 - "The blue bars represent the baseline, and the orange bars are our optimized results..."1521537. **Audience awareness** — Tailor depth and terminology to the stated audience154 - CTO audience → focus on strategic impact, cost, and scalability155 - Developer audience → focus on implementation details and code156 - Business audience → focus on ROI, user impact, and market context1571588. **Q&A section** — Prepare 3-5 predicted questions159 - Include "tough but fair" questions the audience is likely to ask160 - Provide concise answer key points (not full scripts)161 - Consider the audience's perspective and concerns162163#### Language164165- **Default**: Match the language of the PPT content166- **User override**: If user specifies a language (e.g., "in Chinese", "in English"), use that167- **Mixed content**: If PPT has mixed languages, use the dominant language unless told otherwise168169### Step 4: Save Output170171Save the speech script to the same directory as the PPT file:172173```bash174# Output path: same directory as input, named speech-script.md175<pptx_dir>/speech-script.md176```177178If a `speech-script.md` already exists, ask the user before overwriting.179180## Dependencies181182These should already be available from the `pptx` skill:183184- **markitdown**: `pip install "markitdown[pptx]"` — text extraction185- **thumbnail.py**: `skills/pptx/scripts/thumbnail.py` — visual layout analysis186- **unpack.py**: `skills/pptx/ooxml/scripts/unpack.py` — PPTX unpacking for media extraction187- **LibreOffice**: for PDF conversion (used by thumbnail.py)188- **Poppler**: for PDF-to-image conversion (used by thumbnail.py)189190## Edge Cases191192**Very large presentations (50+ slides):**193- Group consecutive similar slides into sections194- Summarize repetitive slides rather than scripting each individually195- Note in the script: "Slides X-Y cover [topic] — walk through highlights"196197**Image-heavy / text-light slides:**198- Use the slide-to-image mapping to read original images from `ppt/media/` at full resolution199- Describe what the audience sees based on direct image analysis200- For images that cannot be read (e.g., unsupported format), fall back to thumbnail grid analysis201- Flag slides where content is still unclear: "[Note: This slide contains a visual element — verify description against actual slide]"202203**Hidden slides:**204- Exclude from the main script205- Optionally note them at the end: "Note: Slides X, Y, Z are hidden and not included in this script"206207**No text content (pure image deck):**208- Extract all images via unpack and read each one directly for full-resolution analysis209- Use thumbnail grid for overall slide layout understanding210- Generate descriptive narration based on per-image analysis211- Clearly note which descriptions are based on visual interpretation212213## Quality Checklist214215After generating the script, verify:216217- [ ] Every visible slide has a corresponding section218- [ ] Slide numbering matches the PPT (0-indexed)219- [ ] Transitions between slides are smooth220- [ ] No bullet points are simply repeated verbatim221- [ ] Time estimates per slide are reasonable222- [ ] Total estimated time is realistic for the slide count223- [ ] Q&A section includes 3-5 relevant questions224- [ ] Language matches user's request or PPT's dominant language