Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.
/ youtube-music Public archive
forked from th-ch/youtube-music

YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)

License

Notifications You must be signed in to change notification settings

Sickjuicy/youtube-music

 
 

Repository files navigation

Fork for Fixes and stuff

I made a Fix for the Winodws Scale......

YouTube Music

GitHub release GitHub license eslint code style Build status Known Vulnerabilities GitHub All Releases AUR

Screenshot

Electron wrapper around YouTube Music featuring:

  • Native look & feel, aims at keeping the original interface
  • Framework for custom plugins: change YouTube Music to your needs (style, content, features), enable/disable plugins in one click

Download

You can check out the latest release to quickly find the latest version.

Arch Linux

Install the youtube-music-bin package from the AUR. For AUR installation instructions, take a look at this wiki page.

MacOS

You can install the app using Homebrew:

brew install --cask https://raw.githubusercontent.com/th-ch/youtube-music/master/youtube-music.rb

If you install the app manually and get an error "is damaged and can’t be opened." when launching the app, run the following in the Terminal:

xattr -cr /Applications/YouTube\ Music.app

Windows

You can use the Scoop package manager to install the youtube-music package from the extras bucket.

scoop bucket add extras
scoop install extras/youtube-music

Alternately you can use Winget, Windows 11s official CLI package manager to install the th-ch.YouTubeMusic package.

Note: Microsoft Defender SmartScreen might block the installation since it is from an "unknown publisher". This is also true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same file).

winget install th-ch.YouTubeMusic

How to install without a network connection? (in Windows)

  • Download the *.nsis.7z file for your device architecture in release page.
    • x64 for 64-bit Windows
    • ia32 for 32-bit Windows
    • arm64 for ARM64 Windows
  • Download installer in release page. (*-Setup.exe)
  • Place them in the same directory.
  • Run the installer.

Available plugins:

  • Ad Blocker: Block all ads and tracking out of the box

  • Album Color Theme: Applies a dynamic theme and visual effects based on the album color palette

  • Ambient Mode: Applies a lighting effect by casting gentle colors from the video, into your screen’s background.

  • Audio Compressor: Apply compression to audio (lowers the volume of the loudest parts of the signal and raises the volume of the softest parts)

  • Blur Nav Bar: makes navigation bar transparent and blurry

  • Bypass age restrictions: bypass YouTube's age verification

  • Captions selector: Enable captions

  • Compact sidebar: Always set the sidebar in compact mode

  • Crossfade: Crossfade between songs

  • Disable Autoplay: Makes every song start in "paused" mode

  • Discord: Show your friends what you listen to with Rich Presence

  • Downloader: downloads MP3 directly from the interface (youtube-dl)

  • Exponential Volume: Makes the volume slider exponential so it's easier to select lower volumes.

  • In-App Menu: gives bars a fancy, dark look

    (see this post if you have problem accessing the menu after enabling this plugin and hide-menu option)

  • Last.fm: Scrobbles support

  • Lumia Stream: Adds Lumia Stream support

  • Lyrics Genius: Adds lyrics support for most songs

  • Navigation: Next/Back navigation arrows directly integrated in the interface, like in your favorite browser

  • No Google Login: Remove Google login buttons and links from the interface

  • Notifications: Display a notification when a song starts playing (interactive notifications are available on windows)

  • Picture in picture: allows to switch the app to picture-in-picture mode

  • Playback Speed: Listen fast, listen slow! Adds a slider that controls song speed

  • Precise Volume: Control the volume precisely using mousewheel/hotkeys, with a custom hud and customizable volume steps

  • Quality Changer: Allows changing the video quality with a button on the video overlay

  • Shortcuts: Allows setting global hotkeys for playback (play/pause/next/previous) + disable media osd by overriding media keys + enable Ctrl/CMD + F to search + enable linux mpris support for mediakeys + custom hotkeys for advanced users

  • Skip-Silences - Automatically skip silenced sections

  • SponsorBlock: Automatically Skips non-music parts like intro/outro or parts of music videos where the song isn't playing

  • Taskbar Media Control: Control playback from your Windows taskbar

  • Touchbar: Custom TouchBar layout for macOS

  • Tuna-OBS: Integration with OBS's plugin Tuna

  • Video Toggle: Adds a button to switch between Video/Song mode. can also optionally remove the whole video tab

  • Visualizer: Different music visualizers


  • Auto confirm when paused (Always Enabled): disable the "Continue Watching?" popup that pause music after a certain time

If Hide Menu option is on - you can show the menu with the alt key (or ` [backtick] if using the in-app-menu plugin)

Themes

You can load CSS files to change the look of the application (Options > Visual Tweaks > Themes).

Some predefined themes are available in https://github.com/kerichdev/themes-for-ytmdesktop-player.

Dev

git clone https://github.com/th-ch/youtube-music
cd youtube-music
pnpm install --frozen-lockfile
pnpm start

Build your own plugins

Using plugins, you can:

  • manipulate the app - the BrowserWindow from electron is passed to the plugin handler
  • change the front by manipulating the HTML/CSS

Creating a plugin

Create a folder in plugins/YOUR-PLUGIN-NAME:

  • if you need to manipulate the BrowserWindow, create a file with the following template:
// file: main.ts
export default (win: Electron.BrowserWindow, config: ConfigType<'YOUR-PLUGIN-NAME'>) => {
  // something
};

then, register the plugin in src/index.ts:

import yourPlugin from './plugins/YOUR-PLUGIN-NAME/back';

// ...

const mainPlugins = {
  // ...
  'YOUR-PLUGIN-NAME': yourPlugin,
};
  • if you need to change the front, create a file with the following template:
// file: renderer.ts
export default (config: ConfigType<'YOUR-PLUGIN-NAME'>) => {
  // This function will be called as a preload script
  // So you can use front features like `document.querySelector`
};

then, register the plugin in src/renderer.ts:

import yourPlugin from './plugins/YOUR-PLUGIN-NAME/front';

const rendererPlugins: PluginMapper<'renderer'> = {
  // ...
  'YOUR-PLUGIN-NAME': yourPlugin,
};

Finally, add the plugin to the default config file src/config/default.ts:

export default {
  // ...
  'plugins': {
    // ...
    'YOUR-PLUGIN-NAME': {
      // ...
    },
  },
};

Common use cases

  • injecting custom CSS: create a style.css file in the same folder then:
import path from 'node:path';
import style from './style.css';

// main.ts
export default (win: Electron.BrowserWindow) => {
  injectCSS(win.webContents, style);
};
  • changing the HTML:
// renderer.ts
export default () => {
  // Remove the login button
  document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
};
  • communicating between the front and back: can be done using the ipcMain module from electron. See utils.js file and example in navigation plugin.

Build

  1. Clone the repo
  2. Follow this guide to install pnpm
  3. Run pnpm install --frozen-lockfile to install dependencies
  4. Run pnpm build:OS
  • pnpm dist:win - Windows
  • pnpm dist:linux - Linux
  • pnpm dist:mac - MacOS

Builds the app for macOS, Linux, and Windows, using electron-builder.

Tests

pnpm test

Uses Playwright to test the app.

License

MIT © th-ch

About

YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 90.8%
  • JavaScript 3.1%
  • CSS 3.0%
  • HTML 2.9%
  • Ruby 0.2%