SubtitleEdit/subtitleedit · error · PlatformNotSupportedException

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

Error message

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

What it means

Thrown by GetUrl (the resolver for DownloadWhisperCpp) specifically when Linux is detected on an ARM64 CPU. whisper.cpp's prebuilt Vulkan Linux package is x86_64-only, so aarch64 Linux has no matching artifact. Other Linux architectures (x64) correctly return LinuxUrl.

Source

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

        {
            return WindowsUrlCppVulkan;
        }

        throw new PlatformNotSupportedException();
    }
    
    private static string GetUrl()
    {
        if (OperatingSystem.IsWindows())
        {
            return WindowsUrl;
        }

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

            return LinuxUrl;
        }

        if (OperatingSystem.IsMacOS())
        {
            switch (RuntimeInformation.ProcessArchitecture)
            {
                case Architecture.Arm64:
                    return MacArmUrl; // e.g., for M1, M2, M3, M4 chips
                case Architecture.X64:
                    return MacX64Url;
                default:
                    throw new PlatformNotSupportedException("Unsupported macOS architecture.");
            }
        }

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Build whisper.cpp from source for ARM64 Linux and place it where SE expects, bypassing this downloader.
  2. Run SE on x86_64 Linux (native or VM) so LinuxUrl applies.
  3. Choose Const-me (Windows only — not applicable on Linux) or a different engine that ships an ARM64 build.
  4. Offer a CPU-only aarch64 build URL by extending GetUrl for the Arm64 case.

Example fix

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

// after: publish a CPU build for aarch64 and route to it
if (OperatingSystem.IsLinux())
{
    return RuntimeInformation.ProcessArchitecture == Architecture.Arm64
        ? LinuxArm64CpuUrl
        : LinuxUrl;
}
Defensive patterns

Strategy: validation

Validate before calling

if (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{ /* whisper.cpp Vulkan download unavailable; choose another engine */ }

Type guard

static bool WhisperCppDownloadSupported() =>
    !(OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64);

Try / catch

try { await svc.DownloadWhisperCpp(stream, progress, ct); }
catch (PlatformNotSupportedException ex) when (ex.Message.Contains("Vulkan build is not available"))
{ /* build whisper.cpp from source for aarch64 */ }

Prevention

When it happens

Trigger: Calling DownloadWhisperCpp on Linux where RuntimeInformation.ProcessArchitecture == Architecture.Arm64 (Raspberry Pi, Graviton, Ampere).

Common situations: Running Subtitle Edit on an ARM SBC and choosing the default whisper.cpp engine; the Linux branch rejects ARM64 because no Vulkan aarch64 zip exists.

Related errors


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