Skip to content
Back to skills

Daily Podcast Ai

ASecurity

**Description**: Generate a daily technology news podcast with AI voice synthesis, covering latest tech/business news from Chinese sources. **Tags**: `audio`, `podcast`, `ai`, `tts`, `news` **Category**: Content Generation ---

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 28, 2026
businesspythongobashexpressapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned May 28, 2026

npx -y skills add muzhicaomingwang/ai-ideas --skill daily-podcast-ai --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Daily Podcast Ai?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Daily Podcast Ai
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/muzhicaomingwang-daily-podcast-ai/badge)](https://www.skillsdirectory.com/skills/muzhicaomingwang-daily-podcast-ai)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Daily Tech Podcast Generator

**Description**: Generate a daily technology news podcast with AI voice synthesis, covering latest tech/business news from Chinese sources.

**Tags**: `audio`, `podcast`, `ai`, `tts`, `news`

**Category**: Content Generation

---

## Overview

This skill automates the complete workflow of generating a daily tech news podcast:
1. Fetch news from RSS feeds (36氪, 少数派, 虎嗅, etc.)
2. Summarize content using OpenAI GPT-4o-mini
3. Generate script with intro/transitions/outro
4. Synthesize audio using ElevenLabs TTS
5. Generate cover image
6. Output organized files in date-structured directory

**Typical Duration**: 5-8 minutes
**Cost per Run**: ~¥1-2 (OpenAI + ElevenLabs API)

---

## Prerequisites

### Required API Keys
Set these environment variables before running:

```bash
export OPENAI_API_KEY="sk-..."
export ELEVENLABS_API_KEY="..."
```

### Software Dependencies
- Python 3.11+
- Poetry (for dependency management)
- FFmpeg (for audio processing)

### Installation
```bash
cd /path/to/daily-podcast-ai
poetry install
```

---

## Configuration

### 1. Voice Settings (`config/voice.yaml`)

**Key Parameters**:
```yaml
elevenlabs:
  voice_settings:
    stability: 1.0          # Range: 0.0-1.0 (higher = more stable/consistent)
    similarity_boost: 0.75  # Range: 0.0-1.0 (higher = closer to original voice)
    style: 0.0              # Range: 0.0-1.0 (higher = more expressive)
    use_speaker_boost: true

tts:
  voice_id: "SKlxpKXGwoM0E8XpnxNs"  # Your cloned voice ID
  speed: 1.2                         # Range: 0.7-1.2 (1.0 = normal)

hosts:
  host_a:
    name: "植萌"
    role: "主理人 (Main Host)"
    voice_id: "SKlxpKXGwoM0E8XpnxNs"
    style: "natural, friendly"
```

**Typical Settings**:
- **High Stability (1.0)**: Professional broadcast quality
- **Medium Stability (0.75)**: Balanced naturalness and consistency
- **Low Stability (0.5)**: More expressive but less consistent

### 2. Output Path Logic (`scripts/daily_generate.py`)

**Default Behavior** (Lines 400-410):
```python
base_output_path = Path(output_dir)
if deep_dive:
    output_path = base_output_path / date_str / "dailytechnews"
else:
    # Classic mode: create date folder with custom subfolder
    output_path = base_output_path / date_str / "dailyReport"
```

**Customize Output Structure**:
- **Deep Dive Mode**: `output/{date}/dailytechnews/`
- **Classic Mode**: `output/{date}/dailyReport/`
- Change subfolder name by editing line 407

---

## Usage

### Basic Command
```bash
python scripts/daily_generate.py \
  --date YYYY-MM-DD \
  --classic \
  --output output
```

### Parameters

| Parameter | Description | Default | Example |
|-----------|-------------|---------|---------|
| `--date` | Target date for news | Today | `2026-01-13` |
| `--classic` | Solo narration mode | - | (flag) |
| `--deep-dive` | Dialogue mode (2 hosts) | - | (flag) |
| `--output` | Output directory | `output` | `output` |

### Examples

**Generate today's podcast**:
```bash
python scripts/daily_generate.py --classic
```

**Generate for specific date**:
```bash
python scripts/daily_generate.py --date 2026-01-13 --classic
```

**Deep dive mode (dialogue)**:
```bash
python scripts/daily_generate.py --date 2026-01-13 --deep-dive
```

---

## Output Files

### Directory Structure
```
output/
└── YYYY-MM-DD/
    └── dailyReport/           # or "dailytechnews" in deep-dive mode
        ├── cover-YYYY-MM-DD.png       # ~380KB, podcast cover image
        ├── podcast-YYYY-MM-DD.mp3     # ~12MB, 8-10 minutes audio
        ├── script-YYYY-MM-DD.md       # ~8KB, full script text
        └── temp/
            ├── merged.mp3             # Raw merged audio
            ├── YYYY-MM-DD_intro.mp3   # Intro segment
            ├── YYYY-MM-DD_segment_N.mp3
            ├── YYYY-MM-DD_transition_N.mp3
            └── YYYY-MM-DD_outro.mp3
```

### File Details

**1. Cover Image** (`cover-YYYY-MM-DD.png`)
- Format: PNG
- Size: ~380KB
- Dimensions: 1400x1400 (typical)
- Generated by: OpenAI DALL-E or similar

**2. Audio File** (`podcast-YYYY-MM-DD.mp3`)
- Format: MP3, 44.1kHz, 128kbps
- Duration: 8-10 minutes (varies by news volume)
- Segments: 21-25 (intro + N×(segment+transition) + outro)
- Size: ~10-15MB

**3. Script** (`script-YYYY-MM-DD.md`)
- Format: Markdown
- Structure:
  - Header (date, article count, categories)
  - 开场白 (Intro)
  - 新闻内容 (News segments, typically 8-12 articles)
  - 结束语 (Outro)

---

## Verification Steps

### 1. Pre-execution Checklist
- [ ] API keys are set: `echo $OPENAI_API_KEY $ELEVENLABS_API_KEY`
- [ ] Voice settings are configured in `config/voice.yaml`
- [ ] Output directory exists: `mkdir -p output`

### 2. During Execution
Monitor console output for:
- ✅ News fetching: Should fetch 10-20 articles from 4 sources
- ✅ Content processing: Should summarize 8-12 selected articles
- ✅ Script generation: Check for intro/segments/transitions/outro
- ✅ Audio synthesis: Should generate 20+ segments
- ✅ Audio merging: Should combine all segments
- ✅ Cover generation: Final step

**Expected Failures** (non-blocking):
- Some RSS feeds may return 404 (e.g., 澎湃新闻) - gracefully handled

### 3. Post-execution Verification

**Check files exist**:
```bash
DATE="2026-01-13"  # Replace with your date
ls -lh output/${DATE}/dailyReport/

# Expected output:
# cover-2026-01-13.png    (~380KB)
# podcast-2026-01-13.mp3  (~12MB)
# script-2026-01-13.md    (~8KB)
```

**Verify audio quality**:
```bash
# Play first 30 seconds
ffplay -t 30 output/${DATE}/dailyReport/podcast-${DATE}.mp3

# Check duration
ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 \
  output/${DATE}/dailyReport/podcast-${DATE}.mp3
```

Expected duration: 480-600 seconds (8-10 minutes)

**Verify script content**:
```bash
# Check article count
grep -c "^### " output/${DATE}/dailyReport/script-${DATE}.md

# Expected: 8-12 articles
```

**Quick quality checks**:
- [ ] Voice sounds like target speaker (王植萌)
- [ ] Playback speed is 1.2x (noticeably faster but clear)
- [ ] Audio has smooth transitions between segments
- [ ] No clipping, distortion, or silence gaps
- [ ] Script matches audio content

---

## Customization

### Change Voice Actor
1. Get voice ID from ElevenLabs dashboard
2. Update `config/voice.yaml`:
   ```yaml
   tts:
     voice_id: "YOUR_NEW_VOICE_ID"
   ```

### Adjust Speed/Stability
Edit `config/voice.yaml`:
```yaml
tts:
  speed: 1.0          # 1.0 = normal, 1.2 = 20% faster
elevenlabs:
  voice_settings:
    stability: 0.75   # Lower = more expressive
```

### Change Output Directory Name
Edit `scripts/daily_generate.py` line 407:
```python
output_path = base_output_path / date_str / "YOUR_CUSTOM_NAME"
```

### Add/Remove News Sources
Edit `config/news_sources.yaml` (or equivalent):
```yaml
sources:
  - name: "36氪"
    url: "https://36kr.com/feed"
  - name: "你的新源"
    url: "https://example.com/rss"
```

---

## Troubleshooting

### API Key Errors
```
Error: OpenAI API key not found
```
**Solution**: `export OPENAI_API_KEY="sk-..."`

### Voice Synthesis Fails
```
Error: ElevenLabs API rate limit exceeded
```
**Solution**:
- Wait 60 seconds and retry
- Check quota at https://elevenlabs.io/subscription

### RSS Feed 404 Errors
```
❌ 请求失败: 404 Client Error
```
**Solution**: Non-blocking error, system continues with other sources

### Audio Quality Issues
- **Robotic voice**: Lower stability (0.7-0.85)
- **Too fast**: Reduce speed (1.0-1.1)
- **Inconsistent**: Increase stability (0.9-1.0)
- **Mumbling**: Check voice_id is correct

### Output Directory Not Found
```
Error: output/2026-01-13/dailyReport/ not found
```
**Solution**: Check line 407 in `scripts/daily_generate.py` matches expected path

---

## Cost Estimation

### Per Episode (8-10 minutes)
- **OpenAI GPT-4o-mini**: ~¥0.5
  - Summarization: 10 articles × 3000 tokens input
  - Script generation: 2000 tokens output
- **ElevenLabs TTS**: ~¥0.8-1.2
  - Character count: ~3000-4000 Chinese characters
  - Multilingual v2 model
- **Total**: ~¥1.3-1.7 per episode

### Monthly (30 episodes)
- **Total**: ~¥40-50

---

## Advanced Usage

### Batch Generation (Multiple Dates)
```bash
for DATE in 2026-01-{01..07}; do
  python scripts/daily_generate.py --date $DATE --classic
  sleep 60  # Avoid rate limits
done
```

### Custom Script Template
Override intro/outro in `config/voice.yaml`:
```yaml
script:
  intro_template: "你好,这里是{date}的科技播报..."
  outro_template: "今天就到这里,明天见!"
```

### Post-processing
```bash
# Normalize audio volume
ffmpeg -i podcast.mp3 -filter:a loudnorm output.mp3

# Add ID3 tags
ffmpeg -i podcast.mp3 -metadata title="Tech News ${DATE}" \
  -metadata artist="Daily Podcast AI" output.mp3
```

---

## Related Resources

- **Project README**: `README.md`
- **Voice Configuration**: `config/voice.yaml`
- **Main Script**: `scripts/daily_generate.py`
- **Plan Document**: `/Users/qitmac001395/.claude/plans/async-riding-bumblebee.md`

---

## Changelog

### 2026-01-13
- Initial skill creation
- Documented workflow from successful podcast generation
- Voice settings: Stability 1.0, Speed 1.2x
- Output path: `output/{date}/dailyReport/`

Files in this skill

  • .claude/settings.local.json506 B
  • .claude/skills/generate-daily-podcast.json1.5 KB
  • .env.example1.8 KB
  • QUICKSTART_WEREWOLF.md7.1 KB
  • QUICKSTART_XIAOYUZHOU.md2.1 KB
  • QUICK_START.md4.7 KB
  • README.md14.8 KB
  • RELIABILITY_GUIDE.md7.4 KB
  • SETUP_CLOUD_STORAGE.md6.2 KB
  • SETUP_FEISHU_NOTIFICATION.md7.1 KB
  • USAGE_EXAMPLES.md12.5 KB
  • WORKFLOW_SUMMARY.md5.5 KB
  • cache/2026-01-08-news.json11.2 KB
  • cache/2026-01-10-news.json6.4 KB
  • cache/2026-01-11-news.json6.3 KB
  • cache/2026-01-12-news.json7.5 KB
  • cache/2026-01-13-news.json14 KB
  • cache/2026-01-14-news.json15.7 KB
  • cache/2026-01-15-news.json17.2 KB
  • cache/2026-01-16-news.json20.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.