microsoft/presentation-talk-track-builder
| Writes natural, first-person spoken presenter scripts (talk tracks) for the slides in a PowerPoint deck, from slide images, or from pasted slide text. Treats existing speaker notes as AUTHORITATIVE when they contradict slide text. Produces one spoken script per slide with delivery cues, calibrated to a target duration and speaking pace, plus a timing table. Use when the user says "write a script for these slides", "I'm presenting slides X-Y, what should I say", "create a presenter script", "turn my speaker notes into a talk track", or "make a 6-minute script for these slides". Do NOT use to create or edit the visible content of slides, to summarize a recorded meeting or transcript, or for general document writing.
npx skills add https://github.com/microsoft/cat-agent-skills --skill presentation-talk-track-builder
This skill turns slides into a spoken talk track. For each requested slide it
writes a first-person script the presenter can read aloud, grounded in the
slide's content and — above all — its speaker notes. It calibrates the
script length to a target time and speaking pace and returns a timing table
so the presenter knows whether they will land on time.
Core rule: the speaker notes are the source of truth. When notes and
slide text disagree, the script follows the notes and silently drops the
contradicted slide text. This is what the author intended to say.
Works across Scout, Copilot Studio, and Cowork. The user can attach a
.pptx, provide slide images, paste slide text, or provide an outline.
speaker."
themselves.
User: "I'm presenting slides 8-11, write a script for each. If the notes
contradict the slides, follow the notes. Target ~6 minutes, business
audience."
1. Capture inputs — audience & goals, slide content, optional supporting
context.
2. Extract BOTH slide text AND speaker notes for the requested slides.
3. Reconcile: where notes contradict slides, follow the notes.
4. Calibrate: target minutes × pace (words/min) = word budget; split by
slide.
5. Write a first-person script per slide with delivery cues + a handoff line.
6. Return the scripts + a per-slide timing table (words → spoken minutes).
7. Offer to save as speaker notes back into a copy of the deck, or as a doc.
Before writing anything, capture:
technical depth, familiarity with the topic.
panel, webinar.
*do* after the presentation?
If the user hasn't provided these, ask once. If they decline, use the
defaults below and label them as assumptions in the output:
.pptx/.pptm is attached or on disk, use it. Check the user'slikely input folders first (Downloads, current workspace) even when the
user does not name a path.
the user there were no speaker notes to follow.
specific slides, cover the whole deck.
the narration (but not into the slides themselves): a product one-pager,
a prior version of the talk, a customer brief, an FAQ, source links, or
presenter background notes. This is especially useful when the existing
speaker notes are thin or missing.
helper:
python scripts/pptx_talk_track.py extract <deck>.pptx <slides>.json
The output JSON contains title, visibleText, and existingNotes per
slide. Both fields matter.
slide.notes_slide.notes_text_frame.text to read notes.
different figure, name, framing, date, or emphasis), write the script to
match the notes and drop the contradicted slide text.
sparse, lean on the slide content and any supporting context to fill the
spoken narrative — never invent.
scripts, so the presenter knows why the script diverges from what's on
screen.
user says they "speak fast", use a brisk pace; otherwise default to
average.
| Pace | WPM | Use when |
|------|-----|----------|
| Deliberate | 110-130 | Technical/dense content, non-native audience |
| Average | 130-150 | Default |
| Brisk / "I speak fast" | 165-185 | User says they rush or speak quickly |
weight (slides with denser notes get more words). Compute totals and
per-slide times with a code tool — never estimate arithmetic by hand.
the target (e.g. write to ~6:15 for a 6:00 goal) and add [pause] cues,
which both reinforce key points and naturally slow a fast speaker.
## Slide N — <short title>.this matters…"). Contractions on. Short sentences. No bulleted
fragments — full spoken prose.
diagram)*, *(click to reveal)*, *(hand off)*.
the last covered slide with a handoff line to the next presenter or to
Q&A if relevant.
with a total and the estimated overall minutes at the chosen pace.
any slide to a specific per-slide time.
using:
python scripts/pptx_talk_track.py apply <deck>.pptx <notes>.json <output>.pptx
The helper writes speaker notes only. It never changes visible slide
content, order, formatting, images, charts, or animations.
where relevant.
and a one-line note of any note-vs-slide contradiction resolved.
See references/tone-examples.md for target voice samples.
follow the notes and drop the contradicted slide content — this is the
whole point of the skill.
images, charts, and animations must stay unchanged. If notes are written
back to a .pptx, only speaker notes in a copied file are updated.
quotes that aren't in the slides, notes, or supporting context. Mark
genuine gaps as [confirm: …] rather than guessing.
confidentiality label or sensitivity marking (for example
"Confidential", "Internal Only", "Restricted", or an enterprise
information-protection label), or contain unreleased figures,
customer or partner identifiers, or names that aren't public yet,
flag them and confirm with the user before including that content in
the spoken script. Never add PII or customer identifiers the source
material doesn't already contain.
so the presenter can recalibrate.
preserve their order. If the user asks for "the whole deck", cover
every slide.
images; paraphrase into the presenter's own spoken words.
and ask the user to re-attach it — do not substitute placeholder slide
content.
scripts/pptx_talk_track.py uses only the Python standard library.
extract <deck>.pptx <slides>.json — read slide titles, visible text,and existing speaker notes.
template <deck>.pptx <notes>.json — write an empty notes JSON templatewith one entry per slide, ready to fill in with generated scripts.
apply <deck>.pptx <notes>.json <output>.pptx — write the generatedscripts into a copied deck as speaker notes. Never overwrites the
original.
If a deck has no notes master, open and save it once in PowerPoint (or add
a note to one slide) before rerunning the helper.
Runtime note: the helper needs Python 3 available in the runtime.
Scout, Copilot Studio, and Cowork all support this, so the extract /
template / apply commands work on all three platforms. If the
runtime doesn't have Python for any reason, the skill still works —
paste slide text, an outline, or slide images, and the model writes
the talk track and timing table inline. In that case, users who want
the scripts embedded back into a .pptx as speaker notes can run the
helper locally with Python 3 installed.
references/tone-examples.md — short excerpts of the targetfirst-person, spoken voice with delivery cues.
assets/example-notes.json — example of the notes JSON shape theapply command consumes.
Take microsoft/presentation-talk-track-builder from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.