Onedir avoids re-extracting ~1.4 GB of torch on every startup that the
onefile layout would require (plan §5 option B: the AI build is the
isolated sidecar artifact). Core build stays onefile/dist/VoiceGrab.
Implements the GPU-upgrade.md plan:
- Separator backend interface (DSSeparator = existing noisereduce path,
DemucsSeparator = htdemucs_ft AI separation) — one mode at a time,
never stacked
- DemucsSeparator: lazy imports (core app stays dep-free), device
auto-pick cuda -> mps -> cpu, model cache under appdata/models,
chunk progress reporting, soft cancel between chunks
- GUI: 'Isolate voice' checkbox replaced by a 3-way mode selector
(fast DSP / AI Demucs / none), DSP strength controls follow the
selection, AI radio disabled with guidance when torch+demucs are
missing, Cancel button for in-flight AI runs
- CLI: --mode none|dsp|ai (default dsp, unchanged behavior)
- requirements-ai.txt (torch 2.x + demucs 4.1.x), THIRD_PARTY.md,
README updates, optional AI pack flags in installer scripts,
version bumped to 1.1.0
- tests/test_separators.py: 10 tests incl. graceful-degradation and
full-pipeline regression (5.0 s ± 0.15 s, ~320 kbps) in all modes