From fb70fbdd9cde83464878273a8219d47b5fab4b98 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 30 Oct 2024 13:02:00 -0700 Subject: [PATCH] [FEATURE] Multi-url support for YouTube music presets --- src/ytdl_sub/downloaders/url/downloader.py | 5 +- src/ytdl_sub/downloaders/url/validators.py | 6 +- .../prebuilt_presets/helpers/url.yaml | 102 +++++++++++++++++- .../music/albums_from_chapters.yaml | 6 +- .../music/albums_from_playlists.yaml | 7 +- 5 files changed, 116 insertions(+), 10 deletions(-) diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index f47cedee..f0595945 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -462,10 +462,13 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]): download_reversed = ScriptUtils.bool_formatter_output( self.overrides.apply_formatter(validator.download_reverse) ) + include_sibling_metadata = ScriptUtils.bool_formatter_output( + self.overrides.apply_formatter(validator.include_sibling_metadata) + ) parents, orphan_entries = self._download_url_metadata( url=url, - include_sibling_metadata=validator.include_sibling_metadata, + include_sibling_metadata=include_sibling_metadata, ytdl_options_overrides=metadata_ytdl_options, ) diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 1f22faa1..124ce99f 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -86,7 +86,7 @@ class UrlValidator(StrictDictValidator): key="ytdl_options", validator=YTDLOptions, default={} ) self._include_sibling_metadata = self._validate_key( - key="include_sibling_metadata", validator=BoolValidator, default=False + key="include_sibling_metadata", validator=OverridesBooleanFormatterValidator, default="False" ) @property @@ -170,14 +170,14 @@ class UrlValidator(StrictDictValidator): return self._ytdl_options @property - def include_sibling_metadata(self) -> bool: + def include_sibling_metadata(self) -> OverridesBooleanFormatterValidator: """ Optional. Whether to include sibling metadata as an entry variable, which comprises basic metadata from all other entries (including itself) that belong to the same playlist. For channels or large playlists, this becomes memory-intensive since you are storing ``n^2`` metadata. Defaults to False. """ - return self._include_sibling_metadata.value + return self._include_sibling_metadata class UrlStringOrDictValidator(UrlValidator): diff --git a/src/ytdl_sub/prebuilt_presets/helpers/url.yaml b/src/ytdl_sub/prebuilt_presets/helpers/url.yaml index 7fc1d9ad..2f7d8f37 100644 --- a/src/ytdl_sub/prebuilt_presets/helpers/url.yaml +++ b/src/ytdl_sub/prebuilt_presets/helpers/url.yaml @@ -25,109 +25,209 @@ presets: uid: "avatar_uncropped" - name: "{banner_uncropped_thumbnail_file_name}" uid: "banner_uncropped" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url2}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url3}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url4}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url5}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url6}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url7}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url8}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url9}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url10}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url11}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url12}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url13}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url14}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url15}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url16}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url17}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url18}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url19}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url20}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url21}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url22}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url23}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url24}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url25}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url26}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url27}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url28}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url29}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url30}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url31}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url32}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url33}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url34}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url35}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url36}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url37}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url38}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url39}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url40}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url41}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url42}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url43}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url44}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url45}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url46}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url47}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url48}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url49}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url50}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url51}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url52}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url53}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url54}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url55}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url56}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url57}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url58}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url59}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url60}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url61}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url62}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url63}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url64}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url65}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url66}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url67}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url68}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url69}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url70}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url71}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url72}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url73}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url74}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url75}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url76}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url77}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url78}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url79}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url80}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url81}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url82}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url83}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url84}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url85}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url86}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url87}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url88}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url89}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url90}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url91}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url92}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url93}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url94}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url95}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url96}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url97}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url98}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url99}" + include_sibling_metadata: "{include_sibling_metadata}" - url: "{url100}" - + include_sibling_metadata: "{include_sibling_metadata}" overrides: avatar_uncropped_thumbnail_file_name: "" banner_uncropped_thumbnail_file_name: "" + include_sibling_metadata: False subscription_array: "{ [] }" subscription_value: "" diff --git a/src/ytdl_sub/prebuilt_presets/music/albums_from_chapters.yaml b/src/ytdl_sub/prebuilt_presets/music/albums_from_chapters.yaml index 0c629516..6c9b82ee 100644 --- a/src/ytdl_sub/prebuilt_presets/music/albums_from_chapters.yaml +++ b/src/ytdl_sub/prebuilt_presets/music/albums_from_chapters.yaml @@ -2,7 +2,9 @@ presets: # assumes that each chapter in an entry is a song _albums_from_chapters: - preset: "Single" + preset: + - "_music_base" + - "_multi_url" chapters: embed_chapters: True @@ -10,6 +12,8 @@ presets: when_no_chapters: "pass" overrides: + include_sibling_metadata: False + track_title: "{chapter_title}" # Chapter title is the track title track_album: "{title}" # Video's title is the album title track_number: "{chapter_index}" diff --git a/src/ytdl_sub/prebuilt_presets/music/albums_from_playlists.yaml b/src/ytdl_sub/prebuilt_presets/music/albums_from_playlists.yaml index d5f2cdad..22839279 100644 --- a/src/ytdl_sub/prebuilt_presets/music/albums_from_playlists.yaml +++ b/src/ytdl_sub/prebuilt_presets/music/albums_from_playlists.yaml @@ -4,12 +4,11 @@ presets: _albums_from_playlists: preset: - "_music_base" - - download: - - url: "{url}" - include_sibling_metadata: True + - "_multi_url" overrides: + include_sibling_metadata: True + track_album: "{playlist_title}" track_number: "{playlist_index}" track_number_padded: "{playlist_index_padded}"