Open-weight models + Temporal, on a 2015-era desktop

chaptermill

Point it at a podcast feed and leave it running. It turns the back catalog into transcripts, chapters, pull quotes that are checked word for word against the transcript, and show notes ready to paste: 4.3 hours of audio took 44 minutes on a 2015-era desktop. If the machine crashes, the network drops or the model API rate-limits, it picks up where it stopped, without redoing finished work or buying a model reply it already has.

Real output: Hacker Public Radio

Nine recent episodes of Hacker Public Radio, a community podcast released under CC BY-SA 4.0. Nothing below was edited by hand. Pick an episode, press a chapter or a quote to jump the player there.

How it works

  1. Feed. A CatalogWorkflow reads the RSS feed and starts one child EpisodeWorkflow per episode, two at a time, inside a dollar budget you can raise with a signal while it runs.
  2. Transcribe locally. The audio is cut into 5-minute chunks; each chunk is one activity running faster-whisper base.en on two CPU threads. A finished chunk is saved, so a crash costs at most the chunk in progress.
  3. Agent writes notes. An open-weight model (Qwen3-235B-A22B-Instruct-2507, Apache-2.0) gets a one-line-per-minute outline and two tools, read_transcript and search_transcript, then calls submit_notes. Every model call and every tool call is its own Temporal activity with its own retry policy.
  4. Checked, not trusted. A validator compares the submission with the transcript: quotes must appear word for word, chapters must be in order and inside the episode. Anything wrong goes back to the model as the tool result, and it fixes it.
  5. Files a producer can use. Podcasting 2.0 chapters.json, YouTube chapter text, Markdown show notes, SRT and VTT transcripts.

What happened when I kept killing it

Cost per audio hour