在飞牛上搭建了Navidrome音乐服务器。不知不觉已经下载了6000多首歌曲了。
个人产生了一个需求,怎么来听这些歌?想自己做歌单,nv很不方便,不适合我这个懒人。
于是,借着ai大潮,用自动编程手搓了了一个歌单生成项目,自我感觉用起来还挺好的。
打开deepseek之类的ai网页对话框,复制我项目内AI灵感实验室的提示词,(比如:请为我生成一个包含20首经典华语流行歌曲的歌单,格式为"歌名 - 歌手",不要序号,每行一首。要求:包含周杰伦、林俊杰、孙燕姿、王菲等歌手的代表作,兼顾不同年代和风格。请把歌单放在代码块中以便于复制。)网页生成文本,黏贴到项目歌单列表,点击 开始匹配 ,项目会自动搜索匹配生成的歌单和库里的歌曲,右边会把库里有的歌曲和没有的分开,填写歌单名称后点击生成歌单,就会在nv中添加右面匹配到的歌曲。没匹配到的,可以复制下来去找资源,拾遗补缺。
项目地址https://github.com/kronus09/navi-playlist
🎵NaviPlaylist
一款轻量级、高性能的音乐歌单管理工具
从文本列表匹配 Navidrome 曲库,通过 Subsonic API 直接在服务端创建歌单,无需配置复杂的物理路径映射。
本项目使用Subsonic createPlaylist API,原理上 道理鱼 也适用,请自行测试!
项目简介
NaviPlaylist 是一个轻量级工具,帮助你用「歌名 - 歌手」格式的文本列表,批量匹配 Navidrome 中的歌曲并创建歌单。支持模糊匹配、降级搜索与自动选取,适合从歌单网站、播放记录等导出文本后的快速导入。
技术优势:API 创建歌单
与传统的 M3U 本地生成方案不同,本项目直接调用 Subsonic createPlaylist API 在 Navidrome 服务端创建歌单:
| 对比项 |
传统 M3U 方案 |
本方案(Subsonic API) |
| 路径配置 |
需配置音乐目录挂载、输出路径 |
无需任何路径配置 |
| 路径映射 |
需处理本地路径与 Navidrome 的对应关系 |
无需处理 |
| 部署复杂度 |
需挂载卷、配置 PLAYLIST_PATH 等 |
只需 Navidrome 地址与账号 |
| 歌单位置 |
本地文件,需手动导入 |
直接出现在 Navidrome 服务端 |
核心接口:
search3.view:搜索曲库,获取歌曲 id
createPlaylist.view:提交 songId 列表,在服务端创建歌单
功能特性
- 支持「歌名 - 歌手」格式的文本列表匹配
- 模糊匹配:歌手名包含即视为匹配(如「五月 天」「** • 纪晓君」)
- 歌名清洗:忽略括号、方括号及
# 后内容
- 降级搜索:过滤无结果时返回原始结果供手动选择
- 自动选取首项:若有同名歌曲,可勾选自动选择第一条
- 响应式界面:匹配成功 / 缺失分栏展示
使用说明
环境要求
- Go 1.21+
- Navidrome 服务(支持 Subsonic API)
⚙️ 本地运行
配置
复制 .env.example 为 .env,按需修改:
cp .env.example .env
或通过环境变量直接设置(参见 .env.example 中的说明)。
启动服务
go run ./cmd/server
默认监听 http://localhost:8080,可通过 PORT 环境变量修改端口。
🐳 Docker 运行
git clone https://github.com/kronus09/navi-playlist.git
docker compose up -d
访问 http://localhost:8080
🐳 使用 Docker Compose(推荐)
创建 docker-compose.yml 文件
在项目目录下创建文件,内容如下:
services:
navi-playlist:
image: ghcr.io/kronus09/navi-playlist:latest
container_name: navi-playlist
ports:
- "14533:8080" # 主机端口:容器端口(按需修改左侧端口)
environment:
NAVI_URL: "http:// *:4533" # Navidrome 服务地址
NAVI_USER: "admin" # Navidrome 用户名
NAVI_PASS: "your_password" # Navidrome 用户密码
restart: unless-stopped
启动服务
docker-compose up -d
📝 NaviPlaylist v1.2.1 更新日志
🎨 UI/UX 深度优化
- 布局锁定方案:通过 CSS Flexbox 逻辑锁定左右两栏高度严格对齐,彻底解决列表内容过多时页面产生的布局偏移(Layout Shift)问题。
- 交互引导升级:
- 将匹配统计(成功/缺失)移至右侧标题栏,并采用红/绿高对比度颜色及加粗处理,视觉重点更清晰。
- 在左侧标题栏新增“生成歌单”视觉引导标签,模拟真实按钮样式,直观提示下一步操作。
- 视觉格式统一:重构“缺失列表”渲染逻辑,确保歌曲名、歌手名格式及文本密度与“匹配成功”区域完全一致,并移除所有多余空行。
🛠️ 稳定性与逻辑修复
- 消除布局抖动:移除了会在“开始匹配”按钮下方动态插入的错误提示文字,改为非侵入式交互逻辑,确保按钮位置固定不跳动。
- 服务器连接检测:优化了连接失败时的反馈机制,防止因提示信息撑开容器导致整体对齐失效。
- 文案修正:更正了页脚及 AI 实验室模块中的错别字(如“千文”更正为“千问”)。
🚀 自动化部署
- CI/CD 链路闭环:正式跑通 GitHub Actions 自动构建并推送到 GHCR 的全流程,实现镜像版本标签(v1.2.1)自动化管理。
🔒 安全提示
✅ 镜像已通过 GitHub Actions 自动构建+签名
✅ 镜像来源:ghcr.io/kronus09/navi-playlist(官方仓库)
✅ 无需 Docker Hub 账号 / Token(公开镜像免认证)
⚠️ 如部署在公网,建议前置 Nginx 添加 HTTPS 和认证