[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2136":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":27,"discoverSource":28},2136,"CeruMusic","timeshiftsauce\u002FCeruMusic","timeshiftsauce","Ceru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器工具，借鉴洛雪音乐插件思想，提供插件运行框架与播放功能，不直接存储、提供任何音乐源文件。用户需通过自行选择、安装合规插件获取音乐相关数据，项目旨在为开发者提供桌面应用技术实践与学习案例，为用户提供合规的音乐播放工具框架。",null,"https:\u002F\u002Fgithub.com\u002Ftimeshiftsauce\u002FCeruMusic","Vue",1886,87,7,37,0,2,24,294,11,18.83,false,"main","2026-06-12 02:00:37","# Ceru Music（澜音）\n\n一个跨平台的音乐播放器应用，支持基于合规插件获取公开音乐信息与播放功能。\n\n## 项目简介\n\nCeru Music 是基于 Electron 和 Vue 开发的跨平台桌面音乐播放器工具，**仅提供插件运行框架与播放功能**，不直接存储、提供任何音乐源文件。用户需通过自行选择、安装合规插件获取音乐相关数据，项目旨在为开发者提供桌面应用技术实践与学习案例，为用户提供合规的音乐播放工具框架。\n\n\u003Cimg src=\"assets\u002Fimage-20251003173109619.png\" alt=\"image-20251003173109619\" style=\"zoom:33%;\" \u002F>\n\n![image-20251003173654569](assets\u002Fimage-20251003173654569.png)\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=timeshiftsauce\u002FCeruMusic&type=Date)](https:\u002F\u002Fwww.star-history.com\u002F#timeshiftsauce\u002FCeruMusic&Date)\n\n## 技术栈\n\n- **Electron**：用于构建跨平台桌面应用\n- **Vue 3**：前端框架，提供响应式 UI\n- **TypeScript**：增强代码可维护性和类型安全\n- **Pinia**：状态管理工具\n- **Vite**：快速的前端构建工具\n- **CeruPlugins**：音乐插件运行环境（仅提供框架，不包含默认插件）\n\n## 项目结构\n\n\u003Cdetails>\n  \u003Csummary>点击查看目录结构\u003C\u002Fsummary>\n\n```ast\nCeruMuisc\u002F\n    ├── .github\u002F\n    ├── scripts\u002F\n    ├── src\u002F\n    │   ├── common\u002F\n    │   │   ├── types\u002F\n    │   │   │   ├── playList.ts\n    │   │   │   └── songList.ts\n    │   │   ├── utils\u002F\n    │   │   │   ├── lyricUtils\u002F\n    │   │   │   │   ├── kg.js\n    │   │   │   │   └── util.ts\n    │   │   │   ├── common.ts\n    │   │   │   ├── nodejs.ts\n    │   │   │   └── renderer.ts\n    │   │   └── index.ts\n    │   ├── main\u002F\n    │   │   ├── events\u002F\n    │   │   │   ├── ai.ts\n    │   │   │   ├── autoUpdate.ts\n    │   │   │   ├── directorySettings.ts\n    │   │   │   ├── musicCache.ts\n    │   │   │   ├── pluginNotice.ts\n    │   │   │   └── songList.ts\n    │   │   ├── services\u002F\n    │   │   │   ├── music\u002F\n    │   │   │   │   ├── index.ts\n    │   │   │   │   ├── net-ease-service.ts\n    │   │   │   │   └── service-base.ts\n    │   │   │   ├── musicCache\u002F\n    │   │   │   │   └── index.ts\n    │   │   │   ├── musicSdk\u002F\n    │   │   │   │   ├── index.ts\n    │   │   │   │   ├── service.ts\n    │   │   │   │   └── type.ts\n    │   │   │   ├── plugin\u002F\n    │   │   │   │   ├── manager\u002F\n    │   │   │   │   │   ├── CeruMusicPluginHost.ts\n    │   │   │   │   │   └── converter-event-driven.ts\n    │   │   │   │   ├── index.ts\n    │   │   │   │   └── logger.ts\n    │   │   │   ├── songList\u002F\n    │   │   │   │   ├── ManageSongList.ts\n    │   │   │   │   └── PlayListSongs.ts\n    │   │   │   ├── ai-service.ts\n    │   │   │   └── ConfigManager.ts\n    │   │   ├── utils\u002F\n    │   │   │   ├── musicSdk\u002F\n    │   │   │   │   ├── api-source-info.ts\n    │   │   │   │   ├── index.js\n    │   │   │   │   ├── options.js\n    │   │   │   │   └── utils.js\n    │   │   │   ├── array.ts\n    │   │   │   ├── index.ts\n    │   │   │   ├── object.ts\n    │   │   │   ├── path.ts\n    │   │   │   ├── request.js\n    │   │   │   └── utils.ts\n    │   │   ├── autoUpdate.ts\n    │   │   └── index.ts\n    │   ├── preload\u002F\n    │   │   ├── index.d.ts\n    │   │   └── index.ts\n    │   ├── renderer\u002F\n    │   │   ├── public\u002F\n    │   │   │   ├── default-cover.png\n    │   │   │   ├── head.jpg\n    │   │   │   ├── logo.svg\n    │   │   │   ├── star.png\n    │   │   │   └── wldss.png\n    │   │   ├── src\u002F\n    │   │   │   ├── api\u002F\n    │   │   │   │   └── songList.ts\n    │   │   │   ├── components\u002F\n    │   │   │   │   ├── AI\u002F\n    │   │   │   │   │   └── FloatBall.vue\n    │   │   │   │   ├── ContextMenu\u002F\n    │   │   │   │   │   ├── composables.ts\n    │   │   │   │   │   ├── ContextMenu.vue\n    │   │   │   │   │   ├── demo.vue\n    │   │   │   │   │   ├── index.ts\n    │   │   │   │   │   ├── README.md\n    │   │   │   │   │   ├── types.ts\n    │   │   │   │   │   └── utils.ts\n    │   │   │   │   ├── layout\u002F\n    │   │   │   │   │   └── HomeLayout.vue\n    │   │   │   │   ├── Music\u002F\n    │   │   │   │   │   └── SongVirtualList.vue\n    │   │   │   │   ├── Play\u002F\n    │   │   │   │   │   ├── AudioVisualizer.vue\n    │   │   │   │   │   ├── FullPlay.vue\n    │   │   │   │   │   ├── GlobalAudio.vue\n    │   │   │   │   │   ├── PlaylistActions.vue\n    │   │   │   │   │   ├── PlaylistDrawer.vue\n    │   │   │   │   │   ├── PlayMusic.vue\n    │   │   │   │   │   └── ShaderBackground.vue\n    │   │   │   │   ├── Settings\u002F\n    │   │   │   │   │   ├── AIFloatBallSettings.vue\n    │   │   │   │   │   ├── DirectorySettings.vue\n    │   │   │   │   │   ├── MusicCache.vue\n    │   │   │   │   │   ├── PlaylistSettings.vue\n    │   │   │   │   │   ├── plugins.vue\n    │   │   │   │   │   └── UpdateSettings.vue\n    │   │   │   │   ├── PluginNoticeDialog.vue\n    │   │   │   │   ├── ThemeSelector.vue\n    │   │   │   │   ├── TitleBarControls.vue\n    │   │   │   │   ├── UpdateExample.vue\n    │   │   │   │   ├── UpdateProgress.vue\n    │   │   │   │   └── Versions.vue\n    │   │   │   ├── composables\u002F\n    │   │   │   │   └── useAutoUpdate.ts\n    │   │   │   ├── router\u002F\n    │   │   │   │   └── index.ts\n    │   │   │   ├── services\u002F\n    │   │   │   │   ├── music\u002F\n    │   │   │   │   │   ├── index.ts\n    │   │   │   │   │   └── service-base.ts\n    │   │   │   │   └── autoUpdateService.ts\n    │   │   │   ├── store\u002F\n    │   │   │   │   ├── ControlAudio.ts\n    │   │   │   │   ├── LocalUserDetail.ts\n    │   │   │   │   ├── search.ts\n    │   │   │   │   └── Settings.ts\n    │   │   │   ├── types\u002F\n    │   │   │   │   ├── audio.ts\n    │   │   │   │   ├── Sources.ts\n    │   │   │   │   └── userInfo.ts\n    │   │   │   ├── utils\u002F\n    │   │   │   │   ├── audio\u002F\n    │   │   │   │   │   ├── audioManager.ts\n    │   │   │   │   │   ├── download.ts\n    │   │   │   │   │   ├── useSmtc.ts\n    │   │   │   │   │   └── volume.ts\n    │   │   │   │   ├── color\u002F\n    │   │   │   │   │   ├── colorExtractor.ts\n    │   │   │   │   │   └── contrastColor.ts\n    │   │   │   │   └── playlist\u002F\n    │   │   │   │       ├── playlistExportImport.ts\n    │   │   │   │       └── playlistManager.ts\n    │   │   │   ├── views\u002F\n    │   │   │   │   ├── home\u002F\n    │   │   │   │   │   └── index.vue\n    │   │   │   │   ├── music\u002F\n    │   │   │   │   │   ├── find.vue\n    │   │   │   │   │   ├── list.vue\n    │   │   │   │   │   ├── local.vue\n    │   │   │   │   │   ├── recent.vue\n    │   │   │   │   │   └── search.vue\n    │   │   │   │   ├── settings\u002F\n    │   │   │   │   │   └── index.vue\n    │   │   │   │   ├── welcome\u002F\n    │   │   │   │   │   └── index.vue\n    │   │   │   │   └── ThemeDemo.vue\n    │   │   │   ├── App.vue\n    │   │   │   ├── env.d.ts\n    │   │   │   └── main.ts\n    │   │   ├── auto-imports.d.ts\n    │   │   ├── components.d.ts\n    │   │   └── index.html\n    │   └── types\u002F\n    │       ├── musicCache.ts\n    │       └── songList.ts\n    ├── website\u002F\n    │   ├── CeruUse.html\n    │   ├── design.html\n    │   ├── index.html\n    │   ├── pluginDev.html\n    │   ├── script.js\n    │   └── styles.css\n    ├── electron-builder.yml\n    ├── electron.vite.config.ts\n    ├── eslint.config.js\n    ├── LICENSE\n    ├── package-lock.json\n    ├── package.json\n    ├── qodana.sarif.json\n    ├── qodana.yaml\n    ├── README.md\n    ├── tsconfig.json\n    ├── tsconfig.node.json\n    ├── tsconfig.web.json\n    └── yarn.lock\n```\n\n\u003C\u002Fdetails>\n\n## 主要功能\n\n- 提供插件加载与管理功能，支持通过合规插件获取公开音乐信息\n- 支持通过插件获取歌词、专辑封面等公开元数据\n- 支持虚拟滚动列表，优化大量数据渲染性能\n- 本地播放列表管理（仅存储用户手动创建的列表结构，不包含音乐文件）\n- **提示**：本地数据仅保存在用户设备本地，未进行云端备份，用户需自行备份以防止数据丢失\n- 精美的用户界面与动画效果\n- **插件生态框架**（插件需用户自行获取并确保合规性）\n\n## 安装与使用\n\n### 推荐开发环境\n\n- **IDE**: VS Code 或 WebStorm\n- **Node.js 版本**: 22 及以上\n- **包管理器**: **yarn**\n- **项目后端**: 欢迎对接[https:\u002F\u002Fapi.ceru.shiqianjiang.cn\u002Fapi-docs](https:\u002F\u002Fapi.ceru.shiqianjiang.cn\u002Fapi-docs)\n\n### 项目设置\n\n1. 安装依赖：\n\n   ```bash\n   yarn install\n   ```\n\n2. 启动开发服务器：\n\n   ```bash\n   yarn dev\n   ```\n\n3. 构建应用：\n\n   ```bash\n   yarn build\n   ```\n\n### 平台构建指令\n\n- Windows\n\n  ```bash\n  yarn build:win\n  ```\n\n- macOS\n\n  ```bash\n  yarn build:mac\n  ```\n\n- Linux\n\n  ```bash\n  yarn build:linux\n  ```\n\n> 提示：构建后的应用仅包含播放器框架，需用户自行配置合规插件方可获取音乐数据。\n\n## 文档与资源\n\n- 产品设计文档：涵盖项目架构、核心功能设计和开发规范（不含任何音乐数据源信息）。\n- [插件开发文档](https:\u002F\u002Fceru.docs.shiqianjiang.cn\u002Fguide\u002FCeruMusicPluginDev.html)：仅提供插件开发技术规范，**明确要求插件开发者需遵守数据来源平台的用户协议与版权法**，禁止开发、传播获取非公开数据的插件。\n\n## 开源许可\n\n本项目源代码遵循 **GNU AGPL v3.0**，仅授权用户对项目框架进行学习、修改与二次开发，不包含任何音乐数据相关授权。详情请参阅 [LICENSE](.\u002FLICENSE) 文件，使用前请务必阅读许可条款。\n\n## 第三方组件与致谢\n\n- 歌词组件使用自 [applemusic-like-lyrics](https:\u002F\u002Fgithub.com\u002FSteve-xmh\u002Fapplemusic-like-lyrics) 项目，感谢 Steve-xmh 及其贡献者的出色工作。该组件遵循其上游许可（AGPL-3.0），相关使用与分发需符合其许可要求。\n\n## 贡献指南\n\n欢迎开发者贡献代码与反馈建议，贡献内容需符合以下要求：\n\n1. 仅涉及播放器框架功能优化、bug 修复、文档完善，不包含任何音乐数据源相关代码。\n2. 遵循 [Git 提交规范](#) 并确保代码符合项目风格指南。\n3. 贡献的代码需无第三方版权纠纷，且不违反开源许可协议。\n\n## 联系方式\n\n如有技术问题或合作意向\n可通过如下方式联系\n\n- QQ: 2115295703\n- 微信：13600973542\n- 邮箱：sqj@shiqianjiang.cn\n\n## 项目开发者\n\n- **时迁酱**：产品总体设计与开发\n\n  \u003Cimg src=\"assets\u002Fhead.jpg\" alt=\"head.jpg (940×940)\" style=\"zoom:15%;\" \u002F>\n\n- **无聊的霜霜**：首页设计&Ai助手\n\n  \u003Cimg src=\"assets\u002Fimage-20250827181604432.png\" alt=\"image-20250827181604432\" style=\"zoom:25%;\" \u002F>\n\n- **Star**：**插件管理**相关功能&部分接口封装\n\n  \u003Cimg src=\"assets\u002Fimage-20250827181535681.png\" alt=\"image-20250827181535681\" style=\"zoom:25%;\" \u002F>\n\n- **lemon**：修复部分bug&新增部分功能（简称：打杂）\n\n  \u003Cimg src=\"assets\u002Fimage-20260102767362357.jpg\" alt=\"image-20260102767362357\" style=\"zoom:25%;\" \u002F>\n\n**Tips**: 排名不分先后\n\n# 法律声明与免责条款\n\n**重要提示：使用本项目前，请务必仔细阅读本条款，使用本项目即视为你已充分理解并同意本条款全部内容。**\n\n### 一、定义约定\n\n- “GNU AGPL v3.0”：指 Ceru Music（澜音）桌面播放器框架及源代码，不包含任何第三方插件或音乐数据。\n- “**用户**”：指下载、安装、使用本项目的个人或组织。\n- “**合规插件**”：指符合数据来源平台用户协议、不侵犯第三方版权、不获取非公开数据的插件。\n- “**版权内容**”：指包括但不限于音乐文件、歌词、专辑封面、艺人信息等受著作权法保护的内容。\n\n### 二、数据与内容责任\n\n1. 本项目**不直接获取、存储、传输任何音乐数据或版权内容**，仅提供插件运行框架。用户通过插件获取的所有数据，其合法性、准确性由插件提供者及用户**自行负责**，本项目不承担任何责任。\n2. 若用户使用的插件存在获取非公开数据、侵犯第三方版权等违规行为，相关法律责任由用户及插件提供者承担，与本项目无关。\n3. 本项目使用的字体、图片等素材，均来自开源社区或已获得合法授权，若存在侵权请联系项目维护者立即移除，本项目将积极配合处理。\n\n### 三、版权合规要求\n\n1. 用户承诺：使用本项目时，仅通过合规插件获取音乐相关信息，且获取、使用版权内容的行为符合**《中华人民共和国著作权法》**及相关法律法规，不侵犯**任何第三方**合法权益。\n2. 用户需知晓：任何未经授权下载、传播、使用受版权保护的音乐文件的行为，均可能构成侵权，需自行承担法律后果。\n3. 本项目倡导 “尊重版权、支持正版”，提醒用户通过官方音乐平台获取授权音乐服务。\n\n### 四、免责声明\n\n1. 因用户使用非合规插件、违反法律法规或第三方协议导致的任何法律责任（包括但不限于侵权赔偿、行政处罚），均由用户自行承担，本项目不承担任何直接、间接、连带或衍生责任。\n2. 因本项目框架本身的 **bug** 导致的用户设备故障、数据丢失，本项目仅承担在合理范围内的技术修复责任，不承担由此产生的间接损失（如商誉损失、业务中断损失等）。\n3. 本项目为开源学习项目，不提供商业服务，对用户使用本项目的效果不做任何明示或暗示的保证。\n\n### 五、使用限制\n\n1. 本项目仅允许用于**非商业、纯技术学习目的**，禁止用于任何商业运营、盈利活动，禁止修改后用于侵犯第三方权益的场景。\n2. 禁止在违反当地法律法规、本声明或第三方协议的前提下使用本项目，若用户所在地区禁止此类工具的使用，应立即停止使用。\n3. 禁止将本项目源代码或构建后的应用，与违规插件捆绑传播，禁止利用本项目从事任何违法违规活动。\n\n### 六、其他\n\n1. 本声明的效力、解释及适用，均适用中华人民共和国法律（不含港澳台地区法律）。\n2. 若用户与本项目维护者就本声明产生争议，应首先通过友好协商解决；协商不成的，任何一方均有权向本项目维护者所在地有管辖权的人民法院提起诉讼。\n\n## 赞助\n\n感谢**伤心的云**提供的16h-16g长期支持\n\n> 伤心的云 服务器 低至1元\u002F月 1000mbps 超高带宽\n>\n> 16h-16g 38.99元\u002F月 独立ip\n>\n> [点击前往查看](https:\u002F\u002Fsadidc.com\u002Faff\u002FVQAXGBZT)\n\n若您认可本项目的技术价值，欢迎通过以下方式支持开发者（仅用于项目技术维护与迭代）：\n\u003Cimg src=\"assets\u002Fimage-20250827175356006.png\" alt=\"赞助方式1\" style=\"zoom:33%;\" \u002F>\u003Cimg src=\"assets\u002Fimage-20250827175547444.png\" alt=\"赞助方式2\" style=\"zoom: 33%;\" \u002F>\n","Ceru Music 是一个基于 Electron 和 Vue 开发的跨平台桌面音乐播放器工具，它提供插件运行框架与播放功能，但不直接存储或提供任何音乐源文件。用户需要自行选择和安装合规插件来获取音乐相关数据。该项目的核心技术包括使用 Electron 构建跨平台应用、Vue 3 提供响应式 UI、TypeScript 增强代码可维护性和类型安全、Pinia 进行状态管理以及 Vite 作为快速前端构建工具。此外，Ceru Music 还支持自定义插件扩展，为开发者提供了丰富的技术实践和学习案例。适合需要灵活定制音乐播放体验的用户，以及希望深入了解桌面应用开发技术的开发者。","2026-06-11 02:48:21","trending"]