Automatically convert Markdown articles into narrated podcasts (MP3) and slideshow videos (MP4).
- LLM-powered script generation — Claude rewrites articles into podcast-ready scripts
- Smart slide generation — Automatically splits scripts into multiple slide types (title, content, cards, highlight, comparison)
- TTS synthesis — Supports Doubao (Volcengine) and other TTS engines, with per-segment speaker overrides
- Remotion video rendering — 1920×1080 slideshow videos with entrance animations and captions
- Multi-theme support — Built-in Terminal Noir (cyberpunk) and Sunset Glow (warm) themes, extensible
- Resume support — TTS synthesis caches individual segments; reruns skip completed segments
- Unified CLI — One command for the full pipeline, with
--from=Nto start from any step
- Node.js 22+
- ffmpeg (audio concatenation and video composition)
- Claude Code (for LLM steps)
Edit article.config.json:
{
"tts": {
"provider": "doubao",
"speaker": "Vivi",
"speed": 1.0,
"overrides": {}
},
"duration": {
"targetSeconds": 60,
"charsPerSecond": 4
},
"theme": "terminal-noir",
"output": "output"
}# Process a full article using Claude Code skill
/article-to-podcast your-article.md
# Run TTS synthesis only (Step 3)
cd pipeline && npm run tts
# Run video rendering only (Step 4)
cd pipeline && npm run render
# Unified CLI, starting from a specific step
cd pipeline && npx tsx src/run.ts --from=3
# Specify output directory name
cd pipeline && npx tsx src/run.ts --from=3 --output-name=my-podcastarticle-to-podcast/
├── pipeline/ # TTS synthesis, ffmpeg concat, Remotion invocation
├── remotion-player/ # Remotion slide components and video composition
├── skills/ # Claude Code skill (handles LLM steps)
├── output/ # Build artifacts (gitignored)
└── article.config.json # Global configuration
| Step | Description | Tool |
|---|---|---|
| 1 | Article → Podcast script | Claude (LLM) |
| 2 | Script → Slides JSON | Claude (LLM) |
| 3 | Script + Slides → Audio + Timestamps | Doubao TTS + ffmpeg |
| 4 | Slides + Audio → Video | Remotion + ffmpeg |
| Theme | Style |
|---|---|
terminal-noir |
Cyberpunk dark, neon green/sky blue/amber accents |
sunset-glow |
Warm dark tones, rose gold/coral/warm gold accents |
Set the "theme" field in article.config.json to switch themes.
Configure the voice via tts.speaker. Supports all Doubao TTS voices:
| Speaker | Style |
|---|---|
| Vivi | Female, gentle and natural |
| 知性灿灿 | Female, composed and intellectual |
| 云舟 | Male, warm |
| 儒雅逸辰 | Male, elegant |
Override speakers per segment via tts.overrides:
{
"tts": {
"speaker": "Vivi",
"overrides": {
"summary": { "speaker": "儒雅逸辰", "speed": 0.9 }
}
}
}MIT