pypodcaster - mp3s to Podcast XML Feed

pypodcaster is a command line utility that generates podcast feeds from a directory of mp3 files. It reads ID3 tags and translates them into XML entries.

Any standard html server (e.g. Apache, nginx, etc.) can be used to host the podcast.


Install from PyPI using pip

The simplest way to install pypodcaster is via pip install from the Python Package Index

pip install pypodcaster

From Source

Alternatively clone the source code and install with setup.py

git clone git://mantlepro.com/pypodcaster.git
cd pypodcaster
sudo python setup.py install

If you do not have git installed, download the zip

unzip pypodcaster.zip
cd pypodcaster
sudo python setup.py install


Create a directory to hold podcast media

mkdir podcast

Enter channel information into channel.yml

Note: title, link, description, owner, and podcast_url are required fields. The rest are optional but recommended.

title: 'Podcast Title'
link: 'http://link-to-website-corresponding-to-the-channel.com'
description: 'Phrase or sentence describing the channel.'
language: 'en-us'
copyright: 'Copyright notice for channel content.'
subtitle: 'Podcast Subtitle'
podcast_url: 'https://dl.dropboxusercontent.com/u/12345678/podcast/'
image: 'cover.jpg' # full url or image under podcast_url
author: 'Author name or Company'
  name: 'John Doe'
  email: 'john@doe.com'
categories: ['Education', 'How To']
explicit: No
keywords: [comma, separated, list]

For a list of categories see Apple's Podcasts Connect Help page.

cd to directory containing podcast media and run

pypodcaster -o podcast.xml

pypodcaster will create podcast.xml with settings from channel.yml. Run the command every time you wish to update the podcast feed.

To see everything pypodcaster is capable of, run pypodcaster --help

usage: pypodcaster [-h] [-c /path/to/channel.yml] [-o OUTPUT] [-V]
                   [sources [sources ...]]

pypodcaster: generate podcast xml feed from a directory of media files.
Copyright (C) 2015-2017 Josh Wheeler. This program comes with ABSOLUTELY NO
WARRANTY. This is free software, and you are welcome to redistribute it under
certain conditions. For details, visit

positional arguments:
  sources               Specify source files or directories

optional arguments:
  -h, --help            show this help message and exit
  -c /path/to/channel.yml, --channel /path/to/channel.yml
                        Specify channel definition instead of current
                        directory's channel.yml
  -o OUTPUT, --output OUTPUT
                        Direct output to FILE instead of stdout
  -V, --version         show program's version number and exit

example: pypodcaster -o index.xml


Sort by Date

By default, the podcast feed is sorted by file modification time. If you wish to modify the date of a podcast episode, prepend the date to the episode's filename in the following format: YYYY-MM-DD or YYYYMMDD.


Episodic Images

To add an image to the episode or series, add a jpg with the same filename, title or album tag alongside the mp3 file.

If album name is used, the image will carry across an entire series. If no jpg is provided, the cover image will default to the channel's cover image set in channel.yml.

Contents of /var/www/html/podcast:
  series_name.jpg # "Series Name" from album tag

Customize XML Template

pypodcaster uses Jinja2 for xml templating. If you wish to edit the feed's format beyond pypodcaster's basic template, add template.xml to your podcast directory with contents based on template.xml

Podcast Specifications