You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An AI-powered podcast generation tool: automatically extract text from any source (webpage, YouTube, PDF) → generate multi-role dialogue scripts via Gemini LLM → synthesize speech with Edge TTS → store in Cloudflare R2 + Cloudflare D1.
# Generate rss.xml locally from D1 podcast data
gen-podcasts-xml gen_xml_from_d1_podcast
# Generate and upload to Cloudflare R2
gen-podcasts-xml gen_xml_from_d1_podcast --is-upload
# Or use make
make gen-rss # generate only
make gen-rss-upload # generate + upload to R2
Manual Database Insert
# Upload audio + generate cover + write to D1
insert-podcast insert-podcast-to-d1 \
./audios/podcast/LLM.mp3 \
"Large Language Model" \
"weedge" \
"en-US-EricNeural,en-US-JennyNeural" \
--language en \
--category 1 \
--is-published
# Update cover art
insert-podcast update-podcast-cover-to-d1 \
<pid>"https://example.com/cover.png"
Recommended Edge TTS Voices
Chinese --language zh
Voice ID
Gender
Style
zh-CN-YunjianNeural
Male
Broadcast style
zh-CN-YunxiNeural
Male
Narrative style
zh-CN-YunyangNeural
Male
News style
zh-CN-XiaoxiaoNeural
Female
Natural & friendly (recommended)
zh-CN-XiaoyiNeural
Female
Gentle & sweet
English --language en (default)
Voice ID
Gender
en-US-EricNeural
Male
en-US-JennyNeural
Female
Note: When --language zh is set without Chinese voices, the tool automatically replaces them and prints a warning with the recommended list.
Supported Gemini Models
Model ID
Description
gemini-3-flash-preview
Default, Gemini 3 Flash (fast)
gemini-3.1-flash-lite-preview
Gemini 3.1 Lite
gemini-2.5-flash
Stable, production-ready
gemini-2.5-pro
Best reasoning, higher cost
Note: gemini-3.1-flash-preview does not exist and will return a 404 error.
make help# Show all available commands
make install # Install the package in editable mode
make gen-podcast # Run gen-podcast CLI (pass ARGS="..." for extra arguments)
make gen-rss # Generate RSS feed XML from D1 podcast data
make gen-rss-upload # Generate RSS feed XML and upload to Cloudflare R2
make build # Build source and wheel distributions
make dist-local # Install the built wheel locally
make publish-test # Publish package to TestPyPI
make publish # Publish package to PyPI
make clean # Remove build artifacts
Troubleshooting
Error
Cause
Solution
503 UNAVAILABLE
Gemini service overloaded
Set GEMINI_FALLBACK_MODEL=gemini-2.5-flash for automatic retry with fallback
404 not found
Invalid model ID
Check GEMINI_MODEL; do not use gemini-3.1-flash-preview
NoAudioReceived
Text contains unsupported characters or Edge TTS service issue
Tool auto-cleans and retries; skips the segment if all attempts fail
ModuleNotFoundError: jsonref
Missing dependency
pip install jsonref or pip install -e .
Chinese podcast opens/closes in English
Default English voices used or --language zh not set
An AI-powered podcast generation tool: automatically extract text from any source (webpage, YouTube, PDF) → generate multi-role dialogue scripts via Gemini LLM → synthesize speech with Edge TTS → store in Cloudflare R2 + Cloudflare D1.