Convert BBC radio programmes into self-hosted podcast RSS feeds.
Downloads episodes from BBC Sounds using yt-dlp and serves them as a podcast feed you can subscribe to in any podcast app.
- A UK IP address (VPN recommended)
- Python 3.14+ with uv or Docker
Set the PROGRAMME_ID environment variable to the BBC programme ID you want to follow.
Find the programme ID in the BBC Sounds URL:
https://www.bbc.co.uk/programmes/b00v4tv3
^^^^^^^^
this is the programme ID
Tested with:
- Benji B (
b00v4tv3) - Essential Mix (
b006ww1y)
docker run -d \
-p 5000:5000 \
-e PROGRAMME_ID=b00v4tv3 \
-v ./data:/app/data \
ghcr.io/hauxir/bbc2podcast:latestCopy the example compose file and configure your VPN:
cp docker-compose.yml.example docker-compose.ymlEdit docker-compose.yml and configure the gluetun VPN settings for your provider (see gluetun wiki).
Then start the services:
docker compose up -dThe compose setup includes:
- gluetun: VPN container routing traffic through a UK server
- bbc2podcast: The podcast server
- ofelia: Scheduler that updates episodes daily at 3 AM
docker compose exec bbc2podcast uv run python -m bbc2podcast.updategit clone https://github.com/hauxir/bbc2podcast.git
cd bbc2podcast
uv syncDownload new episodes for your programme:
PROGRAMME_ID=b00v4tv3 uv run python -m bbc2podcast.updatePROGRAMME_ID=b00v4tv3 uv run uvicorn bbc2podcast.app:app --host 0.0.0.0 --port 5000Add a cron job to update episodes automatically:
0 3 * * * cd /path/to/bbc2podcast && PROGRAMME_ID=b00v4tv3 uv run python -m bbc2podcast.updateOnce running, add the feed URL to your podcast app:
http://localhost:5000/feed.xml
Or if hosted on a server:
http://your-server:5000/feed.xml
| Endpoint | Description |
|---|---|
/ |
Status info (title, episode count) |
/feed.xml |
Podcast RSS feed |
/audio/{filename} |
Audio file streaming |
# Install with dev dependencies
uv sync
# Run linting
uv run ruff check .
uv run ruff format --check .
# Run type checking
uv run basedpyright