Files
patchy631--ai-engineering-hub/ai-podcast-generation/README.md
T
2026-07-13 12:37:47 +08:00

241 lines
6.0 KiB
Markdown

# 🎙️ Podsite - AI Podcast Generation
Transform web content and text into engaging AI-generated podcasts with natural-sounding conversations between two speakers.
## 🚀 Two Versions Available
### 📱 Regular Version (`app.py`)
- Uses **OpenAI GPT-4** for script generation
- Requires OpenAI API key
- Fast and reliable cloud-based AI
- Pay-per-use pricing model
### 🔓 Open Source Version (`app_oss.py`)
- Uses **Ollama** with local AI models
- No API keys required for script generation
- Completely private and offline
- Free to use after setup
## ✨ Features
- **🌐 Website Scraping**: Extract content from any URL using Firecrawl
- **📋 Text Input**: Paste any text content directly
- **🎭 Multiple Styles**: Choose from Conversational, Interview, Debate, or Educational formats
- **⏱️ Flexible Duration**: Generate podcasts from 5 to 20 minutes
- **🎵 AI Audio Generation**: Convert scripts to natural-sounding speech using Kokoro TTS
- **📥 Export Options**: Download both scripts (JSON) and audio files (WAV)
- **📚 Source Management**: Store multiple sources and generate podcasts from any of them
## 🚀 Quick Start
### Prerequisites
- Python 3.11 or 3.12
- [uv](https://github.com/astral-sh/uv) package manager
**For Regular Version (`app.py`):**
- OpenAI API key (required)
- Firecrawl API key (optional, for web scraping)
**For Open Source Version (`app_oss.py`):**
- Ollama installed and running
- A local AI model (e.g., `gpt-oss:20b`)
### Installation
1. Navigate to the project:
```bash
cd ai-podcast-generation
```
2. Install dependencies using uv:
```bash
uv sync
```
3. Set up your environment variables:
```bash
cp .env.example .env
```
4. Add your API keys to `.env` (for regular version):
```
OPENAI_API_KEY=your_openai_api_key_here
FIRECRAWL_API_KEY=your_firecrawl_api_key_here # Optional
```
### Running the Apps
**Regular Version (OpenAI):**
```bash
uv run streamlit run app.py
```
**Open Source Version (Ollama):**
```bash
# First, ensure Ollama is running with your model
ollama serve
ollama pull gpt-oss:20b # or your preferred model
# Then run the OSS app
uv run streamlit run app_oss.py
```
Both apps will open in your default browser at `http://localhost:8501`
## 📖 Usage
### Step 1: Add Sources
Navigate to the "📁 Add Sources" tab:
**Option A: Scrape Website**
1. Select the "🌐 Website" tab
2. Enter a URL (e.g., https://example.com/article)
3. Click "Add Website"
4. Wait for the content to be scraped
5. Requires FIRECRAWL_API_KEY in .env
**Option B: Paste Text**
1. Select the "📋 Text" tab
2. Enter a source name
3. Paste your content
4. Click "Add Text"
Your sources will appear in the sidebar with:
- Source name/title
- Type (Website or Text)
- Word count
- Delete button (🗑️) to remove
### Step 2: Generate Podcast
1. Navigate to the "🎙️ Studio" tab
2. Select a source from the dropdown
3. Choose your podcast style:
- **Conversational**: Natural, friendly discussion
- **Interview**: Q&A format
- **Debate**: Different perspectives
- **Educational**: Explanatory with clarifying questions
4. Choose duration (5, 10, 15, or 20 minutes)
5. Click "🎙️ Generate Podcast"
6. Wait for script and audio generation
7. Download the results!
## 🏗️ Project Structure
```
ai-podcast-generation/
├── app.py # Main Streamlit application
├── src/
│ ├── podcast/
│ │ ├── script_generator.py # Podcast script generation
│ │ └── text_to_speech.py # Audio generation with TTS
│ └── web_scraping/
│ └── web_scraper.py # Web content extraction
├── outputs/ # Generated audio files
├── pyproject.toml # Project dependencies (uv)
├── .env.example # Environment variables template
└── README.md # This file
```
## 🛠️ Technology Stack
- **Streamlit**: Web interface
- **OpenAI GPT-4**: Script generation via CrewAI
- **Kokoro TTS**: Natural text-to-speech synthesis
- **Firecrawl**: Web content extraction
- **uv**: Fast Python package management
## 📝 Example Output
The app generates:
1. **Podcast Script** (JSON format):
- Structured dialogue between Speaker 1 and Speaker 2
- Metadata including source, duration, and line count
2. **Audio Files** (WAV format):
- Individual segments for each speaker turn
- Complete combined podcast with natural pauses
- High-quality 24kHz audio
## 🔧 Configuration
### Podcast Settings
- **Style**: Conversational, Interview, Debate, Educational
- **Duration**: 5, 10, 15, or 20 minutes
- Configured in the Studio tab
### Audio Settings
Modify in `src/podcast/text_to_speech.py`:
- Speaker voices (default: `af_heart` and `am_liam`)
- Sample rate (default: 24000 Hz)
- Pause duration between segments (default: 0.2s)
## 🐛 Troubleshooting
### Web Scraping Not Available
If you see "Web scraping will not be available":
- Add `FIRECRAWL_API_KEY` to your `.env` file
- Get a key from https://www.firecrawl.dev
- Restart the app
### TTS Not Available
If you see "TTS not available":
```bash
uv pip install kokoro>=0.9.4
```
### OpenAI API Errors
- Check your API key is correctly set in `.env`
- Ensure you have sufficient API credits
- Verify your API key has access to GPT-4 models
### Import Errors
Make sure all dependencies are installed:
```bash
uv sync
```
## 💡 Workflow
```
1. Add Source (URL or Text)
2. Content is stored in session
3. Select source in Studio
4. Generate script (GPT-4)
5. Generate audio (Kokoro TTS)
6. Download script & audio
```
## 📄 License
This project is part of the AI Engineering Hub.
## 🙏 Acknowledgments
- Inspired by NotebookLM's podcast generation feature
- Uses Kokoro TTS for natural-sounding speech synthesis
- Powered by OpenAI's language models
- Web scraping by Firecrawl
## 🤝 Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
---
Built with ❤️ using Streamlit and AI