v0.2.3
jamiepine/voiceboxv0.2.3Mar 15, 2026by github-actions[bot]
AI Summary
Fixes PyInstaller bundling issues that prevented model downloads, loading, and progress tracking from working in production builds.
Key Highlights
- Fixed model downloads and real-time progress bars in bundled builds.
- Upgraded Python to 3.12.13 to fix bytecode corruption bug.
- Bundled missing data files (inflect, perth, piper_phonemize, etc.).
Full Release Notes
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](https://github.com/pyinstaller/pyinstaller/issues/7992) 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 `ESPEAK_DATA_PATH` 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.freeze_support()` to fix resource_tracker 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)