v0.5.02026-04-25
The Capture 版本:Voicebox 从单纯的克隆工作室升级为完整的 AI 语音工作室。
新加入全局热键听写——按住自定义组合键说话、松开即出文,转写结果自动粘贴到按下热键时聚焦的输入框,兼容 Dvorak/AZERTY 布局,粘贴前后会保存并还原剪贴板;推送通话与开关模式各有独立组合键,中途按空格还能无缝切换到免持录音。macOS 默认组合键避开左侧 Cmd+Option 与系统快捷键的冲突,Windows 则绕开德法西布局的 AltGr;未授予辅助功能权限时听写照常可用,只是禁用自动粘贴。
音色档案新增最多 2000 字的「人格」描述,由本地 Qwen3 模型驱动:一键生成符合人设的台词,或让人格改写你的输入再送入 TTS,且该模型同时承担润色任务,应用内只有一个本地 LLM。相关接口与 MCP 绑定均支持 personality 参数。
同时内置 MCP 服务(http://127.0.0.1:17493/mcp),Claude Code、Cursor、Windsurf 等客户端可直接调用 voicebox.speak 发声、voicebox.transcribe 转写;转写的路径模式仅限回环地址调用,避免绑定 0.0.0.0 时沦为任意本地文件读取入口。
v0.4.52026-04-22
0.4.5 是针对「offline mode is enabled」崩溃的第二个热修复。0.4.4 只回退了推理路径上的离线保护,加载路径的陷阱仍在,升级用户照旧撞上原本报错的同一个问题(#526)。
这版把加载路径的守卫一并移除,并从源头加固 transformers 的 tokenizer 加载:patchmistralregex 在 transformers 4.57.x 中会对每个非本地仓库无条件调用 huggingfacehub.modelinfo(),如今任何元数据异常都会被捕获,tokenizer 原样返回,非 Mistral 仓库的行为不变。补丁在 backend.backends 导入时生效,覆盖 Qwen Base、Qwen CustomVoice、TADA 及所有基于 transformers 的引擎,Windows、Linux、CUDA 一视同仁。既然补丁已兜底,原来的 forceofflineifcached 守卫没有存在价值,只会重新引入故障,故而删去。
顺带解决离线生成时 30 秒的卡顿——那正是同一处 HuggingFace 元数据检查超时所致,离线用户加载时不再干等。
v0.4.42026-04-21
0.4.4 是针对 0.4.3 一个回归的热修复:用户明明在线,生成和转写却会直接报「offline mode is enabled」而失败。
根源在于 0.4.3 为解决网络中断时 HuggingFace 惰性查找挂死的问题(#462),在 generate、transcribe、createvoicecloneprompt 的整个推理期间强制切换全局 HFHUBOFFLINE,顺带把 HfApi().modelinfo 这类解析 revision 的正常元数据请求也一并拦掉,于是联网用户开始失败。本版回退了 #503 加在推理路径上的这层守卫,推理过程恢复使用进程默认的 HF 状态;加载阶段的离线守卫并非回归元凶,保持不变。
已知取舍:完全离线环境下生成时,HuggingFace 元数据查找会等超时(约 30 秒)再自动恢复,表现为推理短暂卡顿。更彻底的离线模式开关计划在 0.4.5 推出。
voicebox v0.4.32026-04-21
v0.x 补丁更新,集中修了两个影响使用的可靠性问题。
macOS 方面,DMG 安装包此前只对内部 .app 做了公证,外层 DMG 本身未签名。Gatekeeper 因此在 macOS 15 Sequoia 上直接拒绝安装(Homebrew Cask 的 arm 与 intel 测试机均失败),老款 Intel 机型在苹果公证服务器缓慢或不可达时还会弹出「应用未签名」提示。发布流程现在会对每个 DMG 提交 notarytool、钉回票据并用 spctl 校验,macOS 构建因此多花 5-10 分钟。
后端方面,全新安装时 Kokoro 日语语音会崩溃:misaki[ja] 依赖的 fugashi 需要本地 MeCab 词典,原先安装的 unidic 不带数据、依赖 526MB 的运行时下载,打包后也无法保留。现改为 unidic-lite,词典直接打进 wheel(约 50MB),并已在 buildbinary.py 中收集 unidiclite/dicdir/,冻结构建同样生效。
voicebox v0.4.22026-04-21
VoiceBox 0.4.2 完成了整站本地化:基于 i18next 接入应用内语言切换,改动即时重渲染界面,英文、简体中文、繁体中文、日语四套语言全量覆盖,共 559 个翻译键,各标签页、弹窗、对话框与提示消息均无英文残留。相对时间、开发版后缀也随语言变化,例如「3 天前」「(开发版)」。
可靠性方面同步修了几处实际痛点:开启离线模式后,所有推理路径都会遵守 HFHUBOFFLINE,不再因尝试访问 HuggingFace 元数据而在内网环境卡死;Chatterbox 的参考音频采样率或声道不匹配时会自动重采样,不再直接报错拒收;MLX Qwen 0.6B 修正了仓库地址,Apple Silicon 上终于能正常下载;macOS 系统音频在窗口失焦后不再被中断捕获;另修正 MLX 后端的 miniaudio 依赖声明。
官网新增独立下载页,反向代理下的安装包跳转与多引擎文档同步更新。Linux 版本仍因 CI 打包环节挂起而未随本版发布,相关尝试已回退。
v0.4.12026-04-19
A fast follow-up to 0.4.0 focused on making the new engines actually load in the production binary — plus generation cancellation, Linux system-audio capture, and the repo's first PR-time type check. Five first-time contributors shipped in this release.
0.4.0 introduced three new TTS engines, but the frozen PyInstaller binary tripped over several Python-ecosystem quirks that don't show up in the dev venv: transformers opening .py sources at runtime, scipy.stats.distninfrastructure hitting a frozen-importer NameError, and chatterbox-multilingual failing to find its Chinese segmenter dictionary. This release patches all of those in one sweep.
Frozen-Binary Reliability (#438)
- Kokoro now bundles .py sources alongside .pyc via --collect-all kokoro so transformers' cansetattnimplementation regex scan can read them — previously FileNotFoundError: kokoro/modules.py killed Kokoro loading in production builds
- Chatterbox Multilingual now bundles spacypkuseg/dicts/default.pkl and the package's native .so extensions via --collect-all spacypkuseg — previously the Chinese word segmenter crashed with FileNotFoundError on first load
- scipy.stats.distninfrastructure — new runtime hook source-patches the trailing del obj (which raises NameError under PyInstaller's frozen importer because the preceding list comprehension evaluates empty) to globals().pop('obj', None), unblocking librosa → scipy.signal → scipy.stats for every TTS engine that depends on librosa
- transformers.maskingutils — same runtime hook forces istorchgreaterorequalthan26 = False so the older sdpamaskoldertorch path is selected; the 2.6+ path uses TransformGetItemToIndex(), a real torch._dynamo graph transform our permissive stub can't reproduce
- torch.dynamo — no-op stub replaces the real module before transformers imports it, preventing the torch.numpy.ufuncs import crash (NameError: name 'name' is not defined) that blocked Kokoro and every engine pulling in flexattention
- .spec paths are now repo-relative instead of absolute, so the generated spec is portable across machines and CI
Generation
- Cancel queued or running generations (#444) — new /generate/{id}/cancel endpoint and a Stop button on the history row while generating. The serial queue now tracks per-ID state (queued / running / cancelled) so queued jobs are skipped before the worker picks them up and running jobs are .cancel()-ed mid-flight; run_generation catches CancelledError and marks the row failed with a "cancelled" error.
- Legacy data/ path prefix resolution (#440) — generations stored with the old data/ prefix under pre-0.4 installs now resolve correctly after the storage root moved, fixing 404s for historical audio.
Model Migration
- Migration dialog no longer hangs when the cache is empty (#439) — the backend now emits a completion SSE event even when zero models are moved.
- Storage-change flow surfaces a toast when there's nothing to migrate (#433) instead of proceeding with a no-op move and restarting the server.
- Deleting all generations from a voice profile now deletes the associated version files and DB rows too (#447) — previously orphaned versions accumulated in storage.
Platform
- Linux system audio capture (#457) — cpal's ALSA backend doesn't expose PulseAudio/PipeWire monitor sources by name, so the previous device-name search never matched and silently fell back to the microphone. Detection now uses pactl get-default-sink + pactl list short sources and routes via PULSE_SOURCE, with the name-based search retained as a fallback when pactl is absent.
Frontend CI
- First PR-time quality gate (#418) — new .github/workflows/ci.yml runs bun run typecheck + bun run build:web on every PR. Fixed pre-existing type issues that were being suppressed with @ts-expect-error, cleaned up a dep-array typo ([platform.metadata.isTauricheckOnMountcheckForUpdates]) in useAutoUpdater, and removed 100+ lines of dead ModelItem code from ModelManagement.tsx.
- Follow-up: widened apiClient.migrateModels() return type to include moved and errors so the storage-change handler typechecks against the real backend response (#470).
Docs
- Clarified in the Quick Start + README that paralinguistic tags ([laugh], [sigh]) only work with Chatterbox Turbo; other engines read them as literal text (#450).
New Contributors
- @Bortlesboat — generation cancellation (#444)
- @gaojulong — migration dialog hang fix (#439)
- @fuleinist — migration no-op toast (#433)
- @erionjuniordeandrade-a11y — frontend CI + type hardening (#418)
- @estefrac — Linux pactl system-audio capture (#457)
v0.4.02026-04-16
Voicebox 0.4.0:三个新引擎,TTS 阵容扩至七款
本次一口气加入三款 TTS 引擎:HumeAI TADA、Kokoro 82M、Qwen CustomVoice,连同原有的 Qwen3-TTS、LuxTTS、Chatterbox Multilingual 与 Chatterbox Turbo,总数达到七款。三者定位分明——TADA 主打表现力英语及多语种,Kokoro 82M 走轻量快速路线,CustomVoice 则基于 Qwen3-TTS 提供预置音色。引擎不再清一色是克隆模型,音色面板的交互随之重做:不兼容的音色置灰而非直接隐藏,点击会自动切换到匹配引擎;Qwen CustomVoice 恢复了语气、情感、语速的指令输入框。
GPU 支持扩展到 Intel Arc(XPU)与 NVIDIA Blackwell(RTX 50 系),并新增运行时诊断,PyTorch 与显卡不匹配时会主动提醒。CUDA 后端拆分为独立版本的服务端与库压缩包,升级不再重复下载 4 GB 的 PyTorch/CUDA DLL。
另修了三十余个缺陷,覆盖反馈最集中的几类问题:numpy 2.x 导致的 TTS 崩溃、Windows 后台服务不稳定、macOS 11 无法启动、播放无声、Stories 切分竞态与历史状态滞后。本期由 13 位新贡献者参与完成。
v0.3.02026-03-17
这版更新集中在四块:后端重构、设置页改版、播放器修复与文档迁移。
后端那个 3000 多行的 main.py 单体被拆成 13 个领域路由(backend/routes/)、服务层和独立的 database/ 包,文件本身只剩十来行,同时引入 ruff 与风格指南。使用者能感知到的变化是:启动日志带上版本、平台与数据库信息,数据库会话泄漏、关闭时单个后端故障拖垮其他后端等问题也一并修掉。
设置界面改为分路由子页——通用、生成、GPU、日志、更新日志、关于,并新增带自动滚动的实时日志查看器和应用内更新日志页。
音频播放中途卡死的问题已修复,重新生成时的竞态和重渲染抖动也处理了;界面还加了模型加载状态提示。文档站则从 Mintlify 迁到 Fumadocs,自动生成 API 参考页。
另修了七个高频 bug,包括样例上传导致服务器崩溃(音频解码改到线程池执行)、生成列表不刷新、报错信息晦涩,以及 RTX 50 系显卡的 CUDA 支持。
v0.2.32026-03-15
The "it works in dev but not in prod" release. This version fixes a series of PyInstaller bundling issues that prevented model downloading, loading, generation, and progress tracking from working in production builds.
Model Downloads Now Actually Work
The v0.2.1/v0.2.2 builds could not download or load models that weren't already cached from a dev install. This release fixes the entire chain:
- Chatterbox, Chatterbox Turbo, and LuxTTS all download, load, and generate correctly in bundled builds
- Real-time download progress — byte-level progress bars now work in production. The root cause: huggingface_hub silently disables tqdm progress bars based on logger level, which prevented our progress tracker from receiving byte updates. We now force-enable the internal counter regardless.
- Fixed Python 3.12.0 code.replace() bug — the macOS build was on Python 3.12.0, which has a known CPython bug that corrupts bytecode when PyInstaller rewrites code objects. This caused NameError: name 'obj' is not defined crashes during scipy/torch imports. Upgraded to Python 3.12.13.
PyInstaller Fixes
- Collect all inflect files — typeguard's @typechecked decorator calls inspect.getsource() at import time, which needs .py source files, not just bytecode. Fixes LuxTTS "could not get source code" error.
- Collect all perth files — bundles the pretrained watermark model (hparams.yaml, .pth.tar) needed by Chatterbox at runtime
- Collect all piper_phonemize files — bundles espeak-ng-data/ (phoneme tables, language dicts) needed by LuxTTS for text-to-phoneme conversion
- Set ESPEAKDATAPATH in frozen builds so the espeak-ng C library finds the bundled data instead of looking at /usr/share/espeak-ng-data/
- Collect all linacodec files — fixes inspect.getsource error in Vocos codec
- Collect all zipvoice files — fixes source code lookup in LuxTTS voice cloning
- Copy metadata for requests, transformers, huggingface-hub, tokenizers, safetensors, tqdm — fixes importlib.metadata lookups in frozen binary
- Add hidden imports for chatterbox, chatterbox_turbo, luxtts, zipvoice backends
- Add multiprocessing.freezesupport() to fix resourcetracker subprocess crash in frozen binary
- --noconsole now only applied on Windows — macOS/Linux need stdout/stderr for Tauri sidecar log capture
- Hardened sys.stdout/sys.stderr devnull redirect to test writability, not just None check
Updater
- Fixed updater artifact generation with v1Compatible for tauri-action signature files
- Updated tauri-action to v0.6 to fix updater JSON and .sig generation
Other Fixes
- Full traceback logging on all backend model loading errors (was just str(e) before)
v0.2.22026-03-15
v0.2.2 修复了打包版的 Chatterbox 模型与 LuxTTS/ZipVoice 支持,不过这两项在 0.2.3 才真正生效,此前的说明有误。此外,CUDA 二进制会随应用版本更新自动重下,下载时新增进度条;macOS 上服务器进程残留的问题通过 SIGHUP 处理和看门狗宽限期解决,Windows 运行 CUDA 时不再弹出控制台窗口。
需要注意的是,模型下载在正式包中仍不可靠,官方正在重写这套逻辑,急着尝鲜 0.2.x 的话建议自行从源码编译,下一版会一并修复下载与更新器问题。