Skip to content

happynocode/openclaw-skill-podcast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenClaw Skill - Podcast RSS + Transcript + Summary

Production-ready OpenClaw skill for podcast transcription and summarization using local Whisper.

License: MIT Python 3.9+ OpenClaw

Features

  • RSS Feed Parsing - Apple Podcasts, 小宇宙, generic RSS
  • Local Transcription - Faster-Whisper (no API calls, no costs)
  • Multiprocessing Timeout - Prevents hanging on long episodes
  • Smart Caching - Avoids re-transcribing the same audio
  • Batch Processing - Process multiple feeds in one run
  • AI-Powered Summaries - Generate structured, insightful summaries
  • Cron-Friendly - Built for automated daily runs
  • JSON Output - Flexible integration with any agent or platform

Quick Start

# Install
cd ~/.openclaw/skills
git clone https://github.com/happynocode/openclaw-skill-podcast.git podcast-summarizer
cd podcast-summarizer
./setup.sh

# Test single episode
./podcast-summarizer --url "https://example.com/episode.mp3"

# Scan RSS feed (last 24 hours)
./podcast-summarizer --rss "https://lexfridman.com/feed/podcast/" --hours 24

# Daily batch (for cron)
./podcast-summarizer --config feeds.json --daily --output /tmp/podcast_summary.json

How It Works

1. RSS Feed Parsing

Supports multiple podcast platforms:

  • Apple Podcasts
  • 小宇宙 (Xiaoyuzhou)
  • Generic RSS feeds
  • Direct audio URLs

2. Audio Download

Downloads and caches audio files:

  • Cached in ~/.openclaw/cache/podcast-summarizer/audio/
  • Skips re-download if already cached
  • Supports multiple audio formats (MP3, M4A, etc.)

3. Local Transcription

Uses Faster-Whisper for local transcription:

  • Model: medium (1.5GB, accurate)
  • Timeout: 30 minutes with multiprocessing control
  • Caching: Transcripts cached to avoid re-processing
  • Languages: Auto-detect or specify

Performance:

  • 1 hour audio ≈ 15-20 minutes transcription
  • First run downloads model (~1.5GB)
  • Subsequent runs use cached model

4. Summary Generation

Generates structured summaries using LLM API:

### 📻 核心主题
- 一句话概括这期节目的主题

### 💡 关键要点(详细展开,每点2-3句话)
1. **要点1**:详细解释,包含具体案例或数据
2. **要点2**:...

### 🎯 金句/洞察
- 值得记住的观点或表述

### 💰 实用价值
- 对谁有用
- 如何应用

Configuration

Create feeds.json:

{
  "feeds": [
    {
      "name": "Lex Fridman Podcast",
      "rss": "https://lexfridman.com/feed/podcast/"
    },
    {
      "name": "硅谷早知道",
      "rss": "https://feed.xyzfm.space/68fyjknth9hj"
    }
  ],
  "hours_lookback": 24,
  "whisper": {
    "model": "medium",
    "language": "zh",
    "timeout_seconds": 1800
  }
}

Whisper Models

Model Size Speed Accuracy
tiny 75MB Fastest Low
base 142MB Fast Good
small 466MB Medium Better
medium 1.5GB Slower Best (default)

Output Format

{
  "generated_at": "2026-02-14T11:17:00Z",
  "items": [
    {
      "title": "Episode Title",
      "show_name": "Podcast Name",
      "url": "https://...",
      "audio_url": "https://media.../episode.mp3",
      "duration": "1:23:45",
      "published": "2026-02-14T08:00:00Z",
      "has_transcript": true,
      "summary": "# Markdown summary...",
      "metadata": {
        "file_size_mb": 85.3
      }
    }
  ],
  "stats": {
    "total_episodes": 3,
    "with_transcript": 2,
    "without_transcript": 1
  }
}

OpenClaw Integration

Cron Job Example

schedule:
  kind: cron
  expr: "0 13 * * *"  # 1 PM daily
payload:
  kind: agentTurn
  message: |
    Run Podcast daily summary:
    
    1. Execute skill:
       podcast-summarizer --config feeds.json --daily --output /tmp/summary.json
    
    2. Read output and process each episode
    
    3. Send to Discord/Telegram
    
    4. Sync to Notion

Agent Processing

import json

# Read output
with open("/tmp/podcast_summary.json") as f:
    data = json.load(f)

# Process each episode
for item in data["items"]:
    if item["has_transcript"]:
        # Send to messaging platform
        send_message(item["summary"])
        
        # Sync to Notion
        sync_to_notion(item)

Advanced Configuration

Whisper Settings

Adjust in feeds.json:

{
  "whisper": {
    "model": "medium",        // tiny, base, small, medium
    "language": "zh",         // or "en", "ja", etc.
    "timeout_seconds": 1800   // 30 minutes
  }
}

Timeout Control

The skill uses multiprocessing to enforce timeout limits:

  • Default: 30 minutes (1800 seconds)
  • If transcription exceeds timeout, process is forcefully terminated
  • Prevents hanging on very long episodes

Caching

Transcripts are cached in ~/.openclaw/cache/podcast-summarizer/transcripts/:

  • Filename: {audio_url_hash}.txt
  • Avoids re-transcribing the same audio
  • Manually clear old cache if needed

Dependencies

  • feedparser - RSS feed parsing
  • faster-whisper - Local transcription
  • requests - HTTP requests
  • Python 3.9+

All dependencies are installed automatically by setup.sh.

Environment Variables

  • OPENCLAW_GATEWAY_TOKEN - OpenClaw API token for LLM calls
  • OPENAI_API_KEY - OpenAI API key (alternative)

Configure in ~/.openclaw/openclaw.json or set as environment variables.

Model Configuration

Edit scripts/summarize.py to use your preferred model:

"model": "gpt-4o-mini",  # Change to your model

Examples:

  • gpt-4o
  • claude-3-5-sonnet-20241022
  • gemini-2.0-flash-exp

Troubleshooting

Transcription timeout

  • Default timeout: 30 minutes
  • For longer episodes, increase timeout_seconds in config
  • Use smaller Whisper model (base instead of medium)

Whisper model download

  • First run downloads model (~1.5GB for medium)
  • Stored in ~/.cache/huggingface/
  • Requires internet connection

Audio download fails

  • Check audio URL is accessible
  • Some podcasts may have geo-restrictions
  • Try a different episode

Out of memory

  • Use smaller Whisper model (base or small)
  • Reduce number of concurrent transcriptions
  • Close other applications

Use Cases

  • Daily Podcast Digest - Monitor your favorite shows
  • Research & Learning - Extract insights from educational podcasts
  • Content Curation - Build a searchable archive of episodes
  • Multilingual Support - Transcribe podcasts in any language

Performance Tips

  1. Use caching - Transcripts are cached automatically
  2. Batch processing - Process multiple episodes in one run
  3. Choose right model - Balance speed vs accuracy
  4. Monitor timeout - Adjust based on episode length

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

License

MIT License - see LICENSE for details.

Acknowledgments

Links


Built with ❤️ for the OpenClaw community

About

OpenClaw skill for podcast RSS, transcript and summary with local Whisper

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors