LX Music 的浏览器端移植版,基于 lx-music-desktop v2.12.2 的交互、数据处理思路与音源协议重新实现。项目采用 Vue 3、Vite 和 Cloudflare Workers,面向桌面浏览器优先设计。
本项目不是 Electron 渲染进程的直接搬运:浏览器端仅保留适合 Web 的播放、列表和在线内容能力,设置和列表默认存储在浏览器 IndexedDB 中,不依赖账号或自建数据库。
- 支持主流在线音乐平台的歌曲搜索、歌单搜索、歌单广场、歌单详情和排行榜。
- 支持播放、暂停、切歌、进度拖动、音量、静音、播放模式、倍速、保持音调、歌词副标题与 Media Session。
- 播放 URL 采用直连优先、Worker 代理回退和 URL 刷新恢复策略,并支持 Range 流式播放。
- 支持音频可视化、10 段均衡器、EQ 预设和卷积混响效果。
- 支持默认试听列表、喜欢列表、自建列表、曲目多选、排序、重复项处理、在线歌单收藏更新与列表导入导出。
- 支持浏览器下载;MP3 支持写入标题、歌手、专辑和歌词等 ID3 信息。
- 支持导入自定义音源。自定义脚本在 iframe 沙箱中执行,当前以获取
musicUrl为主要兼容目标。
| 层 | 技术 | 职责 |
|---|---|---|
| 前端 | Vue 3、Vue Router | 页面、交互、播放器与本地数据 |
| 构建 | Vite | 开发、构建与 Workers 集成 |
| Worker | Cloudflare Workers | 静态托管、健康检查、代理与访问探测 |
| 本地数据 | IndexedDB | 设置、列表、曲目和相关缓存 |
| 播放器 | HTMLAudioElement、Web Audio API | 播放、频谱、均衡器与混响 |
Worker 提供以下接口:
| 接口 | 说明 |
|---|---|
GET /api/health |
返回服务状态和可用接口 |
GET, POST /api/proxy |
请求及媒体流代理,支持必要的 Range 请求头转发 |
GET /api/probe?url=<target> |
探测目标地址的可访问性、媒体类型和 Range 支持情况 |
- Node.js 22 或更高版本
- npm
- Cloudflare 账号(仅部署时需要)
git clone https://github.com/Sytle1116/lx-music-cf.git
cd lx-music-cf
npm ci
# 启动开发服务器:http://localhost:5173
npm run dev# Vue 与 TypeScript 类型检查
npm run typecheck
# 生产构建
npm run build
# 本地预览构建产物
npm run preview项目通过 wrangler.jsonc 配置 Worker 入口和静态资源绑定,无需配置 D1、KV、R2 或必填环境变量。
# 首次登录 Cloudflare,会打开浏览器完成授权
npx wrangler login
# 构建并部署
npm run deploy修改 wrangler.jsonc 的绑定或 Workers 配置后,可更新类型定义:
npm run cf-typegen部署前请在 Cloudflare 控制台确认 Worker 名称、域名和访问策略。公开部署时尤其应限制代理接口的使用范围。
- 设置、列表和曲目数据保存在当前浏览器的 IndexedDB;清除站点数据会清除这些内容。
- 音乐播放、搜索和封面歌词请求会访问相应的第三方服务。
- 项目不提供账号系统、云端同步或云端歌单存储。
- 平台接口、签名、风控和媒体地址可能变化;搜索结果可用不代表音频 URL 一定能够播放。
- 不支持 Range 的音频地址可能无法拖动进度。
- 自定义源当前主要兼容
musicUrl;依赖 Node.js crypto、文件系统或其他 Node 专属 API 的脚本可能无法运行。 - 下载不包含任务中心、并发队列、断点续传或独立下载页;除 MP3 外主要按原始内容保存。
.lxmc列表导入导出依赖浏览器的CompressionStream和DecompressionStream。- 当前不包含桌面端窗口/托盘/全局热键、独立桌面歌词、本地音乐扫描、原生下载管线、自动更新、SQLite、系统代理、变调和 3D 环绕等能力。
- 移动端适配、PWA、离线缓存、多端同步和云端账号属于后续工作。
/api/proxy 和 /api/probe 用于处理跨域、媒体流和自定义源请求。当前项目尚未提供生产级鉴权、限流、目标白名单或响应体积限制。
请勿将默认配置直接作为公开通用代理服务部署。 在公开域名部署前,应至少补充目标域名白名单、访问控制、限流和滥用监控,避免 Worker 被用作开放代理出口。
本项目仅供技术学习与交流使用。请遵守所在地法律法规、第三方服务条款和音乐版权要求,支持正版音乐。项目不保证第三方接口、媒体链接或内容长期可用;使用者应自行承担部署和使用风险。
本项目使用 Apache License 2.0。