Target Repository: https://github.com/abus-aikorea/voice-pro
Date: 2026-04-27
Status: Ready for PR review
This PR addresses runtime failures that prevent Voice-Pro from being operational on modern systems. All changes are backward-compatible and additive — the original ./start.sh launch path works exactly as before.
| Issue | Title | Fix # | Note |
|---|---|---|---|
| #76 | none_type not iterable error |
3 | Gradio 5.x Progress.tqdm() returns self instead of iterable; patched in start-voice.py |
| #62 | Installation Error | 4 | setuptools>=80 removed pkg_resources; one_click.py now pins <70 and installs whisper without build isolation |
| #60 | Installation is too much trouble | 4, 6 | Installer reliability improved; GPU auto-detect removes manual config step |
Issues not addressed by this PR: #61 (Azure SDK TranslatorCredential), #75/#74 (RTX 5070 sm_120 ctranslate2 kernel), #79 (azure-ai-translation-text 1.0.0+), #80 (demucs subprocess failure detection), #68 (missing demucs output files), #67 (Windows grep compatibility).
Problem: The built-in YouTube downloader fails on most videos because:
yt-dlp 2025.11.12is >5 months old and cannot handle YouTube's current SABR streaming + JS challenges- No JavaScript runtime is configured (yt-dlp 2026+ only enables Deno by default)
- Metadata is extracted twice per download, doubling HTTP requests and triggering rate limits
Changes:
- Updated
ydl_optswithjs_runtimes: {'node': {}}andremote_components: ['ejs:github'] - Replaced double extraction with single
extract_info(..., download=False)+process_ie_result(info, download=True)
Note: yt-dlp itself must also be updated to 2026.3.17+ in the environment (done via pip in the conda env).
Problem: The VAD constructor hardcodes ~/.cache/whisper-live/silero_vad.onnx and ignores the project-local copy at model/vad/silero_vad.onnx. On fresh clones or systems without the cache, VAD fails immediately.
Changes:
- Constructor now checks
model/vad/silero_vad.onnx(project-local) first - Falls back to
~/.cache/whisper-live/silero_vad.onnx - Prints clear manual-sourcing instructions if neither is found
Problem: Gradio 5.x introduced breaking API changes:
gr.Progress.tqdm()returnsselfinstead of a wrapped iterable, causing"NoneType object is not iterable"errors (reported in upstream issue #76)gr.File(type='filepath')now returns aNamedString(str subclass with.name) instead of a plain str, whilegr.Audio(type='filepath')still returns a plain str. Code usingfile_obj.namecrashes when the input is a plain str.FileData.model_validate()rejects payloads with missing/Nonemetafields, causing upload failures.
Changes:
- Added
gradio_file_path(file_obj)helper inapp/abus_path.pythat handlesstr,NamedString, and legacy file objects - Updated 13
app/gradio_*.pyfiles to usegradio_file_path(file_obj)instead offile_obj.name - Added monkey-patches in
start-voice.pyforProgress.tqdm(wraps with standardtqdm) andFileData.model_validate(injects defaultmetawhen missing)
Files affected:
app/abus_path.py, app/gradio_aicover.py, app/gradio_asr.py, app/gradio_demixing.py, app/gradio_gulliver.py, app/gradio_kara.py, app/gradio_rvc.py, app/gradio_translate.py, app/gradio_tts_cosyvoice.py, app/gradio_tts_edge.py, app/gradio_tts_f5.py, app/gradio_tts_kokoro.py, app/gradio_tts_rvc.py, app/gradio_vsr.py, start-voice.py
Problem: Fresh installs fail on modern Python environments because:
setuptools>=80removedpkg_resources, breakingopenai-whisper(sdist that importspkg_resourcesduring build)openai-whisperbuild isolation pulls in a newer setuptools that lackspkg_resourcesctranslate2bundles a renamed cuDNN 8 library but omits the split.sofiles (e.g.,libcudnn_ops_infer.so.8) that itdlopens at runtime, causing CUDA errors- The inline
python -cshell command for the ctranslate2 fix had quoting issues that causedSyntaxErroron some shells
Changes:
- Pre-install
setuptools<70andwheelbefore requirements - Install
openai-whisper==20240930with--no-build-isolation - Post-install: write the cuDNN fix to a temp Python script file instead of an inline
python -cstring, avoiding shell quoting bugs
Problem: nvidia-cudnn-cu12==8.9.7.29 pins an old version that may conflict with newer PyTorch builds.
Changes:
- Relaxed to
nvidia-cudnn-cu12>=9.1.0.70
Problem: Users on fresh systems often forget to set GPU_CHOICE, causing the app to default to an incorrect mode or prompt interactively.
Changes:
- Added auto-detection: if
nvidia-smiis available, setGPU_CHOICE=G; otherwiseGPU_CHOICE=C
Problem: Ubuntu minimal installs (and some fresh 24.04 setups) lack cmake, causing pip packages that require compilation to fail with CMAKE_MAKE_PROGRAM is not set.
Changes:
- Added
cmaketo theapt-get installline alongsidegit,ffmpeg, andbuild-essential
Problem: pyannote.audio (dependency of whisperx) expects torchaudio.AudioMetaData to be available at the top level. In some torchaudio builds (especially CPU wheels or certain CUDA builds), this class is not re-exported, causing AttributeError: module 'torchaudio' has no attribute 'AudioMetaData' on import.
Changes:
- Added monkey-patch in
start-voice.py: iftorchaudio.AudioMetaDatais missing, import it fromtorchaudio.backend.commonand attach it
Problem: yt-dlp==2025.11.12 is too old for modern YouTube.
Changes:
- Relaxed to
yt-dlp>=2026.3.17in both GPU and CPU requirements files
| File | Fix # | Description |
|---|---|---|
app/abus_downloader.py |
1 | YouTube JS runtime + single extraction |
src/vad.py |
2 | Local VAD path check first |
app/abus_path.py |
3 | gradio_file_path() helper |
app/gradio_aicover.py |
3 | Use gradio_file_path() |
app/gradio_asr.py |
3 | Use gradio_file_path() |
app/gradio_demixing.py |
3 | Use gradio_file_path() |
app/gradio_gulliver.py |
3 | Use gradio_file_path() |
app/gradio_kara.py |
3 | Use gradio_file_path() |
app/gradio_rvc.py |
3 | Use gradio_file_path() |
app/gradio_translate.py |
3 | Use gradio_file_path() |
app/gradio_tts_cosyvoice.py |
3 | Use gradio_file_path() |
app/gradio_tts_edge.py |
3 | Use gradio_file_path() |
app/gradio_tts_f5.py |
3 | Use gradio_file_path() |
app/gradio_tts_kokoro.py |
3 | Use gradio_file_path() |
app/gradio_tts_rvc.py |
3 | Use gradio_file_path() |
app/gradio_vsr.py |
3 | Use gradio_file_path() |
start-voice.py |
3, 8 | Monkey-patches for Gradio 5.x tqdm + FileData + torchaudio.AudioMetaData |
one_click.py |
4 | setuptools, whisper, ctranslate2 cuDNN fixes (temp script) |
start.sh |
6 | GPU auto-detect |
update.sh |
6 | GPU auto-detect |
configure.sh |
7 | Add cmake to apt dependencies |
requirements-voice-gpu.txt |
5, 9 | cuDNN version bump + yt-dlp update |
requirements-voice-cpu.txt |
9 | yt-dlp update |
Total: 24 files changed, 0 files removed.
| Test | Result |
|---|---|
| YouTube download (modern video with JS challenges) | ✅ Success |
| VAD initialization (fresh clone, no cache) | ✅ Success |
| Gradio file upload (audio + video inputs) | ✅ Success |
| Progress bar iteration (subtitle generation) | ✅ Success |
| Fresh install on Linux Mint 22.2 | ✅ Success |
fix: YouTube downloader, VAD paths, Gradio 5.x compatibility, and installer build errors
Fixes yt-dlp JS runtime config for modern YouTube, adds project-local VAD fallback, resolves Gradio 5.x breaking changes (tqdm/FileData/file paths), and patches one_click.py for setuptools/pkg_resources and ctranslate2 cuDNN compatibility.