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_hubsilently 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 causedNameError: name 'obj' is not definedcrashes during scipy/torch imports. Upgraded to Python 3.12.13.
PyInstaller Fixes
- Collect all
inflectfiles —typeguard's@typecheckeddecorator callsinspect.getsource()at import time, which needs.pysource files, not just bytecode. Fixes LuxTTS "could not get source code" error. - Collect all
perthfiles — bundles the pretrained watermark model (hparams.yaml,.pth.tar) needed by Chatterbox at runtime - Collect all
piper_phonemizefiles — bundlesespeak-ng-data/(phoneme tables, language dicts) needed by LuxTTS for text-to-phoneme conversion - Set
ESPEAK_DATA_PATHin frozen builds so the espeak-ng C library finds the bundled data instead of looking at/usr/share/espeak-ng-data/ - Collect all
linacodecfiles — fixesinspect.getsourceerror in Vocos codec - Collect all
zipvoicefiles — fixes source code lookup in LuxTTS voice cloning - Copy metadata for
requests,transformers,huggingface-hub,tokenizers,safetensors,tqdm— fixesimportlib.metadatalookups in frozen binary - Add hidden imports for
chatterbox,chatterbox_turbo,luxtts,zipvoicebackends - Add
multiprocessing.freeze_support()to fix resource_tracker subprocess crash in frozen binary --noconsolenow only applied on Windows — macOS/Linux need stdout/stderr for Tauri sidecar log capture- Hardened
sys.stdout/sys.stderrdevnull redirect to test writability, not justNonecheck
Updater
- Fixed updater artifact generation with
v1Compatiblefortauri-actionsignature files - Updated
tauri-actionto v0.6 to fix updater JSON and.siggeneration
Other Fixes
- Full traceback logging on all backend model loading errors (was just
str(e)before)