The Audio Workshop: Six Voices on a Shelf, One Episode That Never Shipped
Key Takeaways — Executive & AI Summary
- The workshop's raw material is a shelf of six reference voices plus one script: four designed composite hosts (an AI female, an AI male, an English female, an English male) and two clips lifted from real speakers. The daily show ran on one of the cloned voices — and the house rule for clones is absolute: use the voice, never the name.
- The whole studio is podcast_tts_indextts.py, 172 lines: it accepts edge-tts-format scripts with rate and pitch fields it deliberately ignores for compatibility, monkey-patches torchaudio.save with soundfile because the upstream path broke, synthesizes segment by segment, and emits a 192 kbps MP3 plus a per-segment timeline JSON that later became the subtitle spine of the video factory. Its voice engine carries its own small language model — the 8.3 GB of IndexTTS-2 checkpoints include a Qwen 0.6B.
- Five episodes were produced between June 28 and July 26; the four with surviving timelines run 36/16/27/23 segments and 201/393/351/385 seconds. The July 4 episode — 5 minutes 50 seconds, 2 MB — never shipped: the proxy tunnel to Telegram failed with an SSL error while domestic sites stayed reachable, and the file was later deleted, leaving only a pending-delivery note. All three podcast cron jobs are now disabled in the contraction.
Episode 13 of One Man One Legion — seventh stop in the workshops arc, after the text factory, the quality gate, the video workshop, the pen-name rack and the analyst desk. This room neither prints nor renders. It speaks.
In a folder called voice-library sit six reference voices and one script — seven files that are the entire casting department of a radio station. Four voices are designed composite hosts: an AI female, an AI male, an English female, an English male. Two are lifted from real speakers. One of those two — a well-known lecturer’s — became the voice of the fleet’s daily news podcast. The house rule on clones is absolute and worth more than the code around it: use the voice, never the name.
That shelf answers this episode’s question: what does it take for a one-man operation to run a podcast station, down to manufacturing the host?
From rented voices to owned ones
The station didn’t start with clones. Mid-June artifacts — a 54 KB essay MP3 from June 14, more essay readings through June 25 — were voiced by Microsoft’s free edge-tts. Good enough for reading an essay aloud, but the control surface fought back: a strategy note in one of two successive test scripts records pause tags being severed by the library’s byte-length text splitting.
The break came on one evening in July. IndexTTS-2 was checked out to a scratch directory with 8.3 GB of checkpoints — inside it, tellingly, sits a Qwen 0.6B model: this voice engine carries its own small language model. File timestamps tell the rest: a first smoke test at 08:13 on July 1, then an evening burst — a lecture recording pulled from YouTube, reference segments cut from it, a side-by-side comparison file against edge-tts at 18:49, and a first clone sample at 18:56. Download to cloned host: one working day.
The studio is 172 lines
The production tool, podcast_tts_indextts.py, is 172 lines of Python, and every design decision in it is a scar. It still reads edge-tts-format scripts — complete with rate and pitch fields it knows are ignored — so the upstream script generator never had to change. It monkey-patches torchaudio.save with soundfile because the upstream save path broke; the workaround outlived the bug report and became permanent production code. It synthesizes segment by segment, times each one, and writes a timeline JSON next to every 192 kbps MP3.
That timeline file is the quiet key to the whole workshop. One artifact serves two factories: it proves the audio’s structure, and it later became the subtitle spine of the video workshop’s vertical-video generator — the audio room’s DNA is visible in a room built weeks later.
Five episodes, one missing
The output ledger is short and checkable. First episode: June 28, 36 segments, 201 seconds, produced alongside three video variants. Then a July cadence: July 20 with 16 segments and 1584 characters (393 seconds, plus a compact cut), July 21 with 27 segments and 1378 characters (351 seconds, plus a 42 MB video), July 26 with 23 segments and 1496 characters (385 seconds, audio only).
The July 4 episode is the one that got away. Produced, 5 minutes 50 seconds, 2 MB — and never delivered: the proxy tunnel to Telegram failed with an SSL error while ordinary domestic sites stayed reachable. A pending-delivery note was written — waiting for the proxy to recover — the proxy recovered, and the file is simply gone from the workspace now. The note remains as a tombstone — the failure lived in delivery infrastructure, not the studio. And unlike the analyst desk, this workshop’s shutdown was scheduled, not accidental: all three podcast cron jobs (the news-podcast production run and two daily AI-trend shows) sit disabled in the great contraction.
One more number for the honesty file: the video factory’s workflow doc, dated August 17, describes its generator as 344 lines. The file on disk today measures 445. Docs drift; wc -l doesn’t.
The station is off the air, but the shelf stays stocked and the studio stays warm. Restart cost is one script JSON away. What the room proves is narrower and stranger than the other workshops: broadcast voice — the last component of radio that seems irreducibly live — decomposes into one reference clip, one GPU evening, and 172 lines of glue.
Back to the fleet audit — next in the engine-room arc: the model stable.
FAQ — Direct Answers
- Whose voice was cloned, and is that named anywhere?
- No. Two reference clips in the voice library come from real speakers — one a well-known lecturer, whose voice narrated the news podcasts — and this series follows the workshop's own rule: cloned voices are used, never named. The four designed composite hosts in the same library were the no-clone alternative, and remain on the shelf.
- Why build a local TTS when edge-tts is free?
- The edge-tts era worked — mid-June essay MP3s prove it — but its control surface fought back: SSML experiments in tts_ssml_test2.py document pause tags being severed by the library's byte-length text splitting. A local IndexTTS-2 buy a fixed identity instead of a rented one: one evening of setup (8.3 GB of checkpoints) for a voice the station owns, benchmarked the same night against edge-tts in a side-by-side comparison file.