Skip to content
 
 

Repository files navigation

Go Music DL

Music Downloader Icon

Go Music DL 是一个音乐搜索与下载工具,支持 Web 界面TUI 终端桌面应用 三种使用模式。除了单曲搜索与下载外,还支持 歌单搜索 / 解析专辑搜索 / 解析、整单 / 整专曲目查看与批量处理。你可以在浏览器试听,也可以在终端里批量下载,或使用原生桌面应用享受最佳体验。

🚀 快速开始

桌面应用 (推荐)

最简单的使用方式,下载即用:

  1. Releases 下载 music-dl-desktop.exe
  2. 解压,双击运行
  3. 享受原生桌面体验!

Web 模式

./music-dl web

TUI 模式

./music-dl -k "搜索关键词"

Web UI 1 Web UI 2

TUI 1 TUI 2

主要功能

  • 多模式支持: Web 界面、TUI 终端、桌面应用
  • 本地自制歌单: 支持新建本地收藏夹,随时收藏、管理心仪歌曲,数据持久化不丢失
  • 无损音乐支持: 支持网易云、QQ 音乐、Bilibili 的 FLAC 无损音乐下载
  • 多平台聚合搜索,支持单曲 / 歌单 / 专辑
  • 试听、歌词、封面下载
  • Range 探测:显示大小与码率
  • 汽水音乐等加密音频解密
  • 过滤需要付费的资源
  • 桌面应用特性: 原生窗口、自动服务启动、智能缓存管理

歌单 / 专辑支持

  • Web: 支持单曲、歌单、专辑三种搜索类型切换,可直接查看歌单 / 专辑曲目列表
  • 链接解析: 支持直接粘贴歌单链接或专辑链接,自动识别来源并进入详情
  • TUI: 输入界面支持在单曲 / 歌单 / 专辑之间切换,适合整单 / 整专处理
  • 详情跳转: Web 歌曲列表支持从歌曲跳转到歌手搜索结果或对应专辑页

Web 下载模式与 FFmpeg

Web 端“设置”里新增了 下载时内嵌元数据(封面/歌词) 开关:

  • 默认关闭(推荐):走流式下载,速度更快,并支持 Range 断点/拖动播放。
  • 开启后:下载时会尝试把封面、歌词写入音频文件(embed)。

⚠️ 开启内嵌元数据依赖 FFmpeg。未安装 FFmpeg 时,会自动跳过内嵌并返回原始音频。

可先验证 FFmpeg 是否可用:

ffmpeg -version

常见安装方式:

  • Windows: winget install Gyan.FFmpeg
  • macOS: brew install ffmpeg
  • Ubuntu/Debian: sudo apt install ffmpeg

新增改动(简要)

  • Web 架构全面重构:前端代码彻底模块化(拆分独立的 JS / CSS / HTML 模板),后端路由按业务域拆分(音乐查询、歌单管理、视频生成),大幅提升代码可维护性。
  • 新增自制歌单功能:Web 端支持本地收藏夹,用户可自由创建、编辑歌单,将不同平台的歌曲聚合收藏。
  • Web 试听按钮支持播放/停止切换,底部增加全局播放与音量控制栏。
  • Web 单曲支持“换源”,按相似度优先、时长接近、可播放验证。
  • 换源自动排除 soda 与 fivesing。
  • TUI 增加 r 键批量换源,并显示换源进度。
  • 增加“每日歌单推荐”,Web 和 TUI 都能看。
  • Web 端支持批量操作:全选、选择无效、批量下载、批量换源。

快速开始

桌面应用模式

桌面应用提供了原生窗口体验,无需打开浏览器即可使用。

特性

  • 🖥️ 原生桌面窗口,无需浏览器
  • 🚀 自动启动内置Web服务器
  • 🎵 完整Web界面功能
  • 📦 单文件分发,绿色免安装
  • 🖼️ 自定义窗口图标
  • 🔒 使用罕见端口(37777),避免端口冲突

Docker 部署

本项目提供了多种 Docker 部署方式。当前默认通过 ./data 目录挂载到容器内 /home/appuser/data,下载文件、配置与收藏数据都会持久化到该目录。

1. 生产环境部署(推荐)

项目包含 docker-compose.yml 文件,直接拉取云端预编译镜像,无需在本地构建:

# 拉取最新镜像
docker compose pull

# 后台启动服务
docker compose up -d --remove-orphans

# 或一条命令拉取并启动
docker compose up -d --pull always --remove-orphans

# 查看日志
docker compose logs -f

# 停止服务
docker compose down

浏览器访问 http://localhost:8080

