MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单

不需要分别搭建 Navidrome、MusicTagWeb、MusicDL 三套服务,运行一条 docker compose up -d,你就能拥有一个集媒体库管理、元数据刮削、在线搜索下载、歌单同步于一身的私人音乐中枢。


痛点:搭建一套完整的私人音乐库,到底有多折腾?

每个喜欢收藏本地无损音乐的人,大概都经历过这样的折腾:

  1. 你有一堆音乐文件,散落在 NAS、本地硬盘、甚至 WebDAV 挂载的云盘里,想统一管理 ------ 于是你搭建了 Navidrome,一个媒体库管理服务。
  2. 元数据一团糟,封面缺失、标题是乱码、艺人信息空白 ------ 于是你又搭建了 MusicTagWeb,专门做标签刮削。
  3. 想找新歌,想从网易云、QQ 音乐等平台搜罗资源下载入库 ------ 于是你又去折腾 MusicDL。

三套服务,三个数据库,三种配置方式,互不相通。光是维护它们就已经让人心力交瘁,更别提「优雅地听歌」这件事了。

有没有一种可能,把这三件事合在一起?

这就是 MusicFree 诞生的初心。


MusicFree 是什么?

MusicFree 是一个基于 Go + Vue 3 + TypeScript 构建的开源个人音乐服务器,核心理念只有一句话:

让听歌这件事变得简单一点。

它不是某个单一功能的替代品,而是音乐全生命周期的管理中枢

从获取曲目到完美播放,一个服务就够了。


核心能力一图速览

音乐管理:搜索、去重、刮削,一站式搞定

MusicFree 的管理后台将三大音乐运维能力整合在同一个页面中:

Tab 做什么 怎么做的 音乐搜索 从外部平台搜索歌曲并一键下载入库 通过 WASM 插件接入各平台搜索/下载能力 音乐去重 发现库内重复曲目并批量清理 基于音频指纹(fpcalc)技术,识别转码、改名后的同一首歌 音乐刮削 补全元数据:封面、歌词、艺术家、专辑信息 多插件编排,依次尝试不同数据源直至命中

这不是三个独立的工具,而是同一套系统里无缝衔接的三个功能。

插件体系:能力边界,由你定义

MusicFree 的核心能力不写死在代码里 ,而是全部通过 WASM 插件 提供:

产品能力 插件接口 常见插件 在线搜索 / 下载 RemoteSearch / RemoteDownload mf-plugin-gomusicdl 元数据 / 封面 / 歌词 ScraperSong / GetCover / GetLyrics 网易云、QQ 音乐、MusicBrainz 专辑信息刮削 GetAlbumInfo 同上 艺术家信息与头像 GetArtistInfo 同上 歌单导入 / 同步 FetchPlaylist mf-plugin-netease、mf-plugin-qqmusic

你只需要在插件商店中订阅一个注册表 URL,就能看到所有可用插件,点击安装即可使用。

当多个插件实现同一能力时,还能通过插件编排设定优先级链,按序尝试------覆盖、歌词、专辑、艺术家、头像五个维度可分别指定插件链:

插件编排 - 五个维度的插件链配置

这意味着什么?------ 某个平台 API 变了?更新插件即可,你不需要等 MusicFree 发新版。远程搜索也由插件驱动,选好来源就能直接检索并下载入库:

远程搜索

客户端兼容:不只是 Web 播放器

MusicFree 实现了完整的 OpenSubsonic 1.16.1 接口规范,以及部分 Navidrome 风格 REST API。这意味着你可以用任何你喜欢的客户端来听歌:

  • 音流 --- 国产精品 Subsonic 客户端,iOS/Android 双端
  • Supersonic --- 跨平台桌面客户端,界面精美
  • Feishin、Symfonium、DSub --- 更多兼容应用任你选

不需要被限制在某个特定的前端里。用你最顺手的播放器,连上 MusicFree 服务端,就像连上一个标准的流媒体服务器。

