{"record":{"id":"a79e645c7610bf05","repo":"SubtitleEdit/subtitleedit","slug":"crispasr-executable-not-found-install-crispasr-vi-a79e64","errorCode":null,"errorMessage":"CrispASR executable not found. Install CrispASR via Video → Audio to text first.","messagePattern":"CrispASR executable not found\\. Install CrispASR via Video → Audio to text first\\.","errorType":"exception","errorClass":"FileNotFoundException","httpStatus":null,"severity":"error","filePath":"src/ui/Features/Video/TextToSpeech/Engines/OmniVoiceCrispAsr.cs","lineNumber":585,"sourceCode":"        }\n\n        await ServerLock.WaitAsync(ct);\n        try\n        {\n            if (MatchesCurrent())\n            {\n                return;\n            }\n\n            if (_serverProcess != null)\n            {\n                StopServerInternal();\n            }\n\n            var exe = GetCrispAsrExecutable();\n            if (!File.Exists(exe))\n            {\n                throw new FileNotFoundException(\n                    \"CrispASR executable not found. Install CrispASR via Video → Audio to text first.\", exe);\n            }\n\n            var modelPath = GetModelPath(modelKey);\n            var hasLocalModel = AreModelsInstalled(modelKey);\n\n            var port = FindFreeLoopbackPort();\n            var psi = new ProcessStartInfo\n            {\n                WorkingDirectory = Path.GetDirectoryName(exe) ?? GetSetFolder(),\n                FileName = exe,\n                UseShellExecute = false,\n                CreateNoWindow = true,\n                RedirectStandardError = true,\n                RedirectStandardOutput = true,\n            };\n            psi.ArgumentList.Add(\"--server\");\n            psi.ArgumentList.Add(\"--backend\");","sourceCodeStart":567,"sourceCodeEnd":603,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Features/Video/TextToSpeech/Engines/OmniVoiceCrispAsr.cs#L567-L603","documentation":"FileNotFoundException thrown by OmniVoiceCrispAsr.EnsureServerRunningAsync when the crispasr executable does not exist at the path returned by GetCrispAsrExecutable(). This is the same shared binary used by MossTtsCrispAsr and the speech-to-text engines, so it is installed through Video → Audio to text.","triggerScenarios":"Calling Speak() on the OmniVoice (CrispASR) engine when the crispasr binary has not been installed or was removed. The check is File.Exists(exe) returning false inside the server-start path.","commonSituations":"User selected OmniVoice (CrispASR) from the TTS engine list without having installed CrispASR for speech-to-text first; the SE data folder was moved or cleaned; the binary was removed by antivirus or a disk cleanup utility.","solutions":["Install CrispASR via Video → Audio to text, which runs CrispAsrDownloadService to fetch and verify the binary.","Call IsInstalled() before attempting synthesis to surface the issue in the UI gracefully.","If the folder was moved, update Se.TextToSpeechFolder to point to the correct location.","Re-add an antivirus exclusion for the SE TextToSpeech folder if the binary keeps disappearing."],"exampleFix":"// before\nawait engine.Speak(text, ...);\n\n// after — check installation state first\nif (!await engine.IsInstalled(region))\n{\n    await DialogService.ShowWarning(\"Install CrispASR via Video → Audio to text first.\");\n    return;\n}","handlingStrategy":"validation","validationCode":"// Check before synthesis\nif (!File.Exists(OmniVoiceCrispAsr.GetCrispAsrExecutable()))\n{\n    await ShowInstallPrompt(\"Install CrispASR via Video → Audio to text first.\");\n    return;\n}","typeGuard":"null","tryCatchPattern":"catch (FileNotFoundException ex) when (ex.Message.Contains(\"CrispASR executable not found\"))\n{\n    await ShowInstallDialog(nameof(CrispAsrDownloadService));\n    // Retry after install\n}","preventionTips":["Call IsInstalled() before synthesis to detect missing binaries in the UI.","Install CrispASR through the Video → Audio to text workflow.","Add an antivirus exclusion for the SE TextToSpeech folder."],"tags":["file-not-found","tts","omnivoice","crispasr","installation","csharp"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}