Skip to content

4. Enhancing Your First Config

Jesse Bannon edited this page Aug 4, 2022 · 35 revisions

So far, we have our first config:

configuration:
  working_directory: '/tmp/ytdl-sub-downloads'

presets:
  yt_video:
    youtube:
      download_strategy: "video"

    output_options:
      output_directory: "/config/first_config/output_videos"
      file_name: "{upload_date_standardized}.{title_sanitized}.{ext}"
      thumbnail_name: "{upload_date_standardized}.{title_sanitized}.{thumbnail_ext}"

Now that you know the basics of a ytdl-sub config, let's learn other useful features to enhance it.

In this example, we will modify our config to be able to download from YouTube videos, playlists, or channels, and place the files in organized folders depending on the video type. The types could be concerts, music_videos, tutorials, or the channel name itself.

Override Variables

We know that source variables contain values that are derived from entries. Override variables are user-defined variables that can contain both hard-coded strings, source variables, and other override variables.

Let's create two override variables - one that simplifies our file and thumbnail name, and another to define our video type. For now, set the video_type variable be to the channel's name. We will see why later.

    overrides:
      video_name: "{upload_date_standardized}.{title_sanitized}"
      video_type: "{channel}"

Since override variables are often used as file or directory names, additional sanitized override variables are automatically created which are safe to use for file paths. Let's now modify our output options to have the entry files save in the video_type_sanitized directory and use our shortened video_name variable.

    output_options:
      output_directory: "/config/first_config/output_videos"
      file_name: "{video_type_sanitized}/{video_name}.{ext}"
      thumbnail_name: "{video_type_sanitized}/{video_name}.{thumbnail_ext}"

Overrides with Overrides

Specifying {video_type_sanitized}/{video_name} twice is redundant. Let's make another override containing our original overrides to simplify this even further.

    overrides:
      video_name: "{upload_date_standardized}.{title_sanitized}"
      video_type: "{channel}"
      video_path: "{video_type_sanitized}/{video_name}"

Now we can specify our output options as:

    output_options:
      output_directory: "/config/first_config/output_videos"
      file_name: "{video_path}.{ext}"
      thumbnail_name: "{video_path}.{thumbnail_ext}"

Preset Inheritance

We saw with subscriptions that you can specify a preset field, which will inherit all fields from the specified preset via merging values. We can specify this in presets themselves, allowing preset inheritance.

We will use preset inheritance to create two new presets to download YouTube playlists and channels using our yt_video preset.

configuration:
  working_directory: '/tmp/ytdl-sub-downloads'

presets:
  yt_video:
    youtube:
      download_strategy: "video"

    output_options:
      output_directory: "/config/first_config/output_videos"
      file_name: "{video_path}.{ext}"
      thumbnail_name: "{video_path}.{thumbnail_ext}"

    overrides:
      video_name: "{upload_date_standardized}.{title_sanitized}"
      video_type: "{channel}"
      video_path: "{video_type_sanitized}/{video_name}"

  yt_playlist:
    preset: "yt_video"
    youtube:
      download_strategy: "playlist"

  yt_channel:
    preset: "yt_playlist"
    youtube:
      download_strategy: "channel"

Our config now has the following inheritance hierarchy:

yt_channel <--inherits-- yt_playlist <--inherits-- yt_video

Each new preset overrides its parent's youtube.download_strategy field with its own.

Subscription Overrides

Here is our original subscription.yaml file:

rick_a:
  preset: "yt_video"
  youtube:
    video_url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

A lot has changed since we first made this. If we dry run this with our new config, we'll see the following:

ytdl-sub --dry-run sub
Files created in '/config/first_config/output_videos'
----------------------------------------
Rick Astley/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).jpg
Rick Astley/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).mp4

Notice that the video would now save to the Rick Astley/ directory. This is because our video_type variable is set to {channel}.

Let's store this in a Music Video/ directory instead. We can do this by overriding overrides.video_type in our subscription:

rick_a:
  preset: "yt_video"
  youtube:
    video_url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  overrides:
    video_type: "Music Videos"

If we dry run again, we will see:

ytdl-sub --dry-run sub
Files created in '/config/first_config/output_videos'
----------------------------------------
Music Videos/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).jpg
Music Videos/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).mp4

Looks good! But again, since this is a single video, we should use the dl equivalent command:

ytdl-sub --dry-run dl --preset yt_video --youtube.video_url "https://www.youtube.com/watch?v=dQw4w9WgXcQ" --overrides.video_type "Music Videos"

