Home
Name Modified Size InfoDownloads / Week
EpisodeList.tsx 2025-08-20 5.4 kB
UploadCard.tsx 2025-08-20 6.1 kB
api.ts 2025-08-20 970 Bytes
package.json 2025-08-20 450 Bytes
README.md 2025-08-20 5.9 kB
tsconfig.json 2025-08-20 532 Bytes
types.ts 2025-08-20 255 Bytes
vite.config.ts 2025-08-20 459 Bytes
_gitattributes 2025-08-20 68 Bytes
App.tsx 2025-08-20 2.8 kB
index.html 2025-08-20 729 Bytes
index.tsx 2025-08-20 363 Bytes
metadata.json 2025-08-20 232 Bytes
_gitignore 2025-08-20 277 Bytes
Totals: 14 Items   24.4 kB 4

PDF to Podcast

PDF to Podcast transforms any PDF document into a podcast-ready audio episode using advanced AI text-to-speech (TTS) providers. Upload a PDF, select your preferred voice and provider, and receive an MP3 and a ready-to-use RSS feed for your podcast app.


πŸš€ Quick Launch

Deploy this app to your favorite platform with one click:

Deploy with Vercel Deploy to Netlify Deploy on Railway Deploy to Render Open in CodeSandbox Run on Repl.it Open in Gitpod Remix on Glitch Open in StackBlitz

Docker:

docker run -d -p 3000:3000 -e GEMINI_API_KEY=your_key ghcr.io/knoksen/pdf-to-podcast:latest

Heroku:
Deploy

Fly.io:

fly launch --image ghcr.io/knoksen/pdf-to-podcast:latest

πŸ“ Features

  • PDF Upload: Drag & drop or select a PDF, up to 50MB.
  • Provider Selection: Choose TTS engine: gTTS (free), OpenAI, or Azure.
  • Voice Selection: Customizable voice (where supported).
  • Episode Management: See, play, and download all generated episodes.
  • Podcast-Ready: Instant RSS feed for any podcast app.
  • Modern UI: Built with React, TailwindCSS, and best practices.
  • API-First: Easily extensible for new TTS providers.

πŸ› οΈ Architecture & Tech Stack

  • Frontend: React (Vite), TypeScript, TailwindCSS
  • Backend: Node.js (Express/Fastify), REST API
  • TTS Providers: gTTS (Google Text-to-Speech), OpenAI, Azure Cognitive Services
  • Storage: Local filesystem (default), configurable for cloud (e.g., S3)
  • Deployment: Vercel, Netlify, Railway, Render, Docker, etc.
  • CI/CD: GitHub Actions (recommended)
  • RSS Generation: Automatic and standards-compliant

βš™οΈ Configuration & Environment

Create a .env.local file in the root with:

GEMINI_API_KEY=your_gemini_api_key
# Optionally:
# OPENAI_API_KEY=your_openai_key
# AZURE_API_KEY=your_azure_key
# AZURE_REGION=your_azure_region
# STORAGE_DIR=/path/to/episodes
  • GEMINI_API_KEY is required for Gemini-based TTS.
  • Add other provider keys as needed.

πŸ§‘β€πŸ’» Local Development

Prerequisites:
- Node.js 18+ - npm

Steps:

git clone https://github.com/knoksen/pdf-to-podcast.git
cd pdf-to-podcast
cp .env.local.example .env.local # then edit the file
npm install
npm run dev

Visit http://localhost:3000


πŸ—’οΈ Usage

  1. Upload your PDF.
  2. Choose a provider and voice (if available).
  3. Click Generate Episode.
  4. When processing is complete, play or download the MP3.
  5. Use /rss.xml in your podcast app.

🧩 API (for Developers)

  • POST /api/episodes – Upload a PDF and metadata
  • GET /api/episodes – List all podcast episodes
  • GET /api/episodes/:id/audio – Download episode audio
  • GET /rss.xml – Get podcast RSS

Extending:
Add your own TTS provider by implementing a new provider in /services/tts/ and updating the provider options.


πŸ“¦ Docker

Build your own image:

docker build -t pdf-to-podcast .
docker run -d -p 3000:3000 -e GEMINI_API_KEY=your_key pdf-to-podcast

πŸ§ͺ Testing

npm run test

🀝 Contributing

PRs and issues welcome! See CONTRIBUTING.md for details.


πŸ“„ License

MIT


✨ Credits


πŸ—£οΈ Questions?

Open an issue or start a discussion.

Source: README.md, updated 2025-08-20