Menu โ–พ โ–ด

Tree [c723de] Main /
 History

HTTPS access


File Date Author Commit
 components 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 services 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 .gitattributes 2025-08-13 Jarle Taksdal Jarle Taksdal [e923d9] Initial commit
 .gitignore 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 App.tsx 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 README.md 2025-08-20 Jarle Taksdal Jarle Taksdal [c723de] Add files via upload
 index.html 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 index.tsx 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 metadata.json 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 package.json 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 tsconfig.json 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 types.ts 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app
 vite.config.ts 2025-08-13 Jarle Taksdal Jarle Taksdal [4c6e4a] Initial commit: PDF to Podcast React app

Read Me

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.