xiaomusic 停更后,小爱音箱换上 Songloft
xiaomusic 已归档,Songloft 把小爱音箱、本地曲库、Web、手机和电视接进一套自托管音乐系统。附一套更稳妥的 Docker 试跑方法。

xiaomusic 的 GitHub 仓库已经归档。家里那台小爱音箱没坏,只是熟悉的私人点歌方案停在了旧版本。
Songloft 给出了一条接力路线。它保留了 MIoT 智能音箱控制,把范围扩展到本地曲库、 Web 、手机电脑和客厅电视。手里有 NAS 、树莓派、旧电脑,或者只想在手机上整理自己收藏的音乐,都能找到对应的使用方式。
项目地址:github.com/songloft-org/songloft
它已经是一套完整的个人音乐库
Songloft 的服务端用 Go 编写,默认使用 SQLite 。把音乐目录交给它扫描后,系统会读取封面、标签、歌词和音频信息,常见的 MP3 、 FLAC 、 WAV 、 APE 、 OGG 、 M4A 都能处理;MP4 、 MOV 、 MKV 、 WebM 等视频容器也能识别并播放。
完整版自带 Web 界面,浏览器打开服务地址就能用。 Flutter 客户端覆盖 Android 、 iOS 、 macOS 、 Windows 、 Linux 和 Web;Kodi 插件则把曲库送到 Xbox 、 Apple TV 、树莓派和 Android TV 。


不想维护服务器,也有 Bundle 本地版。客户端会把 Go 后端一起带上,第一次启动时选择“使用本地模式”,再指定音乐目录即可。它适合单机使用;家里多台设备共用一个曲库,仍然更适合把服务端放在 NAS 或常开小主机上。
小爱音箱通过 MIoT 插件接回来
Songloft 把设备控制放进 JS 插件体系。官方插件源里已经包含 MIoT 插件,可将歌曲投放到智能音箱,也支持定时播放、歌单和外部搜索源等扩展。

这种设计比把所有设备协议塞进主程序更方便更新,但插件拥有的能力也更大。普通 HTTP 请求是插件的默认宿主能力;某些权限还可以读取音乐目录、访问网络或执行外部程序。安装插件前应查看来源和权限清单,高权限插件应当按“给服务器安装软件”的标准来判断。
另外,Songloft 与小米及相关商标持有人没有隶属、授权或背书关系。 MIoT 插件属于社区互操作方案,账号、协议变化和设备兼容性都可能影响使用。
先用只读音乐库试跑
下面这套 Docker 命令把服务只绑定到本机 127.0.0.1,音乐目录先按只读方式挂载,管理员密码随机生成。镜像固定为核对时的稳定构建,避免 latest 后续变化导致同一条教程跑出不同结果。
mkdir -p "$HOME/songloft/music" "$HOME/songloft/data"
cd "$HOME/songloft"
umask 077
printf 'ADMIN_USERNAME=admin\nADMIN_PASSWORD=%s\nLISTEN_PORT=58091\n' \
"$(openssl rand -base64 32)" > songloft.env
docker run -d \
--name songloft \
--restart unless-stopped \
--env-file "$PWD/songloft.env" \
-p 127.0.0.1:58091:58091 \
-v "$PWD/music:/app/music:ro" \
-v "$PWD/data:/app/data" \
songloft/songloft@sha256:b9b5c8696d7382a3a5b53449e3a2d67781e00aa54a9f073c7770846ceab8f22b
把自己合法拥有的音乐复制到 ~/songloft/music,然后查看登录信息和运行状态:
grep '^ADMIN_' "$HOME/songloft/songloft.env"
docker logs songloft
curl http://127.0.0.1:58091/api/v1/version
浏览器访问:
http://127.0.0.1:58091
确认扫描和播放正常后,再考虑安装 MIoT 插件、开放音乐目录写权限或接入其他设备。需要让手机和电视访问时,优先使用 Tailscale 、 WireGuard 一类私人网络;也可以配置带 HTTPS 的反向代理。不要直接把 58091 端口暴露到公网。

使用前有四个边界
第一,默认账号是 admin/admin。上面的命令已经换成随机密码;直接照 README 的简单示例部署时,别把默认口令带到局域网或公网。
第二,备份应覆盖整个 /app/data 和音乐目录。数据库、封面、缓存、插件及其数据都在里面,内置导出功能不能替代完整灾备。升级前最好停止容器再打包备份。
第三,官方预编译二进制和 Docker 镜像会按隐私文档启用 Tracely 运维监控,上报崩溃堆栈、安装或升级事件、定时心跳与平台信息;文档声明其中不含音乐、账号或用户数据。自行编译且不注入相关参数时,这项监控不会启动。
第四,Songloft 不提供音乐内容。它适合管理购买下载、实体唱片个人备份、自创作品、公有领域或明确授权的音乐。第三方音源、歌词和下载插件带来的版权责任,需要使用者自己承担。
Songloft 当前已经有稳定 Release 、 Docker 、跨平台客户端、 Kodi 和 Home Assistant 加载项,功能比单纯的“小爱音箱播放脚本”宽得多。项目创建时间还不长,更新很快,文档与发行文件名也出现过不一致。部署时固定版本,升级前备份,日常使用会稳妥很多。
家里的小爱音箱,你更想拿它继续听本地曲库,还是已经换成别的设备了?