Skip to content

command-line downloader of liked songs at YTMusic

License

Notifications You must be signed in to change notification settings

pepershukov/ytm-yld

Repository files navigation

ytm-yld

ytm-yld is a command-line utility able to get your all-time favourite songs from YouTube Music Your Likes playlist.


Features:

  • Downloading the whole playlist
  • Downloading newly liked songs
  • Deleting songs that have been unliked
  • Downloading playlist metadata as a JSON file
  • Export songs titles/artists/albums into a txt files
  • Downloading only the songs that you want
  • Excluding certain elements of song data from saving, e.g album art

Instructions per version may differ, so if you are looking for instructions on previous versions, look into a specific version tag or commit accordingly.

 

Download

If you have Python installed you can install the dependencies from requirements.txt and run main.py, with the same directory tree. (9.0.0+)

The latest release and its notes can be found here.

OS Download Size SHA256
Windows https://github.com/pepershukov/ytm-yld/releases/download/v9.0.1/ytm-yld_win.exe 11MB (11590006) F5640004B95B217B8FDC39BBAF3B8BEED0892D04942ABB58C0C02D0AF19DC6C2

 

Requirements

Windows 8+ x64

The requirements download are listed in the requirements.txt in addition to Python pip packages needed with this project.

Software requirements

They are only necessary if you are to download music. For other parts of the app, you don't need them.

YouTube.com cookie is not needed anymore as ytmusicapi handles OAuth. (9.0.0+)

 

Usage

usage: ytm-yld [-h] [--version] [--update] [--config [file]] [--headers [file]] [--yt-dlp [file]]
               [--ffmpeg [folder]] [--output [folder]] [--mode [... ...]] [--json [file]] [--no-title [id,id]]
               [--no-artist [id,id]] [--no-album [id,id]] [--no-cover [id,id]] [--no-lyrics [id,id]]

options:
  -h, --help           show this help message and exit
  --version, -v        show program's version number and exit
  --update, -u         check for update and exit

General options:
  --config [file]      absolute path to config file containing sector 'ytm-yld'
  --headers [file]     absolute path to file of YT headers
  --yt-dlp [file]      absolute path to yt-dlp bin
  --ffmpeg [folder]    absolute path to folder of ffmpeg and ffprobe bin
  --output [folder]    absolute path to folder where you want your music synced/download/playlist-to-text file
  --mode [... ...]     mode (t|d|s|m|j) to request for the application to complete
  --json [file]        absolute path to existing JSON playlist metadata file instead of downloading

Music options:
  For these, it can act as a global parameter for all songs if no specific IDs are passed.

  --no-title [id,id]   whether to include the title of the songs or not
  --no-artist [id,id]  whether to include the artist of the songs or not
  --no-album [id,id]   whether to include the album name of the songs or not
  --no-cover [id,id]   whether to include the album art/cover of the songs or not
  --no-lyrics [id,id]  whether to include the lyrics of the songs or not

Make sure that the files within the output folder don't have names like ones used by this app, as they could be deleted.

If you choose not to pass the arguments, you will have to enter the paths upon the application input request.

(1.1.0+) If the paths turn out to be invalid or non-existant, the application will throw out an error (6.0.0+) the application will ask for them recursively until success.

 

Quickstart

Authentication (OAuth) (9.0.0+)

On first run, without the --headers arg, you will be asked to login. After that, the header is saved to the output folder and the headers can be used again until their expiry.

Modes

You will be asked upon starting the application to select the mode of your choice.

There are currently five modes:

  • Playlist-to-text (t)
    • Saves the songs' information to a text file as a table
  • Download (d)
    • Downloads the songs that the application finds not existing locally
  • Sync (s) (2.0.0+)
    • Deletes songs stored locally that have been removed from the playlist
  • JSON (metadata) (j) (3.0.0+)
    • Does not delete the JSON metadata of the playlist - mainly for devs to debug/inspect
  • Manual (m) (4.0.0+)
    • Gives a choice of songs to download to the user - therefore you have to input songs you want to download manually

Config

You can pass the config file under the --config argument.

  • The application uses an .ini-like format
  • All the variables regarding the application have to be under sector ytm-yld
    • The application will throw an error and exit if this fails
  • The values of the variables must not be empty
  • Not all variables have to be passed
    • You still can pass the arguments if your need, straight to the executable

Here is an example of a full config file:

[ytm-yld]
ffmpeg = absolute/path/to/ffmpeg
yt-dlp = absolute/path/to/yt_dlp.exe
headers = absolute/path/to/headers.json
output = absolute/path/to/output
mode = tdsjm
json = absolute/path/to/songs.json

# These options have two ways
# 1. Selecting 'true' - choosing it globally for all songs
# 2. Selecting IDs in a list - MUST put DOUBLE SPEECH-MARKS!!
no-title = ["1-iKwZKc7Ok"]
no-artist = ["1-iKwZKc7Ok", "FXovf5dsRTw"]
no-album = true
no-cover = TRUE
no-lyrics = True