Releases: jmbannon/ytdl-sub
Release list
ytdl-sub 2026.08.26.post1
[FEATURE] Add sync_with_source option to delete files removed from the source (#1490)
- Add sync_with_source option to delete files removed from the source
Adds an opt-in output_options field that deletes local files when their
source entry is no longer present in a subscription's URL(s). After the
metadata pass, any download archive entry whose ID is absent from the
source is removed along with all of its files.
Reuses the existing keep_files/keep_max_files deletion path. The new
predicate calls the same EnhancedDownloadArchive._remove_entry, so media,
.nfo, thumbnail and .info.json files, the archive entry, and the
transaction log are all handled the same, and no re-downloading occurs.
Because ytdl-sub cannot distinguish "this video was removed" from
"metadata collection stopped early", enabling sync_with_source forces a
full enumeration of the source during the metadata pass:
break_on_existing is overridden to False, and the max_downloads cap that
keep_max_files injects is suppressed, only if the flag is set to True.
For truncation ytdl-sub cannot override, YTDLP now reports which
early-stop exception fired, and any such run skips pruning entirely with
a warning. A source that returns zero entries, or a run that never
enumerated the source at all (update_with_info_json), also never deletes.
Defaults to False, requires maintain_download_archive, and leaves
existing behavior unchanged.
Thanks @sapphimars for the addition!
ytdl-sub 2026.08.26
Bump yt-dlp from 2026.7.4 to 2026.8.19 (#1499)
Bumps yt-dlp from 2026.7.4 to 2026.8.19.
updated-dependencies:
- dependency-name: yt-dlp
dependency-version: 2026.8.19
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ytdl-sub 2026.07.17.post1
Bump yt-dlp from 2026.6.9 to 2026.7.4 (#1482)
Bumps yt-dlp from 2026.6.9 to 2026.7.4.
updated-dependencies:
- dependency-name: yt-dlp
dependency-version: 2026.7.4
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ytdl-sub 2026.07.16
Add keep_max_files_sort_by option for playlist-index-based retention (#1484)
Adds a keep_max_files_sort_by config option that controls how entries are ordered when pruning with keep_max_files.
Previously, pruning always sorted by upload_date (keeping the most recent). This adds support for sorting by playlist_index (keeping the lowest indices), which is useful for playlists where position matters more than upload date e.g. keeping the first N episodes of a series.
Changes
keep_max_files_sort_by- newoutput_optionsfield accepting"upload_date"(default, preserving existing behaviour) or"playlist_index"playlist_indexonDownloadMapping- persisted in the archive JSON so it's available at prune time; old archives without the field gracefully default toNone- Fallback behaviour - if
sort_byis"playlist_index"but no entries have an index (e.g. old archives), logs a warning and falls back toupload_date(current behaviour) - Prebuilt preset support -
only_recent_sort_byoverride wired into thedownload_deletion_optionshelper
Closes #1461
Thanks @michaeldyrynda for the AAA PR! This is great stuff
ytdl-sub 2026.06.23
[BUGFIX] Fix "File name too long" error when a title is used as a folder name (#1479)
Some presets put the video title into a folder name (not just the file name). The code only shortened the file name, never the folder name. So a title with multi-byte characters (like bold/fancy Unicode, which take 4 bytes each) could make the folder name go over the OS 255-byte limit and crash with OSError: [Errno 36] File name too long.
This fix shortens every folder in the path too, not just the file name, while keeping the file extension. output_directory is left alone so real folders aren't touched.
Added a test with a title made of 4-byte bold Unicode characters.
-- Thanks @Nojyto for the contribution!
ytdl-sub 2026.06.12
Bump yt-dlp from 2026.3.17 to 2026.6.9 (#1475)
Bumps yt-dlp from 2026.3.17 to 2026.6.9.
updated-dependencies:
- dependency-name: yt-dlp
dependency-version: 2026.6.9
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ytdl-sub 2026.05.10.post1
[BUGFIX] Fix output sanitization type checking (#1467)
In the inspection output, we check function's return types via issubclass to see if an optimization can be made. Guard against this check in case the return type isn't a class -- it could be a Union[..., ...] from a conditional.
ytdl-sub 2026.04.13.post1
[FEATURE] inspect subcommand (#1407)
Subscription file syntax is designed to minimize boiler-plate when authoring new subscriptions.
You can now unpack any subscription using the inspect sub-command to see its boiler-plate preset format.
ytdl-sub inspect --config /path/to/config.yaml --match "BBC News" /path/to/subscriptions.yaml
This can be utilized for numerous purposes including:
- Ensuring your custom preset is getting applied correctly.
- Figuring out which variables set things like file names, metadata, etc.
- Understanding how subscription syntax translates to preset representation.
The default --level of inspect will fill in defined variables. Using --level original will present the subscription's raw layout with no fill.
ytdl-sub 2026.03.19
Bump yt-dlp[default] from 2026.3.13 to 2026.3.17 (#1454)
Bumps yt-dlp[default] from 2026.3.13 to 2026.3.17.
updated-dependencies:
- dependency-name: yt-dlp[default]
dependency-version: 2026.3.17
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ytdl-sub 2026.03.13
Bump yt-dlp[default] from 2026.3.3 to 2026.3.13 (#1450)
Bumps yt-dlp[default] from 2026.3.3 to 2026.3.13.
updated-dependencies:
- dependency-name: yt-dlp[default]
dependency-version: 2026.3.13
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>