⭐ 如果这个项目正在帮你省时间,欢迎顺手点一个 Star。Star 越多,作者越能确认这个工具确实有人在用,也会更有动力优先修复失效站点、适配新站点和更新版本。
![]()
Go Music DL 是一个音乐搜索与下载工具,支持 Web 界面、TUI 终端 和 桌面应用 三种使用模式。除了单曲搜索与下载外,还支持 歌单搜索 / 解析、歌单分类浏览、我的歌单、专辑搜索 / 解析、整单 / 整专曲目查看与批量处理。你可以在浏览器试听,也可以在终端里批量下载,或使用原生桌面应用享受最佳体验。
最简单的使用方式,下载即用:
music-dl-desktop-rust.exe 或 music-dl-desktop-go.exe移动端下载说明:在 Releases 页面可直接下载 Android music-dl_arm64-v8a.apk(推荐)/ music-dl_x86_64.apk / music-dl.apk(无分片兼容包)。Android APK 已内置 ffmpeg 与 ffprobe,本地音乐探测、非 MP3 元数据内嵌和视频渲染无需在手机上额外安装 FFmpeg。iOS 会提供 music-dl-ios-unsigned.ipa 给用户自行签名;如果发布环境配置了证书,也会额外提供已签名的 music-dl-ios.ipa。
./music-dl web
Web 模式默认不要求登录即可搜索、播放、下载、浏览歌单 / 专辑和使用本地歌单等普通功能。只有进入右上角 设置、保存系统设置、管理平台 Cookie、通过扫码登录写入 Cookie 等系统配置操作需要管理员登录。
首次触发系统配置登录时,如果还没有管理员账号,启动终端会打印一次性初始化令牌。打开初始化页后填入该令牌,并设置用户名和至少 6 位密码即可创建管理员账号;之后点击设置或右上角登录按钮会进入登录流程。会话 Cookie 默认保留 7 天,右上角按钮会根据状态切换为登录 / 退出登录;退出后会回到首页,普通功能仍可继续使用。
桌面端和移动端 App 内嵌 Web 服务使用 StartDesktop 启动,仅监听本机 127.0.0.1,并默认关闭 Web 管理员登录流程,避免首次启动时因看不到终端初始化令牌而无法进入应用。
./music-dl -k "搜索关键词"


