{"record":{"id":"54837734fc12dfa6","repo":"SubtitleEdit/subtitleedit","slug":"paddleocr-is-not-available-for-linux-arm64","errorCode":null,"errorMessage":"PaddleOCR is not available for Linux ARM64.","messagePattern":"PaddleOCR is not available for Linux ARM64\\.","errorType":"exception","errorClass":"PlatformNotSupportedException","httpStatus":null,"severity":"error","filePath":"src/ui/Logic/Download/PaddleOcrDownloadService.cs","lineNumber":44,"sourceCode":"    {\n        _httpClient = httpClient;\n    }\n\n    public async Task DownloadModels(string destinationFileName, IProgress<float>? progress, CancellationToken cancellationToken)\n    {\n        var url = DownloadModelsUrl;\n        await DownloadHelper.DownloadFileAsync(_httpClient, url, destinationFileName, progress, cancellationToken);\n    }\n\n    public async Task DownloadEngineCpu(string destinationFileName, IProgress<float>? progress, CancellationToken cancellationToken)\n    {\n        var url = DownloadWindowsEngineCpuUrl;\n\n        if (OperatingSystem.IsLinux())\n        {\n            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)\n            {\n                throw new PlatformNotSupportedException(\"PaddleOCR is not available for Linux ARM64.\");\n            }\n\n            url = DownloadLinuxEngineCpuUrl;\n        }\n\n        await DownloadHelper.DownloadFileAsync(_httpClient, url, destinationFileName, progress, cancellationToken);\n    }\n\n    public async Task DownloadEngineGpu(string destinationFileName, IProgress<float>? progress, CancellationToken cancellationToken)\n    {\n        var url = DownloadWindowsEngineGpuUrl;\n\n        if (OperatingSystem.IsLinux())\n        {\n            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)\n            {\n                throw new PlatformNotSupportedException(\"PaddleOCR is not available for Linux ARM64.\");\n            }","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Logic/Download/PaddleOcrDownloadService.cs#L26-L62","documentation":"PlatformNotSupportedException thrown by PaddleOcrDownloadService.DownloadEngineCpu when running on Linux ARM64, because PaddleOCR ships no ARM64 Linux engine build. The message names the missing combination explicitly.","triggerScenarios":"OperatingSystem.IsLinux() is true AND RuntimeInformation.ProcessArchitecture == Architecture.Arm64 inside DownloadEngineCpu (the CPU engine selection path).","commonSituations":"User on a Raspberry Pi 4/5, Ampere Altra, AWS Graviton, or any Linux ARM64 box trying to use PaddleOCR. There is genuinely no upstream engine binary for that target.","solutions":["Run PaddleOCR on an x86_64 Linux host or on Windows instead.","If ARM64 is required, choose a different OCR engine (e.g. Tesseract) that ships an ARM64 build.","If you control packaging, cross-build a PaddleOCR ARM64 engine and add a LinuxArm64 branch.","Guard the UI so the ARM64 + Linux combination cannot be selected."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)\n{\n    // disable the CPU engine option in the UI; do not call DownloadEngineCpu\n}","typeGuard":null,"tryCatchPattern":"try { await service.DownloadEngineCpu(...); }\ncatch (PlatformNotSupportedException ex) when (ex.Message.Contains(\"Linux ARM64\"))\n{ /* tell user PaddleOCR CPU engine is unavailable on this device, suggest Tesseract */ }","preventionTips":["Detect Linux ARM64 in the UI and disable the PaddleOCR CPU option before selection.","Document supported platforms per engine in user-facing help.","Offer an alternative OCR engine on ARM64."],"tags":["platform","platformnotsupported","paddleocr","linux-arm64","csharp"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}