github jamiepine/voicebox v0.2.3

5 hours ago

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 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)

Don't miss a new voicebox release

NewReleases is sending notifications on new releases.