music-lib 中咪咕、Jamendo、JOOX、千千、汽水等歌单 / 专辑函数,JOOX 歌单支持 OpenJOOX 接口和网页数据兜底Web 首页的歌单入口旁提供 歌单分类 和 我的歌单:
Web 右上角“设置”可管理各平台 Cookie。支持扫码登录的平台会在 Cookie 输入框右侧显示 扫码 按钮:
a_bogus / msToken 风控签名,目前未调通,Web 端已临时隐藏扫码入口;需要汽水个人歌单或下载能力时请先手动配置 Cookie。Web 端在“我的自制歌单”旁提供 本地音乐 入口,用于管理本地下载目录里的音频文件。下载目录来自 Web 右上角“设置”里的“本地下载目录”,默认是 data/downloads。Android 端建议把本地下载目录设置为 /sdcard/Music,便于系统音乐应用识别。
设置里的 音乐文件名模板 支持 {name}、{artist}、{album}、{source}、{id}、{ext}。未写 {ext} 时会自动追加扩展名;模板中的 / 或 \ 可创建相对子目录。例如本地下载目录为 /app/data,模板为 {artist}/{album}/{name} - {artist}.{ext} 时,会保存到 /app/data/歌手/专辑/歌名 - 歌手.flac 这类路径。歌曲元数据本身包含的斜杠会被安全替换为 _,..、. 等路径穿越段会被忽略。
local。mp3、flac、m4a、ogg、wav、wma、aac。Unknown 等兜底信息。ffprobe 探测补齐;未安装 ffprobe 时仍可显示和添加,只是部分信息可能为空。.jpg、.jpeg、.png、.webp、.bmp、.gif);歌词优先读取音频内嵌歌词,没有则查找同目录同名歌词文件(.lrc、.txt、.lyric)。/local_music/cover 地址;没有内嵌封面时再使用同名图片兜底。local,会出现在源勾选网格里(默认不勾选)。勾选后在单曲搜索里按关键词把匹配的本地歌曲与在线结果一起返回;切到歌单搜索并勾选 local 时,可按名称 / 描述 / 创建者搜索本地自建与导入歌单。搜索由内置 SQLite 索引表驱动,几千首本地音乐也能快速命中。结合后端缓存与前端分页,减少重复扫盘 / ffprobe / tag 解析的开销:
PgUp / PgDn 快捷翻页与 URL ?page= 状态保持,避免一次性渲染上千条。GET /api/local_music 结果会缓存 10 秒;TTL 内反复访问直接返回快照,不重扫。路径 + 文件大小 + 修改时间 索引;命中后跳过 ffprobe 与 tag 解析,文件未变动时几乎零开销。?refresh=1 可绕过缓存进行整目录重扫。data/settings.db 里异步建立本地音乐索引表(下载目录的索引:扫描时按文件 upsert、文件消失即清除该行),让“本地音乐作为搜索源”的关键词搜索免去逐次重扫与 ffprobe;搜索时仍对命中结果做存在性校验,已删除 / 移动的文件不会出现在结果中。READ_MEDIA_AUDIO / READ_EXTERNAL_STORAGE 权限,修复了 /sdcard/Music 下本地音乐无法读取的问题。Web 端“设置”里新增了 下载时内嵌元数据(封面/歌词) 开关:
Range 断点/拖动播放。⚠️ 开启内嵌元数据依赖 FFmpeg。未安装 FFmpeg 时,会自动跳过内嵌并返回原始音频。
可先验证 FFmpeg 是否可用:
ffmpeg -version
常见安装方式:
winget install Gyan.FFmpegbrew install ffmpegsudo apt install ffmpegffprobe 属于 FFmpeg 工具集,主要用于本地音乐的时长、码率和标签探测;ffmpeg 主要用于非 MP3 音频的封面/歌词元数据写入。缺少它们不会影响程序启动,也不会阻塞本地音乐列表加载,只会降级相关增强能力。
Dockerfile 已安装 Alpine 的 ffmpeg 包,并在构建时校验 ffmpeg 与 ffprobe 都可用;Docker / Compose 部署通常无需额外安装。release.yml 会在 APK 构建后下载 Android arm / arm64 / x86 / x86_64 的 ffmpeg 与 ffprobe,写入 APK 的 assets/ffmpeg/<abi>/,再重新 zipalign 与签名。Android App 启动后会自动解压到应用私有目录并配置这些内置二进制路径。ffmpeg/ffprobe,也不要求 CI 打包机安装它们;如果需要本地音乐探测或非 MP3 元数据内嵌,请在运行机器上按上面的命令自行安装 FFmpeg。MediaTrackNext / MediaTrackPrevious / MediaPlayPause)做兜底处理。前台播放时生效。local(默认不勾选),单曲搜索可把本地结果与在线结果一起返回,歌单搜索可检索本地自建 / 导入歌单;由内置 SQLite 索引表驱动,几千首本地音乐也能快速命中。本地歌曲卡片与其他源一致,仅去掉“保存到本地目录”按钮。p 播放、s 停止,基于系统 ffplay 后台播放,退出时自动停止。a_bogus / msToken 风控签名暂未调通,入口已临时隐藏。READ_MEDIA_AUDIO 权限申请以读取 /sdcard/Music。ffmpeg / ffprobe 并注入 APK,App 启动时自动配置内置二进制路径。/local_music/cover 地址,修复只有同名图片封面可显示、内嵌封面在列表里为空的问题。music-lib 歌单 / 专辑渠道函数,补齐咪咕、Jamendo、JOOX、千千等歌单搜索、详情和链接解析映射。桌面应用提供了原生窗口体验,无需打开浏览器即可使用。
本项目提供了多种 Docker 部署方式。当前默认通过 ./data 目录挂载到容器内 /home/appuser/data,下载文件、配置与收藏数据都会持久化到该目录。
注意:首次运行前必须先创建 data 目录(如 mkdir -p data && chmod 777 data),便于宿主机直接访问下载与配置数据。
项目包含 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 本地目录做数据持久化,便于直接查看和备份如果您修改了源码,希望在本地通过 Docker 重新构建并测试效果,请使用 docker-compose.dev.yml:
# 强制在本地使用 Dockerfile 进行构建并启动
docker compose -f docker-compose.dev.yml up -d --build --remove-orphans
如果不使用 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
# 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
视频生成相关的“更换封面 / 更换音频 / 更换歌词 / 导出视频”按钮已迁移到 Web 设置中管理,默认关闭,可在网页右上角设置面板中开启。
# 搜索
./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 工作流。当推送代码并打上版本标签(如 v1.0.0)时,会自动触发 .github/workflows/docker.yml,构建跨平台镜像(支持 amd64 和 arm64)并推送到 DockerHub。
项目支持通过 Gio 打包 Android APK,输出文件为仓库根目录下的三个 APK:
music-dl_arm64-v8a.apk(推荐,大多数 Android 设备)music-dl_x86_64.apk(x86_64 设备/模拟器)music-dl.apk(无分片兼容包,极个别设备无法使用分片包时再下载)安装 Android APK 后,建议在 Web 右上角“设置”中把“本地下载目录”改为 /sdcard/Music,这样下载文件会直接进入系统音乐目录。
前置条件:
C:\Android27.0.12077973)执行命令:
cd go-music-dl
package_app.bat
脚本会自动:
JAVA_HOME / java)gogiomusic-dl_arm64-v8a.apk、music-dl_x86_64.apk、music-dl.apk若检测到 adb,会打印安装命令,例如:
adb install -r music-dl.apk
.github/workflows/release.yml 中新增了 build-android-apk 任务。发布时会在 windows-latest 环境中:
platform-tools、platforms;android-33、build-tools;34.0.0、ndk;27.0.12077973arm / arm64 / x86 / x86_64 的 ffmpeg 与 ffprobepackage_app.batassets/ffmpeg/<abi>/ffmpeg 与 assets/ffmpeg/<abi>/ffprobe,重新 zipalign 并用发布 keystore 签名ffmpeg/ffprobe,不包含旧的 libffmpeg.so/libffprobe.so 条目,且签名有效music-dl_arm64-v8a.apk、music-dl_x86_64.apk、music-dl.apk 到 Actions Artifacts 和 GitHub Release发布后可在 Releases 下载三个 APK,推荐优先使用 music-dl_arm64-v8a.apk;极个别设备若无法安装/运行,再下载 music-dl.apk(无分片兼容包)。
高版本(34.0.0 及以上)的 Android Build-Tools 已修复旧版 d8.bat 脚本兼容性问题,可正常配合 Java 17 使用。
如果本地仍有 33.0.0,建议升级并清理旧版本:
"C:\Android\cmdline-tools\latest\bin\sdkmanager.bat" "build-tools;34.0.0"
如果你使用 Android Studio,也可以在 SDK Manager -> SDK Tools 中勾选 Show Package Details,然后安装 34.0.0 及以上版本。
非常关键:请到 C:\Android\build-tools\ 目录下,删除或重命名 33.0.0 旧目录,避免 gogio 优先命中旧版 d8。
完成后再次执行:
cd go-music-dl
package_app.bat
项目已提供 iOS 打包脚本:package_ios.sh。
cd go-music-dl
chmod +x package_ios.sh
export IOS_APP_ID=com.guohuiyuan.musicdl
export IOS_PROVISION_PROFILE=/path/to/profile.mobileprovision
./package_ios.sh
# 只生成给用户自行签名的包
IOS_UNSIGNED_ONLY=1 ./package_ios.sh
脚本会自动:
gogiomusic-dl-ios.ipa)IOS_UNSIGNED_ONLY=1 生成真机架构的待签名包(输出 music-dl-ios-unsigned.ipa)music-dl-ios.ipa:已签名真机安装包,需要 IOS_PROVISION_PROFILE 指向匹配 IOS_APP_ID 的 .mobileprovisionmusic-dl-ios-unsigned.ipa:真机架构待签名包,仅用于用户自行重签,不能直接安装发布后可在 Releases 下载 music-dl-ios-unsigned.ipa;配置签名 secrets 后也会上传 music-dl-ios.ipa。
注意:
music-dl-ios-unsigned.ipa不是可直接安装包,需要用户用自己的证书和 provisioning profile 重签。如果需要 GitHub Actions 自动发布已签名 iOS 包,需要配置IOS_PROVISION_PROFILE_BASE64、IOS_CERTIFICATE_P12_BASE64和IOS_CERTIFICATE_PASSWORD。
如果你 Fork 了本仓库并希望使用自己的构建流:
在你的仓库 Settings -> Secrets and variables -> Actions 中添加:
DOCKERHUB_USERNAME: 你的 DockerHub 用户名
DOCKERHUB_TOKEN: 你的 DockerHub 访问令牌
将 docker-compose.yml 中的镜像地址修改为你自己的:image: 你的用户名/go-music-dl:latest
单曲卡片里的“换源”会在其它平台里找更像的版本:
当前会跳
$ claude mcp add go-music-dl \
-- python -m otcore.mcp_server <graph>