Install
openclaw skills install dz-podcastGenerate and publish a dual-host daily podcast. Fetches news, generates a conversational script between two hosts, synthesizes audio via Fish Audio or Edge T...
openclaw skills install dz-podcastAutomated daily podcast with two AI hosts. Generates text brief + dual-voice audio, publishes to RSS, delivers via messaging.
Fetch News → Text Brief → Dual-Voice Script → TTS Audio → S3 Upload → RSS Update → Deliver
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 |
Use web_fetch to scrape sources in parallel. Default sources:
https://news.ycombinator.com/ — Techhttps://www.coindesk.com/ — Cryptohttps://techcrunch.com/category/artificial-intelligence/ — AIhttps://finance.yahoo.com/ — MarketsCustomize sources to match your podcast topic.
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
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:
Fish Audio (recommended — natural, multi-voice):
python3 scripts/fish_dual_tts.py <script.txt> <output.mp3>
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
bash scripts/generate_episode.sh <date> <EP-number> <title> <description> <mp3-file>
What it does:
<item> into RSS feed (newest first)<lastBuildDate>Send text brief + audio via your preferred channel (Telegram, Discord, Slack, etc.)
See references/rss-format.md for XML template.
Key rules:
<itunes:duration> = actual duration from ffprobe (never hardcode)<enclosure length> = actual file size in bytes<itunes:owner> with email for Apple/Spotify verification| Option | Notes |
|---|---|
| S3 + Cloudflare Worker | Free HTTPS, recommended |
| S3 + CloudFront | Native AWS |
| Any static host | Just serve MP3 + feed.xml |
openclaw cron add --task "Generate daily podcast" --cron "0 8 * * *" --tz "Your/Timezone"
python3 + requests — Fish Audio TTSffmpeg / ffprobe — Audio processingaws CLI — S3 uploadedge-tts (optional) — Free fallback TTS