YT Music Uploader
Download Version 1.8.0 Installer
Application
This is a .Net application written in C# that uploads your personal music library to YouTube. It has a minimalistic UI for basic settings such as:
- Choosing library folders.
- Option to start the application with Windows (will start hidden, accessible via the System Tray):
- Option to throttle the upload speed so it doesn't use all your bandwidth.
Features
- Connect and authenticate with YouTube Music.
- Upload music to YouTube Music.
- Automatic creation of YouTube Music playlists from local .m3u, .m3u8, .wpl, .pls, ,zpl playlist files.
- Delete uploaded music from YouTube Music.
- Delete playlists from YouTube Music.
- Checks YouTube Music to see if the music file has already been uploaded. It will perform this check once per month on all watched library files and is quite dependant on music file meta data being present and accurate.
- Add and remove library watch folders.
- File system watcher to monitor for changes in watched folders.
- Throttle upload bandwidth.
- Start with Windows, minimized to the system tray area.
- Reads music file tags, including cover art thumbnail.
- If not all data is found in the tags of the music file, it will use the MusicBrainz API to look it up (including the cover art thumbail) (Fetching the details is purely for UI purposes. It has now impact of uploading to YouTube and doesn't write the results to the music file).
- Show an upload log dialogue.
- Show an issues log dialogue.
- This application does not send any telemetry data of any kind to its source if the 'Send Diagnostic Data' checkbox is not set'
- Valid music file formats are the same as YouTube Music: .flac, .m4a, .mp3, .oga, .wma
- Valid music playlist file formats are: .m3u, .m3u8, .wpl, .pls, .zpl
- Maximum number of files you can upload to YouTube Music is 100, 000
- Maximum number of playlist items YouTube Music will allow is 5,000
- Maximum file size YouTube Music will allow is 300 MB
- Although you have the ability to delete from YouTube Music within the app, this application is strictly a one way synchronisation app.
Reason for Creation
I used to have Google Play music and liked uploading my own content via its automatic library uploader application; I have a large library of music and you could stream your own uploaded songs from Google Play music without paying for a subscription...
Google Play music is on its way out in December and its replacement, YouTube Music doesn't currently have a library watcher application. You can only drag and drop manually into the browser for a limited number of songs... So, I decided to create one.
I got a subscription in the end, so some might consider this pointless in the world of streaming anything you want these days... So I suppose the only real benefit is the ability to:
- Upload songs that aren't on YouTube music.
- Backup your songs (you can't download them again from YouTube music, but you can use Google Takeout to get them).
How it Works
Since, as far as I'm aware, YouTube Music doesn't have an official API to utilise. Therefore this application mimics the HTTP request and responses from the YouTube music site uses (F12 in Firefox is your friend).
YouTube Music uses an authentication cookie, and an authentication header consisting of a SAPISID hash from the cookie itself. Therefore, this application needs a browser so you can sign into YouTube in order to retrieve said cookie:
Technology
- .Net 4.7.2
- WinForms
- SQLite
IDE / Extensions
- Microsoft Visual Studio 2019
- Microsoft Visual Studio Installer Project
Libraries
- Brotli.Net (Decompress Google HTTP resonse body)
- xxHash - Fast file hash generator
- Dapper
- Metro Framework (UI Styling)
- Ookii Dialogues
- MusicBrainz API - Zastai
- MusicBrainz CoverArt - Zastai
- MusicBrainz API implementation
- TagLibSharp - Read music file tags
Tools
Special Thanks
- sigma67 - Who created a Python YouTube Music API that I could reference. sigma67: Github.
- wilsone8 - Who created a very fast Windows directory enumerator.
- Dave Thomas - Who worked out how to get the SAPISID hash from the the YouTube Music authentication cookie on a post on StackOverflow.
- 0xDEADBEEF - Who made a simple class to bandwidth throttle a byte stream on a post on StackOverflow.
- avatar29A - For the MusicBrainz .Net API implementation.
- DjSt3rios - For some WebView2 insight.
- tmk907 - Who created a very good, easy to use, multi-type playlist reader. tmk907: Github.
Thanks for the Coffee
- EdgeGuy13
- Mew
- CowtownChina
- Someone
- Someone
- Stephen M
- Brian A
- @NourishedAIO
- nishantranacrm
- Oak