多源接入:本地 + WebDAV,一盘统管

音乐不一定都存在本地硬盘上。MusicFree 支持两类媒体源:

  • 本地目录:直接扫描服务器上的音乐文件夹
  • WebDAV:挂载远程存储(NAS、云盘),统一管理

配置后可以手动触发扫描,也支持定时增量扫描(默认每 30 分钟)。你还可开启文件监听器(基于 fsnotify),本地目录一有变化就自动同步入库。

媒体源管理 - 本地目录 + WebDAV


一分钟部署

MusicFree 已经发布为 Docker 镜像,一条 Compose 即可启动:

bash 复制代码
services:
  music-free:
    image: ansgoo/music-free:latest
    container_name: music-free
    restart: unless-stopped
    ports:
      - "4533:4533"
    volumes:
      - /vol1/docker/music-free:/app/data
      - /vol1/music:/app/music
bash 复制代码
docker compose up -d

然后打开浏览器访问 http://<你的服务器IP>:4533,默认账号 admin / admin,进入后建议立刻修改密码。

不需要额外部署 Nginx,不需要单独启动前后端服务------Go 进程把静态页面和 API 合并在一个端口上,这就是「简单」的含义。


支持的音频格式

扫描器明确支持的格式覆盖了你的绝大多数收藏:

mp3 · flac · m4a · aac · ogg · opus · wav · wma · ape · dsf · dff


路线图与当前状态

MusicFree 是一个活跃开发中的项目,以下是当前完成度概览:

|-----------------------|---------|
| 模块 | 状态 |
| 音乐扫描(全量 + 增量) | ✅ 已完整实现 |
| 音频播放核心接口 | ✅ 已完整实现 |
| OpenSubsonic 基础兼容 | ✅ 已完整实现 |
| 登录认证 | ✅ 已完整实现 |
| 播放记录与统计 | ✅ 已完整实现 |
| 刮削系统(插件管理 + 批量刮削) | ✅ 已完整实现 |
| 媒体源管理(本地 / WebDAV) | ✅ 已完整实现 |
| 首页(随机歌曲、热门、最近播放) | ✅ 已完整实现 |
| 歌曲库 / 专辑 / 艺术家 / 歌单页面 | ✅ 已完整实现 |
| 媒体源扫描联动 | ✅ 已完整实现 |
| 转码 / 高级播放策略 | ✅ 已完整实现 |

项目当前已具备一个音乐服务原型里最关键的能力:能启动、能扫描、能播放、能刮削、能记录。如果你需要的是一个稳定的个人音乐服务器基础,它已经够用了。


功能掠影

更多核心界面一览:

音乐刮削

音乐去重

专辑管理

艺术家管理

歌单管理

歌单详情

总结

|----------|-----------------|------------------------|
| 对比维度 | 传统方案(多服务组合) | MusicFree |
| 部署复杂度 | 3 套服务,各自配置 | 1 条 docker compose |
| 数据互通 | 割裂,各自独立数据库 | 统一曲库 |
| 搜索下载 | 单独工具 | 内置插件,一键入库 |
| 元数据刮削 | 单独工具 | 内置,支持多源编排 |
| 客户端 | 各有兼容范围 | OpenSubsonic 标准,多客户端可选 |
| 扩展性 | 受限于各工具自身 | WASM 插件体系,无需改核心 |

MusicFree 不追求成为功能最庞杂的音乐平台,而是追求用最简洁的方式覆盖最核心的需求

它就是那个你想听歌的时候,不需要折腾环境的「一条龙」解决方案。


Docker 镜像:ansgoo/music-free:latest

相关推荐
IT_陈寒2 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x3 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
京东云开发者3 小时前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
袋鱼不重4 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户8356290780514 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还4 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy884 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
Fireworks4 小时前
深入vue3源码解读 -- 1、响应式的基础概念
前端
程序员黑豆4 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程