A free, open-source Python tool
Podcastify
Turns an e-book or article into a two-host podcast. In LLM mode it reads the whole source, writes a conversation in which every factual line cites the sentences it rests on, checks each line against them, and renders an MP3 with chapters.
The opening of a sample episode, with its citations
- AlexWelcome. Today we're talking about Alice's Adventures in Wonderland, by Lewis Carroll, the whole book.
- SamLet's start at the very beginning. How does Alice end up in Wonderland?
- AlexA Rabbit takes a watch out of its waistcoat-pocket and looks at it. Alice has never seen a rabbit with a waistcoat-pocket or a watch...
S7 - SamAnd then she just jumps in the hole?
S8 - AlexRight away. Down she goes, never once considering how in the world she was to get out again...
S8 S9 - SamWhat does she find at the bottom?
- AlexA hall of locked doors. Then a little glass table with a tiny golden key...
S46-S49
alice.episode.mp3, 4 chapters5:55
From the eval run (eval/run_eval.py, the same pipeline as --mode llm --minutes 6) on the whole of Alice's Adventures in Wonderland (Project Gutenberg, public domain), 2026-10-29. S7 is the seventh sentence of the source; every claim line was checked against the sentences it cites. The write-up has the full episode, a transcript that opens each line onto its source, and the eval.
Two modes
- rule
- The default, with no model. The narrator reads the source in three-sentence segments and the co-host interjects from a fixed pool. Faithful to the text, and a reading rather than a conversation.
- llm
- Maps the whole source to cited key points, picks an outline for the target length, writes the host and co-host script with citations, and checks every line; lines that fail are rewritten once or dropped. Runs through the local
claude -pCLI on a Claude subscription, or the Anthropic API whenANTHROPIC_API_KEYis set.
What the eval found
On four sources (a novel, an essay, a nonfiction chapter and a Wikipedia article), six-minute LLM episodes covered 7.4 of 12 frozen key points on average, against 4.4 for rule mode reading the same number of words. A blind judge preferred the LLM script on all four. The grounding check failed 9 of 151 claim lines, but a second checker found as many unsupported lines after the repair as before it, so what the check mainly adds is a record a reader can verify line by line.
Run it
pip install -r requirements.txt python podcastify.py book.epub # rule mode, no LLM python podcastify.py book.epub --mode llm # grounded conversation python podcastify.py book.epub --mode llm --minutes 12 -o book.m4b
ffmpeg and ffprobe are required. Voices default to en-US-AndrewNeural and en-US-AvaNeural; --voice-a and --voice-b take any edge-tts voice.
llm mode the source goes to Anthropic, through the Claude CLI or the API.