From 9111a03b1bd54e9c02a44cdc63085b0da875f9f1 Mon Sep 17 00:00:00 2001 From: ms Date: Mon, 15 Dec 2025 10:56:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20SPlayer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/README.md | 1 + README.md | 1 + apps/splayer/README.md | 118 +++++++++++++++++++++++ apps/splayer/data.yml | 17 ++++ apps/splayer/latest/data.yml | 71 ++++++++++++++ apps/splayer/latest/docker-compose.yml | 30 ++++++ apps/splayer/latest/envs/default.env | 2 + apps/splayer/latest/envs/global.env | 2 + apps/splayer/latest/scripts/init.sh | 17 ++++ apps/splayer/latest/scripts/uninstall.sh | 10 ++ apps/splayer/latest/scripts/upgrade.sh | 17 ++++ apps/splayer/logo.png | Bin 0 -> 17899 bytes apps/splayer/logo.svg | 1 + 13 files changed, 287 insertions(+) create mode 100644 apps/splayer/README.md create mode 100644 apps/splayer/data.yml create mode 100644 apps/splayer/latest/data.yml create mode 100644 apps/splayer/latest/docker-compose.yml create mode 100644 apps/splayer/latest/envs/default.env create mode 100644 apps/splayer/latest/envs/global.env create mode 100644 apps/splayer/latest/scripts/init.sh create mode 100644 apps/splayer/latest/scripts/uninstall.sh create mode 100644 apps/splayer/latest/scripts/upgrade.sh create mode 100644 apps/splayer/logo.png create mode 100644 apps/splayer/logo.svg diff --git a/.github/README.md b/.github/README.md index 45629bbd7..277048472 100644 --- a/.github/README.md +++ b/.github/README.md @@ -178,6 +178,7 @@ | 🟢 | | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | | | 🟢 | | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | | | 🟢 | | SpeedTest-Tracker | https://docs.speedtest-tracker.dev/ | Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查 | | +| 🟢 | | SPlayer | https://github.com/imsyy/SPlayer/ | 一个简约的音乐播放器 | | | 🟢 | | Stash | https://stashapp.cc/ | 组织和刮削你的色情内容 | | | 🟢 | | Stream-Rec | https://github.com/hua0512/stream-rec/ | Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | | | 🟢 | | Stream-Rec Web版 | https://github.com/hua0512/stream-rec/ | 【前端版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | | diff --git a/README.md b/README.md index d37b66118..a4deb60f2 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,7 @@ | 🟢 | | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | | | 🟢 | | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | | | 🟢 | | SpeedTest-Tracker | https://docs.speedtest-tracker.dev/ | Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查 | | +| 🟢 | | SPlayer | https://github.com/imsyy/SPlayer/ | 一个简约的音乐播放器 | | | 🟢 | | Stash | https://stashapp.cc/ | 组织和刮削你的色情内容 | | | 🟢 | | Stream-Rec | https://github.com/hua0512/stream-rec/ | Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | | | 🟢 | | Stream-Rec Web版 | https://github.com/hua0512/stream-rec/ | 【前端版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | | diff --git a/apps/splayer/README.md b/apps/splayer/README.md new file mode 100644 index 000000000..e04f0e7c2 --- /dev/null +++ b/apps/splayer/README.md @@ -0,0 +1,118 @@ +# SPlayer + +🎉 一个简约的音乐播放器,支持逐字歌词,下载歌曲,展示评论区,音乐云盘及歌单管理,音乐频谱,移动端基础适配 + +![SPlayer](https://file.lifebus.top/imgs/splayer_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +✨ 支持扫码登录 + +📱 支持手机号登录 + +📅 自动进行每日签到及云贝签到 + +💻 支持桌面歌词 + +💻 支持切换为本地播放器,此模式将不会连接网络 + +🎨 封面主题色自适应,支持全站着色 + +🌚 Light / Dark / Auto 模式自动切换 + +📁 本地歌曲管理及分类(建议先使用 音乐标签 进行匹配后再使用) + +📁 简易的本地音乐标签编辑及封面修改 + +🎵 支持播放部分无版权歌曲(可能会与原曲不匹配,客户端独占功能) + +⬇️ 下载歌曲 / 批量下载( 最高支持 Hi-Res,需具有相应会员账号 ) + +➕ 新建歌单及歌单编辑 + +❤️ 收藏 / 取消收藏歌单或歌手 + +🎶 每日推荐歌曲 + +📻 私人 FM + +☁️ 云盘音乐上传 + +📂 云盘内歌曲播放 + +🔄 云盘内歌曲纠正 + +🗑️ 云盘歌曲删除 + +📝 支持逐字歌词 + +🔄 歌词滚动以及歌词翻译 + +📹 MV 与视频播放 + +🎶 音乐频谱显示 + +⏭️ 音乐渐入渐出 + +🔄 支持 PWA + +💬 支持评论区 + +## 使用说明 + +### 音源 + +| 名称 | 代号 | 默认启用 | 注意事项 | +|--------------------------|-------------|------|------------------------------------------------| +| QQ 音乐 | `qq` | | 需要准备自己的 `QQ_COOKIE`(请参阅下方〈环境变量〉处)。必须使用 QQ 登录。 | +| 酷狗音乐 | `kugou` | ✅ | | +| 酷我音乐 | `kuwo` | | | +| 波点音乐 | `bodian` | ✅ | | +| 咪咕音乐 | `migu` | ✅ | 需要准备自己的 `MIGU_COOKIE`(请参阅下方〈环境变量〉处)。 | +| JOOX | `joox` | | 需要准备自己的 `JOOX_COOKIE`(请参阅下方〈环境变量〉处)。似乎有严格地区限制。 | +| YouTube(纯 JS 解析方式) | `youtube` | | 需要 Google 认定的**非中国大陆区域** IP 地址。 | +| YouTube(通过 `youtube-dl`) | `youtubedl` | | 需要自行安装 `youtube-dl`。 | +| YouTube(通过 `yt-dlp`) | `ytdlp` | ✅ | 需要自行安装 `yt-dlp`(`youtube-dl` 仍在活跃维护的 fork)。 | +| B 站音乐 | `bilibili` | | | +| B 站音乐 | `bilivideo` | | 在大陆地区外的IP地址可能查询不到某些版权视频(如索尼音乐上传的MV等) | +| 第三方网易云 API | `pyncmd` | | | + +- 支持 `pyncmd` 的 API 服务由 GD studio 提供。 + +### 配置项 + +| 变量名称 | 类型 | 描述 | 示例 | +|-----------------------|------|-----------------------------------------------------------------------|------------------------------------------------------------------| +| ENABLE_FLAC | bool | 激活无损音质获取 | `ENABLE_FLAC=true` | +| ENABLE_LOCAL_VIP | str | 激活本地黑胶 VIP,可选值:`true`(等同于 CVIP)、`cvip` 和 `svip` | `ENABLE_LOCAL_VIP=svip` | +| LOCAL_VIP_UID | str | 仅对这些 UID 激活本地黑胶 VIP,默认为对全部用户生效 | `LOCAL_VIP_UID=123456789,1234,123456` | +| ENABLE_HTTPDNS | bool | 激活故障的 Netease HTTPDNS 查询(不建议) | `ENABLE_HTTPDNS=true` | +| BLOCK_ADS | bool | 屏蔽应用内部分广告 | `BLOCK_ADS=true` | +| DISABLE_UPGRADE_CHECK | bool | 禁用更新检测 | `DISABLE_UPGRADE_CHECK=true` | +| DEVELOPMENT | bool | 激活开发模式。需要自己用 `yarn` 安装依赖 (dependencies) | `DEVELOPMENT=true` | +| FOLLOW_SOURCE_ORDER | bool | 严格按照配置音源的顺序进行查询 | `FOLLOW_SOURCE_ORDER=true` | +| JSON_LOG | bool | 输出机器可读的 JSON 记录格式 | `JSON_LOG=true` | +| NO_CACHE | bool | 停用 cache | `NO_CACHE=true` | +| MIN_BR | int | 允许的最低源音质,小于该值将被替换 | `MIN_BR=320000` | +| SELECT_MAX_BR | bool | 选择所有音源中的最高码率替换音频 | `SELECT_MAX_BR=true` | +| LOG_LEVEL | str | 日志输出等级。请见〈日志等级〉部分。 | `LOG_LEVEL=debug` | +| LOG_FILE | str | 从 Pino 端设置日志输出的文件位置。也可以用 `*sh` 的输出重导向功能 (`node app.js >> app.log`) 代替 | `LOG_FILE=app.log` | +| JOOX_COOKIE | str | JOOX 音源的 wmid 和 session_key cookie | `JOOX_COOKIE="wmid=; session_key="` | +| MIGU_COOKIE | str | 咪咕音源的 aversionid cookie | `MIGU_COOKIE=""` | +| QQ_COOKIE | str | QQ 音源的 uin 和 qm_keyst cookie | `QQ_COOKIE="uin=; qm_keyst="` | +| YOUTUBE_KEY | str | Youtube 音源的 Data API v3 Key | `YOUTUBE_KEY=""` | +| SIGN_CERT | path | 自定义证书文件 | `SIGN_CERT="./server.crt"` | +| SIGN_KEY | path | 自定义密钥文件 | `SIGN_KEY="./server.key"` | +| SEARCH_ALBUM | bool | 在其他音源搜索歌曲时携带专辑名称(默认搜索条件 `歌曲名 - 歌手`,启用后搜索条件 `歌曲名 - 歌手 专辑名`) | `SEARCH_ALBUM=true` | +| NETEASE_COOKIE | str | 网易云 Cookie | `MUSIC_U=007554xxx` | + +### 网易云服务器IP + +通过 `ping music.163.com` 获得网易云服务器的 IP 地址 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) +![Ms Studio](https://analytics.lifebus.top/p/wJix5nI1W) diff --git a/apps/splayer/data.yml b/apps/splayer/data.yml new file mode 100644 index 000000000..63c758990 --- /dev/null +++ b/apps/splayer/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: splayer + name: SPlayer + tags: + - WebSite + - Local + shortDescZh: 一个简约的音乐播放器 + shortDescEn: A minimalist music player + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/imsyy/SPlayer/ + github: https://github.com/imsyy/SPlayer/ + document: https://github.com/imsyy/SPlayer/ + architectures: + - amd64 + - arm64 diff --git a/apps/splayer/latest/data.yml b/apps/splayer/latest/data.yml new file mode 100644 index 000000000..34395d55e --- /dev/null +++ b/apps/splayer/latest/data.yml @@ -0,0 +1,71 @@ +additionalProperties: + formFields: + - default: 25884 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "103.135.240.77" + edit: true + envKey: NETEASE_SERVER_IP + labelZh: 网易云音乐服务器IP + labelEn: Netease Music Server IP + required: false + type: text + - default: "kugou bodian migu ytdlp bilibili qq kuwo joox youtube youtubedl bilivideo pyncmd" + edit: true + envKey: UNBLOCK_SOURCES + labelZh: 启用音源 + labelEn: Enable Music Sources + required: true + type: text + - default: "true" + edit: true + envKey: ENABLE_FLAC + labelZh: 启用无损音源 + labelEn: Enable FLAC + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" + - default: "" + edit: true + envKey: JOOX_COOKIE + labelZh: Joox 音源 Cookie + labelEn: Joox Cookie + required: false + type: text + - default: "" + edit: true + envKey: MIGU_COOKIE + labelZh: 咪咕音源 Cookie + labelEn: Migu Cookie + required: false + type: text + - default: "" + edit: true + envKey: QQ_COOKIE + labelZh: QQ 音源 Cookie + labelEn: QQ Music Cookie + required: false + type: text + - default: "" + edit: true + envKey: YOUTUBE_KEY + labelZh: YouTube 音源 API Key + labelEn: YouTube API Key + required: false + type: text + - default: "" + edit: true + envKey: NETEASE_COOKIE + labelZh: 网易云音乐音源 Cookie + labelEn: Netease Music Cookie + required: false + type: text diff --git a/apps/splayer/latest/docker-compose.yml b/apps/splayer/latest/docker-compose.yml new file mode 100644 index 000000000..636d71a6c --- /dev/null +++ b/apps/splayer/latest/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true + +services: + splayer: + image: imsyy/splayer:latest + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:25884 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + environment: + - TZ=Asia/Shanghai + - ENABLE_HTTPDNS=false + - BLOCK_ADS=true + - DISABLE_UPGRADE_CHECK=false + - DEVELOPMENT=false + - FOLLOW_SOURCE_ORDER=true + - JSON_LOG=false + - NO_CACHE=false + - SELECT_MAX_BR=true + - LOG_LEVEL=info + - SEARCH_ALBUM=true diff --git a/apps/splayer/latest/envs/default.env b/apps/splayer/latest/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/splayer/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/splayer/latest/envs/global.env b/apps/splayer/latest/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/splayer/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/splayer/latest/scripts/init.sh b/apps/splayer/latest/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/splayer/latest/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/splayer/latest/scripts/uninstall.sh b/apps/splayer/latest/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/splayer/latest/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/splayer/latest/scripts/upgrade.sh b/apps/splayer/latest/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/splayer/latest/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/splayer/logo.png b/apps/splayer/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2c40a83d496dbb27111e5405e3a791e2be58d894 GIT binary patch literal 17899 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 \ No newline at end of file