Turn any document or web page into a ready-to-record two-host podcast script — powered by Google Gemini and CrewAI.
This project automates the entire pipeline from raw content to a polished podcast transcript. Drop in a PDF, Word doc, plain-text file, or a URL and the system produces a natural, engaging two-host conversation script with distinct personalities — no manual editing required.
Built as a full-stack application with four ways to interact: a command-line tool, a REST API, a React Native mobile app, and a static web dashboard.
| Layer | Technologies |
|---|---|
| AI / Agents | Google Gemini 1.5 Flash · CrewAI · LiteLLM |
| Backend | Python · Flask · background threading · UUID job tracking |
| Mobile | React Native · Expo |
| Web | Vanilla HTML/JS (static dashboard) |
| Tooling | Python venv · npm · dotenv |
- Multi-format ingestion — accepts
.txt,.pdf,.docx,.md, or any URL (scraped automatically) - AI-generated dialog — CrewAI agent enforces distinct host personas and structures content into natural back-and-forth conversation
- Async job processing — the Flask API runs generation in a background thread; clients poll for status and download results when ready
- Four client interfaces — CLI, REST API, Expo mobile app, and static web page all talk to the same backend
- Configurable output — caller supplies host names and target duration; the agent adapts accordingly
┌─────────────────────────────────────────────────┐
│ Client Layer │
│ CLI │ Flask REST API │ Expo App │ Web │
└────────────────────┬────────────────────────────┘
│
┌────────────────────▼────────────────────────────┐
│ Flask Backend (app.py) │
│ /api/upload · /api/status · /api/download │
│ Background thread · Job state dictionary │
└────────────────────┬────────────────────────────┘
│
┌────────────────────▼────────────────────────────┐
│ CrewAI Agent (podcast_generator.py) │
│ FileReadTool · ScrapeWebsiteTool │
│ Google Gemini 1.5 Flash via LiteLLM │
└─────────────────────────────────────────────────┘
CreatePodcast/
├── scripts/
│ └── podcast_generator.py # CrewAI agent — core AI logic
├── backend/
│ └── app.py # Flask REST API
├── frontend/ # Expo / React Native mobile app
├── web-frontend/
│ └── index.html # Static web dashboard
├── input_files/ # Sample input documents
├── script_outputs/ # Generated podcast scripts
├── start-dev.sh # One-command dev bootstrap
└── requirements.txt # Python dependencies
# 1. Clone and set up environment
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# 2. Add your Gemini API key
echo "GOOGLE_API_KEY=your_key_here" > .env
# 3. Run the CLI generator
python scripts/podcast_generator.py
# 4. Or start the full stack (API + Expo)
./start-dev.shFor detailed setup instructions, API reference, and debugging tips, see walkthrough.md.
The generator produces scripts like:
[HOST 1 - Alex]: Welcome back to the show! Today we're diving into something
I think everyone needs to hear about...
[HOST 2 - Jamie]: Absolutely, Alex. I've been looking forward to this one.
The material here is genuinely fascinating...
Built to explore the intersection of LLM-powered agents and practical content creation tooling.