Dual-Host Daily Podcast Generator
by @dz1922
Generate and publish a dual-host daily podcast. Fetches news, generates a conversational script between two hosts, synthesizes audio via Fish Audio or Edge T...
clawhub install dz-podcastπ About This Skill
name: dz-podcast description: Generate and publish a dual-host daily podcast. Fetches news, generates a conversational script between two hosts, synthesizes audio via Fish Audio or Edge TTS, publishes to S3 with RSS feed for Apple Podcasts, Spotify, etc. Fully automated with cron support.
Dual-Host Daily Podcast Generator
Automated daily podcast with two AI hosts. Generates text brief + dual-voice audio, publishes to RSS, delivers via messaging.
Concept
Architecture
Fetch News β Text Brief β Dual-Voice Script β TTS Audio β S3 Upload β RSS Update β Deliver
Configuration
Set these in your environment:
| Variable | Description |
|----------|-------------|
| S3_BUCKET | S3 bucket name |
| PODCAST_DOMAIN | Custom domain or S3 URL |
| FISH_API_KEY | Fish Audio API key (https://fish.audio) |
| FISH_VOICE_A | Fish Audio voice ID for Host A |
| FISH_VOICE_B | Fish Audio voice ID for Host B |
Step 1: Fetch News
Use web_fetch to scrape sources in parallel. Default sources:
1. https://news.ycombinator.com/ β Tech
2. https://www.coindesk.com/ β Crypto
3. https://techcrunch.com/category/artificial-intelligence/ β AI
4. https://finance.yahoo.com/ β Markets
Customize sources to match your podcast topic.
Step 2: Generate Text Brief
Organize news into sections with emoji headers:
βοΈ Daily Brief | Mar 3, 2026ββββββββββββββββββ
π€ Tech / AI
β Headline
β One-line take
ββββββββββββββββββ
π Markets
β Headline
β One-line take
ββββββββββββββββββ
π― Key Takeaway
Summary paragraph
Step 3: Generate Dual-Voice Script
Rewrite the brief as a dialogue. Prefix each line with speaker tag:
HostA: Welcome to today's episode...
HostB: Some big stories today...
HostA: Right, let's start with...
Guidelines:
Step 4: Generate Audio
Fish Audio (recommended β natural, multi-voice):
python3 scripts/fish_dual_tts.py
Parses speaker tags, sends each segment to Fish Audio, concatenates into final MP3.Edge TTS (free fallback, single voice):
edge-tts --voice en-US-GuyNeural --rate "+5%" --file script.txt --write-media output.mp3
Step 5: Publish
bash scripts/generate_episode.sh
What it does:
1. Upload MP3 to S3
2. Get actual duration via ffprobe
3. Insert into RSS feed (newest first)
4. Update
Step 6: Deliver
Send text brief + audio via your preferred channel (Telegram, Discord, Slack, etc.)
RSS Feed
See references/rss-format.md for XML template.
Key rules:
= actual duration from ffprobe (never hardcode) = actual file size in bytes with email for Apple/Spotify verificationHosting Options
| Option | Notes | |--------|-------| | S3 + Cloudflare Worker | Free HTTPS, recommended | | S3 + CloudFront | Native AWS | | Any static host | Just serve MP3 + feed.xml |
Cron (OpenClaw)
openclaw cron add --task "Generate daily podcast" --cron "0 8 * * *" --tz "Your/Timezone"
Dependencies
python3 + requests β Fish Audio TTSffmpeg / ffprobe β Audio processingaws CLI β S3 uploadedge-tts (optional) β Free fallback TTSβοΈ Configuration
Set these in your environment:
| Variable | Description |
|----------|-------------|
| S3_BUCKET | S3 bucket name |
| PODCAST_DOMAIN | Custom domain or S3 URL |
| FISH_API_KEY | Fish Audio API key (https://fish.audio) |
| FISH_VOICE_A | Fish Audio voice ID for Host A |
| FISH_VOICE_B | Fish Audio voice ID for Host B |