Skip to content

Releases: jmbannon/ytdl-sub

ytdl-sub 2026.08.26.post1

Choose a tag to compare

@github-actions github-actions released this 26 Aug 03:04
4ab55f1

[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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 02:51
cecfc45

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

Choose a tag to compare

@github-actions github-actions released this 17 Jul 14:47
5b76e62

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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 06:04
3379235

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 - new output_options field accepting "upload_date" (default, preserving existing behaviour) or "playlist_index"
  • playlist_index on DownloadMapping - persisted in the archive JSON so it's available at prune time; old archives without the field gracefully default to None
  • Fallback behaviour - if sort_by is "playlist_index" but no entries have an index (e.g. old archives), logs a warning and falls back to upload_date (current behaviour)
  • Prebuilt preset support - only_recent_sort_by override wired into the download_deletion_options helper

Closes #1461

Thanks @michaeldyrynda for the AAA PR! This is great stuff

ytdl-sub 2026.06.23

Choose a tag to compare

@github-actions github-actions released this 23 Jun 16:09
658f5ef

[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.

Relates to #1092, #1189

-- Thanks @Nojyto for the contribution!

ytdl-sub 2026.06.12

Choose a tag to compare

@github-actions github-actions released this 12 Jun 08:21
1c4633b

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

Choose a tag to compare

@github-actions github-actions released this 10 May 16:24
4421c4e

[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

Choose a tag to compare

@github-actions github-actions released this 13 Apr 17:15
970c74b

[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

Choose a tag to compare

@github-actions github-actions released this 19 Mar 04:21
52a1cea

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

Choose a tag to compare

@github-actions github-actions released this 13 Mar 20:39
a6aea03

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>