Skip to main content

Pypi Version Shield Pypi License Shield

ydl-podcast

A simple tool to generate Podcast-like RSS feeds from youtube (or other youtube-dl supported services) channels, using youtube-dl.

Setup

Install package with requirements:

Youtube-dl:

pip install ydl-podcast[youtube-dl]

yt-dlp:

pip install ydl-podcast[yt-dlp]

Configuration

Edit the config.yaml file to list your podcast sources and configure them, as well as edit general configuration.

Example config file

The available settings are the following.

General settings

  • output_dir: local directory where the downloaded media will be stored, and the podcast xml files generated.
  • url_root: root url for the static files (used in the generation of the XML to point to the media files.
  • subscriptions: a list of feeds to subscribe to.
  • youtube-dl-module: Alternative youtube-dl python module. By default, this uses youtube-dl, but can leverage forks such as yt-dlp.

Feed settings

Mandatory

  • name NAME: Name of the podcast source. Used as the podcast title, and media directory name.
  • url URL: source url for the youtube (or other) channel.

Optional

  • audio_only True/False: if True, audio will be extracted from downloaded videos to create an audio podcast.
  • retention_days N: only download elements newer than N days, and automatically delete elements older.
  • download_last N: only download the latest N videos.
  • initialize True/False: if True, then downloads everything on the first run, no matter the download_last or retention_days specified.
  • output_dir: local directory where the downloaded media will be stored, and the podcast xml files generated.
  • url_root: root url for the static files (used in the generation of the XML to point to the media files.
  • format: file format to force youtube-dl to use (eg mp4, webm, mp3 for audio only…)
  • best: force best quality (only useful when specifying a format).
  • ydl_options: list of raw youtube-dl options to use. For experienced users, since this will likely yield issues if not understood.
  • nfo_files: generates nfo files for subscriptions and downloaded episodes (simulates a "tvshow" nfo for the subscription and "tvshow episode" for each video). This helps plex, kodi, jellyfin import correct metadata. Does NOT support audio_only feeds at this point.
  • skip_download: Don't perform download, just generate the Atom feed from the existing files. Mandatory url parameter can be skipped if skip_download is set to true
  • download_as_playlist: Pass the url to the downloader directly, without processing the metadata of each item in the playlist. This is helpful with generic urls, and a few specific extractors.

Usage

Using cron or your favorite scheduler, run:

ydl-podcast [-c configfile.yaml]

You can then use your favorite web server to serve the files (a good idea is to exclude the *.json and *.part files from being served as the first might leak information, and the second is unnecessary.

eg with nginx:

root /var/www/static/podcasts/;
location ~ (\.json$|\.part$) {
  return 403;
}

Command line arguments

usage: ydl-podcast [-h] [-v] [-c CONFIG] [-j JSON_CONFIG] [-f FILTER] [-e EXCLUDE]

options:
  -h, --help            show this help message and exit
  -v, --version         Show version and exit
  -c CONFIG, --config CONFIG
                        Configuration file
  -j JSON_CONFIG, --json-config JSON_CONFIG
                        Configuration string in JSON format
  -f FILTER, --filter FILTER
                        Filter subscriptions
  -e EXCLUDE, --exclude EXCLUDE
                        Exclude subscriptions

Metadata

Release files for ydl-podcast 1.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ydl-podcast 1.21.0
File Size Uploaded
ydl_podcast-1.21.0.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ydl-podcast 1.21.0
File Interpreter ABI Platform
ydl_podcast-1.21.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.1 kB

Release files / ydl_podcast-1.21.0.tar.gz

Download URL ydl_podcast-1.21.0.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
778056bc920046afda8d69fdda92a096e1ff2681d8316c25b86b2248a5b20eaf
BLAKE2b-256 checksum
How to use checksums
fdbb63e2e0d4cafb0dcb1b99b66d12b2222a70bd90f69b7de4dac2f6fd66caee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.5","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / ydl_podcast-1.21.0-py3-none-any.whl

Download URL ydl_podcast-1.21.0-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
32c6d5d18ab309fe9b29c5f1f7d6ca6a39cbaf5c3a62d565ccd4ebebc3ee97f1
BLAKE2b-256 checksum
How to use checksums
13b21e15858aa4ef04ee10323bdb4205c7739d419087ac4f9b2f05e2968a6933
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.5","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.21.0 This release

2 release files

1.20.0

2 release files

1.19.0

2 release files

1.18.0

2 release files

1.17.0

2 release files

1.16.0

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.4

2 release files

1.12.3

2 release files

1.12.1

2 release files

1.10.1

2 release files

1.9.19

2 release files

1.9.18

2 release files

1.9.17

2 release files

1.9.16

2 release files

1.9.15

2 release files

1.9.14

2 release files

1.9.13

2 release files

1.9.12

2 release files

1.9.11

2 release files

1.9.9

2 release files

1.9.8

2 release files

1.9.7

2 release files

1.9.6

2 release files

1.9.5

2 release files

1.9.4

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.10

2 release files

1.7.9

2 release files

1.7.8

2 release files

1.7.7

2 release files

1.7.6

2 release files

1.7.5

2 release files

1.7.4

2 release files

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.11

2 release files

1.2.10

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page