name: podcast-generator description: Converts blog posts into podcast audio using Kokoro TTS engine. Use this when asked to generate podcasts, create audio, or run TTS for blog posts.
Podcast Generator Skill
This skill converts blog posts into podcast audio using the Kokoro TTS engine with multi-language support and automatic RSS feed generation.
Key Features
- Automatic model download and language-aware synthesis (English and Traditional Chinese).
- Automatic chunking for long posts.
- RSS feed generation for multi-language podcast feeds.
- Optional LLM-provided transcripts to drive TTS output for better listening quality.
- Support for both generic and language-specific transcripts.
Installation & Setup
Ensure Python dependencies are installed:
uv syncVerify FFmpeg and dependencies are available (required for audio processing).
Usage
Generate Podcast for Specific Post(s)
uv run podcast-generate --posts "my-post-slug"
Generate Podcast for All Posts
uv run podcast-generate --all
Force Regeneration
If a post has already been generated, use --force to overwrite:
uv run podcast-generate --posts "my-post-slug" --force
Refresh RSS Feeds Only
Rebuild feeds from existing audio without re-synthesizing:
uv run podcast-generate --refresh-feeds
Specify Output Directory
uv run podcast-generate --posts "my-post-slug" --output-dir /custom/path
(Defaults to public/podcasts if not specified.)
LLM Transcripts for Better Audio Quality
To provide a human-optimized transcript produced by an LLM (recommended for long/technical posts), save one of the following files in src/content/blog/transcripts/:
- Generic transcript:
<slug>.txt— used for posts in any language - Language-specific transcript:
<slug>.<lang>.txt— e.g.,my-post.zh-hant.txtfor Chinese
Transcript Priority
- Language-specific transcripts are prioritized (e.g.,
post.zh-hant.txtfor Chinese). - Falls back to generic transcript (
post.txt). - If no transcript exists, TTS engine automatically derives spoken-friendly text from Markdown.
Agent & LLM Workflow
Use an LLM (via your agents UI or chat service) to:
- Generate a TTS-optimized transcript from the blog post.
- Remove code blocks, tables, and other anti-audio constructs.
- Add spoken clarifications and natural phrasing.
- Save the transcript file to
src/content/blog/transcripts/. - Run
uv run podcast-generate --posts "<slug>"to synthesize audio from the transcript.
Best Practices
- Keep transcripts concise and spoken-style — LLMs can convert code into plain-language explanations.
- Verify transcripts by reading aloud before generating audio to ensure quality.
- Use language suffixes for transcripts when generating audio in other languages.
- Leverage auto-chunking for posts over 10 minutes of audio to improve podcast compatibility.
- Test with different voices (if manually configuring) to match your audience preferences.
Output Structure
Generated audio files are organized in public/podcasts/:
public/podcasts/
├── feed.xml # Main RSS feed
├── <slug>.mp3 # English podcasts
├── <slug>.zh-hant.mp3 # Chinese podcasts
├── en/
│ └── feed.xml # English-specific feed
└── zh-hant/
└── feed.xml # Chinese-specific feed
Troubleshooting
- "Found 0 posts" error: Verify frontmatter passes Astro schema validation. Check that the post appears in the dev server at
/posts/. - Audio file exists but not updating: Use
--forceto regenerate, or delete the existing file and re-run. - Model download fails: Check internet connection and disk space in
~/.cache/kokoro-onnx/. - FFmpeg errors: Ensure FFmpeg is installed and accessible in your PATH.