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

266 阅读6分钟

不需要分别搭建 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)技术,识别转码、改名后的同一首歌 音乐刮削 补全元数据:封面、歌词、艺术家、专辑信息 多插件编排,依次尝试不同数据源直至命中

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

1.jpeg

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

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

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

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

2.jpeg

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

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

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

4.jpeg 远程搜索

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

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

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

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

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

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

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

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

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


一分钟部署

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

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
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)

✅ 已完整实现

首页(随机歌曲、热门、最近播放)

✅ 已完整实现

歌曲库 / 专辑 / 艺术家 / 歌单页面

✅ 已完整实现

媒体源扫描联动

✅ 已完整实现

转码 / 高级播放策略

✅ 已完整实现

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


功能掠影

更多核心界面一览:

音乐刮削

6.jpeg

音乐去重 7.jpeg

专辑管理 8.jpeg

艺术家管理

9.jpeg

歌单管理

10.jpeg

歌单详情 11.jpeg

总结

对比维度

传统方案(多服务组合)

MusicFree

部署复杂度

3 套服务,各自配置

1 条 docker compose

数据互通

割裂,各自独立数据库

统一曲库

搜索下载

单独工具

内置插件,一键入库

元数据刮削

单独工具

内置,支持多源编排

客户端

各有兼容范围

OpenSubsonic 标准,多客户端可选

扩展性

受限于各工具自身

WASM 插件体系,无需改核心

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

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


Docker 镜像:ansgoo/music-free:latest