READMESource: main@51a2a224
ncm-player — 网易云音乐浮窗
一个运行在 DeepSeek Harness (DSH) Web 界面里的网易云音乐浮窗:可拖拽、可折叠, 支持歌单/歌曲/专辑浏览、同步歌词与翻译、播放队列、扫码登录自己账号。
功能
- 🎵 播放:播放/暂停、上一首/下一首、进度拖拽、音量、顺序/单曲循环/随机、封面
- 📃 歌单页:发现(搜索歌曲/歌单 + 热门歌单)/ 我的(创建的歌单 / 收藏的歌单 / 我喜欢的音乐 / 收藏的专辑)
- 📝 歌词:逐行同步高亮、点击跳转、歌词翻译(有翻译时显示)、迷你模式显示歌词
- 🔄 队列:管理/清空,自动持久化(重启后恢复队列、进度、模式、音量)
- 👤 账号:扫码登录(App 扫一扫)或粘贴 Cookie;登录后可用"我的音乐"与收藏
- 🪟 浮窗:可拖拽、收起为迷你条(可拖、显示歌词)、隐藏为右下角音符按钮;颜色跟随 DSH 皮肤主题
安装
方式一:从 npm 安装(推荐)
dsh plugin --profile web add @wolfgenerals/ncm-player
该命令会在 web profile 中安装依赖,并把 @wolfgenerals/ncm-player 加入 dsh.profile.bundles
列表(见 $DSH_HOME/profiles/web/package.json)。重启 DSH Web 后生效。
方式二:从 GitHub 安装
dsh plugin --profile web add github:WolfGenerals/ncm-player
该命令同样会把 @wolfgenerals/ncm-player 加入 dsh.profile.bundles 列表,重启 DSH Web 后生效。
本地开发
git clone https://github.com/WolfGenerals/ncm-player.git
重启 DSH Web 后生效。
数据保存(浏览器 localStorage)
登录态与播放队列保存在本机浏览器 localStorage(key: ncmply-settings),不再写入磁盘文件:
{
"account": { "cookie": "...", "uid": 123, "nickname": "..." },
"state": {
"queue": [ { "id": 1, "name": "...", "artists": "...", "album": "...", "cover": "...", "duration": 0 } ],
"index": -1, "mode": "order", "vol": 0.8, "quality": 320000, "time": 0
}
}
- 换浏览器或清除站点数据会丢失登录态/队列(需重新登录)。
- 升级自 ≤1.0.7 的用户:旧文件
~/.dsh/ncmply-settings会在启动时被只读读取一次并自动迁入 localStorage,随后不再写入(文件保留但不更新)。 - 浏览器隐私模式下 localStorage 不可用时,功能照常、仅不持久化。
注意事项
- 依赖本机 PATH 上的 Node.js 运行时,以及可访问
music.163.com的网络。 - 登录 Cookie 只用于请求 music.163.com,不发送给任何第三方。
- 收藏(点❤️)受网易云账号风控影响,失败时会有提示,属正常现象。
- 部分歌曲受版权/会员限制无法播放;歌词翻译仅当歌曲有翻译数据时显示。
- 仅供个人学习使用,请遵守网易云音乐服务条款与当地法律法规。
开发
# 结构
# index.mjs Host 半部(cordis 插件, webServer 路由 + node 子进程网络)
# client/src.js Client 半部源码(纯 JS + React.createElement,无 JSX/TS)
# lib/client.js Client 半部构建产物(scripts/build.mjs 生成)
# scripts/build.mjs 无依赖构建脚本
# cordis.patch.yml 组合 patch 层
Host 依赖 os/path 计算跨平台路径;settings 文件路径(DSH_HOME 优先, 回退 <home>/.dsh)
仅用于 ≤1.0.7 旧数据的只读迁移,host 不再写盘。
License
MIT
致谢
实现借鉴了 sanwuhundun/dsh-netease-music 的网易云音乐 API 对接与登录方案。
No comments yet. Be the first to write one.