Skip to content

[v2.11.6] - 2026-08-21

✨ New Features

  • 31a4d18 - jsplugin: fetch 响应头支持多值无损与标准 Headers 读取方法 (commit by @hanxi)
  • 85d4330 - GET /api/v1/songs/{id}/tracks 音轨枚举端点 (commit by @hanxi)
  • 825f70f - scan: 外部封面图片查找 + 歌单封面优先外部图片 (commit by @hanxi)
  • a954521 - jsplugin: 新增 songs.refreshMetadata 桥接,支持带 Headers 的远程元数据提取 (commit by @hanxi)
  • caecb48 - playlist: 新增歌单置顶接口 (commit by @hanxi)

🐛 Bug Fixes

  • 5deae33 - services: MoveFile 跨盘检测兼容 Windows ERROR_NOT_SAME_DEVICE (commit by @hanxi)
  • 25786f9 - app: 加 CORP 头,修 Web 端跨源封面/音频被 COEP 静默阻断 (commit by @hanxi)
  • 6c905f7 - database: :memory: 限制为单连接,修并发用例随机报 no such table (commit by @hanxi)
  • 27ded61 - fileutil: 修复 Windows 编译错误,syscall.ERROR_NOT_SAME_DEVICE 未定义 (commit by @hanxi)
  • f474555 - ci: 修复发版时 tag run 被 dev run 阻塞导致正式版延迟发布 (commit by @hanxi)

⚡ Performance Improvements

  • 3ef2073 - cover: 缩略图磁盘缓存,避免重复解码+缩放 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • cb8f5ef - 更新 songloft-player 子模块指针 (commit by @hanxi)
  • 15a62a1 - docker: entrypoint 启动时输出完整版本信息 (commit by @hanxi)
  • 14fe330 - 更新 songloft-player 子模块(播放速度按钮样式优化) (commit by @hanxi)
  • c9d31d4 - bump plugin-toolchain 子模块(songs.refreshMetadata 类型) (commit by @hanxi)
  • 8146f43 - player: 更新 songloft-player 子模块指针 (commit by @hanxi)
  • 8316d53 - jsplugin: 更新 songloft-plugin-miot 子模块指针 (commit by @hanxi)
  • 52f098d - miot: 更新 songloft-plugin-miot 子模块指针 (commit by @hanxi)
  • c5df438 - release version 2.11.6 (commit by @hanxi)

[v2.11.5] - 2026-08-16

✨ New Features

  • 888fb48 - add PUT /playlists/{id}/songs/move endpoint for single-song reposition (commit by @hanxi)
  • c5bf861 - songs: 新增 GET /songs/random 随机歌曲接口 (commit by @hanxi)

