# personalized-podcast: Turn Any Content Into a Two-Host AI Podcast Episode

> personalized-podcast is a coding agent skill that generates an MP3 episode from any text, file, or URL using two AI hosts and Fish Audio, with no hosted service required and optional RSS delivery to standard podcast apps.

**zarazhangrui/personalized-podcast** — Turn any content into a personalized AI podcast. NotebookLM-style, except you control the script, voices, and hosts. Listen in Apple Podcasts, Spotify, or any podcast app.

- Repository: https://github.com/zarazhangrui/personalized-podcast
- Website: https://x.com/zarazhangrui
- Stars: 435 · Forks: 58
- Language: Python
- License: not declared
- Published: 2026-09-17 · Updated: 2026-09-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/zarazhangrui-personalized-podcast

## What personalized-podcast Does and Who It Is For

The README frames the tool around two use cases. The first is converting written content to audio for on-the-go listening: newsletters, research papers, long articles, meeting notes, or any text you would otherwise have to read on a screen. The second, which the README calls the unexpected use case, is self-reflection: feeding the skill your own resume, meeting transcripts, or journal entries and asking the two AI hosts to discuss their impressions of you as if you were not in the room.

The target audience is someone who is already using a coding agent such as Claude Code and wants to add podcast generation without setting up a separate service, building a backend, or starting a subscription. The entire pipeline runs through the coding agent. There is no hosted endpoint.

The skill is installed into the agent's skill directory and invoked with a /podcast command. The README shows it can take inline text, a file path, or a URL as input.

## How Episodes Are Built: Fish Audio, pydub, and the Script

Episode generation runs in three steps. The coding agent writes a two-host conversation script based on the content you provide. Fish Audio generates speech for each line in the script, using a different voice for each host. pydub and ffmpeg stitch the audio segments together with natural pacing and fade effects, producing an MP3 file.

The default show has two hosts named Alex and Sam. Alex is described in the README as the curious one who introduces topics and asks questions. Sam is the analytical one who adds depth and drops witty takes. The README describes their dynamic as two friends talking over coffee rather than news anchors.

The TTS provider is Fish Audio, which the README describes as having over two million voices and a free tier. The voice reference IDs for Alex and Sam are pre-configured in the default installation. The README points to fish.audio/discovery/ as the place to find other voices and copy their reference IDs into the config. Voices are swappable at the config level without touching the script generation logic.

The scripts/ directory in the repository holds speak.py for TTS and stitching, publish.py for pushing episodes to GitHub Pages, bootstrap.py for one-time repo setup, and utils.py for config and .env loading.

## Installing the Skill and Running Your First Episode

The README gives a single gh command for installation:

```bash
gh repo clone zarazhangrui/personalized-podcast-skill ~/.claude/skills/personalized-podcast
```

After installation, the skill is available as /podcast in Claude Code. On first run, the README states that Claude sets up the Python environment, installs dependencies, and asks for a Fish Audio API key. Three quickstart examples from the README:

```text
/podcast read ~/Downloads/newsletter.txt
/podcast https://some-article-url.com
/podcast Here's a thread about AI agents I want to hear discussed...
```

The requirements outside the skill are Python 3.10 or above, ffmpeg (installable on macOS with brew install ffmpeg), and a Fish Audio account. A coding agent that supports skills is also required; the README lists Claude Code, Gemini CLI, and Copilot CLI as examples.

## Customizing the Prompt, Voices, and Show Format

The PROMPT.md file controls how the hosts behave, the show structure, and the writing style. The README describes it as the main customization point. Editing PROMPT.md changes the show format for all future episodes without requiring any code change.

The README lists several show formats as examples: a debate where hosts take opposing sides, an eavesdrop format where hosts discuss a person from their transcripts or writing, an interview where one host plays expert, a solo narrator monologue, and a news roundup where the hosts go through items one by one. Each of these requires only a change to PROMPT.md.

The config file at ~/.personalized-podcast/config.yaml controls the show name and tone. Swapping voices requires finding voice reference IDs at fish.audio/discovery/ and updating the config. The README says you can make the hosts sound however you want. Voice changes take effect on the next episode without restarting anything.

The README also notes the self-reflection use case has its own prompt variation. Feeding personal content like a resume or meeting transcript and asking the hosts to eavesdrop and discuss your communication patterns requires only a different PROMPT.md instruction, not a code change. The README calls this genuinely illuminating and describes it as the unexpected use case the project discovered after building the core audio pipeline.

## Setting Up RSS for Podcast App Delivery

The RSS feed is optional and requires a GitHub Pages repository. The README describes the setup as: ask Claude to set up an RSS feed, and it creates a GitHub Pages feed you can subscribe to in Apple Podcasts, Overcast, Pocket Casts, Snipd, Spotify, or any podcast app that supports RSS. New episodes that are published through publish.py go to the GitHub Pages URL automatically, and the podcast app picks them up on its next refresh.

Without the RSS feed, episodes are MP3 files that open and play locally on your computer. The RSS step is the difference between a local audio file and an episode that appears in the same app queue as your other subscriptions.

## Compared to NotebookLM and the Maintenance Window

The README opens by comparing this tool to NotebookLM, describing it as NotebookLM-style but with control over everything. NotebookLM is a Google product that converts documents into an AI-generated audio discussion using fixed voices and a fixed format. You upload sources, Google generates the episode, and you listen. You do not choose the hosts' voices, you cannot edit the PROMPT.md to change the format, and there is no RSS feed delivery to other podcast apps.

personalized-podcast trades Google's hosted convenience for full control over the script prompt, the voice selection, the show structure, and the delivery destination. The cost is setup time: ffmpeg, a Fish Audio account, and a coding agent that supports skills are all prerequisites.

The last push was on 2026-04-08, with no GitHub releases. The README has no changelog section, so the history of changes is only visible through the commit history.

## Conclusion

personalized-podcast is a good fit for developers who already use a coding agent like Claude Code and want to consume long-form content as audio during commutes or while away from a screen. Setting up the RSS feed once means new episodes arrive in Apple Podcasts, Spotify, or any RSS-compatible podcast app automatically. The main dependency is a Fish Audio API key with enough quota for your episode volume; Fish Audio offers a free tier, but the README does not specify how much generation is available on it. The last push was on 2026-04-08.

## FAQ

### How can I create my own podcast for free using personalized-podcast?

Install the skill from GitHub into Claude Code with a gh repo clone command, provide a Fish Audio API key when prompted on first run, and use the /podcast command with any content. Fish Audio offers a free tier. The RSS feed setup using GitHub Pages is also free.

### How do I change the hosts' voices in personalized-podcast?

Browse fish.audio/discovery/ to find voices you like, copy their reference IDs, and update the config at ~/.personalized-podcast/config.yaml. The change takes effect on the next episode.

### Does personalized-podcast work with podcast apps like Spotify and Apple Podcasts?

Yes, through the optional RSS feed. After setting up a GitHub Pages feed by asking Claude to configure it, you can subscribe to the feed URL in Apple Podcasts, Spotify, Overcast, Pocket Casts, Snipd, or any app that supports RSS. Without the RSS step, episodes are local MP3 files.

## Sources

- [Issues](https://github.com/zarazhangrui/personalized-podcast/issues)
- [Project website](https://x.com/zarazhangrui)
- [README](https://github.com/zarazhangrui/personalized-podcast/blob/main/README.md)
- [zarazhangrui/personalized-podcast on GitHub](https://github.com/zarazhangrui/personalized-podcast)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/zarazhangrui-personalized-podcast
