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
- Build whisper.cpp from source for ARM64 Linux and place it where SE expects, bypassing this downloader.
- Run SE on x86_64 Linux (native or VM) so LinuxUrl applies.
- Choose Const-me (Windows only — not applicable on Linux) or a different engine that ships an ARM64 build.
- 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
- Disable the default whisper.cpp engine on Linux ARM64 or supply a CPU aarch64 build.
- Detect the architecture at startup to avoid offering unsupported downloads.
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
- Faster-Whisper-XXL is not available for Linux ARM64.
- whisper.cpp CUDA build is not available for Linux ARM64.
- ChatLLM is not available for Linux ARM64.
- Google Lens OCR is not available for Linux ARM64.
- llama.cpp CUDA build is not available for Linux ARM64.
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/ed8ee86c11ac8253.
Report an issue: GitHub.