{"record":{"id":"cdf47484d75ed7ee","repo":"SubtitleEdit/subtitleedit","slug":"crispasr-executable-not-found-install-crispasr-vi-cdf474","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/IndexTtsCrispAsr.cs","lineNumber":524,"sourceCode":"        await ServerLock.WaitAsync(ct);\n        try\n        {\n            if (_serverProcess is { HasExited: false } && _serverPort != 0\n                && string.Equals(_serverVoicePath, voicePath, StringComparison.OrdinalIgnoreCase)\n                && string.Equals(_serverModelKey, modelKey, StringComparison.OrdinalIgnoreCase))\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            // Talker + codec GGUFs: use locally staged copies when present; otherwise fall back\n            // to crispasr's own --auto-download (fetches into ~/.cache/crispasr/ on first run).\n            var talkerFileName = GetTalkerFileName(modelKey);\n            var talker = GetTalkerPath(modelKey);\n            var hasLocalTalker = IsValidLocalModelFile(talker, talkerFileName);\n            var codec = GetCodecPath();\n            var hasLocalCodec = IsValidLocalModelFile(codec, CodecFileName);\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,","sourceCodeStart":506,"sourceCodeEnd":542,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Features/Video/TextToSpeech/Engines/IndexTtsCrispAsr.cs#L506-L542","documentation":"FileNotFoundException from IndexTtsCrispAsr.EnsureServerRunningAsync when GetCrispAsrExecutable() resolves to a path that does not exist. The crispasr binary is shared with the Audio-to-text feature; the message directs the user to install it via Video → Audio to text. The missing file path is passed as the exception's FileName.","triggerScenarios":"CrispASR was never installed; the install was deleted/moved; the expected install location (registry/config) points at a stale path; a portable-mode folder layout change.","commonSituations":"Fresh machine where Audio-to-text (whisper/CrispASR) was never run; user cleaned up 'unused' folders; the binary is present but at a different path than GetCrispAsrExecutable returns.","solutions":["Run Video → Audio to text once to install/locate CrispASR, then retry IndexTTS.","Verify the path returned by GetCrispAsrExecutable() actually contains the binary.","If installed elsewhere, point the CrispASR location setting at the real folder.","Reinstall CrispASR if the binary was deleted."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var exe = engine.GetCrispAsrExecutable(); // if exposed\nif (!File.Exists(exe))\n{\n    PromptInstallCrispAsr(); // Video → Audio to text\n    return;\n}","typeGuard":null,"tryCatchPattern":"try { await indexEngine.Speak(...); }\ncatch (FileNotFoundException ex) when (ex.Message.Contains(\"CrispASR executable not found\"))\n{\n    PromptInstallCrispAsr();\n}","preventionTips":["Run Video → Audio to text once before first IndexTTS use to install CrispASR.","Surface a UI guard that disables IndexTTS until the binary exists.","Verify GetCrispAsrExecutable() path on settings changes.","Treat the Audio-to-text and TTS CrispASR installs as one shared dependency."],"tags":["indextts","crispasr","file-not-found","install","tts"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}