Skip to content

Releases: jmbannon/ytdl-sub

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>

ytdl-sub 2026.03.09.post3

Choose a tag to compare

@github-actions github-actions released this 09 Mar 18:46
0983a59

Update pytest requirement from <9.0,>=7.2 to >=7.2,<10.0 (#1380)

Updates the requirements on pytest to permit the latest version.


updated-dependencies:

  • dependency-name: pytest
    dependency-version: 9.0.0
    dependency-type: direct:development
    ...

Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

ytdl-sub 2026.03.09

Choose a tag to compare

@github-actions github-actions released this 09 Mar 16:32
ff66ff5

fix(docker): Add default crontab download command (#1321)

  • docs(docker): Recommended image DEFAULT_WORKSPACE

  • fix(docker): Add default crontab download command

Clarify the /config/ytdl-sub-configs/cron script with explanatory comments and a
default --dry-run command. Also change the wrapper script to echo commands for easier
debugging. To update an existing script, move the old script aside, restart the
container to regenerate it, and edit the new script.

Also clarify the Automating page in the Getting Started guide docs.

  • fix(docker): Unintentional unattended dry runs

PR feedback
prompted me to reconsider having a default command at all. We should assume,
unfortunately, that many new users will just skim the docs enough to enable the image's
cron integration but not actually incrementally test their configuration. In those
cases, they'd end up sending dry-run non-download requests for all their subscriptions
every 6 hours for no good reason. There's just no way to provide a default command that
isn't also providing a footgun.

  • docs(docker): More open cron schedule generator

From PR
feedback
, this
seems like less of an ad than the previous and the source for the page is itself open source.

  • docs(docker): Document image environment footgun

From PR
feedback
.

  • docs(automate): Avoid external link 404 responses

  • docs(automate): False simultaneous run warning

  • docs(automate): Clarify Docker daemon restarts

  • docs(automate): Revert run start non-recommended

  • docs(automate): Remove footgun manual run command

Addressing this underlying issue requires more thought and should be a separate PR.

  • docs(automate): Restore env var footgun in example