360 Secure SkillHub
360 安全技能中心

Dual-Host Daily Podcast Generator

分步流水线:抓取新闻源,生成分节文字简报与双主播对话文稿,经 Fish Audio 或 Edge TTS 合成音频,再由脚本上传 S3、按 ffprobe 实测时长更新 RSS,并通过消息渠道分发;含 cron 调度示例,未提供抓取与文稿生成的可执行代码。

dz1922
dz1922
热度 71.36
最近更新 2026-05-17 13:13:15
分类:创作依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:故事创作 / 文案创作 / 自动化脚本 / 工作流 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add dz-podcast
Metadata
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

  • Format: Two hosts — one explains/analyzes, the other asks and transitions
  • Duration: Configurable, default ~7 minutes
  • Style: Casual, opinionated, conversational — like two friends chatting about the news
  • Topics: Customizable (default: AI/Tech, Stocks, Macro, Crypto)

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:

  • Host A: Explains and analyzes, knowledgeable but casual
  • Host B: Asks, transitions, reacts
  • Substantial turns, not one-liners
  • Include analysis and discussion, not just headlines
  • End with a lighter topic + sign-off

Step 4: Generate Audio

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

Step 5: Publish

bash scripts/generate_episode.sh <date> <EP-number> <title> <description> <mp3-file>

What it does:

  1. Upload MP3 to S3
  2. Get actual duration via ffprobe
  3. Insert <item> into RSS feed (newest first)
  4. Update <lastBuildDate>

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:

  • <itunes:duration> = actual duration from ffprobe (never hardcode)
  • <enclosure length> = actual file size in bytes
  • <itunes:owner> with email for Apple/Spotify verification
  • Cover: 3000x3000 JPEG minimum

Hosting 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 TTS
  • ffmpeg / ffprobe — Audio processing
  • aws CLI — S3 upload
  • edge-tts (optional) — Free fallback TTS