Project Icon

youtube-music

开源YouTube Music桌面应用 支持丰富插件定制

youtube-music是一款基于Electron的开源YouTube Music桌面应用。它保留了原生界面,同时提供丰富的插件框架,支持自定义样式、内容和功能。主要特性包括广告拦截、歌曲下载、歌词显示和音频压缩等。该应用支持Windows、macOS和Linux系统,提供便捷安装方式。开发者可以轻松构建自定义插件扩展功能。

YouTube Music

GitHub 发布 GitHub 许可证 eslint 代码风格 构建状态 GitHub 所有发布版本 AUR 已知漏洞

截图

其他语言版本: 🇰🇷, 🇮🇸, 🇨🇱 🇪🇸, 🇷🇺

YouTube Music 的 Electron 封装版,具有以下特点:

  • 原生外观和感觉,旨在保持原始界面
  • 自定义插件框架:根据您的需求更改 YouTube Music(样式、内容、功能),一键启用/禁用插件

演示图片

播放器界面(专辑颜色主题和环境光)
截图1

目录

功能:

  • 暂停时自动确认(始终启用):禁用"继续观看?"弹窗,该弹窗会在一定时间后暂停音乐

  • 以及更多...

可用插件:

  • 广告拦截器:默认拦截所有广告和跟踪

  • 专辑操作:添加取消不喜欢、不喜欢、喜欢和取消喜欢按钮,以应用于播放列表或专辑中的所有歌曲

  • 专辑颜色主题:根据专辑的颜色调色板应用动态主题和视觉效果

  • 环境模式:通过将视频中的柔和颜色投射到屏幕背景,应用照明效果

  • 音频压缩器:对音频应用压缩(降低信号最响亮部分的音量,提高最柔和部分的音量)

  • 模糊导航栏:使导航栏透明和模糊

  • 绕过年龄限制:绕过 YouTube 的年龄验证

  • 字幕选择器:启用字幕

  • 紧凑侧边栏:始终将侧边栏设置为紧凑模式

  • 交叉淡入淡出:在歌曲之间交叉淡入淡出

  • 禁用自动播放:使每首歌开始时处于"暂停"模式

  • Discord 丰富状态:通过丰富状态向您的朋友展示您正在听的内容

  • 下载器直接从界面下载 MP3 (youtube-dl)

  • 指数音量:使音量滑块呈指数变化,更容易选择较低音量

  • 应用内菜单为菜单栏赋予精美的暗色外观

    (如果启用此插件和隐藏菜单选项后无法访问菜单,请参阅此帖子)

  • Scrobbler:为 Last.fmListenBrainz 添加 scrobbling 支持

  • Lumia Stream:添加 Lumia Stream 支持

  • Genius 歌词:为大多数歌曲添加歌词支持

  • Music Together:与他人共享播放列表。当主持人播放歌曲时,其他人也会听到相同的歌曲

  • 导航:直接集成在界面中的前进/后退导航箭头,就像您喜欢的浏览器一样

  • 无 Google 登录:从界面中移除 Google 登录按钮和链接

  • 通知:当歌曲开始播放时显示通知(Windows 上可使用交互式通知

  • 画中画:允许将应用切换到画中画模式

  • 播放速度:快速聆听,慢速聆听!添加一个控制歌曲速度的滑块

  • 精确音量:使用鼠标滚轮/热键精确控制音量,带有自定义 HUD 和可自定义的音量步长

  • 快捷键(和 MPRIS):允许为播放设置全局热键(播放/暂停/下一首/上一首)+ 通过覆盖媒体键禁用媒体 OSD + 启用 Ctrl/CMD + F 搜索 + 启用 Linux MPRIS 支持媒体键 + 为高级用户提供自定义热键

  • 跳过不喜欢的歌曲:跳过不喜欢的歌曲

  • 跳过静音部分:自动跳过静音部分

  • SponsorBlock:自动跳过非音乐部分,如开场/结尾或音乐视频中没有播放歌曲的部分

  • 同步歌词:为歌曲提供同步歌词,使用如 LRClib 等提供商。

  • 任务栏媒体控制:从 Windows 任务栏控制播放

  • TouchBar:macOS 的自定义 TouchBar 布局

  • Tuna OBS:与 OBS 的插件 Tuna 集成

  • 视频质量更改器:允许通过视频叠加层上的按钮更改视频质量

  • 视频切换:添加一个按钮在视频/歌曲模式之间切换。还可以选择完全移除视频标签

  • 可视化器:不同的音乐可视化器

翻译

您可以在 Hosted Weblate 上帮助进行翻译。

翻译状态 翻译状态 2

下载

您可以查看最新发布版本以快速找到最新版本。

Arch Linux

从 AUR 安装 youtube-music-bin 包。有关 AUR 安装说明,请查看此维基页面

macOS

您可以使用 Homebrew 安装应用(参见 cask 定义):

brew install th-ch/youtube-music/youtube-music

如果您手动安装应用并在启动时遇到"已损坏且无法打开"的错误,请在终端中运行以下命令:

xattr -cr /Applications/YouTube\ Music.app

Windows

您可以使用 Scoop 包管理器extras 存储桶安装 youtube-music 包。

scoop bucket add extras
scoop install extras/youtube-music

或者,您可以使用 Winget,Windows 11 的官方 CLI 包管理器来安装 th-ch.YouTubeMusic 包。

注意:Microsoft Defender SmartScreen 可能会阻止安装,因为它来自"未知发布者"。这对于手动安装也是如此,当尝试在这里从 GitHub 手动下载后运行可执行文件(.exe)时也会出现(同一文件)。

winget install th-ch.YouTubeMusic

如何在没有网络连接的情况下安装?(在 Windows 中)

  • 发布页面下载适用于你设备架构的 *.nsis.7z 文件。
    • x64 适用于64位 Windows
    • ia32 适用于32位 Windows
    • arm64 适用于 ARM64 Windows
  • 在发布页面下载安装程序。(*-Setup.exe
  • 将它们放在同一目录下。
  • 运行安装程序。

主题

你可以加载 CSS 文件来改变应用的外观(选项 > 视觉调整 > 主题)。

一些预定义的主题可以在 https://github.com/kerichdev/themes-for-ytmdesktop-player 找到。

开发

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

构建你自己的插件

通过使用插件,你可以:

  • 操作应用 - electron 的 BrowserWindow 被传递给插件处理器
  • 通过操作 HTML/CSS 来改变前端

创建插件

src/plugins/YOUR-PLUGIN-NAME 创建一个文件夹:

  • index.ts:插件的主文件
import style from './style.css?inline'; // 以内联方式导入样式

import { createPlugin } from '@/utils';

export default createPlugin({
  name: '插件标签',
  restartNeeded: true, // 如果值为 true,ytmusic 会显示重启对话框
  config: {
    enabled: false,
  }, // 你的自定义配置
  stylesheets: [style], // 你的自定义样式
  menu: async ({ getConfig, setConfig }) => {
    // 所有 *Config 方法都被包装为 Promise<T>
    const config = await getConfig();
    return [
      {
        label: '菜单',
        submenu: [1, 2, 3].map((value) => ({
          label: `值 ${value}`,
          type: 'radio',
          checked: config.value === value,
          click() {
            setConfig({ value });
          },
        })),
      },
    ];
  },
  backend: {
    start({ window, ipc }) {
      window.maximize();

      // 你可以与渲染器插件通信
      ipc.handle('some-event', () => {
        return 'hello';
      });
    },
    // 当配置改变时触发
    onConfigChange(newConfig) { /* ... */ },
    // 当插件被禁用时触发
    stop(context) { /* ... */ },
  },
  renderer: {
    async start(context) {
      console.log(await context.ipc.invoke('some-event'));
    },
    // 仅渲染器可用的钩子
    onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
      // 轻松设置插件配置
      context.setConfig({ myConfig: api.getVolume() });
    },
    onConfigChange(newConfig) { /* ... */ },
    stop(_context) { /* ... */ },
  },
  preload: {
    async start({ getConfig }) {
      const config = await getConfig();
    },
    onConfigChange(newConfig) {},
    stop(_context) {},
  },
});

常见用例

  • 注入自定义 CSS:在同一文件夹中创建一个 style.css 文件,然后:
// index.ts
import style from './style.css?inline'; // 以内联方式导入样式

import { createPlugin } from '@/utils';

export default createPlugin({
  name: '插件标签',
  restartNeeded: true, // 如果值为 true,ytmusic 会显示重启对话框
  config: {
    enabled: false,
  }, // 你的自定义配置
  stylesheets: [style], // 你的自定义样式
  renderer() {} // 定义渲染器钩子
});
  • 如果你想改变 HTML:
import { createPlugin } from '@/utils';

export default createPlugin({
  name: '插件标签',
  restartNeeded: true, // 如果值为 true,ytmusic 会显示重启对话框
  config: {
    enabled: false,
  }, // 你的自定义配置
  renderer() {
    // 移除登录按钮
    document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
  } // 定义渲染器钩子
});
  • 前后端之间的通信:可以使用 electron 的 ipcMain 模块。参见 index.ts 文件和 sponsorblock 插件中的示例。

构建

  1. 克隆仓库
  2. 按照这个指南安装 pnpm
  3. 运行 pnpm install --frozen-lockfile 安装依赖
  4. 运行 pnpm build:OS
  • pnpm dist:win - Windows
  • pnpm dist:linux - Linux (amd64)
  • pnpm dist:linux:deb-arm64 - Linux (arm64 for Debian)
  • pnpm dist:linux:rpm-arm64 - Linux (arm64 for Fedora)
  • pnpm dist:mac - macOS (amd64)
  • pnpm dist:mac:arm64 - macOS (arm64)

使用 electron-builder 为 macOS、Linux 和 Windows 构建应用。

生产预览

pnpm start

测试

pnpm test

使用 Playwright 测试应用。

许可证

MIT © th-ch

常见问题

为什么应用菜单没有显示?

如果 隐藏菜单 选项开启 - 你可以使用 alt 键显示菜单(或者如果使用 in-app-menu 插件,可以使用 ` [反引号]键)

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号