Ever tried making a multi-episode course with NotebookLM? In my experience, even several lessons in, the hosts sometimes return to basic explanations, recycle examples, and follow remarkably similar arguments. Meanwhile, the notebook may contain dozens of sources with plenty left unexplored. The lesson numbers advance, but the teaching doesn't always.
So I designed and implemented a workaround to give the Audio Overviews a shared memory of previous episodes and help them explore more of the source material. Here's the method. The full metaprompt is at the bottom.
Why a syllabus isn't enough
In my tests, Audio Overviews often last about 15–30 minutes (not a fixed technical limit), so a thorough course needs several episodes. A syllabus specifies what should be taught, but not what the hosts actually said, including improvised examples and digressions. That's why different prompts can still produce familiar-sounding lessons.
RAG may partly explain this. Retrieval systems can prioritize highly relevant but repetitive passages. Balancing relevance and diversity is a known problem (TREC 2024). NotebookLM's internal pipeline isn't fully public, though, so this is a plausible hypothesis, not a confirmed diagnosis.
The workaround: a memory of what's already been taught
Give NotebookLM an updatable source named ACTIVE_COURSE_LOG**: a compact record of concepts, examples, and approaches already covered.**
Think of it as a script editor's continuity notes. The hosts can see where they've been and spend the next episode on other worthwhile parts of the sources, rather than replaying their greatest hits.
For example, imagine a course on metaphors. Episode 1 explains the concept; episode 2 uses "break the ice"; episode 3 tackles clichés. With the log, episode 3 can focus on a new rewriting exercise rather than repeating earlier explanations and examples. A one-to-three-sentence recap remains fine when it helps comprehension.
How is the log built? After each episode, I download the podcast and upload the audio back as a source, naming it, say, LESSON_ARCHIVE_002_Cliches_Poetic_Rewriting. NotebookLM can then work from a transcript of what was actually generated, not just the intended lesson plan. The command UPDATE LOG creates or updates a cumulative, concise teaching record, without copying whole prompts or transcripts. It also preserves the series title.
The three parts have distinct jobs:
COURSE_PLAN: what should be taught, kept in chat history.
LESSON_ARCHIVE_...: what was actually said in each podcast.
ACTIVE_COURSE_LOG: what has already been taught, in compact form.
The benefit isn't only fewer repeats. The metaprompt also looks for one or two relevant, source-supported angles that previous episodes haven't explored much. No long exclusion lists: in Studio, the log serves as editorial memory, not material to read aloud. This doesn't alter NotebookLM's retrieval algorithm; it guides the generation from the outside.
Step-by-step
- Create a notebook and add subject-matter sources.
- Edit the four parameters:
[TOPIC], [MAX_LESSONS] (AUTO or a cap), [LEVEL] (From zero to hero, 101, Survey, a grade level), and [TEACHING_STYLE] (AUTO, ELI10, Richard Feynman, etc.).
- Paste the metaprompt into chat, then enter
START**.** It produces a course plan, a fixed series title, and the episode 001 prompt. Keep the chat history containing COURSE_PLAN; don't create an empty log.
- In Studio, select your subject-matter sources, paste only the audio prompt for lesson 001, and generate the podcast.
- Download the podcast episode, rename it using
SUGGESTED ARCHIVE NAME (keep its extension), and upload it as a source. Adjust the keywords if necessary to reflect what was actually covered.
- Refresh the page (F5) and confirm the new source is available. I've occasionally found that otherwise the most recent upload isn't picked up during the update.
- Enter
UPDATE LOG in chat, with the new archive and, from episode 002 onward, the existing log accessible and selected. Confirm the result includes all previous lessons, not just the newest one.
- Replace the log: verify and copy the response, delete the previous
ACTIVE_COURSE_LOG source if present, then save the new response as a note/source under that exact name. Keep the audio archives.
- Enter
PREPARE LESSON 002 (then 003, 004…). You'll get a continuity check, an audio prompt without exclusion lists, the next suggested archive name, and suggested Studio sources.
- For episodes 002 onward, select
ACTIVE_COURSE_LOG plus relevant subject-matter sources in Studio. Normally leave the archived podcast sources unselected there; they're mainly for checking memory in chat. Generate, then repeat from step 5.
These commands come from the metaprompt, not NotebookLM's UI. LESSON_ARCHIVE_ is a naming convention, not an automatic source filter. The approach doesn't guarantee zero repetition or perfect coverage; it's an experiment in editorial continuity and diversity across episodes.
Criticism, testing, and suggestions are very welcome. I'd particularly like to hear whether you've noticed the same repetition and whether the log improves variety.
Full metaprompt: COURSE GENERATOR v3.2.0 (English adaptation)
Edit the four parameters, paste into NotebookLM chat, and enter START.
# COURSE GENERATOR | v3.2.0 · English adaptation · 2026-10-22
[TOPIC]="enter your topic"
[MAX_LESSONS]="AUTO"
[LEVEL]="From zero to hero"
[TEACHING_STYLE]="AUTO"
## GOAL
Create a progressive course on [TOPIC] using ~15-minute Audio Overviews, understandable without visual aids, with narrated examples and mental exercises.
[LEVEL]: "From zero to hero" = basics to advanced; "101" = introductory; "Survey" = essentials; otherwise adapt.
[TEACHING_STYLE]: "AUTO" = choose; "Richard Feynman" = analogies and rigor; "ELI10" = simple but accurate; otherwise adapt.
[MAX_LESSONS]: "AUTO" = choose; a number is a cap, not a target. Flag any gaps if the cap is too low.
At \START`, choose a fixed series title and retain it in the plan, log, and episodes.`
## MEMORY AND SOURCES
\COURSE_PLAN`: intended syllabus in chat; preserve chat history.`
\LESSON_ARCHIVE_`: downloaded audio uploaded as sources, named with three-digit lesson numbers and 2–4 underscore-separated topic keywords, e.g. `LESSON_ARCHIVE_002_Induction_Hume_Causality`. Never output literal filename placeholders.`
\ACTIVE_COURSE_LOG`: fixed title, internal version, and actual per-lesson syllabus: concepts/depth, examples, exercises, perspectives, issues, original archive. No full prompts/transcripts.`
Subject-matter sources provide content and fact-checking. \LESSON_ARCHIVE_` is NOT an automatic source filter.`
## COMMANDS
**START**: output \COURSE_PLAN` (title, modules, lessons, goals, prerequisites), audio prompt 001, and fully specified `SUGGESTED ARCHIVE NAME`. No empty log.`
**UPDATE LOG**: integrate new audio into the existing log; if missing, reconstruct from available archives and flag gaps. Return the FULL but concise log, keeping the title, internal version, and exact source names. Never invent information; without new audio, do nothing.
**PREPARE LESSON N**: consult the plan; from lesson 002 require the log and archive N-1, or stop. Compare memory and subject-matter sources; where available, find 1–2 relevant, verified, underused angles (examples, perspectives, applications). Never sacrifice accuracy or prerequisites for novelty. Output:
1. \CONTINUITY CHECK`: consulted archives, supporting evidence, underused angles and their sources.`
2. \AUDIO PROMPT`: new topics and chosen angles, NO exclusion lists.`
3. \SUGGESTED ARCHIVE NAME`: fully specified, without extension.`
4. \STUDIO SOURCES`: log + relevant subject-matter sources, normally NOT complete audio archives.`
**STATUS**: progress, gaps, next step.
## AUDIO PROMPT FORMAT
“Produce episode [N] of '[FIXED SERIES TITLE]', a course on [TOPIC] at [LEVEL] level in [TEACHING STYLE]. Cover [NEW TOPICS AND DOCUMENTED ANGLES]. Do not announce parameters. Use a dialogue between an expert instructor and a curious student-host, occasional listener text messages, narrated examples, mental exercises, and rigorous explanations.
[FROM EPISODE 002; DO NOT READ ALOUD: Consult the selected \ACTIVE_COURSE_LOG` as editorial memory, NOT as content to narrate. Avoid unnecessary re-explanations and recycled examples; favor relevant, documented material not yet covered. When helpful, recap an essential prerequisite in 1–3 sentences and refer only to verified earlier lessons. Don't ban necessary concepts or force irrelevant novelty.]”`
Resolve all placeholders; omit the memory section for lesson 001.
## WORKFLOW
Download the podcast → rename it using \SUGGESTED ARCHIVE NAME` (keep the extension; match actual topics) → upload as a source → F5 and verify.`
Run \UPDATE LOG` with the previous log and new archive available/selected. Check and copy the response; delete the old `ACTIVE_COURSE_LOG` source; save the new version as a note/source with the same name. Keep audio archives.`
Studio (from lesson 002): select the log and relevant subject-matter sources; paste only \AUDIO PROMPT`.`