说明:

  • 自动拉取 guohuiyuan/go-music-dl:latest 镜像
  • 支持后台运行和自动重启
  • 默认使用 ./data 本地目录做数据持久化,便于直接查看和备份
  • 设置时区为亚洲上海
  • 以非root用户(uid=1000)运行,提高安全性

2. 开发环境部署(本地构建)

如果您修改了源码,希望在本地通过 Docker 重新构建并测试效果,请使用 docker-compose.dev.yml

# 强制在本地使用 Dockerfile 进行构建并启动
docker compose -f docker-compose.dev.yml up -d --build --remove-orphans

3. 纯命令行模式 (docker run)

如果不使用 Compose,也可以直接通过命令行运行:

docker run -d --name music-dl \
  -p 8080:8080 \
  -v $(pwd)/data:/home/appuser/data \
  -e TZ=Asia/Shanghai \
  --user 1000:1000 \
  --restart unless-stopped \
  guohuiyuan/go-music-dl:latest \
  ./music-dl web --port 8080 --no-browser --vg-cover --vg-audio --vg-lyric --vg-export

# Windows PowerShell
docker run -d --name music-dl -p 8080:8080 -v ${PWD}/data:/home/appuser/data -e TZ=Asia/Shanghai --user 1000:1000 --restart unless-stopped guohuiyuan/go-music-dl:latest ./music-dl web --port 8080 --no-browser --vg-cover --vg-audio --vg-lyric --vg-export

提示:首次运行前可先创建 data 目录(如 mkdir -p data && chmod 777 data),便于宿主机直接访问下载与配置数据。

CLI/TUI 模式

# 搜索
./music-dl -k "周杰伦"

TUI 常用按键:

  • ↑/↓ 移动
  • 空格 选择
  • a 全选/清空
  • r 对勾选项换源
  • Enter 下载
  • b 返回
  • w 每日推荐歌单
  • q 退出

更多用法:

# 查看帮助
./music-dl -h

# 指定搜索源
./music-dl -k "周杰伦 晴天" -s qq,netease

# 指定下载目录
./music-dl -k "周杰伦" -o ./my_music

# 下载时包含封面和歌词
./music-dl -k "周杰伦" --cover --lyrics

GitHub Actions 自动构建

本项目已配置 GitHub Actions 工作流。当推送代码并打上版本标签(如 v1.0.0)时,会自动触发 .github/workflows/docker.yml,构建跨平台镜像(支持 amd64 和 arm64)并推送到 DockerHub。

如果你 Fork 了本仓库并希望使用自己的构建流:

  1. 在你的仓库 Settings -> Secrets and variables -> Actions 中添加:
  • DOCKERHUB_USERNAME: 你的 DockerHub 用户名
  • DOCKERHUB_TOKEN: 你的 DockerHub 访问令牌
  1. docker-compose.yml 中的镜像地址修改为你自己的:image: 你的用户名/go-music-dl:latest

Web 换源说明

单曲卡片里的“换源”会在其它平台里找更像的版本:

  • 先看歌名/歌手相似度
  • 再看时长差异(太大就跳过)
  • 最后做可播放探测

当前会跳过 soda 与 fivesing。

每日歌单推荐

Web 页面有“每日推荐”入口,会聚合网易云、QQ、酷狗、酷我。 TUI 在输入界面按 w 直接拉取推荐歌单,然后回车进详情。

支持平台

平台 包名 搜索 下载 歌词 歌曲解析 歌单搜索 歌单推荐 歌单歌曲 歌单链接解析 专辑搜索 专辑歌曲 专辑链接解析 备注
网易云音乐 netease 支持 FLAC 无损
QQ 音乐 qq 支持 FLAC 无损
酷狗音乐 kugou 支持普通歌曲 FLAC 无损
酷我音乐 kuwo
咪咕音乐 migu
千千音乐 qianqian
汽水音乐 soda 音频解密
5sing fivesing
Jamendo jamendo
JOOX joox
Bilibili bilibili 支持 FLAC 无损

歌曲链接解析

支持直接解析音乐分享链接:

./music-dl -k "[https://music.163.com/#/song?id=123456](https://music.163.com/#/song?id=123456)"

支持解析的平台:网易云、QQ音乐、酷狗、酷我、咪咕、Bilibili、汽水音乐、5sing、Jamendo。

歌单链接解析

支持直接解析歌单/合集分享链接:

./music-dl -k "[https://music.163.com/#/playlist?id=123456](https://music.163.com/#/playlist?id=123456)"

支持解析的平台:网易云、QQ音乐、酷狗、酷我、汽水音乐、5sing、Bilibili。