🐛 Bug Fixes

  • ff42922 - 修复项目中所有 UTF-8 乱码字符 (commit by @hanxi)
  • a4b906b - app: 修复 Close() 资源泄漏 + .js MIME 补 charset + 注释乱码修正 (PR #393 by @xiaoniao427)
  • 198bc51 - docs: 清理 Swagger @Router 注释中冗余的 /api/v1 前缀,并写入规范文档 (commit by @hanxi)

♻️ Refactors

  • f00e426 - playlist: 将歌单永久排序从客户端移至服务端 (commit by @hanxi)

👷 Build System

  • bd02ac8 - 正式版 release 要求所有平台 bundled 构建成功才发布 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • ce116e1 - 更新 miot 插件 (设置页双栏独立滚动 + 默认选中歌单) (commit by @hanxi)
  • b024a84 - bump songloft-plugin-miot (修复输入框/下拉框焦点边框 & 自动填充) (commit by @hanxi)
  • 5e8ec9f - release version 2.11.5 (commit by @hanxi)

[v2.11.4] - 2026-08-12

✨ New Features

  • e35df74 - docker: 支持 PUID/PGID 非 root 运行 (commit by @hanxi)
  • 658b3df - jsplugin: playlists.getSongs bridge 支持 sort/order 排序参数 (commit by @hanxi)
  • ef4bbd7 - play: 后端支持倍速播放转码 (0.5x–2x) (commit by @hanxi)
  • 8506c11 - 登录页新增同意协议勾选功能 (commit by @hanxi)
  • 6633cec - normalize: 开放音量均衡目标响度自定义 (commit by @hanxi)
  • a7efc92 - proxy: 新增 /proxy/transcode 实时转码代理;radio 转码接入 http_proxy (commit by @hanxi)

🐛 Bug Fixes

  • d27d727 - player: 修复 Web 播放错位并优化日志导出 (commit by @hanxi)
  • a60878c - player: 更新 Windows 首帧尺寸修复 (commit by @hanxi)
  • 56c7562 - scan: 修复自动创建歌单重复的问题 (commit by @hanxi)
  • d8efd8f - build: armv7 交叉编译跳过 UPX 压缩,避免运行时 futex 崩溃 (commit by @hanxi)
  • 674d0f3 - jsplugin: 更新 MIoT 插件子模块指针,修复歌曲定位跳回第一屏 (commit by @hanxi)
  • 6cabc75 - player: 更新 songloft-player 子模块指针 (songloft-org/songloft#361) (commit by @hanxi)
  • 58e174a - playlist: song-ids 接口支持自定义 sort/order (commit by @hanxi)
  • 45c4985 - play: 修复音量均衡切歌截断音频被误判为完整缓存并永久保留 (commit by @hanxi)
  • 038ccdf - docs: 安装落地页 Scoop 章节与 README 同步 (PR #384 by @altman08)
  • 1a65f5b - cover: 限制缩略图并发解码防止弱设备 OOM (commit by @hanxi)
  • 4ede17d - app: 修复 Tracely 初始化多余逗号导致编译失败 (commit by @hanxi)
  • 866478f - metadata: ProbeForValidation 使用 tag.FileType 替代临时文件扩展名识别格式 (commit by @hanxi)
  • 604bb82 - miot: 修复 miot 插件 webf 重写后的前端 bug 与宿主返回键通路 (commit by @hanxi)

📝 Documentation Changes

  • 9360a43 - update CHANGELOG for v2.11.3 (commit by @github-actions[bot])
  • 33e8e25 - 新增第三方客户端板块(音乐方舟、箭头音乐) (commit by @hanxi)
  • 6dd7673 - 第三方客户端Logo改用官网图标 (commit by @hanxi)
  • 8d74c11 - 修正隐私宣传措辞,对齐 PRIVACY.md 实际口径 (commit by @hanxi)
  • 6ebc26d - player: 记录播放按钮形状设计规范 (commit by @hanxi)
  • c42cdbb - 第三方客户端新增音流(Stream Music) (commit by @hanxi)

🔧 Chores

  • 322a631 - player: 更新子模块修复冷启动首次点歌错歌 (commit by @hanxi)
  • a397bd3 - player: 同步插件商店刷新修复 (commit by @hanxi)
  • 486498d - player: 更新播放器子模块指针 (commit by @hanxi)
  • b36328e - 更新 songloft-player 子模块指针 (commit by @hanxi)
  • 9073f29 - 更新子模块 - 清理GitHub加速代理预设,添加AI Prompt复制功能 (commit by @hanxi)
  • 5c198a7 - player: 更新 songloft-player 子模块指针 (commit by @hanxi)
  • e47d96d - player: 更新 songloft-player 子模块指针 (commit by @hanxi)
  • 7739690 - bump songloft-plugin-miot (commit by @hanxi)
  • a42a361 - release version 2.11.4 (commit by @hanxi)

[v2.11.3] - 2026-08-09

🐛 Bug Fixes

  • 42b0906 - plugin-builder: 更新前端源码监听修复 (commit by @hanxi)
  • faf0a38 - player: 同步 Web 更新检测修复 (commit by @hanxi)
  • eb30e90 - 修复客户端更新问题 (commit by @hanxi)

🔧 Chores

[v2.11.1] - 2026-08-03

💥 BREAKING CHANGES

  • due to a9a5938 - 本地 .lrc 歌词文件优先适配 (commit by @hanxi):

    扫描/重新导入时若读不到歌词,不再清空库中已有歌词。
    要清空歌词请使用 PUT /api/v1/songs/{id}/lyrics 接口。
    Fixes songloft-org/songloft-plugin-miot#62

✨ New Features

  • 85ccbbe - backend-patch: Bundle 版 Android 后端热更发布流水线 + 导出面守卫 (commit by @hanxi)
  • 5ddbeca - proxy: 私网代理白名单,允许 /proxy 代理指定内网地址*(PR #313 by @hanxi)*
  • 53bcf8c - 支持音量均衡 songloft-org/songloft#315 (commit by @hanxi)
  • e87eb77 - expand audio/video format support and Web HLS video playback (commit by @hanxi)
  • 169aa77 - playlist: 删除歌单支持连带清理孤儿歌曲 (PR #325 by @hanxi)
  • b9109fc - release: bundled 热更前后端 manifest 写入原生契约哈希 (commit by @hanxi)
  • 3570c44 - player: bump songloft-player 子模块,首页歌单网格行列可自定义 (PR #332 by @hanxi)
  • e1cdfca - play: /songs/{id}/play 支持 seek 参数,服务端 input seek 流式续播 (commit by @hanxi)
  • 970619d - fingerprint: 指纹计算支持仅重试失败项,不清空已算指纹 (commit by @hanxi)
  • faa5eb4 - play-history: 新增按播放上下文的播放历史(歌单/歌手/专辑等) (commit by @hanxi)
  • 4af1a8e - jsplugin: 私有仓库 Release 资源下载支持走 github_proxy 加速 (commit by @hanxi)
  • ef025ee - songs: 新增曲库歌名/歌手名清单接口 GET /songs/names (commit by @hanxi)
  • cd87296 - theme pack backend with online catalog support (PR #337 by @hanxi)
  • a0109f8 - api: add library stats summary endpoint (PR #349 by @hanxi)

🐛 Bug Fixes

  • 6fe2426 - 播放伪 mp3(WebM 存为 .mp3)时按内容校验强制转码 (songloft-org/songloft#300) (commit by @hanxi)
  • 961a6b2 - cover: 本地封面支持 ?w= 服务端缩略,配合 Web 端 修封面空白 (PR #309 by @hanxi)
  • e046edc - release: 修 Bundle Android 补丁 pack 缺失的 --target-version-code (commit by @hanxi)
  • a635989 - release: soname 校验放宽为「空或 libgojni.so」(gomobile 产物无 DT_SONAME) (commit by @hanxi)
  • 9313dc1 - video-hls: fix containsEndList boundary bug, early-fail detection, path traversal hardening (commit by @hanxi)
  • 4ec2af8 - player: 更新 songloft-player 子模块,修复原生构建的 dart:js_interop 编译失败 (commit by @hanxi)
  • c6676b3 - ci: bundled 热更 manifest 写入分 ABI APK 的真实 versionCode (commit by @hanxi)
  • 28c5e9a - playlist: 歌单封面 URL 补版本号,修复替换封面后不刷新 (PR #327 by @Jsongcloud)
  • f61a9e7 - fingerprint: 扫描后指纹计算默认关闭并限制开销,修 CPU 长期占满 #323 (commit by @hanxi)
  • a7bc950 - fingerprint: 指纹去重聚簇改进 + Cancel 竞态修复 + 文件不可达容错 (songloft-org/songloft#323) (commit by @hanxi)
  • 8e83998 - entrypoint: 非语义化版本按底包覆盖,避免误判为旧而跳过热更 (PR #331 by @Jsongcloud)
  • eff80fa - docker: bump ffmpeg-builder 子模块,Docker 内 ffmpeg 支持视频解码转 HLS,修 mpg 无法播放 (commit by @hanxi)
  • fddcd4d - player: bump songloft-player 子模块 + 补踩坑文档(修 iOS Safari 登录页不弹软键盘 songloft-org/songloft-player#26) (commit by @hanxi)
  • 0a2adaf - player: bump songloft-player 子模块(原生端老旧视频容器改走 video-hls,修手机播 mpg 卡顿) (commit by @hanxi)
  • 5694025 - video-hls: 边转边播 playlist 改为 EVENT 类型,修首次播放 mpg 必卡 (commit by @hanxi)
  • df58cc8 - docs: 适配 GitHub 代理重构——附件前缀改为根路径且带主机名 (commit by @hanxi)
  • 536f9fb - play: 音量均衡不再阻塞首个播放请求,预热也带上 normalize songloft-org/songloft-plugin-miot#61 (commit by @hanxi)
  • 8ce8a1f - jsplugin: LoadPlugin 幂等化,消除启动期与懒加载竞态导致的 env already exists (commit by @hanxi)
  • 187acdc - jsplugin: 去掉 LoadPlugin 的 singleflight,修正与 EnsureLoaded 的契约冲突 (commit by @hanxi)
  • dc494e7 - jsplugin: 修复 JSService.timerStop 的 data race (commit by @hanxi)
  • a9a5938 - lyric: 本地 .lrc 歌词文件优先适配 (commit by @hanxi)
  • 6481996 - GitHub 代理仅对 GitHub 域名生效,非 GitHub 订阅源直连 (commit by @hanxi)
  • e3ccc49 - upgrade: GitHub 代理失败自动降级直连,修复死代理导致更新检查 500 (commit by @hanxi)
  • acb8a44 - metadata: 批量刷新元数据改为纯本地提取,只处理本地有文件的歌曲 (commit by @hanxi)
  • b58bc72 - jsplugin: 插件商店按 entry_path + 作者身份去重,撞名不再静默覆盖 (commit by @hanxi)
  • 7f8b0a0 - ci: 热更补丁资产改带 commit 的不可变文件名,同步前端子模块 (commit by @hanxi)

⚡ Performance Improvements

  • f38f658 - jsplugin: 插件商店拉取结果缓存 5 分钟,翻页搜索不再重拉注册表 (commit by @hanxi)

♻️ Refactors

  • 0fefcf0 - addon: HA 加载项拆为独立仓库 songloft-org/home-assistant-addon (commit by @hanxi)

✅ Tests

  • 27e75c4 - jsplugin: 验证休眠歌词插件在 SearchLyrics 时被正常唤醒 (commit by @hanxi)

👷 Build System

  • 10e2f6c - Bundle 版 Android 统一为单个 universal APK (commit by @hanxi)
  • fcbf4dc - release: Bundle Android 热更补丁改为随 release 自动发布(无基线) (commit by @hanxi)
  • 76888e5 - release: bundled 热更补丁与 gomobile 产物扩展到 x86_64 (commit by @hanxi)

📝 Documentation Changes

  • 07fd163 - update CHANGELOG for v2.11.0 (commit by @github-actions[bot])
  • 5685e11 - site: 同步 flutter_patcher 热更新文档到文档站 (commit by @hanxi)
  • 5e247e8 - issue-template: Bug 报告引导用户附上「设置→关于与更新→导出日志」的日志 zip (commit by @hanxi)
  • 3b21f19 - agents: 补充前端 UI 验证走 Docker 无头浏览器的方法与踩坑 (commit by @hanxi)
  • 84c22ff - remove Flutter TV references, recommend songloft-tv client (commit by @hanxi)
  • 917af15 - 落地页安装选择器添加 TV 客户端下载链接 (commit by @hanxi)
  • bb2c503 - agents: 补充「子模块同步页」类别到文档站结构章节 (commit by @hanxi)
  • 8482492 - add theme pack guide and update color system docs (commit by @hanxi)

🎨 Code Style Changes

  • d27fd3a - format all go/dart code and add formatting rules to AGENTS docs (commit by @hanxi)
  • 281dc09 - 同步前端子模块(dart format 补齐未格式化文件) (commit by @hanxi)

🔧 Chores

  • c7fdf56 - addon: sync HA add-on version to 2.11.0 (commit by @github-actions[bot])
  • 28a5ccc - bump songloft-player 修复分类列表播放全部无歌曲 (commit by @hanxi)
  • fbb04ea - 更新 songloft-player 子模块,含 #309 封面回滚修复与 CanvasKit auto 变体 (commit by @hanxi)
  • 0041f20 - player: bump songloft-player 子模块(播放队列自动定位当前项 songloft-org/songloft#311) (commit by @hanxi)
  • 0138426 - player: 更新 songloft-player 子模块指针 (commit by @hanxi)
  • b1738f7 - player: 更新 songloft-player 子模块指针(修复 iOS 构建) (commit by @hanxi)
  • eefe4c7 - player: bump songloft-player 子模块(首屏加载韧性兜底,修偶发无限骨架屏卡死 #314) (commit by @hanxi)
  • 1da7e78 - player: 更新 songloft-player 子模块指针(已是最新时也可下载完整安装包) (commit by @hanxi)
  • 7d40530 - miot: bump 插件子模块(修全屏播放器收藏按钮状态无法区分) (commit by @hanxi)
  • 611c733 - player: bump songloft-player 子模块(迷你播放条按钮 #25 + 取消指纹时序修复 #323) (commit by @hanxi)
  • 94221e0 - player: bump songloft-player 子模块(修 Windows 桌面歌词打开即秒退 #318) (commit by @hanxi)
  • c16ff65 - plugin: bump songloft-plugin-miot 子模块(硬停/语音打断按位置续播 songloft-org/songloft-plugin-miot#60(commit by @hanxi)
  • d7f2ac8 - submodule: 更新 songloft-player——HLS 视频卡死修复与指纹失败项重试入口 (commit by @hanxi)
  • 4a3bca8 - submodule: 更新 songloft-player——GitHub 加速代理统一到设置网络页 (commit by @hanxi)
  • fd81082 - submodule: 更新 songloft-plugin-miot——对话去重基线改用服务端时间戳 (commit by @hanxi)
  • b5e6b4f - submodule: 更新 songloft-player——启动热更检查三道闸与设置页手动入口 (commit by @hanxi)
  • fa37468 - submodule: 更新 songloft-plugin-miot——语音搜歌不再误判本地歌曲 songloft-org/songloft-plugin-miot#62 (commit by @hanxi)
  • ea9596f - submodule: 更新 songloft-plugin-miot——响应优先模式补上播放失败回落 (commit by @hanxi)
  • 4d2d655 - update pkg/tag submodule (gofmt) (commit by @hanxi)
  • c3c35a2 - release version 2.11.1 (commit by @hanxi)

[Unreleased]

✨ New Features

  • jsplugin: 客户端内置 webf-ui 原生组件库(webf_cupertino_ui,Apache-2.0)。声明 renderEngine: "webf" 的插件页现在可以直接使用 31 个 <flutter-cupertino-*> 原生元素 (按钮 / 输入框 / 开关 / 复选框 / 列表 / 表单 / 弹层 / 导航 / 1300+ 图标),以及 webf 包内建的 <webf-list-view>(映射到 Flutter ListView,自带 view 回收)—— 插件侧无需安装任何运行时。 这些元素直接映射到 Flutter widget,绕开 CSS 布局层,因此不再受 WebF 那批布局缺陷影响 (grid auto 行高按 min-content 测、position: sticky 全局失效、<table> 家族未注册等)。 ⚠️ 客户端与插件各自独立发版、minHostVersion 只约束服务端,所以插件必须做特性探测 (探 document.createElement('flutter-cupertino-switch').checked !== undefined)并保留 HTML 回落分支,否则在尚未内置该组件库的旧客户端上控件会静默全部消失。 可用元素清单、属性契约的三个静默失效坑(HTML 属性 kebab-case vs JS 属性 camelCase、 输入框的值属性叫 val 且是受控的、布尔属性两个入口语义不同)见 「JS 插件开发指南 · WebF 渲染引擎与原生元素 · webf-ui 原生组件」 (songloft-org/songloft#341)
  • submodule: 更新 songloft-plugin-downloader——前端用 webf-ui 重写并重新启用 WebF 渲染。 页面改为 Vue 3 + Vite(源码 frontend/,产物 static/),表单控件走 <flutter-cupertino-*>、 歌曲列表走 <webf-list-view>,引擎分叉收敛在一层薄包装组件里、业务代码只有一套, 因此浏览器 / 系统 WebView / Web iframe / Linux arm64 等拿不到 WebF 渲染面的路径功能不变。 上一版(v2026.8.3)的 CSS Grid 伪表格随之退休,它为绕开 WebF 缺陷付出的两处降级 (整行 hover 变单元格 hover、表格无障碍语义丢失)也一并恢复 (songloft-org/songloft#341)
  • jsplugin: 插件页渲染引擎改为逐插件声明plugin.json 新增可选字段 renderEnginewebview / webf,缺失或空串等同 webview),插件列表 API 以 render_engine 返回; 非法取值在清单校验阶段报错、插件装不上。原生客户端据此为声明 webf 的插件启用 WebF 渲染面(纯 Flutter 渲染,替代系统 WebView), 其余插件保持系统 WebView 不变。客户端设置页里原先的全局渲染引擎开关随之移除 —— 能力缺口是逐页面的,只有插件作者能验证自己的页面。 目前只有官方插件 downloader(歌曲下载)声明了 webf;miot(智能音箱)与 lyrics(歌词搜索) 的页面尚未按 WebF 的能力边界重写,仍保持 webview。 Web 端不受影响(WebF 不支持 Flutter Web,浏览器里永远走 iframe); Linux 端 WebF 仅支持 x86-64 + glibc ≥ 2.38,arm64 / NAS / 树莓派等环境拿不到 WebF 渲染面。 字段语义与作者须知见「JS 插件开发指南 · renderEngine 渲染引擎声明」 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下的滑块补齐。WebF 没有实现 input[type=range](实测那一整行一个像素 都不画:既没有滑块也没有文本框,同一行的兄弟文字与行背景会一起消失),现在客户端提供原生元素 <songloft-slider>common.js 垫片会自动把每个 input[type="range"] 隐藏并在其后插入滑块、 双向同步 .value / .disabled / inputchange 事件 / matches(':active')——原 <input> 仍留在 DOM 里,插件既有 JS 无需改动。竖向滑块需在原 input 上声明 data-sl-orientation="vertical" (不自动推断朝向),并按新标签补几行几何 CSS(垫片只拷 inline style、不拷 class); data-sl-no-slider 可退出该垫片。仅 WebF 渲染面生效,浏览器与系统 WebView 下行为不变。 官方插件 miot 的音量条已适配。属性契约与适配示例见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下补齐安全区(刘海屏 / 圆角屏 / 手势条)。WebF 压根不实现 CSS env(safe-area-inset-*)(连解析入口都不存在),写 env() 的插件页在这些设备上会顶到状态栏 或被下巴切掉。现在客户端把真实安全区(MediaQuery.viewPadding)注入成四个 CSS 变量 --sl-safe-top / --sl-safe-right / --sl-safe-bottom / --sl-safe-left,转屏、进退全屏、 页面重挂都会重推;common.css 给这四个变量备了默认值,普通浏览器与系统 WebView 下它们就等于 env() 本身,所以插件只写一种形式 var(--sl-safe-bottom) 即可三端通吃、行为不变。 不做自动改写——CSSOM 没有可用的写入面(cssText 只读、规则不暴露 selectorText.style@media 内的规则完全不可达),且真实写法都套在 calc() / max() 里,而 WebF 同样没有实现 max() / min()clamp() 可用,可作等价替换)。官方插件 miot 的 3 处已适配。 变量语义与 max() 的替换写法见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下新增原生环形进度条元素 <songloft-progress-ring>。WebF 的 <svg> 是把 整棵子树重新序列化后交给 flutter_svg 渲染,任何子节点变更都会让整棵 SVG 重新拼串 + 重新解析 + 重新光栅化,所以「每秒改 strokeDashoffset 的 SVG 进度环」在 WebF 下是最差的一类写法;新元素的 进度变化只走一次重绘。颜色默认跟随 CSS color(currentColor),因此零配置即跟随主题。 不做自动替换——插件需自己改用该标签(内联 SVG 是任意图形,机械判定「这个 svg 是进度环」必然 误伤)。仅 WebF 渲染面生效 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下补齐 input[type=file] —— 现在会弹出宿主的原生文件选择器。 WebF 的 <input> 没有 file 分支(type=file 落到 default,渲染成一个点了毫无反应的文本框, 既不报错也无日志),common.js 垫片改为拦下点击(同时覆写实例 click() 方法, 因此「隐藏 input + 外部按钮代点」这种常见写法照样生效)、经桥调宿主选择器、并强制 display:none 隐藏原 input(实测 WebF 不认 HTML hidden 属性,带与不带 hidden 的 file input 盒子都是 170×24,插件刻意隐藏的 input 会实打实占掉一行)。 插件的 HTML 零改动即可用,但读结果的方式变了:主通道是 SongloftPlugin.lastPickedFiles (普通 JS 数组,每项 {name, size, text?/bytesBase64?, encoding?, textLossy?, error?}), change 事件上的 event.data 只是锦上添花(WebF 的 Event 是 binding object, 挂自定义属性没有契约)。input.files / FileReader / FileList 在 WebF 下都不可用 (后两者实测压根不存在),故宿主刻意不去伪造它们——假 File 配不上真 FileReader, 而真 FileReader 根本没有。载荷形态由 data-sl-file-as 声明(text 默认 / bytes base64 / none 只要元信息;默认 text 是因为真实用例只要文本,而 base64 会让 20 MB 文件变成约 27 MB 字符串跨两次桥),data-sl-no-file-picker 可退出该垫片。单文件上限 32 MB,超限返回明确错误 而非静默截断;用户取消时不派发 change。仅 WebF 渲染面生效,浏览器与系统 WebView 下不变。 读结果的两端兼容写法见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341)
  • jsplugin: 新增 SongloftPlugin.blobToDataURL(blob, mimeType?),替代 WebF 下不存在的 URL.createObjectURL(实测 typeof 为 undefined;Blob 本身有,但没有任何入口能产出 blob:,而 WebF 的资源加载器只认 http/https/assets/file/data:,纯 JS 也垫不出来)。 返回形如 data:image/jpeg;base64,... 的字符串,<img src> 与 CSS background-image: url(data:…) 两个消费点均已实测可用(后者走的是另一条代码路径, 且 data URL 含逗号分号、CSS url() 词法本可能切错),所以同一张图当封面和当模糊背景可以 沿用同一个 URL。⚠️ 它返回 Promise,而 createObjectURL 是同步的 —— 插件必须改调用点Blob → base64 只能经异步的 arrayBuffer()FileReader 在 WebF 下不存在), 无法提供同步替身,且函数变 async 会往上传染到它的调用者(漏改不报错,只是图不出来)。 data URL 不需要也没有 revokeObjectURL,但会常驻内存(约为原始字节的 4/3)。 浏览器与系统 WebView 下同样可用,插件不必按引擎分叉 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下 window.open 与外链点击改为用系统浏览器打开 (以前是彻底静默:WebF 的 window.open 不抛错、也什么都不发生,归因是没装导航代理时 默认导航策略把外链无条件 cancel 掉了,所以「点『去网页登录』毫无反应」既没有报错也没有日志)。 现在客户端装了导航代理,三档决策:# 开头的页内锚点照常跳转;外部 http(s)/mailto/tel 交给系统浏览器或系统默认应用;同源整页跳转被拦下并留一条 warn(WebF 里那条路会把整个 插件页 load() 成新地址,宿主注入的上下文、loading 状态与返回键行为全部错位—— WebF 下不要做多页跳转)。插件侧无需改动,单参与带 target 的双参两种调用形态都已实测 转发到宿主;但它打开的是外部浏览器而非页内新窗口,所以「弹窗回填数据到父页」 (window.opener / 跨窗口 postMessage)这类流程走不通,需改成回调或轮询。 官方插件 miot 的账号二次验证据此可用。见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341)
  • jsplugin: WebF 渲染面下检测到 <table> 时打一条 console.warn 并给元素标上 data-sl-table-unsupported。WebF 的元素注册表里 table / thead / tbody / tr / th / td一个都没注册,全部退化成 display:block —— 后果不是样式差一点,而是信息结构丢失 (6 列表格竖排成 6 行),且完全静默:不报错、不打日志,插件作者只看到「一堆没有表头的文本」。 只警告不改写:WebF 自带的 <webf-table> 家族是 Flutter Table widget 的薄封装, colspan/rowspan 零支持、CSS width 无效、行必须是直接子节点(<thead>/<tbody> 不拆就渲染出 一张空表且不报错),且那些标签在普通浏览器与系统 WebView 下根本不存在,用它就要长期维护两套模板。 推荐改用 CSS Grid(标准 CSS,三条渲染路径共用一套代码),完整改法与六条硬约束 (不能用 display:table;单元格必须 nowrap + 省略号,否则 WebF 的 grid auto 行高会按 min-content 宽度测量、行高暴涨约 7 倍;表头别用 position: sticky(WebF 下压根不生效)而应 留在纵向滚动容器外面;纵向滚动条宽度要实测补偿;轨道别用 auto;窄屏别用 display:none 隐藏列) 见「JS 插件开发指南 · WebF 渲染引擎与原生元素」。官方插件 downloader 的歌曲列表已按此改造 (songloft-org/songloft#341)
  • client: 客户端新增「设置 → 关于与更新 → 开源许可」页。引入 WebF(GPL-3.0-only, 无链接例外)后客户端二进制整体按 GPL-3.0 分发,而 GPLv3 §4/§5 要求分发时随附许可全文与 「完整对应源码」的获取方式 —— 此前全文只作为 release 附件存在,App 里看不到任何许可信息、 安装包内部也没有一份。新页面写明分发许可为何是 GPL-3.0、三个源码仓库直链,并可查看 GPL-3.0 全文、NOTICE 第三方组件声明与 Flutter 汇总的逐个依赖包许可。 许可全文内嵌为安装包内的 asset 而非外链 —— Songloft 的典型场景是局域网自托管、 设备可能长期离线,纯外链拿不到全文;这条路径在签名之前,因此一次覆盖全部平台且不动打包/签名流程。 Linux 便携包(tar.gz/deb/rpm/AppImage)、Windows(zip/msix)与 macOS zip 另外在解包后的根目录 直接放一份 LICENSE-GPL-3.0.txt(songloft-org/songloft#341)

⚡ Performance Improvements

  • jsplugin: 插件商店拉取结果服务端缓存 5 分钟,翻页与搜索不再重复拉取整棵注册表树 (以前每翻一页都会重新递归拉取,最多 500 个 plugin.json、8 并发、单请求 15s 超时)。 点「刷新」或拉取失败后重试会绕过缓存;改动订阅源配置会立即失效缓存。 插件安装状态不受缓存影响,仍每次请求实时计算

🐛 Bug Fixes

  • downloader 插件: 修复 WebF 渲染面下歌曲列表一屏只装得下一行、以及表头随内容滚走。 两个独立根因:① WebF 的 grid auto 行高是在 min-content 宽度下测量子项高度的,而 CJK 每个字都是断行点 —— 一行实测占 281px(同内容自然高 41px)、表头 72px,用户看到的是一张 几乎空的表;单元格改 white-space: nowrap + 省略号后行距 41 / 表头 39(这同时也更像表格该有的 观感,长内容用 title 属性悬停看全)。② position: sticky 在 WebF 下压根不生效, 且不限于 grid 路径(页面级最标准的配置也整量滚走),改为把表头放到纵向滚动容器外面、 结构上不再需要 sticky;数据区滚动条占掉的宽度由 JS 实测补偿,保证表头与数据区 6 列逐像素对齐。 三条渲染路径(浏览器 / 系统 WebView / WebF)仍共用同一套 HTML/CSS/JS,无引擎分叉 (songloft-org/songloft#341)
  • jsplugin: 修复插件商店中 entry_path 相同的多个插件只显示一个、且安装状态互相串台 (装了 A 却显示 B 已安装)。去重与安装态匹配改用「entry_path + 作者身份」 (作者规范化后比较,缺 author 时用 updateUrl 的 GitHub 仓库兜底),同名不同作者的插件 各自成行、各自计算安装状态;同一插件被多个源收录时仍只显示一条。 商店条目新增来源标注,has_update 改用版本号比较而非字符串不等 (fixes songloft-org/songloft#339)
  • jsplugin: 从商店安装时若 entry_path 已被另一个作者的插件占用,不再静默覆盖 (旧行为会删除原插件的 ZIP 与 static 目录、原地改写数据库记录,使新插件继承原插件在 plugin_storage 里的数据、原插件导入的歌曲也被记账到新插件名下)。现在返回 409 且不做任何写入,前端弹框说明会替换哪个插件,用户确认后才带 overwrite=true 覆盖。 手动上传 ZIP 的行为不变 (fixes songloft-org/songloft#339)
  • addon: Home Assistant 加载项拆为独立仓库 songloft-org/home-assistant-addon, 修复「加载项商店 → 仓库」添加地址始终失败(is not a valid app repository)—— HA Supervisor 只在 git 仓库根目录查找 repository.yaml,而清单一直在 addon/ 子目录。 顺带解决 Supervisor 递归 clone 会连带拉取主仓库全部子模块(约 60 MiB,实测 2 分钟)的问题, 新仓库无子模块、clone 为百 KiB 级。用户请改用新地址https://github.com/songloft-org/home-assistant-addon (fixes songloft-org/songloft#340)
  • lyric: 本地 .lrc 歌词文件优先适配 — 支持大小写扩展名(.LRC/.Lrc)及 <文件名>.lrc 变体; 已入库歌曲旁后放 .lrc 下次扫描即生效;运行时 GET /lyric 旁挂优先于插件歌词; 0 字节 .lrc 不再导致前端无法请求歌词 (fixes songloft-org/songloft#334)

⚠️ Breaking Changes

  • lyric: 扫描/重新导入时若读不到歌词,不再清空库中已有歌词(含插件 scrapedurl 来源的 lyric_remote_url)。要清空歌词请使用 PUT /api/v1/songs/{id}/lyrics 接口。

[v2.11.0] - 2026-07-22

✨ New Features

  • 7dc4d92 - jsplugin: 为 JS 插件 SDK 增加 TCP Socket API (PR #276 by @hanxi)
  • 8687a3e - jsplugin: 插件自动更新开关 + 源列表「全部」聚合 (PR #270 by @hanxi)
  • 09c292a - songs: 按流派/语种/风格等标签分类浏览曲库 (PR #277 by @hanxi)
  • 548bee6 - scan: 支持 mp4 格式音频扫描与播放 (PR #281 by @hanxi)
  • 338d574 - scan: 支持视频容器扫描、播放与 DLNA 视频投屏 (PR #76 by @hanxi)
  • 1aa9936 - songs: 网络歌曲/电台创建与更新端点支持 is_video (PR #76 by @hanxi)
  • 89b788e - playlist: ListPlaylists 支持 keyword 搜索,并同步前端子模块 (commit by @hanxi)
  • a6d7441 - songs: facets 支持分页/搜索/封面 + 新增 /settings/library-browse 配置端点 (commit by @hanxi)
  • a650185 - songs: 下载支持可选转码(format/quality),复用 GetOrTranscode hanxi/songloft-plugin-bili#1 (commit by @hanxi)
  • 692ded7 - songs: library-browse 放行歌单三视图 key,默认顺序按组连续 (commit by @hanxi)
  • edf6d99 - jsplugin: 客户端 SDK 宿主桥接(common.js) + 文档 (PR #285 by @hanxi)
  • 441f1a6 - 支持 MKA 导入/播放与双音轨切换 (commit by @hanxi)
  • c3b62e3 - lyric: /songs/{id}/lyric 支持 refresh 强制重抓歌词 (PR #303 by @hanxi)
  • d219948 - CUE 按需提取替代预分割,解决磁盘空间占用问题 (PR #306 by @hanxi)
  • b964bbf - cache: 缓存网络歌曲支持统一转码落盘格式 #300 (commit by @hanxi)
  • 9da8d62 - logs: 新增日志落盘与脱敏导出端点 (commit by @hanxi)
  • a221545 - radio: 电台流支持服务端实时转码,兼容仅支持 MP3 的播放设备 #275 (commit by @hanxi)
  • 88e9abb - 插件sdk新增封面提供者接口 (commit by @hanxi)

🐛 Bug Fixes

  • 878d9c0 - radio: 电台代理改为 ICY 元数据透传,修复 web 端播放 1 秒即停 (PR #275 by @hanxi)
  • 387058e - download: 缓解导入探测与批量下载争用导致的下载失败 (PR #265 by @hanxi)
  • a6509fa - download: 用停滞检测替代整请求硬超时,避免慢速网络下载被误掐 (PR #265 by @hanxi)
  • 2c14108 - jsplugin: 自动更新用 GetJSON 读 github_proxy 配置,修正代理前缀拼接 (commit by @hanxi)
  • 91a1e44 - web: app shell 静态资源改用 no-cache,修复升级后浏览器仍跑旧 main.dart.js (commit by @hanxi)
  • c63531f - player: 更新子模块修复 Web 插件 Tab iframe 反复重载抖动 (PR #278 by @hanxi)
  • e40b702 - player: 更新子模块修复移动端插件 Tab 再次打开黑屏/底栏消失 (PR #273 by @hanxi)
  • 5df23a2 - radio: 去交织浏览器路径 ICY 元数据,修复 web 端非 m3u8 电台 2-3 秒断流 (PR #275 by @hanxi)
  • 8ecddd4 - source: 下载链路加同源重试与 Content-Length 截断校验 (PR #265 by @hanxi)
  • 26fb2e1 - jsruntime: 修复 youtube 歌单串号/标题被改/缓存不全 songloft-org/songloft#286 (commit by @hanxi)
  • aa5fc0e - radio: 电台代理支持 hls=direct 绕过反代 + 归一化 audio/aacp (commit by @hanxi)
  • 14e662c - jsplugin: 慢端点支持 X-Plugin-Timeout-Ms 放宽调用超时,修复 extract 504 (PR #265 by @hanxi)
  • 3980309 - play: 慢音源播放解析被切歌/客户端超时误杀致 502 (songloft-org/songloft#271) (commit by @hanxi)
  • 3b1c97b - radio: 直连电台流改用非浏览器 UA,修复防盗链源约 3 秒断流 (PR #275 by @hanxi)
  • dba7966 - docker cache (commit by @hanxi)
  • 2b6f113 - flutter web 后台回来黑屏问题修复 (commit by @hanxi)
  • e32844b - lyric: 修复歌词插件自动抓取失效(测试成功但播放抓不到)#303 (commit by @hanxi)
  • 0e97a99 - jsplugin: 修复插件市场分页顺序随机跳变 #302 (commit by @hanxi)
  • bf21354 - jsplugin: 插件页预留滚动条槽根除内容抖动 #278 (commit by @hanxi)
  • 15fb3f8 - source: 分块 Range 下载绕过 YouTube 单连接限速 (songloft-org/songloft#305) (commit by @hanxi)
  • d5d4102 - source: 流式代理去掉整请求硬超时,避免音箱播到中途重拉/切歌 (songloft-org/songloft-plugin-miot#55) (commit by @hanxi)
  • 6f7e528 - jsplugin: 插件页 html 常驻纵向滚动条根除抖动 #278 (commit by @hanxi)
  • 1cea176 - playactivity: Activate 不再取消下一首的 prefetch 转码 #300 (commit by @hanxi)
  • 07cea28 - jsplugin: 公共资源 URL 加内容哈希版本号,修复 immutable 缓存致 common.css 更新不下发 #278 (commit by @hanxi)
  • 3d660d0 - download: 歌名含斜杠不再拆目录、目标冲突追加序号防覆盖 #265 (commit by @hanxi)
  • 6f373b2 - 下载歌曲后保留 plugin_entry_path,修复重复导入时唯一约束冲突 (commit by @hanxi)
  • b83464b - 客户端超时断开时触发后台缓存,避免未缓存歌曲反复失败 (commit by @hanxi)
  • 4446b0c - 修复开发版本更新问题 (commit by @hanxi)
  • ecce7c5 - 修复无法添加超过3万首歌到歌单的问题 (PR #308 by @hanxi)
  • cbb00c4 - 已是 MP3 格式的缓存歌曲在设备上播放失败 (songloft-org/songloft#300) (commit by @hanxi)

⚡ Performance Improvements

  • b5f44e1 - docker: 交叉编译替代 QEMU 编译 + 分层重排提速镜像打包与更新 (commit by @hanxi)
  • 9b0c733 - docker: pin alpine base 与 ffmpeg 镜像 digest 稳定前置层缓存 (commit by @hanxi)

♻️ Refactors

👷 Build System

  • 80d136a - web 构建走 beta 3.47(修复切后台白屏),原生升 stable 3.44.6 (commit by @hanxi)
  • f9ab2bd - web 也统一 stable 3.44.6(撤回 web 专用 beta 3.47) (commit by @hanxi)

📝 Documentation Changes

  • 21ef81d - update CHANGELOG for v2.10.0 (commit by @github-actions[bot])
  • 7b4e6ba - faq: 新增电台 HLS 流无法播放时开启 HLS 代理的说明 (commit by @hanxi)
  • e0c4e70 - faq: 补充应用内视频画面渲染的平台支持说明 (songloft-org/songloft#76) (commit by @hanxi)
  • de95b87 - frontend: 更新音频后端与视频画面架构描述 (PR #76 by @hanxi)
  • d3cef86 - agents: 约定直接提交 main 分支,不建功能分支 (commit by @hanxi)
  • 1526608 - js-plugin: 更新客户端 SDK host bridge 适用范围 (commit by @hanxi)
  • 87dbec4 - repowiki: 同步 Web 插件页改为 iframe 内嵌 (commit by @hanxi)
  • 4a7fbec - 全面同步文档与代码并将 repowiki 改为手动维护 (commit by @hanxi)
  • 18135f7 - repowiki: 接入文档站并补全英文版 (commit by @hanxi)
  • 102936c - repowiki: 将 file:// 源码链接改为 GitHub blob 链接 (commit by @hanxi)
  • bbe3ab0 - 同步文档为原生平台统一 media_kit 后端 + 更新子模块指针 (songloft-org/songloft#76) (commit by @hanxi)
  • 86a70a4 - 声明项目纯为爱发电、无收费/赞助渠道,提醒防诈骗 (commit by @hanxi)

🔧 Chores

  • c724aa7 - addon: sync HA add-on version to 2.10.0 (commit by @github-actions[bot])
  • 6e3e285 - 同步 songloft-player 子模块 (web 端 hls.js 电台修复 songloft-org/songloft#275) (commit by @hanxi)
  • c19b54b - 同步 songloft-player 子模块 (Windows 退出/播放/日志修复 songloft-org/songloft#271) (commit by @hanxi)
  • 7dd8a1c - 更新 songloft-player 子模块指针(分类页播放全部+多选) (commit by @hanxi)
  • 76442a6 - 更新 miot 子模块指针(补搜索源注册开发者文档) (commit by @hanxi)
  • 869a06d - 更新 songloft-player 子模块指针(桌面播放快捷键 #279(commit by @hanxi)
  • edf3e72 - 更新 songloft-player 子模块指针(全屏播放页快捷键修复 #279(commit by @hanxi)
  • fcf741b - 更新 songloft-player 子模块指针(打开后自动进入全屏歌词 songloft-org/songloft-player#19(commit by @hanxi)
  • 4b453ce - 更新 songloft-player 子模块指针(插件 Tab 关闭 Android Hybrid Composition 修复菜单栏黑屏 #273) (commit by @hanxi)
  • 2c5bded - 更新 songloft-player 子模块指针(libmpv 日志接入 FileLogger 排查桌面端 HLS 电台失败 #249) (commit by @hanxi)
  • 0026796 - 更新 songloft-player 子模块指针(桌面端应用内视频画面渲染 songloft-org/songloft#76) (commit by @hanxi)
  • 64a51ab - 更新 songloft-player 子模块指针(侧边/TV 播放器接入视频画面 songloft-org/songloft#76) (commit by @hanxi)
  • 3945bf1 - 更新 songloft-player 子模块指针(macOS/移动/Web 视频画面 songloft-org/songloft#76) (commit by @hanxi)
  • ab42a92 - 更新 songloft-player 子模块指针(macOS/移动默认启用 media_kit) + FAQ 视频画面全平台默认支持 (songloft-org/songloft#76) (commit by @hanxi)
  • eada187 - 更新 songloft-player 子模块指针(视频画面架构文档 + Web 后端决策记录 songloft-org/songloft#76) (commit by @hanxi)
  • 9c0c1b2 - 更新 songloft-player 子模块指针(移除测试未使用 import) (commit by @hanxi)
  • 051663b - 更新 songloft-player 子模块指针(添加歌曲/电台是否视频开关 songloft-org/songloft#76) (commit by @hanxi)
  • 2b4d17f - 更新 songloft-player 子模块指针(修复 macOS 视频黑屏与首次播放失败 songloft-org/songloft#76) (commit by @hanxi)
  • 8bc9950 - 更新 songloft-player 子模块指针(单曲循环修复 songloft-org/songloft#284) (commit by @hanxi)
  • 087ca92 - 更新 songloft-player 子模块指针(TerminateProcess 根治退出报警框 songloft-org/songloft#271) (commit by @hanxi)
  • fa1217b - 更新 songloft-player 子模块指针(自定义视图入口收进更多菜单) (commit by @hanxi)
  • cfd8f01 - 更新 plugin-toolchain 子模块指针(SDK v2.12.1 + 修复发布 workflow) (commit by @hanxi)
  • df63057 - 更新 songloft-player 子模块指针(歌曲行统一为共享 SongTile) (commit by @hanxi)
  • 173bd83 - 更新 songloft-player 子模块指针(facet 卡片加播放按钮) (commit by @hanxi)
  • 7808602 - 更新 plugin-toolchain 子模块指针(v2.12.2:修复 Vue 模板 dev 死循环与重复安装) (commit by @hanxi)
  • f2ca805 - 更新 songloft-player 子模块指针(歌单视图工具栏上移顶部 AppBar) (commit by @hanxi)
  • 143cc44 - 更新 songloft-player 子模块指针(歌单搜索提示词修正) (commit by @hanxi)
  • bdf69b3 - 更新 songloft-player 子模块指针(修复切换歌单子视图 GlobalKey 报错) (commit by @hanxi)
  • 7bb2946 - 更新 songloft-player 子模块指针(WebView2 环境/托盘残留/电台直连) (commit by @hanxi)
  • 9854627 - 更新 songloft-player 子模块指针(切后台黑屏无 reload 修复) (commit by @hanxi)
  • 23eba04 - 更新 songloft-player 子模块指针(切后台白屏 Dart 侧重绘修复) (commit by @hanxi)
  • dc6a229 - 更新 songloft-player 子模块指针(切后台白屏补发 webglcontextlost 修复) (commit by @hanxi)
  • f3ba3fe - 更新 songloft-player 子模块指针(悬浮 console 调试面板) (commit by @hanxi)
  • cf25c55 - 更新 songloft-player 子模块指针(悬浮 console 增强错误抓取) (commit by @hanxi)
  • e603860 - 更新 songloft-player 子模块指针(TV D-pad 焦点专属布局 + isTv 门控修复) (commit by @hanxi)
  • 3a48de9 - 更新 songloft-player 子模块指针(收尾清理 MultiSurface/恢复 band-aid) (commit by @hanxi)
  • 42d899c - 更新 songloft-player 子模块指针(onReorder→onReorderItem 迁移,Flutter 3.44.6) (commit by @hanxi)
  • 79e2fd9 - 更新 songloft-player 子模块指针(修复最小化残留 HWND 拦截桌面右键 #293) (commit by @hanxi)
  • 9e99919 - 更新 songloft-player 子模块至逐字歌词版本 (PR #294 by @hanxi)
  • a2b98b9 - update miot plugin submodule (commit by @hanxi)
  • a833d63 - update miot plugin submodule (commit by @hanxi)
  • a5e5d08 - 更新 songloft-player 子模块 (修复 Web 语义节点遮挡插件 iframe #295) (commit by @hanxi)
  • 7fc4cbe - 更新 songloft-player 子模块 (修复移动端 media_kit 后端 Android 全曲无法播放 songloft-org/songloft#76) (commit by @hanxi)
  • 2ae3be6 - 更新 songloft-player 子模块 (media_kit 后端实现 setAndroidAudioAttributes,修复 Android 全曲无法播放 songloft-org/songloft#76) (commit by @hanxi)
  • f2f9afa - 更新 songloft-player 子模块 (原生平台统一 media_kit 后端,移除原生后端回退 songloft-org/songloft#76) (commit by @hanxi)
  • b46fe0f - 更新 songloft-player 子模块(修复 NextConsole UMD 全局实例化,Web 调试面板悬浮按钮恢复显示) (commit by @hanxi)
  • b411685 - 更新 songloft-player 子模块(修复 Web 切后台回来封面偶发纯黑,resume 驱逐图片缓存+重解码) (commit by @hanxi)
  • d08205b - 更新 songloft-player 子模块(修复 Web 应用内切页面回来列表封面纯黑,导航时驱逐图片缓存重解码) (commit by @hanxi)
  • 3137005 - 更新 songloft-player 子模块(修复 Web 封面切插件 WebView 页返回后变黑,按封面精准驱逐缓存重解码) (commit by @hanxi)
  • eb4c9ba - 更新 songloft-player 子模块(Web 强制 CanvasKit CPU 渲染根治封面偶发纯黑,回退应用层缓解) (commit by @hanxi)
  • adecd8b - 更新 songloft-player 子模块(封面切tab/筛选丢失根治:调大imageCache+缩略解码,回退CPU渲染) (commit by @hanxi)
  • 80bd72f - 更新 songloft-player 子模块(CoverImage 加临时诊断日志排查封面三态) (commit by @hanxi)
  • 3f74c1e - 更新 songloft-player 子模块(Web 封面走 HttpGet 解码缩小 GPU 纹理 + 删冗余 imageBuilder + 加 WebGL context 丢失诊断日志) (commit by @hanxi)
  • df4e1d4 - 更新 songloft-player 子模块(所有封面卡片统一走 HttpGet 缩略解码,修专辑/歌手/歌单列表封面黑) (commit by @hanxi)
  • 1df7170 - 更新 songloft-player 子模块(清理封面诊断日志 + 文档记录 CanvasKit 大纹理封面变黑坑) (commit by @hanxi)
  • 05601ea - 更新 songloft-player 子模块(修复歌单单曲播放队列被截断到已加载页 #299(commit by @hanxi)
  • 0094f1a - 更新 songloft-player 子模块(修复分类页点击单曲播放队列被截断 #299(commit by @hanxi)
  • f6c87d6 - 更新 songloft-player 子模块(文档记录分页列表点单曲播放队列构建铁律 #299(commit by @hanxi)
  • 55ca279 - 更新 downloader 子模块(按歌单/艺术家/专辑筛选下载 #304(commit by @hanxi)
  • d124f88 - 更新 songloft-player 子模块(桌面折叠播放栏补齐拖动滑块 #301(commit by @hanxi)
  • 1ba55a4 - 更新 songloft-player 子模块(插件 iframe 抖动诊断埋点 #278(commit by @hanxi)
  • 1233bf5 - 更新 songloft-player 子模块(设置页显示后端构建时间) (commit by @hanxi)
  • cb64286 - 更新 songloft-player 子模块(加整页抖动尺寸振荡探针 #278(commit by @hanxi)
  • d60d15a - release version 2.11.0 (commit by @hanxi)

[v2.10.0] - 2026-07-11

✨ New Features

  • 510f309 - songs: 支持按歌单 label 排除歌曲,默认排除隐藏歌单 songloft-org/songloft-player#18 (commit by @hanxi)
  • cf84ae0 - addon: 新增 Home Assistant 加载项 (commit by @hanxi)
  • 7e938d0 - organize: 目录整理新增 preview 与插件 bridge,修复 file_path 双前缀 (PR #261 by @hanxi)
  • b6b42c4 - metadata: 网络歌曲导入即探测时长,修复音箱无法自动切歌 (PR #264 by @hanxi)
  • 90c964e - scan: 目录级定向扫描,过期清理按作用域收敛 (PR #262 by @hanxi)
  • 617ff39 - songs: 支持编辑本地歌曲改名,修复插件音源歌曲编辑 (commit by @hanxi)
  • e377144 - tags: WriteSongTags 支持 track 音轨号字段 (PR #269 by @hanxi)
  • 0a00903 - scan: 支持 mov 格式音频 (commit by @hanxi)

🐛 Bug Fixes

  • 26aa89f - miot: update plugin for touchscreen lyrics playback (commit by @hanxi)
  • 1f4f57e - radio: prevent stuck radio streams (commit by @hanxi)
  • e1efc32 - upgrade: enforce matching update channels (commit by @hanxi)
  • 99152f0 - jsplugin: deliver host events during awaits (commit by @hanxi)
  • 87be549 - release: repair bundled macos signing (commit by @hanxi)
  • 11fb982 - docs: 修复英文 README 同步后 docs/en/ 链接多套一层导致死链 (commit by @hanxi)
  • adeb8b0 - jsplugin: sync plugin toolchain permissions (commit by @hanxi)
  • 2e0b21f - cover: prevent slow cover requests from hanging (commit by @hanxi)
  • c60bebb - cover: 修复自动歌单封面重新扫描后随机变化 (commit by @hanxi)
  • 0774040 - server: 支持 port=0 由系统自动分配监听端口 (commit by @hanxi)
  • 09c569e - ci: mac bundle 兜底重签给 songloft-server 补 inherit entitlements (commit by @hanxi)
  • 2c1ae52 - server: 新增 -music flag 供 Bundle 桌面模式传入音乐目录 (commit by @hanxi)
  • a4b209d - playlist: 隐藏歌单后支持可见子集重排,修复排序报错 (PR #266 by @hanxi)
  • 66b2e62 - upgrade: 检查更新加短超时并持久化 GitHub 代理 (commit by @hanxi)
  • ffabd30 - release: package valid bundled iOS app (commit by @hanxi)

⚡ Performance Improvements

  • 43fdfee - scan: 修复 CUE 整轨切分对大 CD 镜像退化为 O(N²) 慢速 seek (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • f866fb4 - miot: update plugin submodule (commit by @hanxi)
  • 1b66d48 - plugins: update miot submodule for search priority (songloft-org/songloft-plugin-miot#30) (commit by @hanxi)
  • d69ef52 - player: update auth wallet fix (commit by @hanxi)
  • 30c1d02 - submodules: update player and radio plugin refs (commit by @hanxi)
  • a8c730f - player: update submodule for Windows HLS fix #249 (commit by @hanxi)
  • 839606a - player: update submodule for hidden-playlist song filtering songloft-org/songloft-player#18 (commit by @hanxi)
  • 6dba52d - deps: 更新 songloft-player 修复 mac 本地模式 (commit by @hanxi)
  • b173f91 - deps: 更新 songloft-player 修复 iOS 本地模式 (commit by @hanxi)
  • eb934af - deps: 更新 songloft-player 修复退出登录与桌面本地扫描 (commit by @hanxi)
  • f3886cf - deps: 更新 songloft-player 支持编辑本地歌曲与修复编辑入口 (commit by @hanxi)
  • 11e9ff4 - player: 更新子模块,记住 GitHub 代理并抽取选择 mixin (commit by @hanxi)
  • 0890f59 - player: 更新子模块,统一 GitHub 代理选择为顶部下拉 (commit by @hanxi)
  • 607e381 - deps: 更新 songloft-player 修复 iOS 本地模式扫描沙盒报错 (commit by @hanxi)
  • b607701 - release version 2.10.0 (commit by @hanxi)

[v2.9.6] - 2026-07-04

✨ New Features

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.9.5] - 2026-07-03

✨ New Features

  • 836ddc7 - CUE Sheet 整轨音乐支持 (PR #33 by @hanxi)
  • 850c996 - 歌曲支持按文件修改时间排序 #242 (commit by @hanxi)
  • b29d052 - jsplugin: support inbound websocket handlers (commit by @hanxi)
  • e24c2e2 - jsruntime: 新增原生 __go_crypto_sha256_bytes 与 __go_crypto_rc4 (commit by @hanxi)
  • da9158f - jsruntime: 新增原生 __go_crypto_sha1 (commit by @hanxi)
  • e2e6206 - source: 插件音源可返回自定义请求头并在代理/下载时应用 (commit by @hanxi)

🐛 Bug Fixes

  • 46c57dc - 修复内存泄漏和性能问题 (commit by @hanxi)
  • 3ce474d - auto-create 歌单按名复用 ID 避免每次扫描重建 (commit by @hanxi)
  • 0e2bfef - jsruntime: support binary fetch payloads (commit by @hanxi)

⚡ Performance Improvements

  • 4a55fc2 - jsruntime: 优化 JS 插件热路径与冷启动 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • 95575d9 - update pkg/tag submodule (FLAC CUESHEET 支持) (commit by @hanxi)
  • 28bdb36 - update songloft-plugin-miot submodule (关闭口令修复) (commit by @hanxi)
  • 56d08d6 - update songloft-plugin-miot submodule (搜索接口选项修复) (commit by @hanxi)
  • 6dd6cc6 - update songloft-plugin-miot submodule (歌单 ID 失效重试) (commit by @hanxi)
  • 7994aed - update songloft-plugin-subsonic submodule (修复外部歌曲歌词 404) (commit by @hanxi)
  • 28614d1 - update songloft-plugin-subsonic submodule (bump v2.2.1) (commit by @hanxi)
  • b5201ce - update songloft-plugin-miot submodule (新增触屏歌词开关 #239) (commit by @hanxi)
  • 7b1e58a - release version 2.9.5 (commit by @hanxi)

[v2.9.4] - 2026-06-30

✨ New Features

✅ Tests

  • e0f3b5f - jsplugin: 新增 UDP socket API 单元测试 + 文档更新 #222 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.9.3] - 2026-06-30

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.9.2] - 2026-06-29

📝 Documentation Changes

🔧 Chores

[v2.9.1] - 2026-06-29

🐛 Bug Fixes

  • 5b92b91 - player: update frontend playback crash fix (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.9.0] - 2026-06-29

✨ New Features

  • 993a3e7 - scan: 歌单创建方式支持三种模式(按文件夹/按顶层文件夹/包含子目录) (commit by @hanxi)
  • e858260 - plugin: 新增自动下载 bridge API,支持插件注册缓存完成后自动下载 (PR #224 by @hanxi)
  • 2989703 - equalizer: 添加 EQ 均衡器 settings 端点 (PR #217 by @hanxi)
  • 8f82ef7 - 将 Go 后端嵌入客户端,支持本地模式播放 (PR #225 by @hanxi)
  • 7cf670d - plugin: 插件持久化存储 API + 卸载保留数据 + 孤儿清理 (PR #220 by @hanxi)
  • 0f732ed - player: 更新子模块实现按服务器隔离凭证 (commit by @hanxi)

🐛 Bug Fixes

  • 0456bbf - scan: 修复元数据提取失败时标题含扩展名、空数据覆盖已有记录的问题 (commit by @hanxi)
  • 02a866b - cache: 修复插件来源歌曲缓存/下载时扩展名始终为 .mp3 的问题 (commit by @hanxi)
  • 0eeb224 - cache: ffprobe format_name 未标准化导致 M4A 文件可能获得 .mov 扩展名 (commit by @hanxi)
  • f3aa113 - subsonic: 修复 Subsonic 服务端模式无法播放远程歌曲和电台 (PR #219 by @hanxi)
  • c5f2cb2 - scan: 扫描完成后返回本地歌曲总数,解决与歌曲库计数不一致的困惑 (commit by @hanxi)
  • 49fff2e - plugin: EnablePlugin 前先卸载残留环境,避免 env already exists 错误 (commit by @hanxi)
  • e14cae5 - cover: 封面 URL 追加时间戳参数穿透客户端缓存 (PR #218 by @hanxi)
  • 5e36bf0 - ci: 添加 gomobile tool 依赖修复 iOS/Android 构建 (commit by @hanxi)
  • 73e28ec - plugin: playlists.getSongs 桥接增加诊断日志和重试 (PR #21 by @hanxi)
  • a3811da - ci: 更新 songloft-player 子模块修复 macOS 构建 (commit by @hanxi)
  • 412b28c - plugin: 私有 GitHub 仓库插件通过 API 端点下载 (commit by @hanxi)
  • 90f5a79 - player: 更新 songloft-player 子模块修复本地模式 (commit by @hanxi)
  • f812e1d - player: 更新子模块修复 Xcode 26.5 编译 (commit by @hanxi)
  • a48b776 - player: 更新子模块修复 macOS linker 错误 (commit by @hanxi)
  • 1c27231 - player: 更新子模块修复 iOS 构建 (commit by @hanxi)
  • a0b8c1b - player: 更新子模块修复 iOS EqualizerPlugin 和 SongloftBackendPlugin 编译 (commit by @hanxi)
  • da65db1 - 修复 Android bundled 模式下 covers 目录路径解析错误 (commit by @hanxi)
  • 8739e1a - local: 修复 Android 本地模式扫描 + 更新子模块 (commit by @hanxi)
  • 039bdf5 - player: 更新子模块修复本地模式设置页入口 (commit by @hanxi)
  • 56e042c - scan: 扫描文件发现阶段增加进度报告 (PR #227 by @hanxi)
  • 281a8d5 - settings: 更新子模块修复歌单创建方式下拉竖排显示 (PR #228 by @hanxi)
  • e5ac251 - web: 更新子模块修复移动端浏览器切后台黑屏 (PR #229 by @hanxi)
  • 7c13a31 - player: 更新子模块修复桌面端播完不自动切歌 (commit by @hanxi)
  • bd84888 - 标签解析与扫描稳定性修复 (songloft-org/songloft-player#14) (commit by @hanxi)
  • e433aa3 - jsplugin: serveFile 支持非本地歌曲 + removeSongs 容错 (songloft-org/songloft-plugin-subsonic#6) (commit by @hanxi)
  • e58358d - Subsonic 远程歌曲格式显示与电台列表修复 + Windows 缓存兼容 (PR #231 by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.8.10] - 2026-06-24

📝 Documentation Changes

🔧 Chores

[v2.8.9] - 2026-06-24

✨ New Features

  • 34a6e4c - remote 歌曲播放时自动提取元数据 (commit by @hanxi)
  • 0b19732 - jsplugin: implement remaining Bridge API operations (commit by @hanxi)
  • 0984246 - jsplugin: add yt-dlp music import plugin (commit by @hanxi)
  • 15dbb79 - support AIF/AIFF format scanning and metadata extraction (commit by @hanxi)
  • 15b47b8 - add AIFF write support and update docs (commit by @hanxi)
  • c9cf78e - subsonic: 补全 Subsonic 协议支持,修复音流等客户端兼容性问题 (commit by @hanxi)
  • bd98b73 - jsplugin: 新增 plugin.getNetworkAddresses bridge API 并更新 miot 插件 (commit by @hanxi)

🐛 Bug Fixes

  • 96a1718 - 解决 http proxy 问题 (commit by @hanxi)
  • 9048266 - jsplugin: 修复禁用插件后状态被自愈机制覆盖回 active 的竞态问题 (commit by @hanxi)
  • 962950c - jsplugin: 电台插件 M3U 导入大小限制从 5MB 提升到 20MB (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • e371ff7 - update radio plugin submodule (v2026.6.23) (commit by @hanxi)
  • 8391804 - update songloft-player submodule (commit by @hanxi)
  • 15a7f33 - update subsonic plugin submodule (歌单浏览功能) (commit by @hanxi)
  • 5b87148 - update miot plugin submodule (升级 SDK 2.6.3) (commit by @hanxi)
  • ec153c9 - update subsonic/dav plugin submodules (icon + v2.1.1/v1.1.1) (commit by @hanxi)
  • aa3a4e8 - update miot plugin submodule (设置页 UI 补全) (commit by @hanxi)
  • b5b7021 - update miot plugin submodule (外部搜索下拉列表) (commit by @hanxi)
  • b1ae529 - update miot plugin submodule (外部搜索超时可配置) (commit by @hanxi)
  • f5aef4e - release version 2.8.9 (commit by @hanxi)

[v2.8.8] - 2026-06-22

✨ New Features

  • 6e36dcb - jsplugin: 插件源支持 Bearer Token 认证,用于私有源分发 (commit by @hanxi)
  • 90a3f19 - 封面支持插件相对 URL 解析 + AddRemoteSongs 新增 lyric_remote_url 直传字段 (PR #203 by @hanxi)
  • 9f7eaf7 - 添加 songloft-plugin-radio 子模块 + 更新 registry (commit by @hanxi)

🐛 Bug Fixes

  • 5f0cec3 - models: LyricURLPath 对 remote 歌曲始终返回歌词端点 URL (PR #201 by @hanxi)
  • 8a73b0a - services: 避免 exec.LookPath 使用 faccessat2 导致 Termux 上 SIGSYS 崩溃 (PR #202 by @hanxi)
  • ce441f2 - miot: 更新子模块引用,修复密码/Token登录 token 续期问题 (PR #200 by @hanxi)
  • b3e077f - jsplugin: 私有源 token 仅对同 host 的 includes 透传,防止跨域泄露 (commit by @hanxi)
  • 046cf14 - 修正开发版下载链接,release tag 应为 dev 而非 main (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • 7ab59e3 - legal: 补全字体许可证,清理插件子模块,更新文档引用 (commit by @hanxi)
  • ffec8e9 - 更新 songloft-player 子模块引用 (commit by @hanxi)
  • 9ee94e0 - release version 2.8.8 (commit by @hanxi)

[v2.8.7] - 2026-06-20

✨ New Features

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.8.6] - 2026-06-19

✨ New Features

🐛 Bug Fixes

  • 6db9455 - player: 随机播放模式下全部播放不再固定从第一首开始 (PR #184 by @hanxi)
  • 6c9590a - cache: 流式播放缓存后自动回填歌曲时长 (PR #185 by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.8.5] - 2026-06-16

✨ New Features

  • 5744cc3 - nav: 放宽 tab 数量限制至 10,移动端支持「更多」溢出菜单 (commit by @hanxi)
  • 389be4a - playlist: 更新 songloft-player 子模块,歌单列表高亮当前播放歌单 (close #182) (commit by @hanxi)
  • 3c37727 - plugin: 新增歌词提供者回调机制和 lrclib 歌词插件 (close #183) (commit by @hanxi)

🐛 Bug Fixes

  • bec658c - web: 更新 songloft-player 子模块,修复 embedded 模式字体缺失 (close #177) (commit by @hanxi)
  • e1b7d40 - playlist: 修复从歌曲选择封面后预览空白及缓存不刷新 (close #176) (commit by @hanxi)
  • 4c01988 - plugin: 更新 songloft-player 子模块,修复 Windows 最小化后插件 WebView 拦截桌面右键 (close #181) (commit by @hanxi)
  • 1eb05ac - plugin: 修复 DAV 插件 buildStreamUrl 路径双重前缀导致播放 404 (close #180) (commit by @hanxi)
  • d5ec3cc - plugin: URLSearchParams polyfill 支持对象参数,修复歌词插件精确搜索参数丢失 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • 12b565d - plugin: 更新歌词插件子模块,补全元数据和发布流程 (commit by @hanxi)
  • 841fffc - plugin: 更新插件源子模块,添加歌词搜索插件 (commit by @hanxi)
  • 27be42d - release version 2.8.5 (commit by @hanxi)

[v2.8.4] - 2026-06-15

🐛 Bug Fixes

  • 422c968 - miot: 更新 miot 插件 - 修复语音搜歌匹配错误 (close #83) (commit by @hanxi)
  • e127621 - playlist: 修复编辑歌单从歌曲选择封面无效的问题 (close #176) (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.8.3] - 2026-06-15

✨ New Features

  • 00763f2 - 下载歌曲时拉取 URL 歌词写入文件,实现 MP4/OGG 元数据写入 (commit by @hanxi)
  • 7f98bae - APE 封面读写支持,更新 tag 写入文档 (commit by @hanxi)

🐛 Bug Fixes

  • 80d6a8f - player: 低码率音质下播放按钮需按两次才能播放 (close #170) (commit by @hanxi)
  • fc03e78 - player: 所有播放来源广播 onPlayEvent 事件 (close #173) (commit by @hanxi)
  • 69554eb - player: 歌词加载后立即推送到灵动岛 (close #98) (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.8.2] - 2026-06-13

✨ New Features

  • feb75bb - jsplugin: add onPlayEvent callback for play event subscription (close #164) (commit by @hanxi)
  • 23311d3 - transcode: 支持多音质转码与按码率缓存 (close #169) (commit by @hanxi)
  • 7ea30d2 - playlist: 歌单歌曲支持排序与搜索 (close #168) (commit by @hanxi)

🐛 Bug Fixes

  • 0737849 - miot: 修复语音调音量"百分之X"被误解析为100% (close #166) (commit by @hanxi)
  • e31f67d - jsruntime: HealthProbe 污染 eval 超时导致定时器驱动操作被误中断 (close songloft-org/songloft-plugin-miot#10) (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • 0bac21d - submodule: update jsplugins and player submodules (commit by @hanxi)
  • cecabad - submodule: update player and plugin-toolchain for play event support (PR #164 by @hanxi)
  • 65d806d - release version 2.8.2 (commit by @hanxi)

[v2.8.1] - 2026-06-12

✨ New Features

  • 9705163 - cache: remove convert-to-local feature and add custom cache directory (commit by @hanxi)
  • 6c35b39 - cache: streaming proxy with cache_path + song download plugin (commit by @hanxi)
  • 2a1ef4e - model: 添加 source_cover_url 字段并统一编辑表单短域显示 (commit by @hanxi)
  • 86d1805 - jsplugin: 新安装插件默认启用 (commit by @hanxi)
  • de30985 - 新增自动创建歌单排除目录 (commit by @hanxi)

🐛 Bug Fixes

  • 821aa41 - jsplugin: refresh publicPaths at runtime without restart (PR #158 by @hanxi)
  • f3a28bc - fingerprint: remove invalid length threshold in ExtractFingerprint
  • bd2aec9 - cache: 修复 Windows 编译失败 — syscall.Statfs 不跨平台 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.8.0] - 2026-06-11

✨ New Features

  • da56b08 - scan: add toggle to enable/disable auto-create playlists on scan (commit by @hanxi)
  • f2a6c1e - jsplugin: externalPaths 改为 manifest 声明,删除管理员 API (PR #151 by @hanxi)
  • f313243 - api: 暴露 lyric_remote_url 字段,支持编辑网络歌曲歌词 URL (PR #141 by @hanxi)
  • afc45a6 - tracely: 支持安装/升级统计上报,配置改为三变量注入 (commit by @hanxi)

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

  • a2c4860 - bump plugin submodules (tag v1.0.6, dav v1.0.4, subsonic v2.0.1) (commit by @hanxi)
  • dceab9e - release version 2.8.0 (commit by @hanxi)

[v2.7.0] - 2026-06-09

✨ New Features

  • 9b3fb55 - jsplugin: support pathPrefix param in songs.list bridge (commit by @hanxi)
  • 59f8d0c - song: add ISRC field to Song model and extract from audio tags (commit by @hanxi)
  • 4ccbc0c - scan: add auto-scan with file stability detection (commit by @hanxi)
  • 24f934d - 核心镜像缺ALSA用户态运行文件 (PR #135 by @huaimi123)
  • 5b8d062 - jsplugin: add serveFile directive, file serve route, and publicPaths (commit by @hanxi)
  • 139b667 - jsplugin: add external-paths settings API (commit by @hanxi)
  • e7c365c - subsonic: add Subsonic server mode (commit by @hanxi)
  • b5ebe57 - subsonic: add server mode settings UI (commit by @hanxi)
  • afd326e - subsonic: add getGenres endpoint (commit by @hanxi)
  • 51eab49 - subsonic: add getSong, getStarred, getIndexes endpoints (commit by @hanxi)
  • 383b6c1 - subsonic: getStarred reads from built-in favorites playlist (commit by @hanxi)
  • f3f9b85 - subsonic: add copy button for server URL (commit by @hanxi)
  • fdddf45 - jsplugin: add plugin icon support (PR #139 by @hanxi)

🐛 Bug Fixes

  • fc52d35 - miot: embed模式下搜索框被遮挡 (commit by @hanxi)
  • 4e06ba5 - plugin-toolchain: add fs:music, fs:external to builder permission whitelist (commit by @hanxi)
  • 59e2f65 - jsplugin: publicPaths bypass via AuthMiddleware checker (commit by @hanxi)
  • 1997a90 - subsonic: server URL display should not include /rest suffix (commit by @hanxi)
  • 48d4939 - subsonic: fix field mapping and add getAlbum/getArtist endpoints (commit by @hanxi)
  • a927818 - subsonic: add required song fields for client compatibility (commit by @hanxi)
  • 66a0114 - subsonic: fix cover art and add lyrics support (commit by @hanxi)
  • e26f71e - subsonic: playlist cover art display (commit by @hanxi)

♻️ Refactors

  • d7a0d89 - jsplugin: merge manifest.json into plugin.json (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.6.4] - 2026-06-07

✨ New Features

  • 27aeb03 - jsplugin: 支持插件强制更新(跳过版本检查) (commit by @hanxi)
  • 0cce183 - fingerprint: 支持重新计算全部音频指纹 (commit by @hanxi)

🐛 Bug Fixes

  • d617b20 - 修复 WAV/APE 标签及文件名的中文编码乱码问题 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.6.3] - 2026-06-07

✨ New Features

  • 5dbbff9 - 用 ffmpeg chromaprint 替代 fpcalc,扫描后自动计算指纹 (commit by @hanxi)
  • fe7810c - 更新 miot 插件,支持定时开关对话监听 (commit by @hanxi)
  • 4fbfdcb - 重构插件主题 (commit by @hanxi)
  • ca52f4e - dedup: 指纹去重删除时同步删除音频文件 (commit by @hanxi)

🐛 Bug Fixes

  • cec5a8a - 设置 PKG_CONFIG_PATH 让 ffmpeg configure 找到 libchromaprint (commit by @hanxi)
  • d4a8cc4 - 设置 PKG_CONFIG_PATH 让 ffmpeg configure 找到 libchromaprint (commit by @hanxi)
  • 872abaf - tag: 移除与 common.css 重复的导航样式,修复非 embed 模式 tab 异常 (commit by @hanxi)
  • 8336676 - tag: 移除与 common.css 重复的 card 样式定义 (commit by @hanxi)
  • 9c8db18 - settings: 缓存管理操作区域默认折叠,防止误触 (commit by @hanxi)

⚡ Performance Improvements

  • e8c4d5a - 写入标签前预检,标签一致时跳过磁盘写入 (commit by @hanxi)

♻️ Refactors

  • a4459ad - tag: 导航改为底部 tab-bar,统一插件 UI 风格 (commit by @hanxi)
  • 87c217f - tag-plugin: 移除 fpcalc 依赖,改用主程序指纹 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

  • 316bbd6 - 更新 dav/subsonic 子模块,清理死代码 (commit by @hanxi)
  • 28da741 - 更新 miot 子模块,搜索前打断音箱播报 (commit by @hanxi)
  • 3306c2c - release version 2.6.3 (commit by @hanxi)

[v2.6.2] - 2026-06-06

✨ New Features

🐛 Bug Fixes

  • 1e9722f - 更新 pkg/tag 子模块,修复 APE/WAV 读写问题 (commit by @hanxi)

🔧 Chores

[v2.6.0] - 2026-06-05

✨ New Features

🐛 Bug Fixes

  • 4cf8a77 - 修复插件无法运行的问题 (commit by @hanxi)
  • 2db9ac8 - 统一插件打包脚本 (commit by @hanxi)
  • 236ec5b - convert: 接入全局 HTTP 代理,修复代理环境下歌曲/封面下载失败 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.5.1] - 2026-06-04

✨ New Features

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[Unreleased]

✨ New Features

  • 插件商店支持自定义代理输入(与插件更新/系统升级对话框一致的 RadioGroup + 自定义输入框)
  • 新增通用 HTTP 代理设置(/settings/http-proxy),所有后端外发请求可通过用户配置的代理转发

[v2.5.0] - 2026-06-04

✨ New Features

🐛 Bug Fixes

  • 1596210 - 优化首次加载 songloft-org/songloft#91 (commit by @hanxi)
  • 2d85024 - http: 修复 URL userinfo 丢失及 JS URL polyfill 相对路径解析缺陷 (commit by @hanxi)
  • f268fe3 - proxy: add basic auth handling and update User-Agent for remote resources (PR #93 by @Dev-Wiki)
  • 38174a4 - 修复打包镜像报错 (commit by @hanxi)
  • 5e971b3 - scan: 检测并跳过垃圾 tag,回退使用文件名作为标题 (PR #94 by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.4.0] - 2026-06-02

✨ New Features

🐛 Bug Fixes

  • c0751a2 - 解决m3u8格式的电台无法播放问题 (commit by @hanxi)
  • aca70a4 - access log 改用 slog 输出,解决日志等级控制问题 (commit by @hanxi)

👷 Build System

📝 Documentation Changes

🔧 Chores

[v2.3.0] - 2026-06-01

✨ New Features

  • dad2d9c - 电台支持走后端代理 (commit by @hanxi)
  • 2d10351 - 快速切多次歌曲时抖动优化 songloft-org/songloft#79 (commit by @hanxi)
  • 8bedce2 - 添加歌曲支持目录筛选和类型筛选 songloft-org/songloft#57 (commit by @hanxi)

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.2.5] - 2026-06-01

📝 Documentation Changes

🔧 Chores

[v2.2.4] - 2026-05-31

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.2.3] - 2026-05-31

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.2.2] - 2026-05-31

✨ New Features

📝 Documentation Changes

🔧 Chores

[v2.2.1] - 2026-05-31

🐛 Bug Fixes

  • 5843b56 - 解决url参数被解析合并的问题 (commit by @hanxi)

📝 Documentation Changes

🔧 Chores

[v2.2.0] - 2026-05-31

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.1.2] - 2026-05-31

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.1.1] - 2026-05-30

📝 Documentation Changes

🔧 Chores

[v2.1.0] - 2026-05-30

✨ New Features

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.0.2] - 2026-05-30

✨ New Features

🐛 Bug Fixes

📝 Documentation Changes

🔧 Chores

[v2.0.1] - 2026-05-29

✨ New Features

🔧 Chores

[v2.0.0-alpha.1] - 2026-05-29

✨ New Features

  • 58232ea - app: one-shot mimusic.db -> songloft.db auto migration (v2.0) (commit by @hanxi)

🐛 Bug Fixes

  • 8e15634 - ci: prevent changelog SHA lines from executing as shell commands (commit by @hanxi)

♻️ Refactors

  • 65c53cb - rename Go module mimusic -> songloft (v2.0) (commit by @hanxi)
  • fc2d601 - rename JS plugin global ABI mimusic.* -> songloft.* (v2.0) (commit by @hanxi)
  • c9f05cd - rename runtime literals MiMusic -> Songloft (v2.0) (commit by @hanxi)
  • c32ab18 - retire jsplugins aggregator, plugins self-host releases (commit by @hanxi)

👷 Build System

  • e0ff7b5 - complete v2.0 rebrand of release workflows (Phase 3h follow-up) (commit by @hanxi)

📝 Documentation Changes

  • 1b766d2 - add NOTICE and PRIVACY.md for license and privacy compliance (commit by @hanxi)
  • 2f5bbf8 - tighten README disclaimers and remove demo site link (commit by @hanxi)
  • 85244b1 - announce planned v2.0 rebrand to Songloft (commit by @hanxi)
  • 5da054a - add MIGRATION.md for v2.0 Songloft rebrand (commit by @hanxi)
  • 79c6df9 - swagger: regenerate Swagger after v2.0 rebrand (commit by @hanxi)
  • b3b17d7 - add V2 release playbook + update-remotes helper (commit by @hanxi)
  • 7bc6fdd - playbook: fix gh CLI command + add transfer helper script (commit by @hanxi)
  • 432632d - complete link migration to songloft-org / songloft.hanxi.cc (commit by @hanxi)
  • 392fdc4 - remove 'formerly MiMusic' from AGENTS.md (commit by @hanxi)

🔧 Chores

  • 07fada7 - remove lxmusic plugins and rename xiaomi plugin (legal cleanup) (commit by @hanxi)
  • a12a765 - bump jsplugins submodule to drop xiaomi.json (commit by @hanxi)
  • 8027762 - bump plugin-toolchain, jsplugin-musicsdk, pkg/tag submodules (commit by @hanxi)
  • 6c80981 - wire up songloft-player submodule rename (v2.0) (commit by @hanxi)
  • abb6ade - wire up songloft-plugin-miot submodule rename (v2.0) (commit by @hanxi)
  • 68a497f - gitignore songloft-player-build (Phase 3h follow-up) (commit by @hanxi)
  • 95e3c0e - bump submodule pointers to alpha-published commits (commit by @hanxi)

[1.4.1] - 2026-05-28

✨ Features

  • c9f81fe 默认开启网络歌单自动转本地歌单
  • ea29cdf 重构歌词接口问题

🐛 Bug Fixes

  • 0011325 修复缓存歌曲冲突问题
  • 44e5de6 修复rename文件报错问题

🔧 Chores

  • 964233c release version 1.4.1
  • cdf8359 优化扫描设置开关文案

[1.4.0] - 2026-05-27

✨ Features

  • 4483c45 自动创建歌单功能简化
  • 6cfd245 歌曲下载功能优化
  • f8dcd21 简化歌曲歌词封面的url逻辑
  • 9148dc9 重构url
  • e8c91b1 优化url路径
  • 7ff56ff 移除wasm插件模块
  • 81c618f 网络歌曲转本地歌曲支持写入tag

🐛 Bug Fixes

  • 8de0455 修复 js fetch 接口问题
  • 55e6818 歌曲去重
  • f612c13 修复歌单名重复问题
  • e450a56 修复歌单名重复问题
  • c4951d3 sqlite问题
  • 97bc3de 修复url问题
  • 43b2431 修复插件接口问题

♻️ Code Refactoring

  • a37070b test: 删除手写 mock,全切 :memory: 真实 DB
  • c7e2032 database: 引入 UnitOfWork,下线 database.Tx/SQLiteTx
  • d58e1d4 database: playlist_songs 表切到 PlaylistSongRepository
  • 8c23575 database: playlists 表切到 PlaylistRepository
  • 10337aa database: songs 表切到 SongRepository
  • 9d995cc database: js_plugins 仓储改用 sqlc.Queries
  • 7094d5f database: configs 表切到 ConfigRepository
  • ea352cd database: tokens 表切到 TokenRepository
  • b004464 database: 引入 sqlc + goose + squirrel 基础设施
  • 1910fd0 抽取 InternalURLResolver,让歌词代理 URL 也能带 token 访问

📚 Documentation

  • 50a67b1 database: 新增 DATABASE_MIGRATIONS 操作指南 + 集成 sqlc 命令到 Makefile
  • 703d2bc agents: 同步数据库重构后的开发约定

🔧 Chores

  • 3c07269 release version 1.4.0
  • 96aa6c4 bump musicsdk v1.1.0 + lxmusic 用上 LyricFetcher.lyricParams

[1.3.50] - 2026-05-25

✨ Features

  • 37ac3b4 支持网络歌曲转本地歌曲

🔧 Chores

  • 923b254 release version 1.3.50

[1.3.49] - 2026-05-24

🐛 Bug Fixes

  • 4a60ca1 修复js插件休眠问题

🔧 Chores

  • 6bcb020 release version 1.3.49

[1.3.48] - 2026-05-22

🐛 Bug Fixes

  • 7d8999d 修复js插件导致宕机问题

🔧 Chores

  • 16754d4 release version 1.3.48

[1.3.47] - 2026-05-22

✨ Features

  • 89eea57 js插件支持手动上传更新

🐛 Bug Fixes

  • bac969a 修复编译警告
  • 53e19c0 修复js异步问题

🔧 Chores

  • 452aacb release version 1.3.47

[1.3.46] - 2026-05-21

✨ Features

  • f7b47bc js插件改成真异步环境
  • 65f1164 优化插件不可用时的提示

🔧 Chores

  • 3bd3a57 release version 1.3.46

[1.3.45] - 2026-05-20

✨ Features

  • 989769c 自动创建的歌单默认按照数字前缀排序
  • 5c47ffc 新增js虚拟机
  • 39dab1b 新增js api
  • ac27696 新增 lxmusic 插件

🐛 Bug Fixes

  • 627f885 修复关闭进程卡死问题

🔧 Chores

  • f9ddbec release version 1.3.45

[1.3.43] - 2026-05-16

🔧 Chores

  • a9d666a release version 1.3.43

[1.3.42] - 2026-05-16

✨ Features

  • 1349f40 js插件性能优化
  • 170a793 js插件支持jsc
  • 6058a32 新增JS插件管理
  • bca3678 js插件开发
  • 9a2dc3a 新增js插件机制
  • 1352e6e 插件休眠更激进

🐛 Bug Fixes

  • 1528474 修复js插件相关问题
  • 71565f6 修复js插件问题
  • ea95c15 JS插件问题修复

♻️ Code Refactoring

  • c706dbb jsplugin: split playlists permission into read/write

🔧 Chores

  • 1dafd4a release version 1.3.42

📝 Other Changes

  • e66cf67 log

[1.3.41] - 2026-05-11

✨ Features

  • a04fb2f 内存优化:空闲插件自动休眠
  • fc60dfd 内存优化
  • 4f77b55 内存优化

🔧 Chores

  • 7ca4fad release version 1.3.41

[1.3.40] - 2026-05-07

🐛 Bug Fixes

  • b055dc0 修复打包脚本问题

🔧 Chores

  • a49aa4c release version 1.3.40

[1.3.39] - 2026-05-06

✨ Features

  • dd30f31 歌单排序功能优化,首页歌单数量显示优化,自动生成的歌单名字优化

🔧 Chores

  • 24c37f9 release version 1.3.39

[1.3.38] - 2026-05-06

✨ Features

  • f886d0c 新增歌单排序功能
  • a0f0b89 添加wma格式支持

🐛 Bug Fixes

  • d078fa7 清理失效的本地歌曲
  • 3dc4eed 修复windows网络歌曲无法缓存的问题

🔧 Chores

  • 85de484 release version 1.3.38

[1.3.37] - 2026-04-30

🐛 Bug Fixes

  • d0b3c2c 修复vbr播放时长读取错误问题

🔧 Chores

  • 46592df release version 1.3.37

[1.3.35] - 2026-04-29

✨ Features

  • a30430c 优化插件静态资源访问

🔧 Chores

  • d72e680 release version 1.3.35

[1.3.34] - 2026-04-27

🐛 Bug Fixes

  • 2d0877d 修复arm/v7系统无法加载插件问题

🔧 Chores

  • 761c5a1 release version 1.3.34

[1.3.33] - 2026-04-26

🔧 Chores

  • b616fd7 release version 1.3.33

[1.3.32] - 2026-04-26

🐛 Bug Fixes

  • 3f5f78d 修复升级后404问题

🔧 Chores

  • 04a3278 release version 1.3.32

[1.3.31] - 2026-04-25

🔧 Chores

  • 430e88d release version 1.3.31

[1.3.30] - 2026-04-25

🐛 Bug Fixes

  • b074f73 兼容 J3455 CPU

🔧 Chores

  • 973edd1 release version 1.3.30

📝 Other Changes

  • 8541df4 插件加载失败添加错误日志

[1.3.29] - 2026-04-20

✨ Features

  • 304270f 插件支持更新
  • fa7e192 插件支持更新

🐛 Bug Fixes

  • 60202c9 修复部分洛雪音源无法使用问题

🔧 Chores

  • 1a41ee7 release version 1.3.29

[1.3.28] - 2026-04-20

✨ Features

  • 27d8ca0 新增排除目录设置

🔧 Chores

  • 04bae3b release version 1.3.28

[1.3.24] - 2026-04-19

🔧 Chores

  • acb5fc2 release version 1.3.24

📝 Other Changes

  • 6419bcd 插件超时优化

[1.3.22] - 2026-04-17

✨ Features

  • 1110184 优化启动速度
  • 9dc1eda 删除 entry_path 字段
  • 1e880a1 新增插件重置功能

🔧 Chores

  • 2fce1be release version 1.3.22

[1.3.21] - 2026-04-17

✨ Features

  • e7a6779 优化升级

🐛 Bug Fixes

  • cfded04 修复 FLAC 中的 ID3v2 信息无法解析的问题
  • c488c01 修复导入相同插件问题

🔧 Chores

  • 99b5e73 release version 1.3.21

[1.3.20] - 2026-04-16

🔧 Chores

  • 0851d64 release version 1.3.20

📝 Other Changes

  • 1fca16e 配置国内镜像

[1.3.18] - 2026-04-15

✨ Features

  • dd8887d 新增批量删除歌单接口
  • 5abf830 缓存功能优化
  • 4b74298 服务端资源缓存优化

🐛 Bug Fixes

  • a166e7e 修复从lite切换到full的问题

🔧 Chores

  • cb3b3f7 release version 1.3.18

[1.3.16] - 2026-04-10

✨ Features

  • 128aab0 支持版本回退到底包
  • 4c80b7c 更新后端支持使用代理

🐛 Bug Fixes

  • db0e395 修复升级问题
  • 00ff400 修复升级问题
  • b904424 修复更新问题
  • 3d9ac57 修复更新问题
  • eb69df6 修复更新问题
  • 7b6b45a 修复更新问题
  • 67e8840 修复更新问题
  • a09c6a9 修复端内更新问题

🔧 Chores

  • 3b6a91d release version 1.3.16
  • a478a02 release version 1.3.14

📝 Other Changes

  • 85983bb 更新问题

[1.3.13] - 2026-04-09

✨ Features

  • 4e3ec57 新增发布内容
  • c912ace 支持断点续传
  • 03a67b4 新增异步下载接口
  • a381643 写入 server_platform 到数据库
  • 720a06e 新增执行命令协议
  • d124fd9 优化无参数启动方式

🐛 Bug Fixes

  • d060619 解决文件权限问题
  • 326b618 网络歌曲导入问题修复
  • 1fcce62 修复导入歌曲问题

🔧 Chores

  • 303407d release version 1.3.13

📝 Other Changes

  • 4cfb584 update doc
  • 0ea9351 update doc
  • 3baf9e9 歌单排序优化
  • a2f5968 调试

[1.3.12] - 2026-04-08

✨ Features

  • e605965 歌词支持URL类型

🔧 Chores

  • a199b72 release version 1.3.12

📝 Other Changes

  • f98a23b 歌词优化

[1.3.10] - 2026-04-06

🐛 Bug Fixes

  • 3aee951 修复报错
  • d80dda2 sql error
  • c908f4e 修复问题

♻️ Code Refactoring

  • 12e3c76 优化扫码登录
  • 825ceaa 优化超时
  • 77578cc 优化网络歌曲播放时长

🔧 Chores

  • 1579a86 release version 1.3.10

📝 Other Changes

  • 54ff2b8 update http
  • 96559c5 update http
  • daa2ca3 插件时间问题

[1.3.9] - 2026-04-03

✨ Features

  • ae3865f add song_count

🔧 Chores

  • 7f805c2 release version 1.3.9

📝 Other Changes

  • a6a551b 启动优化
  • 4c2e0f1 build

[1.3.8] - 2026-04-03

✨ Features

  • cb8a958 新增并行执行js

🔧 Chores

  • bd6a323 release version 1.3.8

📝 Other Changes

  • 9f727f1 歌曲缓存目录优化

[1.3.7] - 2026-04-02

🔧 Chores

  • 667be2b release version 1.3.7

📝 Other Changes

  • 569fc83 歌词

[1.3.6] - 2026-04-02

♻️ Code Refactoring

  • 4e25b28 优化播放体验

🔧 Chores

  • 8dc2774 release version 1.3.6

[1.3.5] - 2026-04-02

🔧 Chores

  • 91dd27e release version 1.3.5

[1.3.4] - 2026-04-01

✨ Features

  • 5dbf196 支持上传封面
  • 54dcc44 支持上传封面

🐛 Bug Fixes

  • 5d253e9 扫描歌曲宕机问题

🔧 Chores

  • 6bc0414 release version 1.3.4

[1.3.3] - 2026-03-31

✨ Features

  • 8ce8662 尝试修复lx运行问题

🔧 Chores

  • cffd9b5 release version 1.3.3

📝 Other Changes

  • ed877c3 delete web
  • e38af01 delete web

[1.3.2] - 2026-03-30

✨ Features

  • 663576d 添加网络歌曲电台接口改为批量

🔧 Chores

  • 0b7f3a2 release version 1.3.2

📝 Other Changes

  • 738896f Update todo list with song-related tasks

[1.3.1] - 2026-03-30

🔧 Chores

  • 5c358c7 release version 1.3.1

[1.3.0] - 2026-03-30

🔧 Chores

  • 48368d9 release version 1.3.0

[1.2.8] - 2026-03-30

✨ Features

  • e195111 网络歌曲支持导入图片
  • de1c838 重构jsruntime
  • b78130f use ccgo quickjs

♻️ Code Refactoring

  • 9ceaecc 优化

🔧 Chores

  • 9aec414 release version 1.2.8

📝 Other Changes

  • fb424e2 提交wiki
  • 3972cad 接入cqjs
  • cffb54e 插件健康检测

[1.2.7] - 2026-03-26

✨ Features

  • abff90a 添加歌曲批量删除 API (POST /songs/batch-delete)

🔧 Chores

  • 902d4fe release version 1.2.7

📝 Other Changes

  • 33d9f2d update doc
  • 9664b49 update doc

[1.2.6] - 2026-03-25

🔧 Chores

  • 73a0403 release version 1.2.6

[1.2.5] - 2026-03-25

✨ Features

  • 0c438fb add frontend
  • 490db3c add mobile

♻️ Code Refactoring

  • d61dfae 优化导入速度
  • b1ff8a9 优化界面

🔧 Chores

  • 96b42c5 release version 1.2.5
  • 7b00668 convert frontend from directory to submodule

📝 Other Changes

  • c9d741d 版本发布脚本
  • c1ce566 版本发布脚本
  • 6025f4b 新版本
  • 54ad790 新版本
  • 51d43a4 新版本
  • ca53020 新版本
  • 90ed646 新版本
  • 00ff846 新版本
  • 568c5c0 新版本
  • fdf177e update frontend
  • 029c4d6 新版本
  • aa66e98 新版本
  • 0833807 frontend 支持独立部署
  • f61d74e 更新文档
  • 72e5c97 修改名字
  • 1b73996 remove mobile
  • d97a16a update mobile

[1.2.4] - 2026-03-19

🔧 Chores

  • 9c70433 release version 1.2.4

[1.2.3] - 2026-03-19

✨ Features

  • dee25c4 新增清理歌曲功能

🐛 Bug Fixes

  • 7ee9c74 build failed
  • d8afe4a 修复paw
  • be6c2c4 修复通知栏丢失的问题
  • aa01b1d 修复pwa更新问题
  • 154ad14 修复通知栏消失的问题
  • 4bbf98e 修复乱码问题

♻️ Code Refactoring

  • 43ff722 优化界面
  • 586049a 优化移动端播放器
  • 1d4b350 优化移动端播放器
  • 43b20a8 优化移动端播放器
  • 7abfe93 优化移动端播放器
  • 2cf5923 优化移动端播放器
  • e6d7afe 优化移动端播放器
  • 6ee93ee 优化播放器界面
  • 7836361 重构错误捕获
  • dda851a 优化播放列表
  • 0f3adee 优化主页
  • 3bd566e 优化日志
  • e1da51d 优化插件管理
  • 1aa8bfa 优化插件管理
  • 892fb58 优化插件管理

🔧 Chores

  • eec45bf release version 1.2.3
  • 84cefea release version 1.2.2

📝 Other Changes

  • 8fbf17f 尝试修复后台通知栏丢失问题
  • 30ab1c0 尝试修复后台通知栏丢失问题
  • 53cd756 强制更新pwa
  • a572312 测试 tracely sdk
  • eb48e8b 测试 tracely sdk
  • 5309e1c 测试 tracely sdk
  • af8bfbe 测试 tracely sdk
  • 9991da4 接入tracely
  • 472c300 接入tracely
  • 4c8719f 细节优化
  • 5485f4e 标题超长则循环滚动
  • c31da28 修改菜单按钮颜色
  • 3f974c7 尝试修复通知栏消失问题

[1.2.1] - 2026-02-26

🐛 Bug Fixes

  • f9543db 解决windows网页打不开问题

🔧 Chores

  • b042cd3 release version 1.2.1

[1.2.0] - 2026-02-26

🔧 Chores

  • 188b602 release version 1.2.0

[1.1.0] - 2026-02-25

✨ Features

  • 391d4dd 新增接口获取token
  • 21aeff9 Add mimusic-plugin-musictag as submodule

🐛 Bug Fixes

  • 893e880 解决标题问题
  • 2092853 修复乱码问题
  • af4454f 解决编码乱码问题
  • 4894785 解决编码乱码问题
  • 148d36a 解决编码乱码问题
  • 430bb64 解决编码乱码问题
  • f8cf809 解决编码乱码问题

♻️ Code Refactoring

  • 767c806 优化歌单体验
  • 57020cf 优化图片
  • 87a88b7 优化图片

🔧 Chores

  • f5690fc release version 1.1.0
  • d3cc78b release version 1.0.12
  • 1b9a285 release version 1.0.11
  • e49b9f3 release version 1.0.10

📝 Other Changes

  • 4d35862 处理歌曲封面
  • 10739d8 网络歌曲播放时长
  • bf35fa5 close cgo
  • 2234e30 update no cgo sqlite

[1.0.9] - 2026-02-21

🔧 Chores

  • e88df7a release version 1.0.9

[1.0.8] - 2026-02-21

🔧 Chores

  • 415b5ef release version 1.0.8
  • c507f93 release version 1.0.7

[1.0.6] - 2026-02-21

🔧 Chores

  • 823f5db release version 1.0.6
  • 34ca5d4 release version 1.0.5
  • caa1448 release version 1.0.4
  • 1321d73 release version 1.0.3
  • ad8d269 release version 1.0.2
  • 1892189 release version 1.0.1

📝 Other Changes

  • 338cd69 upate

[main] - 2026-02-12

✨ Features

  • 665486d Add frontend build job and streamline Docker build
  • d959def Add frontend build job to GitHub Actions workflow
  • be837cf add web
  • 547c3a8 add web
  • f58408d add web
  • 68a50dc add web
  • ebd21e1 add web
  • 069896f add web
  • 518d905 Add mimusic-plugins as a git submodule
  • db470af 支持CORS
  • 34dd18a add MIT licence

🐛 Bug Fixes

  • 145c668 fix 颜色
  • 22cd7d4 fix 颜色
  • adb8610 fix 颜色
  • 043d0d1 fix 颜色
  • 244e365 歌曲读取
  • 6720225 修复数据显示

📝 Other Changes