🎵 A cross-platform music player with Jellyfin / Navidrome / Emby media server support, word-by-word lyrics, desktop & taskbar lyrics, cloud music drive, local library management, audio spectrum visualization and mobile-friendly UI. 简约的跨平台音乐播放器,支持逐字歌词、桌面歌词、任务栏歌词、云盘音乐、本地音乐管理及流媒体播放
  • TypeScript 46.3%
  • Vue 37%
  • JavaScript 8.4%
  • Rust 7.8%
  • SCSS 0.3%
  • Other 0.1%
Find a file
imsyy ed080dd9e2
Merge pull request #1042 from MoYingJi/pr/shortcut
feat(shortcut): 增加提示,设置完快捷键后 blur 输入框
2026-04-17 17:49:35 +08:00
.github 🐞 fix: 优化全屏封面可见性 #876 2026-02-15 21:29:44 +08:00
docs fix(Unblock): 修复空字符串匹配问题,补充 API 文档 2026-03-21 01:48:24 +08:00
electron fix(taskbar-lyric): 修复任务栏歌词鼠标命中区域错位 2026-04-17 17:45:45 +08:00
native Merge branch 'dev' into feature/dolby-atmos-support 2026-03-02 11:55:55 +08:00
public feat(mac/tray/lyric): 新增 macOS 状态栏歌词与托盘图标适配 (#843) 2026-02-13 01:15:56 +08:00
screenshots Add files via upload 2025-12-21 22:23:57 +08:00
scripts 🦄 refactor: 优化构建脚本 2026-02-08 20:13:08 +08:00
src Merge pull request #1042 from MoYingJi/pr/shortcut 2026-04-17 17:49:35 +08:00
web/loading 🦄 refactor: 全局代码格式化 2026-01-27 01:03:32 +08:00
.dockerignore feat: 支持 Docker 部署 #82 2023-12-20 14:40:39 +08:00
.editorconfig 🦄 refactor: 为 Rust 代码使用 4 个空格缩进 2026-01-14 21:42:32 +08:00
.env.example 🌈 style: 优化导航栏右上角触发 2025-12-10 11:24:16 +08:00
.eslintrc-auto-import.json feat: 切换虚拟列表组件 2024-10-09 17:53:44 +08:00
.gitattributes 🌈 style: 优化部分样式 2026-02-09 18:14:31 +08:00
.gitignore 🐞 fix: 类型修复 2026-03-04 15:54:44 +08:00
.npmrc 🦄 refactor: convert to TypeScript #174 2024-09-26 11:57:23 +08:00
.prettierignore 🔧 build: 优化原生模块构建 2026-02-08 19:46:07 +08:00
.prettierrc.json 🦄 refactor: convert to TypeScript #174 2024-09-26 11:57:23 +08:00
AGENTS.md docs(Agent): 修复图标路径,顺便 Pangu 了一个空格 (#1001) 2026-03-15 14:34:47 +08:00
auto-eslint.mjs 🔧 build: 更新依赖版本 2026-02-13 23:44:03 +08:00
auto-imports.d.ts 🔧 build: 更新依赖版本 2026-02-13 23:44:03 +08:00
Cargo.lock feat(automix): 添加音频调性检测以改善混音和谐度 2026-02-15 11:31:48 +08:00
Cargo.toml feat: 实现基础的任务栏歌词 (#777) 2026-02-01 23:02:28 +08:00
CHANGELOG.md 🐞 fix: 优化全屏封面可见性 #876 2026-02-15 21:29:44 +08:00
CLAUDE.md 🐞 fix: 类型修复 2026-03-04 15:54:44 +08:00
components.d.ts feat: 新增歌曲详情复制 2026-02-15 20:58:01 +08:00
dev-app-update.yml 🦄 refactor: convert to TypeScript #174 2024-09-26 11:57:23 +08:00
docker-compose.yml feat: Docker 镜像内置 UnblockNeteaseMusic, 支持播放部分无版权歌曲 2025-03-15 11:28:12 +08:00
docker-entrypoint.sh chore: 修改默认 unblock source 为 kugou bodian pyncmd 2025-10-18 19:56:20 +08:00
Dockerfile 🐞 fix: 修复网页端登录问题 #722 2026-01-09 15:26:54 +08:00
electron-builder.config.ts 🐞 fix: 去除构建签名 2026-02-14 22:54:21 +08:00
electron.vite.config.ts feat: 将音频分析任务移至独立工作线程执行 2026-02-15 19:16:56 +08:00
env.d.ts 🌈 style: 优化导航栏右上角触发 2025-12-10 11:24:16 +08:00
eslint.config.mjs 🦄 refactor: 合并任务栏歌词相关 IPC 通道 (#860) 2026-02-13 14:48:56 +08:00
index.html 🦄 refactor: 全局代码格式化 2026-01-27 01:03:32 +08:00
LICENSE 📃 docs: Change LICENSE 2023-12-12 12:49:21 +08:00
nginx.conf fix: 修复 UnblockNeteaseMusic 返回非 https 协议链接时反代失败的问题 2025-10-18 19:52:45 +08:00
package.json chore(deps): 更新 @applemusic-like-lyrics/core 依赖至 0.3.2 2026-04-07 21:40:02 +08:00
pnpm-lock.yaml chore(deps): 更新 @applemusic-like-lyrics/core 依赖至 0.3.2 2026-04-07 21:40:02 +08:00
pnpm-workspace.yaml feat: 实现基础的任务栏歌词 (#777) 2026-02-01 23:02:28 +08:00
README.md docs(README): Add links for badges 2026-02-17 17:27:16 +08:00
tsconfig.json 🦄 refactor: convert to TypeScript #174 2024-09-26 11:57:23 +08:00
tsconfig.node.json 🦄 refactor: 合并任务栏歌词相关 IPC 通道 (#860) 2026-02-13 14:48:56 +08:00
tsconfig.web.json 🐞 fix: 类型修复 2026-03-04 15:54:44 +08:00
vercel.json 🐞 fix: 修复构建 & Docker 2025-12-31 11:49:52 +08:00

logo

SPlayer

一个简约的音乐播放器

API Docs | 交流群 | 开发版 | 发行版


Stars Version Build Release License Issues Ask DeepWiki

main

说明

提示

Important

严肃警告

  • 请务必遵守 GNU Affero General Public License (AGPL-3.0) 许可协议
  • 在您的修改、演绎、分发或派生项目中,必须同样采用 AGPL-3.0 许可协议,并在适当的位置包含本项目的许可和版权信息
  • 若您用于售卖或其他盈利用途,必须提供本项目的源代码及原项目链接。另外由于本项目涉及第三方,售卖后可能遭受法律或诉讼风险。如若发现违反许可协议,作者保留追究法律责任的权利
  • 禁止在二开项目中修改程序原版权信息( 您可以添加二开作者信息
  • 感谢您的尊重与理解
  • 本项目采用 Vue 3 + TypeScript + Naïve UI + Electron 开发
  • Node.js 版本要求:>= 20包管理器pnpm >= 10
  • 默认会构建原生模块,需准备 Rust 工具链;如仅需要网页端构建或暂时跳过,可设置环境变量 SKIP_NATIVE_BUILD=true
  • 支持网页端与客户端,由于设备有限,目前仅保证 Windows 系统的适配,其他平台如遇问题可以提 Issue 或自行解决后选择提 PR
  • 欢迎各位大佬 Star 😍

🧑‍💻 开发

快速开始

  1. 安装依赖:pnpm install
  2. 复制 .env.example.env 并按需修改
  3. 启动开发:pnpm dev
  4. 构建:
    • pnpm build
    • pnpm build:win

跳过原生模块构建

默认会编译 native/* 下的原生模块(需要 Rust。如果你的场景不需要原生能力可设置 SKIP_NATIVE_BUILD=true 后再执行 pnpm dev / pnpm build

💬 交流群

交流群

👀 Demo

  • 在线演示:SPlayer

    如打不开,说明已经失效请自行前往 获取

🎉 功能

  • 支持扫码登录
  • 📱 支持手机号登录
  • 📅 自动进行每日签到及云贝签到
  • 💻 支持桌面歌词
  • 💻 支持切换为本地播放器,此模式将不会连接网络
  • 🎨 封面主题色自适应,支持全站着色
  • 🌚 Light / Dark / Auto 模式自动切换
  • 📁 本地歌曲管理及分类(建议先使用 音乐标签 进行匹配后再使用)
  • 📁 本地音乐标签编辑及封面修改
  • 新建歌单及歌单编辑
  • ❤️ 收藏 / 取消收藏歌单或歌手
  • ☁️ 云盘音乐上传
  • 📂 云盘内歌曲播放
  • 🔄 云盘内歌曲纠正
  • 🗑️ 云盘歌曲删除
  • 🌐 支持 Subsonic / Navidrome 等流媒体服务(多服务器支持、自动连接)
  • 📝 支持逐字歌词
  • 🔄 歌词滚动以及歌词翻译
  • 📹 MV 与视频播放
  • 🎶 音乐频谱显示
  • ⏭️ 音乐渐入渐出
  • 🔄 支持 PWA
  • 💬 支持评论区
  • 🎵 支持 Last.fm Scrobble播放记录上报
  • 📱 移动端基础适配

🖼️ 界面展示

开发中,仅供参考

主页面

主页面

播放页面

播放页面

发现页面

发现页面

歌单页面

发现页面

评论页面

发现页面

本地音乐

发现页面

📦 获取

二进制安装方案

稳定版

通常情况下,可以在 Releases 中获取稳定版

也可前往 SPlayer 官网 获取稳定版

开发版

可以通过 GitHub Actions 工作流获取最新的开发版

Dev Workflow

自行部署方案

⚙️ Docker 部署

安装及配置 Docker 将不在此处说明,请自行解决

本地构建

请尽量拉取最新分支后使用本地构建方式,在线部署的仓库可能更新不及时

# 构建
docker build -t splayer .

# 运行
docker run -d --name SPlayer -p 25884:25884 splayer
# 或使用 Docker Compose
docker-compose up -d

Docker 镜像内包含网页端以及运行所需的服务,默认通过 25884 端口访问。

在线部署
# 从 Docker Hub 拉取
docker pull imsyy/splayer:latest
# 从 GitHub ghcr 拉取
docker pull ghcr.io/imsyy/splayer:latest

# 运行
docker run -d --name SPlayer -p 25884:25884 imsyy/splayer:latest

以上步骤成功后,将会在本地 localhost:25884 启动,如需更换端口,请自行修改命令行中的第一个端口号

⚙️ Vercel 部署

其他部署平台大致相同,在此不做说明

  1. 本程序依赖 NeteaseCloudMusicApi 运行,请确保您已成功部署该项目或兼容的项目,并成功取得在线访问地址

  2. 点击本仓库右上角的 Fork,复制本仓库到你的 GitHub 账号

  3. 复制 /.env.example 文件并重命名为 /.env

  4. .env 文件中的 VITE_API_URL 改为第一步得到的 API 地址

    VITE_API_URL = "https://example.com";
    
  5. Build and Output Settings 中的 Output Directory 改为 out/renderer

    build

  6. 点击 Deploy,即可成功部署

⚙️ 服务器部署

  1. 重复 ⚙️ Vercel 部署 中的 1 - 4 步骤

  2. 克隆仓库

    git clone https://github.com/imsyy/SPlayer.git
    
  3. 安装依赖

    pnpm install
    
  4. 编译打包

    pnpm build
    
  5. 将站点运行目录设置为 out/renderer 目录

⚙️ 本地部署

  1. 本地部署需要用到 Node.js>= 20可前往 Node.js 官网 下载安装包,请下载最新稳定版

  2. 安装 pnpm>= 10

    corepack enable
    # 或
    npm install pnpm -g
    
  3. 克隆仓库并拉取至本地,此处不再赘述

  4. 使用 pnpm install 安装项目依赖(若安装过程中遇到网络错误,请使用国内镜像源替代,此处不再赘述)

  5. 复制 .env.example 文件并重命名为 .env 并修改配置(如需跳过原生模块构建,可设置 SKIP_NATIVE_BUILD=true

  6. 打包客户端,请依据你的系统类型来选择,打包成功后,会输出安装包或可执行文件在 /dist 目录中,可自行安装

    默认情况下,构建命令仅会构建当前系统架构的版本。如需构建特定架构(如 x64 + arm64请在命令后追加参数例如pnpm build:win -- --x64 --arm64

    命令 系统类型
    pnpm build:win Windows
    pnpm build:linux Linux
    pnpm build:mac macOS

😘 鸣谢

特此感谢为本项目提供支持与灵感的项目:

🗺️ 贡献者联盟

欢迎加入我们 🥰! 一起为 SPlayer 贡献一份力量。 感谢以下所有贡献者 💖

SPlayer 项目贡献者

📢 免责声明

本项目部分功能使用了网易云音乐的第三方 API 服务,仅供个人学习研究使用,禁止用于商业及非法用途

同时,本项目开发者承诺 严格遵守相关法律法规和网易云音乐 API 使用协议,不会利用本项目进行任何违法活动。 如因使用本项目而引起的任何纠纷或责任,均由使用者自行承担。本项目开发者不承担任何因使用本项目而导致的任何直接或间接责任,并保留追究使用者违法行为的权利

请使用者在使用本项目时遵守相关法律法规,不要将本项目用于任何商业及非法用途。如有违反,一切后果由使用者自负。 同时,使用者应该自行承担因使用本项目而带来的风险和责任。本项目开发者不对本项目所提供的服务和内容做出任何保证

感谢您的理解

📜 开源许可

  • 本项目仅供个人学习研究使用,禁止用于商业及非法用途
  • 本项目基于 GNU Affero General Public License (AGPL-3.0) 许可进行开源
    1. 修改和分发: 任何对本项目的修改和分发都必须基于 AGPL-3.0 进行,源代码必须一并提供
    2. 派生作品: 任何派生作品必须同样采用 AGPL-3.0,并在适当的地方注明原始项目的许可证
    3. 注明原作者: 在任何修改、派生作品或其他分发中,必须在适当的位置明确注明原作者及其贡献
    4. 免责声明: 根据 AGPL-3.0,本项目不提供任何明示或暗示的担保。请详细阅读 GNU Affero General Public License (AGPL-3.0) 以了解完整的免责声明内容
    5. 社区参与: 欢迎社区的参与和贡献,我们鼓励开发者一同改进和维护本项目
    6. 许可证链接: 请阅读 GNU Affero General Public License (AGPL-3.0) 了解更多详情

Star History

Star History Chart