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 TTS, publishes to S3 with RSS feed for Apple Podcasts, Spotify, etc. Fully automated with cron support.
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