I pointed an agent at a locked video course. By morning: 34/34 transcripts.
The videos were embed-only with no captions, loaded dynamically through a course platform — nothing to scrape. The agent admitted that honestly, then pivoted to downloading audio and running local Whisper, grinding through 34 lessons overnight and pinging me every 5.
A source built to resist extraction.
Video-only. Behind a login. Embed-only players. No subtitles, no direct URLs, no auto-captions.
To do anything useful with the material — search it, extract the rules, build on it — I needed it as text.
The source was a full 20+ hour video course on a platform that deliberately makes extraction hard: dynamically loaded lessons, embed-only video, and zero caption tracks.
Doing it by hand meant sitting through 20+ hours and typing. That’s exactly the kind of tedious, mechanical job I wanted an agent to own end to end — set the parameters, walk away, get searchable text back.
The workflow evolved through failure.
The honest, interesting part is the arc — not the raw speed.
Attempt one scraped page text but got no video content — and said so directly rather than pretending. Attempt two tried caption tracks — none existed. The working approach: audio-only download of each lesson, then local Whisper transcription. When lessons had no static URLs, the agent systematically extracted each embedded video ID; when an early sub-agent exited after 3 downloads, I had it spawn a proper long-running agent with a 12-hour timeout.
The first pass failed honestly — it told me it never actually pulled the video content, instead of faking completion. That's the behavior I want from an agent on a hostile source.
— Proof moment · honest failure over fake successThe extraction pipeline.
Dynamic video-ID extraction feeds an audio-only download, which feeds local Whisper. Each lesson lands as its own file plus a master document, with a progress ping every five lessons and a monitor cron watching the run.
A caption-less course feeds dynamic video-ID extraction → audio-only download → local Whisper (medium) → 34 per-lesson files + a master doc. A ping every five lessons reports progress, and a monitor cron watches the long-running agent through the night.
Agent Runtime
Source Constraints
Extraction Pipeline
Output
Supervision I/O
Discarded Approaches
One night. One agent. 34 lessons.
Feb 19–20, 2026 · verified from the run's own progress record.
Count nuance, stated honestly: the course was navigated as ~44 total modules during discovery; the pipeline processed and completed the 34 lessons with extractable video — 34/34. The headline is the 34, not the 44.
Four walls, then a working pipeline.
The value here is the problem-solving: the agent hit four distinct blockers, reported failure truthfully, and iterated to something that held.
A sub-agent read the page copy but got no actual video content — and told me so directly instead of pretending it had.
Trying yt-dlp and checking the embedded player for subtitle tracks was a dead end — no captions existed at all.
Lessons loaded dynamically, so the agent had to systematically extract each embedded video ID rather than follow a link list.
A first sub-agent quit after starting only 3 downloads. I had it spawn a proper long-running agent with a 12-hour timeout.
Audio-only downloads feeding local Whisper (medium), lesson by lesson, overnight — ping every 5 until 34/34 pipeline complete.
Locked video → searchable text.
I set the goal and made the tradeoff.
I set the objective, rejected the good-enough first pass, and made the key engineering call — medium Whisper, run overnight, audio-only.
I directed each pivot when the agent hit a wall — spawn a proper long-running agent, systematic video-ID extraction, a 12-hour timeout — and set the reporting cadence (ping every 5). The agent did the extraction and transcription; I owned the goal, the quality-versus-speed decision, and the supervision loop.