Skip to content

Releases

v0.11.22 模型可以放到任意目录

Choose a tag to compare

@Watchcats211 Watchcats211 released this 14 Nov 05:14

0.11.22 — 2026-11-14

模型存放位置改成可配置,并且「装在哪」这件事在界面上说清楚。之前模型目录写死在 ~/.podwave/models,5 GB 的家目录占用没法挪,装完也只在小字里提一句。

  • 模型目录可配置:设置页新增「模型存放位置」,可改成任意绝对路径(支持 ~ 和 %VAR%),换完自动把已有模型搬过去。同卷用 rename 秒完成,跨卷会真复制并显示进度;原目录空了会自动删掉。
  • 默认位置保持不变(~/.podwave/models),老用户升级后行为不变;配置里写了非法路径会退回默认,不会让插件起不来。
  • 新增模型清单:列出每个模型的体积、用途(转写 / 翻译 / 说话人分离)、是否正在使用、是否就绪,按体积从大到小排。
  • 新增「删除」按钮:可以清掉不再使用的模型(正在用的会被拦住并说明原因),配合上面的清单能直接回收几个 GB。
  • 新增「在文件管理器中打开」:一键定位到模型目录(macOS 访达 / Windows 资源管理器 / Linux xdg-open)。
  • 安装结束时明确告知落盘位置:一键安装完成的任务里会写出「模型已装在 <路径>」,不再是只提一句默认目录。
  • 下载器、引擎判定、说话人分离改为每次现算模型路径(不再在模块顶层固化常量),换目录后无需重启即可生效。
  • 修复下载路径与运行时路径的混用:llama.cpp 的下载缓存原来拼的是 models/../runtime,现在直接用运行时目录。
  • 修复设置页整体加载失败:/api/update 路由调用了 checkUpdate 但从未 import 进 host,导致设置页每次打开都报「checkUpdate is not defined」,界面上历史记录、模型、安装状态全是空的(该问题从 v0.11.10 加版本检查起就存在)。
  • 顺带修两处显示问题:说话人分离模型装好了却一直显示「未就绪」(只认 safetensors/int8/gguf,不认裸 onnx);本地版本比 npm 新时错误地显示「已是最新版本」。
  • 新增 8 个回归测试(本次共 94 个):模型目录的默认位置 / 换目录 / 迁移 / 拒绝相对路径与嵌套目录 / 体积用途统计 / 删除保护 / 非法配置回退,外加一条「设置页会拉的 8 个接口必须全部 200」的冒烟测试。

v0.11.21 — Windows 兼容性修复

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 13:31

0.11.21 — 2026-11-13

