一个用于展示 Roon 专辑封面的扩展程序,支持实时播放显示和艺术墙展示模式。
-
实时播放显示
- 显示当前播放曲目的专辑封面
- 自动提取封面主色调作为背景色
- 支持全屏显示
- 双击页面任意位置进入全屏模式(按 ESC 退出)
-
艺术墙模式
- 在停止播放15秒后自动切换到艺术墙模式
- 3x3网格布局展示
- 中央显示时钟
- 其他8个位置随机显示专辑封面
- 每60秒自动更新3张图片
- 平滑的3D翻转动画效果
-
自动保存功能
- 自动保存播放过的专辑封面
- 支持自定义保存目录
- 智能文件命名(艺术家_专辑名)
从 Docker Hub 拉取镜像:
docker pull epochaudio/coverart:latest
运行容器:
docker run -d \
--name roon-coverart \
--network host \
--restart unless-stopped \
-v $(pwd)/images:/app/images \
epochaudio/coverart:latest
- 创建
docker-compose.yml
文件:
version: '3'
services:
coverart:
image: epochaudio/coverart:latest
network_mode: "host"
restart: unless-stopped
volumes:
- ./images:/app/images
- 运行容器:
docker-compose up -d
在运行 Docker 容器之前,必须正确设置 images
目录的权限。这是因为容器内的进程使用 UID 1000(node 用户)运行,需要对 images
目录有读写权限。
- 创建 images 目录(如果不存在):
mkdir -p images
- 设置目录权限(选择以下方案之一):
方案一(推荐 - 更安全):
sudo chown -R 1000:1000 images
sudo chmod -R 755 images
方案二(如果方案一不工作):
sudo chmod -R 777 images
注意:
- 这些权限命令需要在宿主机上执行,而不是在容器内
- UID 1000 对应容器内的 node 用户
- 建议使用方案一,方案二虽然更宽松但安全性较低
- 如果遇到权限问题,容器日志中会显示相关错误信息
- 克隆或下载本仓库
- 进入项目目录
- 安装依赖:
npm install
- 启动服务:
node app.js
默认端口为3666,可通过以下方式修改:
- 命令行参数:
node app.js -p 3000
- 配置文件:
编辑
config/default.json
:
{
"server": {
"port": 3666
},
"artwork": {
"saveDir": "./images",
"autoSave": true,
"format": "jpg"
}
}
server.port
: 服务器监听端口artwork.saveDir
: 专辑封面保存目录artwork.autoSave
: 是否自动保存专辑封面artwork.format
: 保存图片的格式(jpg/png)
- 访问
http://localhost:3666
(或您配置的端口) - 在 Roon 中启用扩展
- 选择要显示的播放区域
- 开始使用!
- 屏幕:22寸竖屏(1920x1920)
- 环境:专用WebView,全屏显示
- 运行:支持7x24小时稳定运行
-
确保 images 目录具有正确的读写权限
# 进入项目目录 cd /path/to/coverart # 设置正确的所有权和权限 sudo chown -R 1000:1000 images sudo chmod 755 images
注意:这些命令需要在宿主机上执行,而不是在容器内。用户ID 1000对应容器内的node用户。
-
Docker 安装时请确保正确映射配置文件和图片目录
-
建议使用 Chrome 或基于 Chromium 的浏览器以获得最佳体验
- 触发条件
- 图片保存是通过
/roonapi/getImage
API 端点触发的 - 当有设备请求图片时,服务器会:
- 从 Roon Core 获取图片
- 检查自动保存设置
- 如果启用了自动保存,则保存图片
- 重要说明
- 如果没有设备访问网页界面,不会触发图片保存
- 即使 Roon 正在播放音乐,如果没有设备访问网页,也不会保存图片
- 图片保存是在设备请求图片时才会触发
- 解决方案 如果需要在没有设备访问的情况下也保存图片,可以:
- 修改代码,在接收到
nowplaying
事件时直接保存图片 - 使用一个始终运行的轻量级客户端(如 headless browser)来访问页面
- 或者创建一个独立的保存服务,直接监听 Roon 事件并保存图片
- 配置说明
可以在
config/default.json
中配置自动保存行为:
{
"artwork": {
"saveDir": "./images",
"autoSave": true,
"format": "jpg"
}
}
- 优化网格显示的图片翻转效果
- 实现从右向左的书页翻转动画
- 优化翻转时的图片加载和切换
- 改进多图片连续翻转的视觉体验