SubtitleEdit/subtitleedit · error · PlatformNotSupportedException

Faster-Whisper-XXL is not available for Linux ARM64.

Error message

Faster-Whisper-XXL is not available for Linux ARM64.

What it means

Thrown by WhisperDownloadService.DownloadWhisperPurfviewFasterWhisperXxl when the process runs on Linux with an ARM64 CPU. The upstream Faster-Whisper-XXL release (Purfview/whisper-standalone-win) only publishes an x64 Linux binary and a Windows binary, so there is no artifact to download for aarch64. The guard fires before any network call, so the download never starts.

Solutions

  1. Switch the Whisper engine to one with an ARM64 or universal build (whisper.cpp via GetUrl, which serves a macOS ARM build, or use CTranslate2 on macOS ARM).
  2. Run Subtitle Edit on an x86_64 Linux host or VM where DownloadUrlPurfviewFasterWhisperXxlLinux applies.
  3. If you must use aarch64 Linux, build Faster-Whisper-XXL from source and place the binary in SE's expected location instead of triggering this downloader.
  4. Gate the UI option that exposes Faster-Whisper-XXL behind an architecture check so users on ARM64 Linux never reach this call.

Example fix

// before
await _whisperDownload.DownloadWhisperPurfviewFasterWhisperXxl(dest, progress, ct);

// after: guard before invoking so the engine picker never offers it
if (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{
    disableEngineOption(WhisperEngine.FasterWhisperXxl);
}
else
{
    await _whisperDownload.DownloadWhisperPurfviewFasterWhisperXxl(dest, progress, ct);
}
Defensive patterns

Strategy: validation

Validate before calling

bool CanDownloadFasterWhisperXxl() =>
    !OperatingSystem.IsMacOS() &&
    !(OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64);

if (!CanDownloadFasterWhisperXxl()) { /* pick another engine */ }

Type guard

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

Try / catch

try { await svc.DownloadWhisperPurfviewFasterWhisperXxl(dest, progress, ct); }
catch (PlatformNotSupportedException ex) when (ex.Message.Contains("Faster-Whisper-XXL"))
{ /* prompt user to choose whisper.cpp/CTranslate2 */ }

Prevention

When it happens

Trigger: Calling DownloadWhisperPurfviewFasterWhisperXxl while OperatingSystem.IsLinux() is true AND RuntimeInformation.ProcessArchitecture == Architecture.Arm64 (e.g. Raspberry Pi 4/5, Ampere Altra, Graviton EC2, Apple Silicon Linux VM).

Common situations: Running Subtitle Edit natively on an ARM64 Linux SBC or cloud instance and selecting the Faster-Whisper-XXL engine in the Audio-to-Text dialog. Also hit when a distribution reports aarch64 even on an x64 host through a container/QEMU build.

Related errors


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

Appendix: source

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

    public async Task DownloadWhisperCppCuBlas(Stream stream, IProgress<float>? progress, CancellationToken cancellationToken)
    {
        await DownloadHelper.DownloadFileAsync(_httpClient, GetUrlCuBlas(), stream, progress, cancellationToken);
    }

    public async Task DownloadWhisperConstMe(Stream stream, IProgress<float>? progress, CancellationToken cancellationToken)
    {
        await DownloadHelper.DownloadFileAsync(_httpClient, DownloadUrlConstMe, stream, progress, cancellationToken);
    }

    public async Task DownloadWhisperPurfviewFasterWhisperXxl(string destinationFileName, IProgress<float>? progress, CancellationToken cancellationToken)
    {
        var url = DownloadUrlPurfviewFasterWhisperXxl;

        if (OperatingSystem.IsLinux())
        {
            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
            {
                throw new PlatformNotSupportedException("Faster-Whisper-XXL is not available for Linux ARM64.");
            }

            url = DownloadUrlPurfviewFasterWhisperXxlLinux;
        }

        if (OperatingSystem.IsMacOS())
        {
            throw new PlatformNotSupportedException("MacOS not supported.");
        }

        await DownloadHelper.DownloadFileAsync(_httpClient, url, destinationFileName, progress, cancellationToken);
    }

    public async Task DownloadWhisperCppVulkan(Stream stream,  Progress<float> progress, CancellationToken cancellationToken)
    {
        await DownloadHelper.DownloadFileAsync(_httpClient, GetUrlCppVulkan(), stream, progress, cancellationToken);
    }
    

View on GitHub (pinned to 17a9f07487)