专辑链接解析

支持直接解析专辑分享链接:

./music-dl -k "[https://music.163.com/#/album?id=123456](https://music.163.com/#/album?id=123456)"

支持解析的平台:网易云、QQ音乐、酷狗、酷我、咪咕、Jamendo、JOOX、千千音乐、汽水音乐。

常见问题

桌面应用相关

Q: 桌面应用打不开或显示空白? 检查是否已安装 WebView2 运行时。从 Microsoft官网 下载安装最新版本。

Q: 桌面应用启动慢或卡顿? 首次运行需要下载 WebView2 运行时。也可提前安装 Evergreen Bootstrapper 版本。

Q: 桌面应用启动时提示"另一个程序正在使用此文件"? 这是因为上一次运行的后台进程没有正常退出。解决方案:

# 强制结束残留进程
taskkill /F /IM music-dl.exe

Q: 如何构建桌面应用?

# 1. 构建 Go 二进制
go build -o desktop/music-dl.exe cmd/music-dl/main.go

# 2. 构建 Rust 桌面应用
cd desktop
cargo build --release

Q: 桌面应用支持哪些平台? 目前支持 Windows (x64/x86/arm64)、macOS (x64/arm64)、Linux (x64)。

通用问题

Q: 有些歌搜不到或下载失败? 可能是付费限制、平台接口变更或网络问题。

Q: Web 模式打不开? 检查端口是否占用,或浏览器插件是否拦截。

Q: 如何设置 Cookie 获取更高音质? Web 右上角“设置”里可添加平台 Cookie。

Q: 开启“内嵌元数据”后没生效? 先确认系统已安装 FFmpeg 且 ffmpeg -version 可执行;若不可用,程序会降级为原始音频下载(不内嵌封面/歌词)。

项目结构

go-music-dl/
├── cmd/
│   └── music-dl/          # CLI/TUI 主程序
├── core/                  # 核心业务逻辑
├── internal/
│   ├── cli/               # TUI 界面 (如: ui.go)
│   └── web/               # 重构后的 Web 后端服务
│       ├── templates/     # 前端模板与静态资源分离
│       ├── server.go      # Web 服务主入口
│       ├── music.go       # 音乐搜索与解析路由
│       ├── collection.go  # 本地自制歌单接口 (GORM)
│       └── videogen.go    # 视频生成后端支持
├── desktop/               # 桌面应用 (Rust + Tao/Wry)
├── data/                  # 🌟 统一数据持久化目录 (Docker挂载点)
│   ├── downloads/         # 下载的音乐文件
│   ├── video_output/      # 生成的视频文件
│   ├── cookies.json       # Cookie 配置文件
│   └── settings.db        # 统一 SQLite 数据库(设置 / Cookie / 自制歌单)
├── .github/workflows/     # GitHub Actions 工作流
├── screenshots/           # 截图资源
├── docker-compose.yml     # Docker 生产环境配置 (直接拉取镜像)
├── docker-compose.dev.yml # Docker 开发环境配置 (本地构建)
├── Dockerfile             # Docker 构建配置
├── go.mod                 # Go 模块配置
└── README.md              # 主项目说明

技术栈

  • 核心库: music-lib - 音乐平台搜索下载
  • CLI 框架: Cobra - 命令行工具
  • Web 框架: Gin - Web 框架
  • TUI 框架: Bubble Tea - 终端界面
  • 桌面框架: Tao + Wry - 跨平台桌面应用
  • 图像处理: image - 图标处理

桌面应用架构

桌面应用采用前后端分离架构:

  • 前端: Rust + Tao/Wry - 负责窗口管理、WebView 渲染和进程管理
  • 后端: Go 二进制 - 嵌入到桌面应用中,提供 Web 服务和音乐功能
  • 通信: HTTP 本地服务 - 前后端通过 http://localhost:37777 通信

详细说明请参考 desktop/README.md

贡献

欢迎提交 Issue 或 Pull Request。

许可证

本项目遵循 GNU Affero General Public License v3.0(AGPL-3.0)。详情见 LICENSE

致敬

感谢以下优秀的开源项目:

免责声明

仅供学习和技术交流使用。下载的音乐资源请在 24 小时内删除。

Star History

Star History Chart

About

一个基于 Go 语言的全网音乐搜索与下载工具。支持 CLI 命令行与 Web 服务双模式,内置网易云、QQ、酷狗、Bilibili、汽水音乐等 10+ 个主流平台,支持多源并发搜索与无损音质解析。music-dl交流群:1074285005

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages