{"record":{"id":"b08e2db7870225f2","repo":"SubtitleEdit/subtitleedit","slug":"crispasr-executable-not-found-install-crispasr-vi-b08e2d","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/F5TtsCrispAsr.cs","lineNumber":547,"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 talkerFileName = GetTalkerFileName(modelKey);\n            var talker = GetTalkerPath(modelKey);\n            var hasLocalTalker = IsValidLocalModelFile(talker, talkerFileName);\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\");","sourceCodeStart":529,"sourceCodeEnd":565,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Features/Video/TextToSpeech/Engines/F5TtsCrispAsr.cs#L529-L565","documentation":"FileNotFoundException from F5TtsCrispAsr.EnsureServerRunningAsync: GetCrispAsrExecutable() returned a path for which File.Exists is false. Like CosyVoice3, F5-TTS shares the crispasr binary with the ASR feature and expects it to be installed first via Video → Audio to text.","triggerScenarios":"EnsureServerRunningAsync passes the MatchesCurrent cache check and the existing-server teardown, then File.Exists(exe) returns false for the crispasr path.","commonSituations":"Fresh install where the user went to TTS without ever running Audio to text; the binary was deleted/moved by AV; a portable install with a wrong relative exe path; permissions hiding the file.","solutions":["Open Video → Audio to text and run transcription once so the shared CrispASR binary downloads.","Verify the path returned by GetCrispAsrExecutable() exists and is readable.","Re-download CrispASR via Video → Audio to text → Engine settings → Re-download.","If AV quarantined it, whitelist the CrispAsr folder and re-download."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var exe = F5TtsCrispAsr.GetCrispAsrExecutable(); // assume exposed\nif (!File.Exists(exe))\n{\n    Se.WriteToolsLog(\"CrispASR not installed — run Video → Audio to text first.\", true);\n    return; // or prompt the user to install\n}","typeGuard":null,"tryCatchPattern":"try { await f5TtsEngine.Speak(text, out, voice, lang, region, model, ct); }\ncatch (FileNotFoundException ex) when (ex.Message.Contains(\"CrispASR executable not found\", StringComparison.Ordinal))\n{ Se.WriteToolsLog(\"Install CrispASR via Video → Audio to text, then retry.\", true); }","preventionTips":["Gate the F5-TTS UI on CrispASR being installed (check File.Exists on the exe).","Always run Audio-to-text once on a fresh install to populate the shared binary.","Whitelist the CrispAsr folder in AV so the binary is not quarantined."],"tags":["tts","f5-tts","crispasr","missing-executable","setup","file-not-found"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}