{"record":{"id":"4ba691cdf560e3ef","repo":"SubtitleEdit/subtitleedit","slug":"crispasr-executable-not-found-install-crispasr-vi-4ba691","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/CosyVoice3CrispAsr.cs","lineNumber":688,"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            // crispasr's cosyvoice3-tts backend needs LLM + flow + hift + s3tok + campplus +\n            // voices co-located as siblings of the LLM. We stage every file via SE's download\n            // service into CrispAsr/models/, so when all are present we don't need\n            // --auto-download. If any required file is missing, fall back to -m auto +\n            // --auto-download which makes crispasr fetch the whole bundle into its own cache\n            // (slower, no SE progress bar — happens silently behind the synth call).\n            var llmFileName = GetLlmFileName(modelKey);\n            var llmPath = GetLlmPath(modelKey);\n            var allLocal = AreModelsInstalled(modelKey);\n\n            var port = FindFreeLoopbackPort();\n            var psi = new ProcessStartInfo\n            {\n                WorkingDirectory = Path.GetDirectoryName(exe) ?? GetSetFolder(),\n                FileName = exe,","sourceCodeStart":670,"sourceCodeEnd":706,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Features/Video/TextToSpeech/Engines/CosyVoice3CrispAsr.cs#L670-L706","documentation":"FileNotFoundException from CosyVoice3CrispAsr.EnsureServerRunningAsync: GetCrispAsrExecutable() returned a path for which File.Exists is false. The crispasr binary is shared with the ASR feature and is expected to be installed first; CosyVoice3 TTS does not download it itself.","triggerScenarios":"EnsureServerRunningAsync proceeds past the MatchesCurrent cache check and the existing-server teardown, then calls GetCrispAsrExecutable() and File.Exists(exe) returns false.","commonSituations":"Fresh install where the user went straight to TTS without ever running Video → Audio to text; the crispasr binary was deleted/moved by AV cleanup; a portable install where the relative exe path resolved wrong; OS permission issue making the file invisible.","solutions":["Open Video → Audio to text and run transcription once so the shared CrispASR binary downloads.","Verify the path returned by GetCrispAsrExecutable() exists on disk and is readable.","Re-download CrispASR via Video → Audio to text → Engine settings → Re-download.","If AV quarantined the binary, whitelist the CrispAsr folder and re-download."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var exe = CosyVoice3CrispAsr.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 cosyVoice3Engine.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 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","cosyvoice3","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"}