Windows 兼容性修复(对应 Issue #1 的 8 条)。之前插件在 Windows 上能跑通大部分功能,但「检测环境」会给错结论,安装最后一步可能整次失败。

  • 修复首启把 Mac 专用 MLX 模型写进配置:默认模型现在按平台计算(Apple Silicon → MLX;Windows/Linux → SenseVoice + GGUF),不再写死 qwen3-asr-1.7b-8bit 那套只有 Apple Silicon 装得了的模型。
  • 修复配置缓存覆写安装结果:宿主进程常驻,而「一键安装」是另一个进程写盘;原来保存任何无关设置都会把内存里的旧快照整份写回,把刚装好的模型名吞掉。现在每次保存前比对磁盘指纹,外部改动会先被读进来再合并。
  • 修复「安装检查」形同虚设:之前只判断模型名非空,Mac 专用名、甚至瞎编的名字都会亮绿,用户看到「全部通过」却在转写时报「运行环境未安装」。现在比对当前平台真正应有的模型,不一致时明确写出「转写模型应为 X,当前 Y」。
  • 修复引擎判定靠正则猜:改成查 catalog 元数据(artifactByDir),换模型名不会再掉进 MLX 分支。
  • 修复 Windows 上「运行环境未安装」误报:虚拟环境路径统一走 venvBin() / venvPython(),Windows 正确拼 Scripts\,不再是 macOS 的 bin/。
  • 修复 Git-Bash / MSYS / Cygwin 环境下 tar 解压失败:GNU tar 会把 C:/... 当成远程主机(Cannot connect to C: resolve failed,exit 128)。现在 .tar.bz2 / .tar.gz 有四个候选(裸 tar → --force-local → System32 自带 bsdtar → python tarfile),列目录也走同样的兜底,安全路径检查不再被静默跳过。
  • 修复可选组件拖垮整次安装:说话人分离模型(可选)解压失败时不再让「已下载 1.6 GB」被判定成安装失败,而是跳过并给出「可选组件失败,核心功能已就绪」的提示。
  • 修复 scripts/diarize.py 硬编码 /opt/homebrew/bin/ffmpeg(Windows 报 [WinError 2]):默认改为走 PATH。
  • 修复 Windows 上结束子进程等于硬杀:统一走 killTree(),Windows 用 taskkill /T 连子孙进程一起收,其它平台仍是优雅 SIGTERM,避免 ffmpeg/llama-server 残留。
  • 文件夹路径支持 Windows 环境变量:%USERPROFILE%\Music 这类路径现在能正确展开,~\Music 也可以。
  • 小宇宙「一键连接」在非 macOS 上给出明确提示:以前点下去会变成 500 服务器错误,现在返回 400 +「仅支持 macOS 上的小宇宙 App」,前端能直接显示原因。
  • 修复 CI 在 Linux / Windows 上一直红:小宇宙登录态相关测试默认假设「运行在 macOS 且本机有小宇宙 App」,在 CI 上必然失败。现在平台通过参数注入,测试在任何系统上都能跑,同时新增「非 macOS 上必须如实报不支持」的断言。
  • 新增 12 个 Windows 兼容回归测试(本次共 86 个),以及两个只在 CI 的 windows-latest 真机上跑的校验脚本(真实平台默认模型 / 真实 tar.bz2 解压)。

v0.11.20

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 12:58

0.11.20 — 2026-11-13

  • 修复「取消转写」点了没反应:转写任务原本只认内存里的进程句柄,一旦宿主重载过插件(或换过一次模块实例),新实例手里没有任何句柄,点取消只会在内存里空找一圈然后静静返回。现在把子进程 pid 写进持久任务,取消时先按内存找、找不到就按 pid 杀,实在没有进程可杀也把任务收尾成「已取消」,不会一直转圈。
  • 修复重载后任务变僵尸:插件重载时正在跑的转写现在会在磁盘上收尾成「已取消(插件重新加载)」,而不是留下一条永远不会结束的 running 记录。
  • 修复旧实例覆盖新状态:取消后旧实例的进度 tick 会把磁盘上的 cancelling 覆写回 transcribing,看起来像取消失败。现在 tick 每轮读一次磁盘,看到取消意图就停止写进度并终止子进程;收尾阶段同样以磁盘状态为准。
  • 取消/中断的错误信息更准确:进程被信号杀掉(重载、手动 kill)不再报「转写进程退出码 null」+ 一屏 MallocStackLogging 噪声,改为「转写进程被中断,已完成的分块保留,可以点重试继续」。
  • 修复任务面板背景透明:.jobs-panel 用的 CSS 变量 --panel 从未定义,导致面板整块透明,下层字幕文字直接透上来叠成一团。改用与其它浮层一致的 --elev。
  • 新增 6 个取消相关测试(无内存态也能按 pid 杀掉、worker 已退出时直接收尾、interrupted 任务可取消、已完成任务不受影响、未知 id 返回 none、重载后活进程任务保持 running 不被改成 interrupted)。测试总数 74(71 通过、3 个 Windows 专用跳过)。

v0.11.19 小宇宙一键连接

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 09:58

0.11.19 — 2026-11-13

  • 连接小宇宙变成一键:新增「读取小宇宙 App 的登录态」。只要在这台 Mac 的小宇宙 App 里登录过,点一下就把登录态搬进来,不用再开网页、按 F12、抄 header。登录态只写到本机 ~/.podwave/xyz.json(0600)。
  • 手动连接整体折叠进「手动连接」里(网页版复制 token、验证码登录),平时看不到这些步骤。
  • 修复「从剪贴板粘贴」按钮点了报错的问题:之前 pasteToken 压根没定义,点了必抛 ReferenceError。
  • 修复订阅列表一直拉不到:接口从 /v1/subscription 变成了 POST /v1/subscription/list,且必须带 sortBy。现在按 loadMoreKey.skip 翻完所有页(实测 85 个订阅全部取回)。
  • 修复单集详情失效:POST /v1/episode/get 已废弃,改回 GET /v1/episode/get?eid=。之前在线播放、封面回退会踩到 404。
  • 修复 token 刷新一直失败:小宇宙要求刷新时同时带上 refresh token 和 access token,之前只带了 access token,所以永远 401。
  • 订阅项补上真实订阅数与集数(subscriptionCount / episodeCount)。
  • 新增 10 个小宇宙测试:本机登录态读取(无 plist / 未登录 / 正常 / refresh 失败回退 / 登录失效)、宿主路由一键连接、订阅分页、单集 GET、模块加载即读登录态、刷新服务抖动时保留登录态。测试总数 62(59 通过、3 个 Windows 专用跳过)。
  • 登录态不再被一次 401 清空:以前任何一个请求返回 401(可能只是瞬时被网关挡下)就会把本地 token 抹掉,用户只看到「登录已失效」。现在只有 refresh 接口明确拒绝才算过期,瞬时 401 只提示重试、保留登录态;过期文案也改为引导「打开小宇宙 App 重新登录后点一键连接」,不再要求手抄 token。导入失败同样不会覆盖原来还能用的登录态。
  • src/xyz.js 改为模块加载时就读取本机登录态。之前依赖宿主启动时调用 loadXyz(),脚本、测试或任何没调用的路径都会以空 token 发请求,一次 401 就顺手把磁盘上还能用的登录态覆盖成空——这也是「刚才还能播、过一会就失效」的成因之一;401 分支遇到内存里没有 refresh token 时也会先补读磁盘,再判断是不是真过期。
  • 旧字幕不再因为文件改名/移动而丢失:单集 id 是按文件绝对路径算的,路径一变,历史字幕就变成按新 id 找不到的「孤儿」,界面上看起来像从来没有转写过。现在读不到字幕时会按标题 + 时长在 transcripts/ 里找唯一匹配的历史字幕并认领回当前单集(原文件保留作备份,认领记录在 claimedFrom 字段)。多候选时放弃并写日志,不会把别的单集字幕错挂过来。
  • 点侧栏文件夹只看这个文件夹里的内容:本地单集新增 root 字段(归属到最具体的已添加文件夹),点文件夹即筛选、再点一次取消;顶栏「全部单集 / 继续收听 / 已播完 / 小宇宙」会清掉文件夹筛选;移除文件夹时自动清除对应筛选。小宇宙等远端条目不属于任何本地文件夹,筛选时不会混进来。新增 6 个字幕认领测试,测试总数 68(65 通过、3 个 Windows 专用跳过)。

v0.11.18 — 翻译失败后不再丢失已翻译文

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 07:54
  • 修复 API 翻译失败的核心问题:原来要等所有批次都成功才一次性落盘,中途任何一批失败会把前面已翻好的行全部丢掉。现在每 20 行一批、每批成功立刻写入字幕文件,失败时保留已完成的译文。
  • 翻译失败不再静默:后端把完整错误(含 HTTP 状态码与接口返回片段)写进持久任务并打到控制台,前端能看到具体报错,不再是「翻译不了」四个字。
  • 新增「部分完成」状态:字幕已有一半译文时不再假装完成。面板会显示「已翻 X/Y 行,还缺 Z 行」,并给出「补翻缺失部分」按钮,只重翻缺的行。
  • 切换「中文对照 / English」不再自动发起(计费的)翻译请求,只读取后端持久状态。之前只要选一下对照语言就会自动开翻译,是重复计费的主要来源。
  • 重新加载页面或切换单集后,能恢复上次的翻译错误与进度;同一集正在翻译时重复点击不会另起任务。
  • API 返回缺号、格式不对、限流/5xx 都会给出明确提示,超时与限流仍保留自动重试。
  • 新增 7 个翻译回归测试(全部用 mock fetch,不请求真实 API):分批落盘、失败保留、缺号检测、格式异常、状态区分、错误保留、不重复开任务。测试 50 个(47 通过、3 个 Windows 专用跳过)。

v0.11.17 任务面板改为悬浮卡片

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 06:33
  • 修复「任务」面板在收起侧栏的网格布局里被挤成 46px 竖条的问题:改为固定宽度的悬浮卡片,定位在顶栏右下方。
  • 任务列表内部滚动,不再撑开或压扁主内容。

v0.11.16 按钮文字改用主文字色

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 06:25
  • 顶栏「任务」「选择」按钮与侧栏「添加文件夹」的 + 按钮改为白色主文字色,暗色主题下更易辨认。

v0.11.15 修复暗色主题下进度条圆点不可见

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 06:18
  • 修复暗色主题下进度条圆点与已播放进度不可见:--accent 等主题变量在暗色默认值里写成自引用(--accent: var(--accent)),浏览器按循环依赖丢弃,导致圆点/填充色透明。
  • 一并修正 --hover、--text、--line-soft、--line-strong、--accent-ink、--danger 的暗色取值,浅色主题不受影响。
  • 新增回归测试:CSS 中不得出现自定义属性自引用。

v0.11.14

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 06:07
  • 统一节目适配器架构:新增 src/providers.js + src/providers/local.js + src/providers/xyz.js,媒体列表、封面/音频、搜索、历史记录走同一套查找;以后新增 RSS 等来源只需加一个适配器文件。
  • 小宇宙单集补齐与本地一致的待遇:播放进度持久化、字幕编辑/拆分/合并/撤销、字幕翻译、已下载单集补跑说话人分离、历史记录显示。
  • 修复字幕搜索漏读 transcript 目录(补 readdir):本地与小宇宙台词都能搜到并跳转秒数。
  • 设置页模型识别支持 .gguf / .onnx:备用模型不再被误判为未就绪。
  • 适配器兜底顺序加固:显式来源优先于 local 兜底,方便后续扩展。
  • 测试 42 个(39 通过、3 个 Windows 专用跳过),构建可复现。

v0.11.13

Choose a tag to compare

@Watchcats211 Watchcats211 released this 13 Nov 04:55
  • 公开播客支持粘贴单集链接(/episode/…):直接解析并播放该单集,无需先浏览整个播客。
  • 单集解析复用公开页 NEXT_DATA,未登录可用。
  • 测试 41 个(38 通过、3 个 Windows 跳过)。