收起左侧

NV存的歌曲太多,不知怎么听?写了个docker应用,文本生成个性歌单

0
回复
18
查看
[ 复制链接 ]

2

主题

0

回帖

0

牛值

江湖小虾

在飞牛上搭建了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 和认证

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则