Custom Podcast Discovery & Generation
by @harshilmathur
Discover, research, script, fact-check, and generate podcast episodes automatically. Multi-source topic discovery, LLM script generation, citation enforcemen...
clawhub install custom-podcast-discoveryπ About This Skill
name: podcast version: 1.0.1 description: | Discover, research, script, fact-check, and generate podcast episodes automatically. Multi-source topic discovery, LLM script generation, citation enforcement, ElevenLabs TTS. Zero vendor lock-in - works with any RSS feed, S3 or local storage.
Podcast Discovery & Generation
Automated end-to-end podcast production pipeline. Discovers trending topics from configurable sources, researches them deeply, generates fact-checked scripts with citations, and produces audio via ElevenLabs TTS.
Triggers
Use this skill when user asks to:
Quick Start
1. Configure
cd ~/.openclaw/skills/podcast
cp config.example.yaml config.yaml
Edit config.yaml: add sources, interests, voice, storage
2. Discover Topics
python3 scripts/discover.py --config config.yaml --limit 10
3. Run Pipeline
python3 scripts/pipeline.py --config config.yaml --topic "Your Topic" --mode manual
Configuration
Minimal config.yaml:
sources:
- type: rss
url: https://aeon.co/feed.rss
name: Aeon
- type: hackernews
min_points: 200interests:
- AI/Tech
- Science
voice:
voice_id: ""
storage:
type: local
path: ./output
Storage options:
type: s3 β Upload to S3 (requires bucket, region)type: local β Save to local directoryPipeline Stages
1. Discovery β Fetch and rank topics from sources
2. Research β Web search framework (OpenClaw worker populates)
3. Script β Generate script with LLM, enforce [Source: URL] citations
4. Verify β Cross-check claims against research sources
5. Audio β Strip citations, call ElevenLabs TTS
6. Upload β Save to S3 or local storage
Each stage can run standalone or as full pipeline.
Usage Examples
Discover only:
python3 scripts/discover.py --config config.yaml --limit 5 --output topics.json
Full pipeline (auto mode):
python3 scripts/pipeline.py --config config.yaml --mode auto
Specific topic:
python3 scripts/pipeline.py --config config.yaml --topic "AI Reasoning" --mode manual
Resume from stage:
python3 scripts/pipeline.py --config config.yaml --resume-from audio
Source Types
Built-in:
rss β Generic RSS/Atom feed (any URL)hackernews β HN API with point/comment filtersnature β Nature journal (sections: news, research, biotech, medicine)Add custom RSS:
sources:
- type: rss
url: https://yourfeed.com/rss
name: Your Source
category: Your Category
Output Files
output/
βββ discovery-YYYY-MM-DD.json # Ranked topics
βββ research-YYYY-MM-DD-slug.json # Research data
βββ script-YYYY-MM-DD-slug.txt # Script with citations
βββ verification-YYYY-MM-DD.json # Fact-check report
βββ tts-ready-YYYY-MM-DD-slug.txt # Clean text for TTS
βββ episode-YYYY-MM-DD-slug.mp3 # Final audio
βββ pipeline-state-YYYY-MM-DD.json # Pipeline state
Integration with OpenClaw
For discovery: Run directly (no tools needed)
For full pipeline: Spawn OpenClaw worker with:
web_search() β Research stageelevenlabs_text_to_speech β Audio generationWorker pattern:
cd ~/.openclaw/skills/podcast
Source environment if available
[ -f ~/.openclaw/env-init.sh ] && source ~/.openclaw/env-init.sh
python3 scripts/pipeline.py --config config.yaml --mode auto
Citation Enforcement
Every factual claim in scripts MUST have [Source: URL] citation:
β Correct:
The market grew to $10.2 billion in 2025 [Source: https://example.com/report].
β Incorrect:
The market grew significantly.
The verify script cross-references citations against research sources and blocks audio generation if unverified claims are found.
Cron Integration
Daily discovery (8 AM):
schedule: "0 8 * * *"
payload: |
cd ~/.openclaw/skills/podcast
python3 scripts/discover.py --config config.yaml --limit 10 \
--output data/discovery-$(date +%Y-%m-%d).json
Weekly full pipeline:
schedule: "0 9 * * 1"
payload: |
cd ~/.openclaw/skills/podcast
[ -f ~/.openclaw/env-init.sh ] && source ~/.openclaw/env-init.sh
python3 scripts/pipeline.py --config config.yaml --mode auto
Key Features
β Zero vendor lock-in β Use any RSS feed, any storage β No external dependencies β Pure Python stdlib (except ElevenLabs for TTS) β Citation enforcement β Every claim must have source β Fact verification β Cross-check against research β Pluggable sources β Easy to add new topic sources β Resume support β Restart from any stage β Manual or auto β Review each stage or run end-to-end
Troubleshooting
No topics found:
min_points for Hacker NewsVerification fails:
[Source: URL] after claimsS3 upload fails:
Files
SKILL.md β This fileREADME.md β Detailed documentationconfig.example.yaml β Configuration templatescripts/ β Pipeline scriptssources/ β Source implementationstemplates/ β Prompt templatesLicense
MIT β Open source, community-maintained OpenClaw skill
π‘ Examples
1. Configure
cd ~/.openclaw/skills/podcast
cp config.example.yaml config.yaml
Edit config.yaml: add sources, interests, voice, storage
2. Discover Topics
python3 scripts/discover.py --config config.yaml --limit 10
3. Run Pipeline
python3 scripts/pipeline.py --config config.yaml --topic "Your Topic" --mode manual
βοΈ Configuration
Minimal config.yaml:
sources:
- type: rss
url: https://aeon.co/feed.rss
name: Aeon
- type: hackernews
min_points: 200interests:
- AI/Tech
- Science
voice:
voice_id: ""
storage:
type: local
path: ./output
Storage options:
type: s3 β Upload to S3 (requires bucket, region)type: local β Save to local directoryπ Tips & Best Practices
No topics found:
min_points for Hacker NewsVerification fails:
[Source: URL] after claimsS3 upload fails: