SubtitleEdit/subtitleedit · error · PlatformNotSupportedException

whisper.cpp CUDA build is not available for Linux ARM64.

Error message

whisper.cpp CUDA build is not available for Linux ARM64.

What it means

Thrown by GetUrlCuBlas (resolver for DownloadWhisperCppCuBlas) when Linux ARM64 is detected. The CUDA build of whisper.cpp is x86_64 Linux-only (NVIDIA GPUs on aarch64 Linux are niche), so no artifact exists. Windows returns WindowsUrlCuBlass and Linux x64 returns LinuxUrlCuBlass.

Source

Thrown at src/ui/Logic/Download/WhisperDownloadService.cs:184

                    throw new PlatformNotSupportedException("Unsupported macOS architecture.");
            }
        }

        throw new PlatformNotSupportedException();
    }

    private static string GetUrlCuBlas()
    {
        if (OperatingSystem.IsWindows())
        {
            return WindowsUrlCuBlass;
        }

        if (OperatingSystem.IsLinux())
        {
            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
            {
                throw new PlatformNotSupportedException("whisper.cpp CUDA build is not available for Linux ARM64.");
            }

            return LinuxUrlCuBlass;
        }

        throw new PlatformNotSupportedException();
    }
}

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Use the Vulkan build instead if a GPU driver is present, or the CPU whisper.cpp build.
  2. Compile whisper.cpp with CUDA support for aarch64 Linux yourself and bypass the downloader.
  3. Run on x86_64 Linux so LinuxUrlCuBlass applies.
  4. Disable the CUDA engine option in the UI when IsLinux() && ProcessArchitecture == Arm64.

Example fix

// before
if (OperatingSystem.IsLinux())
{
    if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
        throw new PlatformNotSupportedException("whisper.cpp CUDA build is not available for Linux ARM64.");
    return LinuxUrlCuBlass;
}

// after: only surface the CUDA option where a build exists
if (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture != Architecture.X64)
{
    disableEngine(WhisperEngine.WhisperCppCuda);
}
Defensive patterns

Strategy: validation

Validate before calling

if (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{ /* CUDA whisper.cpp download unavailable; use Vulkan or CPU build */ }

Type guard

static bool CudaWhisperSupported() =>
    OperatingSystem.IsWindows() ||
    (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.X64);

Try / catch

try { await svc.DownloadWhisperCppCuBlas(stream, progress, ct); }
catch (PlatformNotSupportedException ex) when (ex.Message.Contains("CUDA build is not available"))
{ /* offer Vulkan or CPU whisper.cpp */ }

Prevention

When it happens

Trigger: Calling DownloadWhisperCppCuBlas on Linux where ProcessArchitecture == Arm64 (e.g. Jetson Orin, Ampere with NVIDIA GPU).

Common situations: A user on an ARM64 Linux box with an NVIDIA GPU (Jetson, Graviton + GPU) selects the CUDA whisper.cpp engine expecting GPU acceleration.

Related errors


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/199d6832196cf19c. Report an issue: GitHub.