dl aliases

The above dl command is extremely long and not easy to remember. We can simplify it by creating dl aliases in our config.yaml:

configuration:
  working_directory: '/tmp/ytdl-sub-downloads'
  dl_aliases:
    video: "--preset yt_video"
    video-url: "--youtube.video_url"
    type: "--overrides.video_type"

As the name suggests, this creates aliases that will be resolved at run time. We can now specify the above command as:

ytdl-sub --dry-run dl --video --video-url "https://www.youtube.com/watch?v=dQw4w9WgXcQ" --type "Music Video"

We could take it a step further and make a more encapsulating dl alias:

configuration:
  working_directory: '/tmp/ytdl-sub-downloads'
  dl_aliases:
    video: "--preset yt_video"
    video-url: "--youtube.video_url"
    type: "--overrides.video_type"
    single-music-video: "--preset yt_video --overrides.video_type 'Music Video' --youtube.video_url"

(At this time, nested dl_aliases are not supported. An issue is made here: https://github.com/jmbannon/ytdl-sub/issues/141) Now we can specify the above command as:

ytdl-sub --dry-run dl --single-music-video "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

Many Subscriptions

Now we can leverage this logic we've created in our config to begin downloading any video type whether it is a video, playlist, or channel in our subscriptions.yaml file. Let's modify our subscription file to download Rick's official music video playlist:

rick_a_music_video_playlist:
  preset: "yt_playlist"
  youtube:
    playlist_url: "https://www.youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc"
  overrides:
    video_type: "Music Videos"

If we dry run, we'll see:

Files created in '/config/first_config/output_videos'
----------------------------------------
Music Videos/2009-10-25.Rick Astley - Cry for Help (Official Music Video).jpg
Music Videos/2009-10-25.Rick Astley - Cry for Help (Official Music Video).webm
Music Videos/2009-10-25.Rick Astley - Hold Me In Your Arms (Official Music Video).jpg
Music Videos/2009-10-25.Rick Astley - Hold Me In Your Arms (Official Music Video).webm
Music Videos/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).jpg
Music Videos/2009-10-25.Rick Astley - Never Gonna Give You Up (Official Music Video).mp4
Music Videos/2009-10-25.Rick Astley - Together Forever (Official Video) [Remastered in 4K].jpg
Music Videos/2009-10-25.Rick Astley - Together Forever (Official Video) [Remastered in 4K].webm
Music Videos/2009-10-25.Rick Astley - Whenever You Need Somebody (Official Music Video).jpg
Music Videos/2009-10-25.Rick Astley - Whenever You Need Somebody (Official Music Video).webm
Music Videos/2012-03-14.Rick Astley - Giving Up On Love (Official Video).jpg
Music Videos/2012-03-14.Rick Astley - Giving Up On Love (Official Video).webm
Music Videos/2012-03-14.Rick Astley - Hopelessly (Official Music Video).jpg
Music Videos/2012-03-14.Rick Astley - Hopelessly (Official Music Video).webm
Music Videos/2012-03-14.Rick Astley - She Wants To Dance With Me (Official Music Video).jpg
Music Videos/2012-03-14.Rick Astley - She Wants To Dance With Me (Official Music Video).webm
Music Videos/2012-03-14.Rick Astley - Take Me to Your Heart (Official Music Video).jpg
Music Videos/2012-03-14.Rick Astley - Take Me to Your Heart (Official Music Video).webm
Music Videos/2013-08-22.Rick Astley - Never Gonna Give You Up (Live) (Top Of The Pops 1987).jpg
Music Videos/2013-08-22.Rick Astley - Never Gonna Give You Up (Live) (Top Of The Pops 1987).webm
Music Videos/2015-02-01.Rick Astley - Lights Out (Official Music Video).jpg
Music Videos/2015-02-01.Rick Astley - Lights Out (Official Music Video).webm
Music Videos/2016-04-06.Rick Astley - Keep Singing (Official Music Video).jpg
Music Videos/2016-04-06.Rick Astley - Keep Singing (Official Music Video).webm
Music Videos/2016-06-09.Rick Astley - Angels On My Side (Official Music Video).jpg
Music Videos/2016-06-09.Rick Astley - Angels On My Side (Official Music Video).webm
Music Videos/2016-07-06.Rick Astley - Never Gonna Give You Up (Live) (The Roxy 1987).jpg
Music Videos/2016-07-06.Rick Astley - Never Gonna Give You Up (Live) (The Roxy 1987).webm
Music Videos/2016-07-06.Rick Astley - Whenever You Need Somebody (Live) (The Roxy 1987).jpg
Music Videos/2016-07-06.Rick Astley - Whenever You Need Somebody (Live) (The Roxy 1987).webm
Music Videos/2016-09-07.Rick Astley - Dance (Official Video).jpg
Music Videos/2016-09-07.Rick Astley - Dance (Official Video).webm
Music Videos/2016-11-10.Rick Astley - Pray With Me (Official Music Video).jpg
Music Videos/2016-11-10.Rick Astley - Pray With Me (Official Music Video).webm
Music Videos/2017-06-20.Rick Astley - This Old House (Official Music Video).jpg
Music Videos/2017-06-20.Rick Astley - This Old House (Official Music Video).webm
Music Videos/2018-03-09.Rick Astley - Walk Like A Panther (Official Music Video).jpg
Music Videos/2018-03-09.Rick Astley - Walk Like A Panther (Official Music Video).webm
Music Videos/2018-07-05.Rick Astley - Beautiful Life (Official Music Video).jpg
Music Videos/2018-07-05.Rick Astley - Beautiful Life (Official Music Video).webm
Music Videos/2018-09-13.Rick Astley - Try (Official Music Video).jpg
Music Videos/2018-09-13.Rick Astley - Try (Official Music Video).webm
Music Videos/2018-11-09.Rick Astley - She Makes Me (Official Music Video).jpg
Music Videos/2018-11-09.Rick Astley - She Makes Me (Official Music Video).webm
Music Videos/2019-05-31.Rick Astley - Try (Champions League Tribute Version).jpg
Music Videos/2019-05-31.Rick Astley - Try (Champions League Tribute Version).webm
Music Videos/2019-06-06.Rick Astley - Giant (Official Audio).jpg
Music Videos/2019-06-06.Rick Astley - Giant (Official Audio).webm
Music Videos/2019-06-19.Rick Astley - Giant (Tour Video).jpg
Music Videos/2019-06-19.Rick Astley - Giant (Tour Video).webm
Music Videos/2019-10-30.Rick Astley - Every One of Us (Rehearsal Video).jpg
Music Videos/2019-10-30.Rick Astley - Every One of Us (Rehearsal Video).webm
Music Videos/2019-11-19.Rick Astley - It Would Take a Strong Strong Man (Official HD Video).jpg
Music Videos/2019-11-19.Rick Astley - It Would Take a Strong Strong Man (Official HD Video).webm
Music Videos/2019-11-21.Rick Astley - Move Right Out (UK Version) [Official HD Video].jpg
Music Videos/2019-11-21.Rick Astley - Move Right Out (UK Version) [Official HD Video].webm
Music Videos/2019-11-28.Rick Astley - The Ones You Love (Official HD Video).jpg
Music Videos/2019-11-28.Rick Astley - The Ones You Love (Official HD Video).webm
Music Videos/2019-12-12.Rick Astley - Never Gonna Give You Up (Pianoforte) (Performance).jpg
Music Videos/2019-12-12.Rick Astley - Never Gonna Give You Up (Pianoforte) (Performance).webm
Music Videos/2020-10-15.Rick Astley ft.The Unsung Heroes - Every One of Us (Heroes Edit) (Official Music Video).jpg
Music Videos/2020-10-15.Rick Astley ft.The Unsung Heroes - Every One of Us (Heroes Edit) (Official Music Video).webm
Music Videos/2020-10-23.Rick Astley ft.The Unsung Heroes - Every One of Us (Lyric Video).jpg
Music Videos/2020-10-23.Rick Astley ft.The Unsung Heroes - Every One of Us (Lyric Video).webm
Music Videos/2020-11-30.Rick Astley - Love This Christmas (Lyric Video).jpg
Music Videos/2020-11-30.Rick Astley - Love This Christmas (Lyric Video).webm
Music Videos/2020-12-10.Rick Astley - Love This Christmas (Official Music Video).jpg
Music Videos/2020-12-10.Rick Astley - Love This Christmas (Official Music Video).webm
Music Videos/2021-04-08.Rick Astley - Unwanted (Official Song from the Podcast) (Lyric Video).jpg
Music Videos/2021-04-08.Rick Astley - Unwanted (Official Song from the Podcast) (Lyric Video).webm

That is a lot of Rick Astley! And that is just a single playlist, imagine if we downloaded his entire channel.