Skip to main content

Archive all episodes from your favorite podcasts

Project description

Podcast Archiver

Podcast Archiver Logo

version python downloads

Docker Build Tests pre-commit.ci

Maintainability codecov

ruff poetry pre-commit

A fast and simple command line client to archive all episodes from your favorite podcasts.

Podcast Archiver takes the feed URLs of your favorite podcasts and downloads all available episodes for you—even those "hidden" in paged feeds. You'll end up with a complete archive of your shows. The archiver also supports updating an existing archive, so that it lends itself to be set up as a cronjob.

Setup

Install via pipx:

pipx install podcast-archiver

Install via brew:

brew install janw/tap/podcast-archiver

Or use it via Docker:

docker run --tty --rm ghcr.io/janw/podcast-archiver --help

By default, the docker image downloads episodes to a volume mounted at /archive.

Usage

Run podcast-archiver --help for details on how to use it:

poetry run podcast-archiver --help

Example invocation

podcast-archiver -d ~/Music/Podcasts \
    -f http://logbuch-netzpolitik.de/feed/m4a \
    -f http://raumzeit-podcast.de/feed/m4a/ \
    -f https://feeds.lagedernation.org/feeds/ldn-mp3.xml

This way, you can easily add and remove feeds to the list and let the archiver fetch the newest episodes for example by adding it to your crontab.

Feeds can also be "fetched" from a local file:

podcast-archiver -f file:/Users/janw/downloaded_feed.xml

Changing the filename format

Podcast Archiver has a --filename-template option that allows you to change the particular naming scheme of the archive. The default value for --filename-template. is shown in podcast-archiver --help, as well as all the available variables. The basic ones are:

  • Episode: episode.title, episode.subtitle, episode.author, episode.published_time, episode.original_filename
  • Podcast: show.title, show.subtitle, show.author, show.language

Note here that episode.published_time is a Python-native datetime, so its exact format can be adjusted further a la {episode.published_time:%Y-%m-%d %H%M%S} using strftime-placeholders. By default it uses %Y-%m-%d (e.g. 2024-12-31).

Examples

  • More precise published time

    {show.title}/{episode.published_time:%Y-%m-%d %H%M%S %Z} - {episode.title}.{ext}
    

    Results in …/That Show/2023-03-12 123456 UTC - Some Episode.mp3

  • Using the original filename (roughly equivalent to pre-1.0 --subdirs)

    {show.title}/{episode.original_filename}
    

    Results in …/That Show/ts001-episodefilename.mp3

  • Using the original filename (roughly equivalent to pre-1.0 --subdirs + --date-prefix)

    {show.title}/{episode.published_time} {episode.original_filename}
    

    Results in …/That Show/2023-03-12 ts001-episodefilename.mp3

Using a config file

Command line arguments can be replaced with entries in a YAML configuration file. An example config can be generated with

podcast-archiver --config-generate > config.yaml

After modifying the settings to your liking, podcast-archiver can be run with

podcast-archiver --config config.yaml

Alternatively (for example, if you're running podcast-archiver in Docker), you may point it to the config file using the PODCAST_ARCHIVER_CONFIG=path/to/config.yaml environment variable.

Using environment variables

Some settings of Podcast Archiver are available as environment variables, too. Check podcast-archiver --help for options with env var: … next to them.

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

podcast_archiver-1.6.2.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

podcast_archiver-1.6.2-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file podcast_archiver-1.6.2.tar.gz.

File metadata

  • Download URL: podcast_archiver-1.6.2.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for podcast_archiver-1.6.2.tar.gz
Algorithm Hash digest
SHA256 9c1a6a44e0e2bc3d83b77d465471e562a1cc93ac6c727581e25f5e2df1de7a4b
MD5 19f6a7966ee0f0a477062cbd5f11bfab
BLAKE2b-256 4dce3080c35a34bfa1f8f09a1f366dcfd313a36b56cfde99a7085f7241026ba6

See more details on using hashes here.

File details

Details for the file podcast_archiver-1.6.2-py3-none-any.whl.

File metadata

File hashes

Hashes for podcast_archiver-1.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f810877c98ec855337a0195c722b44bdf7dccc4824290fb5f34929c50150bfc1
MD5 5bb8c0ffbc200a4fba52eb9684bd954a
BLAKE2b-256 6d9a299ac108affdfb9ea339140ed092ef2cdf19459a8e74400f780deb64935b

See more details on using hashes here.

Supported by

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