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.
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: ifTrue, audio will be extracted from downloaded videos to create an audio podcast.retention_days N: only download elements newer thanNdays, and automatically delete elements older.download_last N: only download the latestNvideos.initialize True/False: ifTrue, then downloads everything on the first run, no matter thedownload_lastorretention_daysspecified.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 supportaudio_onlyfeeds at this point.skip_download: Don't perform download, just generate the Atom feed from the existing files. Mandatoryurlparameter can be skipped ifskip_downloadis set totruedownload_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.22.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ydl_podcast-1.22.0.tar.gz | 10.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ydl_podcast-1.22.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.7 kB
Release files / ydl_podcast-1.22.0.tar.gz
| Download URL | ydl_podcast-1.22.0.tar.gz |
|---|---|
| Size | 10.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
07b4a188b511eef343ea6f2a0261882dfec64f529cd74f8fbeb72f229f30e4af
|
|
BLAKE2b-256 checksum How to use checksums |
0ecc1762095a67adaa4353274c8cfd9f1696901fb449e3e000b2f4e4c12bcc18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.7","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.22.0-py3-none-any.whl
| Download URL | ydl_podcast-1.22.0-py3-none-any.whl |
|---|---|
| Size | 12.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4663f8c36f966ac54d1b8aab9ba9a54d88f6fa5f0a95a26bd385b26928f31042
|
|
BLAKE2b-256 checksum How to use checksums |
9885417efdac9231b9cef87d347b5d936d0c355f2fd68367c694f3d79e5506f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.7","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for ydl-podcast 1.22.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.