The Rehearsal
Predict the meeting, then let the person hear, watch and flip through it before it happens.
| Output | File | What it is |
|---|---|---|
| Prediction | script.md | The likely conversation, one turn per line, with slide markers |
| Talk track | out/rehearsal.mp3 | Two voices, one for each side |
| Video | out/rehearsal.mp4 | One slide per talking section, timed to the audio, subtitles burned in |
| Subtitles | out/rehearsal.srt | Sentence-level captions with speaker names |
| Presentation | out/deck.html | Offline flip-through deck; N shows each section's exact lines |
Paths below are relative to this skill's folder. Work in a project folder of your own (script.md, slides/, out/).
1. Gather the meeting
Collect, before writing anything: who the counterpart is (role, background, what they own), the meeting's goal, length and format, the person's own facts (resume, numbers, plan, approved answers), and what this counterpart is likely to probe. Read what the person already has: call sheets, plans, research, emails, job descriptions.
Ask only for facts that would change the script. A question the person must answer from their own experience becomes a Prepare item; never fill it with an invented answer. The rehearsal is only worth running if the person's lines are true: a confident made-up number in rehearsal turns into a made-up number in the meeting.
2. Predict the conversation
Write script.md in the format in references/script-format.md.
- Order it like the real meeting: opening, the counterpart's framing, the person's background, probing questions, the person's plan or pitch, hard questions, logistics, the person's questions, the close.
- The counterpart's lines are a prediction. Say so in the script header. Where you would otherwise invent facts about their company, keep their line general ("I can't share the terms").
- The person's lines use only facts they supplied or documents they own, and their approved wording verbatim where they have it.
- Answer first, give one example, stop. One to three sentences per answer suits most meetings.
- Write numbers the way people say them ("5 million", "161 percent") so the voices read them naturally.
- Put
<!-- slide: id -->before the turn where each talking section starts: usually one section per question. - End the file with a Prepare list: the questions you could not answer from facts.
Optional stress test before generating media: have one or two reviewers play the counterpart and the counterpart's boss (as subagents if you can start them) and critique the person's answers or plan. Apply the changes the facts support; list the rest for the person.
3. Voice it
pip install -r requirements.txt # edge-tts, pydub; ffmpeg must be installed
python scripts/make_audio.py script.md out --voice "Dana=en-US-AvaNeural" --voice "Sam=en-US-AndrewNeural"
Give the two sides clearly different voices (edge-tts --list-voices lists them). The script writes out/rehearsal.mp3 and out/timeline.json with sentence timings for the subtitles. Edge drops a few requests at random; the script retries.
4. Draw one slide per talking section
Write slides/<id>.html for every slide marker, in the format in references/slide-format.md. Each slide turns its section into a picture: the question as the title, then the answer as a timeline, numbered steps, a comparison, a bar chart of the real numbers, a decision path or a term table. Put the exchange, word for word, in the slide's <aside> speaker notes. Add a callout wherever the person must be careful ("Prepare: the timeline from yes to signature"), because the deck doubles as a study aid.
5. Render the video and the deck
python scripts/render_video.py slides out --fonts "https://fonts.googleapis.com/css2?family=..."
python scripts/build_deck.py slides out --fonts "https://fonts.googleapis.com/css2?family=..." --title "Rehearsal: <meeting>"
render_video.py needs Google Chrome or Chromium (set CHROME= if it is not found) and ffmpeg built with libass. --fonts is the one Google Fonts URL the slides use; leave it out when the slides use system fonts. Where a Slides artifact type is available, the same slide files can be published there as a shareable deck.
6. Check, then hand over
- Pull one frame per slide (
ffmpeg -ss <seconds> -i out/rehearsal.mp4 -frames:v 1 frame.png) and look at it: text inside its boxes, nothing under the subtitle band, fonts loaded. - Confirm the video length matches the audio length.
- Hand over the files with three plain caveats: the counterpart's lines are a prediction; the Prepare list needs the person's own facts; the script text went to Microsoft's speech service.
Privacy
edge-tts sends the script text to Microsoft's speech service. Before generating audio, tell the person if the script holds anything sensitive (pay, health, unannounced deals or names) and offer to leave it out of the voiced version. No API keys or paid services are used.
Files
scripts/make_audio.py- script to timed two-voice MP3 andtimeline.jsonscripts/render_video.py- slides plus audio to subtitled MP4 and SRTscripts/build_deck.py- slides to an offline flip-throughdeck.htmlreferences/script-format.md- how to writescript.mdreferences/slide-format.md- how to write a slide