DPO Reader¶
Turn Discourse threads into podcasts. Each author gets their own voice.
I built this because I got tired of skimming long forum threads. Point it at any Discourse URL and it synthesizes the whole thing with different voices for each participant. Listen while doing other things.
Quick Start¶
uv tool install dpo-reader
dpo-reader listen "https://discuss.python.org/t/your-thread"
dpo-reader listen "https://discuss.python.org/t/your-thread" --ui
Example Output¶
DPO Reader - Discourse to Audio
✓ Loaded: PEP 772: Packaging Council governance process (Round 3)
Posts: 102 | Authors: 19
Engine: openai
Voice Assignments
┏━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Author ┃ Posts ┃ Voice ┃
┡━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ barry │ 21 │ Voice A (deeper tone) │
│ pf_moore │ 20 │ Voice B (mid-range) │
│ pradyunsg │ 10 │ Voice C (higher pitch) │
│ AA-Turner │ 7 │ Voice D (energetic) │
│ tim.one │ 6 │ Voice E (calm) │
│ jezdez │ 6 │ Voice F (gravelly) │
│ dstufft │ 5 │ Voice G (brighter) │
│ bernatgabor │ 5 │ Voice H (neutral) │
│ willingc │ 5 │ Voice I (clear) │
│ notatallshaw │ 3 │ Voice J (relaxed) │
│ trobitaille │ 3 │ Voice A (deeper tone) │
│ sirosen │ 2 │ Voice B (mid-range) │
│ hugovk │ 2 │ Voice C (higher pitch) │
│ rgommers │ 2 │ Voice D (energetic) │
│ ncoghlan │ 1 │ Voice E (calm) │
│ brettcannon │ 1 │ Voice F (gravelly) │
│ steve.dower │ 1 │ Voice G (brighter) │
│ BrenBarn │ 1 │ Voice H (neutral) │
│ h-vetinari │ 1 │ Voice I (clear) │
└──────────────┴───────┴────────────────────────┘
Launching player (generating audio in background)...
Features¶
Multi-voice synthesis - Each author gets assigned a unique voice
Three TTS engines - OpenAI (best quality), Bark (local, neural), Piper (fast, CPU-only)
Start anywhere - Jump to any post number via URL or
-sflagInteractive TUI - Real-time read-along with playback controls
Web UI - Browser-based player using Web Speech API
Caching - Resume interrupted generations
Contents¶
Installation¶
uv tool install dpo-reader
pipx install dpo-reader
uv pip install dpo-reader[piper]
License¶
MIT