Slides to Course · From a Deck to a Course
Slide notes to lessons and quizzes
Your speaker notes are the closest thing you have to a lesson script: they're what you actually say. But they're written for you, in shorthand, with the examples living in your head. A learner needs them spelled out, and that's a first draft Claude is good at.
One slide at a time
Give Claude the same three things every time: who the course is for, the lesson's one outcome from your outline, and the slide with its notes. Ask for two things back: a short script in your voice that teaches that outcome, and three quiz questions that check it.
"""One slide and its notes to a lesson script and a quiz.
Gives Claude the same three things every time: who the
course is for, the lesson's one outcome, and the slide
with its speaker notes. It asks for a short script in the
speaker's voice and three quiz questions on the outcome.
python3 lesson.py workshop.pptx 5 "You can add one
good example to a prompt in place of a paragraph of rules."
"""
import sys
import anthropic
from pptx import Presentation
BRIEF = """Course: for people who use Claude at work but get uneven results.
Lesson outcome: {outcome}
From the slide and speaker notes below, write:
SCRIPT: a lesson script of about 120 words, in the speaker's voice, that teaches the outcome.
Include one concrete example.
QUIZ: three questions that check the learner can do it, each with the answer.
Plain text, no markdown."""
if __name__ == "__main__":
path, number, outcome = sys.argv[1], int(sys.argv[2]), sys.argv[3]
slide = Presentation(path).slides[number - 1]
text = " / ".join(s.text_frame.text for s in slide.shapes
if s.has_text_frame and s.text_frame.text)
notes = slide.notes_slide.notes_text_frame.text
print(f"Slide {number}: {text}\nNotes: {notes}\n")
response = anthropic.Anthropic().messages.create(
model="claude-sonnet-5-5",
max_tokens=4000,
messages=[{"role": "user", "content": BRIEF.format(outcome=outcome) + f"\n\n<slide>\n{text}\nNotes: {notes}\n</slide>"}],
)
print("".join(b.text for b in response.content if b.type == "text"))
Then the part that's yours
- Read the script out loud.
- Swap in your own example wherever Claude made one up. In our run, Claude's script described an email to "Dana" that nobody sent. Your examples are why people want your course and not a general one.
- Check every quiz answer yourself. A quiz with a wrong answer marked right does more harm than no quiz at all.
The common mistake
Running the whole deck through at once and publishing what comes out. You'll get a pile of lessons that all sound the same, and none of them sound like you. Do one slide, fix it, and use what you fixed to sharpen the brief for the next one.
Try these prompts
- Here is one slide and its speaker notes, and the lesson's outcome. Write a lesson script of about 120 words in my voice with one concrete example, then three quiz questions that check the learner can do it, with answers.Open in ChatGPT (new tab)Open in Claude (new tab)
- Check these quiz answers. Flag any that are wrong, ambiguous, or that only test whether someone remembers a phrase.Open in ChatGPT (new tab)Open in Claude (new tab)
Ask me about this lesson
I'll answer from "Slide notes to lessons and quizzes" and the rest of the academy.
I keep this chat with your account, so it's here on any lesson.
Sign in to keep your place and tick off lessons. Reading stays open either way.