jamiepine/voicebox · error · RuntimeError
Downloadable CUDA backend releases are currently only publis
Error message
Downloadable CUDA backend releases are currently only published for Windows.
What it means
The CUDA backend ships as a prebuilt PyInstaller --onedir bundle downloaded from GitHub Releases, but those release assets are only published for Windows. ensure_cuda_download_supported() calls is_cuda_download_supported() which returns (sys.platform == 'win32'); on any other OS it raises RuntimeError with CUDA_DOWNLOAD_UNSUPPORTED_REASON. This is a hard platform gate enforced before any network call in _download_cuda_binary_locked().
Source
Thrown at backend/services/cuda.py:84
def is_cuda_download_supported() -> bool:
"""Return whether this platform has a matching CUDA release asset."""
return sys.platform == "win32"
def get_cuda_download_unsupported_reason() -> str | None:
"""Explain why this platform cannot use the release-download flow."""
if is_cuda_download_supported():
return None
return CUDA_DOWNLOAD_UNSUPPORTED_REASON
def ensure_cuda_download_supported() -> None:
"""Raise if downloading would fetch an asset built for another platform."""
reason = get_cuda_download_unsupported_reason()
if reason:
raise RuntimeError(reason)
def get_cuda_binary_path() -> Optional[Path]:
"""Return path to the CUDA executable if it exists inside the onedir."""
p = get_cuda_dir() / get_cuda_exe_name()
if p.exists():
return p
return None
def get_cuda_libs_manifest_path() -> Path:
"""Path to the cuda-libs.json manifest inside the CUDA dir."""
return get_cuda_dir() / "cuda-libs.json"
def get_installed_cuda_libs_version() -> Optional[str]:
"""Read the installed CUDA libs version from cuda-libs.json, or None."""
manifest_path = get_cuda_libs_manifest_path()View on GitHub (pinned to 51f49dea19)
Solutions
- On Linux/macOS use the ROCm backend (see backend/services/rocm.py and docker-compose.rocm.yml) or run the app on Windows.
- Gate any UI/API affordance behind get_cuda_download_unsupported_reason() and surface the reason instead of calling download_cuda_binary().
- Run on Windows where the release assets (voicebox-server-cuda.tar.gz, cuda-libs-*.tar.gz) are actually published.
Example fix
// before
await download_cuda_binary(version)
// after
from backend.services.cuda import get_cuda_download_unsupported_reason
reason = get_cuda_download_unsupported_reason()
if reason:
return {"error": reason} # route to ROCm/CPU backend instead
await download_cuda_binary(version) Defensive patterns
Strategy: validation
Validate before calling
from backend.services.cuda import get_cuda_download_unsupported_reason
reason = get_cuda_download_unsupported_reason()
if reason:
# platform unsupported: surface to user, route to ROCm/CPU backend
raise SystemExit(reason) Try / catch
try:
await download_cuda_binary(version)
except RuntimeError as e:
if "only published for Windows" in str(e):
# platform gate — not retriable; switch backend
...
raise Prevention
- Call get_cuda_download_unsupported_reason() before exposing the download action; hide it when reason is non-None.
- On non-Windows hosts route GPU work through the ROCm backend (rocm.py).
- Treat this RuntimeError as permanent for the host — don't retry.
When it happens
Trigger: Invoking download_cuda_binary() or check_and_update_cuda_binary() (or an HTTP endpoint / server-startup hook that calls them) on macOS or Linux. sys.platform is not 'win32', so get_cuda_download_unsupported_reason() returns the reason string and ensure_cuda_download_supported() raises.
Common situations: Running Voicebox on Linux/macOS and triggering the CUDA backend download from the UI; server-startup auto-update running on a Linux host; CI on Linux exercising the CUDA code path. On Linux the ROCm backend (rocm.py, docker-compose.rocm.yml) is the supported GPU path.
Related errors
- Downloadable CUDA backend releases are currently only publis
- Failed to resolve save path from dialog
- System audio capture is only available in the desktop app.
- Native audio device routing is only available in the desktop
- e instanceof Error ? e.message : errorMessage
AI-assisted analysis of jamiepine/voicebox@51f49dea19 (2026-08-12).
Data as JSON: /api/errors/bf17e3a0ae89372a.
Report an issue: GitHub.