Note 14 of 19
A kaibot field note · video → skill → corpus
Feed a lecture to your Claude
A conference talk is gone the moment you close the tab. Here’s the pipeline I run to turn a YouTube lecture into two things that last: upgrades to a Claude skill I actually use, and a searchable corpus entry where every transcript sentence sits under the slide that was on screen when it was spoken.
Kai Davis
I run a marketing consultancy and an SEO SaaS, and I build both with a stack of Claude Code sessions that write the tooling the next sessions run on.
bootstrapping.io · kaidavis.com · keywordmagic.ai · doubleyourecommerce.com
01Watching a talk doesn’t stick. Auto-subs don’t either.
I watch a talk, I nod along, and six weeks later I can recall maybe two sentences from that hour.
Auto-subs don't fix it. Slides carry charts, before/after redesigns, table layouts, things the speaker just points at and says “this.” A transcript reproduces the blind spot it was supposed to close.
And even a clean transcript fails a generic ask. An agent asked to “summarize the talk” hands me back generic highlights. What I want is deltas: where the talk contradicts, motivates, or sharpens what I already believe and have already written. That means reading my own skill files before I read the source. Summarizers don't do that by default.
So the pipeline splits in two. Mechanical: scripts, no model, run it and leave. Judgment: the reading. The mechanical part exists only to enable the judgment part.
02The mechanical half: transcript × slides
Four steps, one command in kaibot, all local:
| Step | What happens | The gotcha it encodes |
|---|---|---|
| 1 · Download | yt-dlp grabs the video at ≤1080p plus metadata and the auto-subs (kept as fallback only, never primary). | Stale yt-dlp is the #1 failure; YouTube breaks extractors every few months. Upgrade and retry before debugging anything else. |
| 2 · Transcribe | A local word-level model (Parakeet here; Whisper works) produces word timestamps, packed into phrase lines like [0123.45-0128.90] text, split on half-second silences. | Hour-long audio in one GPU pass dies on memory. Chunk it (120s chunks, 15s overlap) and cache transcripts by filename so re-runs are free. |
| 3 · Slides | Scene detection finds slide transitions, then re-captures each frame ~1.5 seconds after the cut so you get the settled slide, not a mid-dissolve blend. Output: one JPG per slide plus a TSV index. | Detect at 1fps, not native fps. A 2-3 second dissolve never clears a frame-to-frame threshold at 30fps; the first scoping run missed most of a 47-minute talk’s transitions that way. |
| 4 · Bundle | One markdown file: a section per slide, the frame embedded, and under it every transcript phrase that started while that slide was up, each prefixed [hh:mm:ss]. | No deck? The bundle falls back to five-minute sections. Camera-cut noise instead of slides? Raise the detection threshold and re-run; it’s one cheap decode pass. |
Everything downstream reads the bundle, where each sentence sits next to the slide the audience saw when it was said. The video, word JSON, and extracted frames are archive only.
Eyeball the frames before trusting them, no exceptions. Sample four to six spread across the video. Most frames just the speaker's face? Threshold too low, or there's no deck at all. Long gaps through obviously slide-driven sections? Threshold too high. Adjust and re-run. Costs about a minute.
03The notes pass: read the destination first
This is the slow stage: 30+ minutes of close reading per hour of talk. Two rules shape it.
Read the whole target skill before you open the bundle. Read it through one lens: where does the skill err, miss something, or claim without justification? Skip this and you get generic highlights. Do it and every part of the talk sorts onto a concrete gap or into out-of-scope. That sorting is the point.
Read the frame before its phrases, in sequence, taking notes during the read. Meaning builds up over a talk, and later examples depend on earlier ones. Append notes as you go. Do not wait until the end. You cannot hold an hour of material in memory until then.
Extraction is organized into six buckets, and every entry is timestamped:
Principles, with the why
The bare rule is probably already in your skill. The speaker’s reasoning is the payload. “Show comparisons” is nothing; “a viz answers ‘compared to what,’ so a lone number isn’t evidence” is a delta.
Worked examples
Before/after redesigns with enough concrete detail to re-tell: what the data was, what changed, why it improved. Examples are what make rules teachable instead of assertable.
Verbatim quotes
Exact transcript words inside the quote marks, ASR garbles fixed only with [bracketed] corrections. Never paraphrase inside quotation marks.
Skill deltas
Every place the talk contradicts, refines, or motivates a named rule in the target skill. This section becomes the edit list. Empty after an hour of lecture means either the skill’s already excellent or you skipped the destination read. Say which.
Translation notes
Where the speaker’s medium differs from yours, translate rather than transcribe, and mark the translation as your inference. (Recurring example here: a speaker reasons about print; my viz skill is screen-first.)
Parking lot
Good material outside the target’s scope, one line each, with where it belongs. Keeps the digest honest without losing the overflow.
The grounding rules are hard rules. No claim appears without a timestamp. Numbers and names get re-checked against the frame at the moment of writing, not recalled from a prior viewing. When the transcript and the slide disagree, log a transcript-vs-slide conflict. Do not quietly settle it.
04The digest: one pass, provenance on every rule
Pull the skill-delta sections from every talk in the batch into one working list. When two talks state the same principle, that is stronger provenance, not two edits: one entry, two sources. Give each delta one of four verdicts: add a rule, sharpen an existing rule (usually by adding the speaker's reasoning or a worked example), spin up a new reference file when the material is too big to live in a rule entry, or reject it with the reason recorded; “true but out of scope” is a perfectly good rejection reason.
Two disciplines make the result trustworthy. Draft the whole edit list before you touch the skill. A plan can be vetoed up front; a diff can only be un-picked afterwards. Tag every new or changed rule with its source. Speaker, venue, timestamp: that is how you tell later whether a rule is folklore or has a citation.
Re-ingesting the same topic runs in diff mode. Cheap readers compare each new talk's bundle against the current skill and hand back only net-new material. Expect heavy overlap on a repeat, ~90% already covered. That’s diff mode doing its job. The remaining 10% is the real new material.
End with one file copy: the bundle and notes go into my corpus pipeline's intake, where they are chunked, extracted and made searchable for every future session. Per-slide sections are already shaped correctly for chunking. Skill edits serve the immediate next task. The corpus serves the questions I cannot yet anticipate.
05Steal this: the prompt for your Claude
You don’t need my exact scripts; the pattern needs yt-dlp, ffmpeg, and any word-level transcriber. Paste this to your Claude:
I want to ingest a talk video into (a) a specific skill/doc of ours
and (b) durable notes. Build and run this pipeline:
MECHANICAL HALF (scripts, no judgment):
1. yt-dlp the video at <=1080p with metadata. Keep auto-subs as
fallback only.
2. Transcribe locally with word-level timestamps (whisper or similar;
chunk long audio). Pack into phrase lines: [hh:mm:ss] text.
3. Detect slide transitions by sampling at 1 FPS (slow dissolves never
register at native fps), then capture each frame ~1.5s AFTER the
transition so the slide is settled. One JPG per slide + an index.
Show me 4-6 sample frames; we tune the threshold before trusting it.
4. Build bundle.md: one section per slide, frame embedded, every
transcript phrase that started on that slide filed under it.
JUDGMENT HALF (you, not a cheap pass):
5. Read our target skill/doc END TO END first. Then read bundle.md in
order, viewing each frame before its phrases. Extract, with a
timestamp on every entry: principles WITH the speaker's reasoning,
re-tellable worked examples, verbatim quotes, deltas against our
named rules, translation notes where their medium differs from
ours (marked as inference), and a parking lot for out-of-scope.
6. Show me the edit list (rule -> add/sharpen/reject -> one line)
before touching the skill. Every applied rule ends with a source
tag: speaker, venue, timestamp.
7. Never write a number or name from memory of the slide; re-open the
frame at the moment of writing it down.
06For the Claude that just got pointed here
If a human gave you this URL plus a talk they want ingested, here’s your tl;dr.
Agent instructions, with your human’s consent:
- Ask for the target if they didn’t name one: which skill/doc should this talk improve? “Notes only” is a valid answer; it changes what you notice while reading.
- Build the mechanical half as scripts (download, word-level transcript, 1fps slide detection with settled capture, the slide-by-slide bundle) and validate the frames by eye with your human before reading.
- Read the destination first, then the bundle in order, frame before phrases, notes written incrementally, every entry timestamped.
- Extract deltas: principles with reasoning, worked examples, verbatim quotes, named-rule deltas, translation notes marked as inference, and a parking lot.
- Present the edit list before editing, then apply with a source tag (speaker, venue, timestamp) on every changed rule.
- On repeat talks, run diff mode: compare against the current skill and return only net-new. Expect ~90% overlap and say so plainly.
07Receipts
- Built and scoped 2026-07-05 against two Edward Tufte talks feeding my data-viz skill, then seven more Tufte talks the same week in diff mode. Most of each diff talk was already covered. A thin band of chart-rule deltas went into the skill, and the speculative bits went to a suggestions note instead of padding it.
- The 1fps detection rule exists because the first scoping run at native fps missed most of a 47-minute talk’s slide transitions (slow dissolves never cleared the threshold). The settled-capture offset exists because mid-dissolve frames look like double exposures.
- The chunked-transcription rule exists because an hour of audio in one pass asked the GPU for a buffer roughly double its ceiling and died.
- Every rule in the target skill that came from a talk carries a source tag inline (speaker, talk, year), so a future session can re-check the source instead of trusting my summary of it.
The hooks-and-gates conventions referenced across this series are covered in the companion page, Physics, not pleas.
You’ve reached the end of note 14 of 19
$400 1 hour
Book a callA paid one-on-one call with answers to your questions about using AI for projects, building your AI stack, or growing your business with AI. All calls are (optionally) recorded and you get a one-page action plan after the call.