A complete gutting of the internals of ytdl-sub to support functions in our variable syntax, in addition to being able to access a yt-dlp entry's .info.json fields using functions. Functionally, ytdl-sub should still look and behave the same from a user-perspective.
With so many lines of code changed (+8927, -2708), no doubt there will be new issues. Please make a GH issue or reach out on Discord if your config/subscriptions break in any way/shape/form.
Details on how to use function support will come soon in the form of proper documentation in our readthedocs.
Provides options to make ytdl-sub look more 'human-like' to protect from throttling. For range-based values, a random number will be chosen within the range to avoid sleeps looking scripted.
Usage:
```
throttle_protection:
sleep_per_download_s:
min: 2.2
max: 10.8
sleep_per_subscription_s:
min: 9.0
max: 14.1
max_downloads_per_subscription:
min: 10
max: 36
subscription_download_probability: 1.0
```
A follow-up to the prior commit which fixes some bugs in the 'beautiful subscriptions' implementation. A proper migration guide will be written in the wiki once it's ready
Closes Feature Request: https://github.com/jmbannon/ytdl-sub/issues/743
Subscriptions support using presets as keys, and using keys to set override variables as values.
For example:
```
tv_show:
only_recent:
[News]:
"Breaking News": "https://www.youtube.com/@SomeBreakingNews"
[Tech]:
"Two Minute Papers": "https://www.youtube.com/@TwoMinutePapers"
```
Will create two subscriptions named "Breaking News" and "Two Minute Papers", equivalent to:
```
"Breaking News":
preset:
- "tv_show"
- "only_recent"
overrides:
subscription_indent_1: "News"
subscription_name: "Breaking News"
subscription_value: "https://www.youtube.com/@SomeBreakingNews"
"Two Minute Papers":
preset:
- "tv_show"
overrides:
subscription_indent_1: "Tech"
subscription_name: "Two Minute Papers" subscription_value: "https://www.youtube.com/@TwoMinutePapers"
```
You can provide as many parent presets in the form of keys, and subscription indents as ``[keys]``.
This can drastically simplify subscription definitions by setting things you want configurable like so in your
parent preset:
```
presets:
tv_show_name:
overrides:
tv_show_name: "{subscription_name}"
url: "{subscription_value}"
genre: "{subscription_indent_1}"
```
NOTE!!!
Changing your subscription name from 'legacy' subscriptions will need their download archive file migrated to a new name. A future update will assist in this migration process. Either wait until then or, if you consider yourself a ytdl-sub expert, keep a backup of your subscription file before migrating.
`Subscription Value` is the mechanism used to achieve one-liner subscriptions. It works by having the subscription `"Subscription Name": "value"`, and assigning `"value"` to an override variable via setting the subscription value to that override variable's name.
This feature allows you to set subscription value within the config. In the near future, ytdl-sub will strive to make subscription files simpler by hiding most of the "under-the-hood" logic within the config file.
Closes Issue: https://github.com/jmbannon/ytdl-sub/issues/729
Add a new field to the match_filter plugin: `download_match_filters`. This set of filters will be applied at the download stage (as opposed to `filters` which get applied at the metadata stage). By default, always set `"!is_live & !is_upcoming & !post_live"` as a download filter. This prevents ytdl-sub from hanging when trying to grab live and upcoming videos.
Docs on match-filters: https://ytdl-sub.readthedocs.io/en/latest/config.html#match-filters
Makes setting yt-dlp's `format` field easier by giving it its own documented plugin.
Old:
```
my_format_preset:
ytdl_options:
format: "best"
```
New:
```
my_format_preset:
format: "best"
```
The old method will still work, so do not worry about updating configs ASAP. However, the option is available to save a few lines 😉
* Fix Plex MP4
No WebM, Best quality, No AV1 either
* Fixed because I am idiot
Forcing Plex to download only MP4 and 1080P. More efficient then downloading Webm and converting. Plex does not direct Play AV1 currently anyway.
* Plex Update
Default will get best video in H265 or H264, if neither are available, it will get next best video. All MP4, no limit on resolution.
Plex_tv_show_av1 will allow for absolute best possible resolution in any codec as long as its MP4, including Av1 which is not currently supported in Plex.
Without AV1 is considered default, for maximum compatibility at this time.
* EBUATK
Incorrect setting on Av1, fixed.
* Removed Av1 Preset
* adding common 1080p MAX preset
max_1080_video_quality:
* removed remux video
Removed remux video
Shortened preset name.
* Update presets.rst
Update presets.rst documentation to reflect the "max_1080P" preset
* remove remux_video
* Title Change for Clarity
* Update presets.rst
---------
Co-authored-by: catduckgnaf <128985786+cellardoor452@users.noreply.github.com>
* [BACKEND] Support empty urls for multi_url, add overrides for extra urls in tv_show_by_date preset
* need to check for missing urls in downloader
* use override in test
* docs about multi url
* wording
* actually working
* changed plugin format. Need unit tests, documentation, update e2e to filter
* refactor plugin name, matching now working
* description work in progress, need more intricate testing
* tests looks good, regenerate output
* e2e tested, need more failure tests, no dupe variable names, add docs
* unit tests passing again
* more fail tests
* updated with name, default, better docs
* sanitized vars created
* begin
* chapters class, trying to add chapter splitting and general ffmpeg metadata creation
* working split video
* so very close
* test passing, is reproducible
* lint fixed
* fix docs
* track no longer used in example
* if, then del
* multiple values
* github hash
* youtube.download_strategy split_video
* almost working, need to deal with track_title and other overwrites
* working test
* ci ffmpeg
* sudo -f
* fix code block
* `ytdl_options` defaults for each download strategy
* fix docker, fix defaults getting added, add debugger test
* test playlist as well
* fix with hack
* fix full channel test
* existing
* youtube video url
* WIP, channel /user/ and /c/ should be valid
* unit tests passing
* soundcloud artist url
* soundcloud username
* break configs with name change
* Update all yamls with urls
* update all docs
* more negative url tests