# YouTube Music [![GitHub release](https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&logo=youtube-music)](https://github.com/th-ch/youtube-music/releases/) [![GitHub license](https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/license) [![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js) [![Build status](https://img.shields.io/github/actions/workflow/status/th-ch/youtube-music/build.yml?branch=master&style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/) [![GitHub All Releases](https://img.shields.io/github/downloads/th-ch/youtube-music/total?style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/) [![AUR](https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&style=for-the-badge&logo=youtube-music)](https://aur.archlinux.org/packages/youtube-music-bin) [![Known Vulnerabilities](https://snyk.io/test/github/th-ch/youtube-music/badge.svg)](https://snyk.io/test/github/th-ch/youtube-music)
![Screenshot](/web/screenshot.png "Screenshot")
YouTube Music SVG
Leia em outros idiomas: [🏴 Inglês](../../README.md), [🇰🇷 Coreano](./README-ko.md), [🇫🇷 Francês](./README-fr.md), [🇮🇸 Islandês](./README-is.md), [🇪🇸 Espanhol](./README-es.md), [🇷🇺 Russo](./README-ru.md), [🇺🇦 Ucraniano](./README-uk.md), [🇧🇷 Português](./README-pt.md) **Wrapper do Electron para o YouTube Music com os seguintes recursos:** - Visual e comportamento nativos: Mantém a interface original do YouTube Music. - Estrutura para plugins personalizados: Adapte o YouTube Music às suas necessidades (estilo, conteúdo, funcionalidades). Ative/desative plugins com um clique. ## Imagem de demonstração | Tela do Player (tema de cores do álbum e luz ambiente) | |:---------------------------------------------------------------------------------------------------------:| |![Screenshot1](https://github.com/th-ch/youtube-music/assets/16558115/53efdf73-b8fa-4d7b-a235-b96b91ea77fc)| ## Conteúdo - [Recursos](#recursos) - [Plugins disponíveis](#plugins-disponíveis) - [Tradução](#tradução) - [Download](#download) - [Arch Linux](#arch-linux) - [MacOS](#macos) - [Windows](#windows) - [Como instalar sem conexão à internet? (no Windows)](#como-instalar-sem-conexão-à-internet-no-windows) - [Temas](#temas) - [Dev](#dev) - [Crie seus próprios plugins](#crie-seus-próprios-plugins) - [Criando um plugin](#criando-um-plugin) - [Casos de uso comuns](#casos-de-uso-comuns) - [Compilar](#compilar) - [Prévia de produção](#prévia-de-produção) - [Testes](#testes) - [Licença](#licença) - [Perguntas Frequentes](#perguntas-frequentes) ## Recursos: - **Confirmação automática quando pausado** (Sempre ativado): desativa o popup ["Continuar assistindo?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png) que pausa a música após um certo tempo - E mais... ## Plugins disponíveis: - **Bloqueador de anúncios**: Bloqueia todos os anúncios e rastreamentos automaticamente - **Ações de Álbum**: Adiciona botões para Remover dislike, Dar dislike, Curtir e Remover curtida em todas as músicas de uma playlist ou álbum - **Tema de cores do álbum**: Aplica um tema dinâmico e efeitos visuais baseados na paleta de cores do álbum - **Modo ambiente**: Cria um efeito de iluminação projetando cores suaves do vídeo no fundo da tela - **Compressor de áudio**: Aplica compressão ao áudio (reduz o volume das partes mais altas e aumenta o das mais baixas) - **Barra de navegação desfocada**: Torna a barra de navegação transparente e desfocada - **Contornar restrições de idade**: Ignora a verificação de idade do YouTube - **Seletor de legendas**: Ativa legendas - **Barra lateral compacta**: Mantém a barra lateral sempre no modo compacto - **Crossfade**: Transição suave entre músicas - **Desativar reprodução automática**: Faz com que todas as músicas iniciem no modo "pausado" - **[Discord](https://discord.com/) Rich Presence**: Mostra para seus amigos o que você está ouvindo com [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png) - **Downloader**: Baixa MP3 [diretamente da interface](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl) - **Equalizador**: Adiciona filtros para aumentar ou reduzir faixas específicas de frequência (ex: reforço de graves) - **Volume exponencial**: Torna o controle de volume [exponencial](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) para facilitar a seleção de volumes mais baixos - **Menu integrado**: [Dá às barras um visual elegante e escuro](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png) > (veja [este post](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) se tiver problemas para acessar o menu após ativar este plugin e a opção de ocultar menu) - **Scrobbler**: Adiciona suporte para scrobbling no [Last.fm](https://www.last.fm/) e [ListenBrainz](https://listenbrainz.org/) - **Lumia Stream**: Adiciona suporte para [Lumia Stream](https://lumiastream.com/) - **Letras Genius**: Adiciona suporte a letras para a maioria das músicas - **Música Juntos**: Compartilhe uma playlist com outros. Quando o host toca uma música, todos ouvem a mesma música - **Navegação**: Botões de avançar/voltar integrados diretamente na interface, como no seu navegador favorito - **Sem login do Google**: Remove botões e links de login do Google da interface - **Notificações**: Exibe uma notificação quando uma música começa a tocar ([notificações interativas](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png) disponíveis no Windows) - **Picture-in-picture**: Permite alternar o aplicativo para o modo picture-in-picture - **Velocidade de reprodução**: Ouça rápido, ouça devagar! [Adiciona um controle deslizante para ajustar a velocidade](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png) - **Volume preciso**: Controle o volume com precisão usando roda do mouse/atalhos, com HUD personalizado e níveis de volume customizáveis - **Atalhos (& MPRIS)**: Permite configurar teclas de atalho globais para controle (play/pause/próxima/anterior) + desativa [OSD de mídia](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png) sobrescrevendo teclas de mídia + ativa Ctrl/CMD + F para busca + suporte a MPRIS no Linux para teclas de mídia + [atalhos personalizados](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50) para [usuários avançados](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902) - **Pular músicas marcadas com "não gostei"**: Ignora automaticamente músicas que você deu dislike - **Pular silêncios**: Ignora automaticamente seções silenciosas - [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Ignora automaticamente partes não musicais como introduções/outros ou partes de clipes onde a música não está tocando - **Letras sincronizadas**: Fornece letras sincronizadas para músicas, usando serviços como [LRClib](https://lrclib.net) - **Controle de mídia na barra de tarefas**: Controle a reprodução pela [barra de tarefas do Windows](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png) - **TouchBar**: Layout personalizado para a TouchBar do macOS - **Tuna OBS**: Integração com o plugin [Tuna](https://obsproject.com/forum/resources/tuna.843/) do [OBS](https://obsproject.com/) - **Seletor de qualidade de vídeo**: Permite alterar a qualidade do vídeo com um [botão](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) na sobreposição do vídeo - **Alternar vídeo**: Adiciona um [botão](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) para alternar entre modos Vídeo/Música. Pode também remover completamente a aba de vídeo - **Visualizador**: Diferentes visualizadores de música ## Tradução Você pode ajudar com as traduções no [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/). status da tradução status da tradução 2 ## Download Você pode verificar o [último lançamento](https://github.com/th-ch/youtube-music/releases/latest) para encontrar rapidamente a versão mais recente. ### Arch Linux Instale o pacote [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) do AUR. Para instruções de instalação do AUR, consulte esta [página da wiki](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages). ### macOS Você pode instalar o aplicativo usando Homebrew (veja a [definição do cask](https://github.com/th-ch/homebrew-youtube-music)): ```bash brew install th-ch/youtube-music/youtube-music ``` Se você instalar o aplicativo manualmente e receber o erro "is damaged and can’t be opened." ao abrir o app, execute o seguinte no Terminal: ```bash /usr/bin/xattr -cr /Applications/YouTube\ Music.app ``` ### Windows Você pode usar o [gerenciador de pacotes Scoop](https://scoop.sh) para instalar o pacote `youtube-music` do [`extras bucket`](https://github.com/ScoopInstaller/Extras). ```bash scoop bucket add extras scoop install extras/youtube-music ``` Alternativamente, você pode usar o [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), o gerenciador de pacotes CLI oficial do Windows 11, para instalar o pacote `th-ch.YouTubeMusic`. *Nota: O Microsoft Defender SmartScreen pode bloquear a instalação por ser de um "publicador desconhecido". Isso também acontece na instalação manual ao tentar executar o arquivo .exe após download manual aqui no GitHub (mesmo arquivo).* ```bash winget install th-ch.YouTubeMusic ``` #### Como instalar sem conexão à internet? (no Windows) - Baixe o arquivo `*.nsis.7z` para _sua arquitetura de dispositivo_ na [página de lançamentos](https://github.com/th-ch/youtube-music/releases/latest). - `x64` para Windows 64-bit - `ia32` para Windows 32-bit - `arm64` para Windows ARM64 - Baixe o instalador na página de lançamentos (`*-Setup.exe`) - Coloque os arquivos no **mesmo diretório** - Execute o instalador ## Temas Você pode carregar arquivos CSS para alterar a aparência do aplicativo (Opções > Ajustes Visuais > Temas). Alguns temas pré-definidos estão disponíveis em https://github.com/kerichdev/themes-for-ytmdesktop-player. ## Dev ```bash git clone https://github.com/th-ch/youtube-music cd youtube-music pnpm install --frozen-lockfile pnpm dev ``` ## Crie seus próprios plugins Usando plugins, você pode: - Manipular o aplicativo - o `BrowserWindow` do electron é passado para o manipulador de plugins - Alterar a interface manipulando o HTML/CSS ### Criando um plugin Crie uma pasta em `src/plugins/NOMBRE-DEL-PLUGIN`: - `index.ts`: o arquivo principal do plugin ```typescript import style from './style.css?inline'; // importar estilo como inline import { createPlugin } from '@/utils'; export default createPlugin({ name: "Plugin Label", restartNeeded: true, // se true, o ytmusic mostra diálogo de reinício config: { enabled: false, }, // sua configuração personalizada stylesheets: [style], // seu estilo personalizado menu: async ({ getConfig, setConfig }) => { // Todos os métodos *Config são wrappers Promise const config = await getConfig(); return [ { label: "menu", submenu: [1, 2, 3].map((value) => ({ label: `value ${value}`, type: "radio", checked: config.value === value, click() { setConfig({ value }); }, })), }, ]; }, backend: { start({ window, ipc }) { window.maximize(); // você pode se comunicar com o plugin renderer ipc.handle("some-event", () => { return "hello"; }); }, // disparado quando a configuração muda onConfigChange(newConfig) { /* ... */ }, // disparado quando o plugin é desativado stop(context) { /* ... */ }, }, renderer: { async start(context) { console.log(await context.ipc.invoke("some-event")); }, // Hook disponível apenas no renderer onPlayerApiReady(api: YoutubePlayer, context: RendererContext) { // establecer la configuración del plugin fácilmente context.setConfig({ myConfig: api.getVolume() }); }, onConfigChange(newConfig) { /* ... */ }, stop(_context) { /* ... */ }, }, preload: { async start({ getConfig }) { const config = await getConfig(); }, onConfigChange(newConfig) {}, stop(_context) {}, }, }); ``` ### Casos de uso comuns - **Injetar CSS personalizado**: crie um arquivo `style.css` na mesma pasta e então: ```typescript // index.ts import style from './style.css?inline'; // importa estilo como inline import { createPlugin } from '@/utils'; export default createPlugin({ name: 'Plugin Label', restartNeeded: true, // se true, o ytmusic mostrará um diálogo de reinício config: { enabled: false, }, // sua configuração personalizada stylesheets: [style], // seu estilo personalizado renderer() {} // define o hook renderer }); ``` - Se quiser alterar o HTML: ```typescript import { createPlugin } from '@/utils'; export default createPlugin({ name: 'Plugin Label', restartNeeded: true, // se true, o ytmusic mostrará o diálogo de reinício config: { enabled: false, }, // sua configuração personalizada renderer() { // Remove o botão de login document.querySelector(".sign-in-link.ytmusic-nav-bar").remove(); } // define o hook renderer }); ``` - Comunicação entre front-end e back-end: pode ser feita usando o módulo ipcMain do Electron. Consulte o arquivo `index.ts` e o exemplo no plugin `sponsorblock`. ## Compilar 1. Clone o repositório 2. Siga [este guia](https://pnpm.io/installation) para instalar o `pnpm` 3. Execute `pnpm install --frozen-lockfile` para instalar as dependências 4. Execute `pnpm build:OS` - `pnpm dist:win` - Windows - `pnpm dist:linux` - Linux (amd64) - `pnpm dist:linux:deb-arm64` - Linux (arm64 para Debian) - `pnpm dist:linux:rpm-arm64` - Linux (arm64 para Fedora) - `pnpm dist:mac` - macOS (amd64) - `pnpm dist:mac:arm64` - macOS (arm64) Compila o aplicativo para macOS, Linux e Windows, usando [electron-builder](https://github.com/electron-userland/electron-builder). ## Prévia de Produção ```bash pnpm start ``` ## Testes ```bash pnpm test ``` Utiliza [Playwright](https://playwright.dev/) para testar o aplicativo. ## Licença MIT © [th-ch](https://github.com/th-ch/youtube-music) ## Perguntas Frequentes ### Por que o menu do aplicativo não aparece? Se a opção `Ocultar menu` estiver ativada - você pode exibir o menu com a tecla alt (ou \` [acento grave] se estiver usando o plugin in-app-menu)