Skip to main content

Podcast transcription service - download episodes via RSS and transcribe with Whisper

Project description

cast2md

Podcast transcription service - download episodes via RSS and transcribe with Whisper. Automatically downloads publisher-provided transcripts when available (Podcasting 2.0) or fetches auto-generated transcripts from Pocket Casts.

Note: This is a personal project under active development. I'm sharing it in case others find it useful, but I'm not currently providing support or reviewing pull requests.

Features

  • iTunes URL Support: Add podcasts via Apple Podcasts URLs (automatically resolves to RSS)
  • RSS Feed Management: Add podcast feeds and automatically discover new episodes
  • External Transcript Downloads: Fetches transcripts from Podcasting 2.0 tags and Pocket Casts before falling back to Whisper
  • Whisper Transcription: Transcribe audio using faster-whisper or mlx-whisper
  • Distributed Transcription: Use remote machines (M4 Macs, GPU PCs) to transcribe in parallel
  • Full-Text Search: Search across episode metadata and transcripts
  • Web Interface: Manage feeds, view episodes, and monitor progress
  • REST API: Full API for integration with other tools
  • MCP Server: Claude integration via Model Context Protocol

Installation

Docker

git clone https://github.com/meltforce/cast2md.git
cd cast2md
docker compose up -d

Manual Installation

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone and install
git clone https://github.com/meltforce/cast2md.git
cd cast2md
uv sync --frozen

# Configure
cp .env.example .env
# Edit .env with your settings

# Initialize and run
uv run cast2md init-db
uv run cast2md serve

Configuration

Create a .env file:

DATABASE_PATH=./data/cast2md.db
STORAGE_PATH=./data/media
TEMP_DOWNLOAD_PATH=./data/temp

# Whisper settings
WHISPER_MODEL=medium          # tiny, base, small, medium, large-v3
WHISPER_DEVICE=cpu            # cpu or cuda
WHISPER_COMPUTE_TYPE=int8     # int8, float16, float32

Whisper Models

Model Quality Speed (CPU) RAM
tiny Basic ~10x realtime 1 GB
base Good ~5x realtime 2 GB
small Very good ~2x realtime 3 GB
medium Excellent ~1x realtime 6 GB
large-v3 Best ~0.3x realtime 12 GB

Usage

Web Interface

Access at http://localhost:8000

  • Feeds: Add and manage podcast RSS feeds
  • Episodes: View episodes and transcription status
  • Search: Search across titles, descriptions, and transcripts
  • Admin: Monitor system health and processing queue

CLI

# Add a podcast (RSS or Apple Podcasts URL)
cast2md add-feed "https://example.com/feed.xml"
cast2md add-feed "https://podcasts.apple.com/us/podcast/example/id123456"

# List and manage
cast2md list-feeds
cast2md list-episodes <feed_id>

# Process episodes
cast2md download <episode_id>
cast2md transcribe <episode_id>
cast2md process <episode_id>  # download + transcribe

# Server
cast2md serve --host 0.0.0.0 --port 8000

# Backup/restore
cast2md backup -o backup.sql
cast2md restore backup.sql

MCP Server (Claude Integration)

{
  "mcpServers": {
    "podcasts": {
      "command": "/path/to/cast2md",
      "args": ["mcp"]
    }
  }
}

Available tools: search_transcripts, search_episodes, queue_episode, add_feed, refresh_feed

Distributed Transcription

Run transcription workers on remote machines:

# On remote machine (Mac with MLX, GPU PC)
cast2md node register --server http://server:8000 --name "Worker Name"
cast2md node start

See Distributed Transcription Setup for details.

API

Endpoint Description
GET /api/feeds List feeds
POST /api/feeds Add feed
GET /api/episodes/{id} Episode details
GET /api/episodes/{id}/transcript Download transcript
POST /api/queue/episodes/{id}/process Queue download
POST /api/queue/episodes/{id}/transcribe Queue transcription
GET /api/queue/status Queue status

Development

uv sync
uv run cast2md serve --reload
uv run pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cast2md-2026.1.1.tar.gz (182.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cast2md-2026.1.1-py3-none-any.whl (198.3 kB view details)

Uploaded Python 3

File details

Details for the file cast2md-2026.1.1.tar.gz.

File metadata

  • Download URL: cast2md-2026.1.1.tar.gz
  • Upload date:
  • Size: 182.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for cast2md-2026.1.1.tar.gz
Algorithm Hash digest
SHA256 ae365cf0ac3580fb2df1138f0b8b640f02cbf725e8ddb58f75d5f0fbcfc1b5ec
MD5 708fd4d206f93c97649310d479e5589e
BLAKE2b-256 060007e1493ffa2f6ecc23411393307d8a6f07c03d6b0201bb74015bbbcde413

See more details on using hashes here.

File details

Details for the file cast2md-2026.1.1-py3-none-any.whl.

File metadata

  • Download URL: cast2md-2026.1.1-py3-none-any.whl
  • Upload date:
  • Size: 198.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for cast2md-2026.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d2de574d4b62af5de26c42c73014f98becb2a7c8f7a5f087a9da5e1d4afd3a83
MD5 2c92f61f65482908f105fe5856fb8546
BLAKE2b-256 4c531312e92a41c40714f33c8b32054160bc14b146c24a27a20c706b7fa7f056

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page