{"record":{"id":"fb4688e68fdd9e0e","repo":"SubtitleEdit/subtitleedit","slug":"crispasr-executable-not-found-install-crispasr-vi","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/ChatterboxTtsCpp.cs","lineNumber":548,"sourceCode":"\n        await ServerLock.WaitAsync(ct);\n        try\n        {\n            if (_serverProcess is { HasExited: false } && _serverPort != 0 && _serverModelKey == modelKey)\n            {\n                return;\n            }\n\n            // Server not running — or running with a different model variant. (Re)start.\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 port = FindFreeLoopbackPort();\n            var psi = new ProcessStartInfo\n            {\n                // Run in the voices folder: the chatterbox backend opens the `voice` of a\n                // /v1/audio/speech request relative to its working directory. It does not resolve it\n                // against --voice-dir (that only backs the /v1/voices endpoints), and the server\n                // rejects a `voice` containing path separators, so this is what lets an imported\n                // reference WAV be found at all. Every path passed below is absolute, so nothing\n                // else depends on the working directory.\n                WorkingDirectory = GetSetVoicesFolder(),\n                FileName = exe,\n                UseShellExecute = false,\n                CreateNoWindow = true,\n                RedirectStandardError = true,\n                RedirectStandardOutput = true,","sourceCodeStart":530,"sourceCodeEnd":566,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Features/Video/TextToSpeech/Engines/ChatterboxTtsCpp.cs#L530-L566","documentation":"GetCrispAsrExecutable() returned a path that does not exist on disk; the engine refuses to spawn a missing server. Thrown as FileNotFoundException with the resolved exe path as the fileName. The message points the user at the install action.","triggerScenarios":"EnsureServerRunningAsync decides to (re)start the server; _serverProcess is null/different-model; File.Exists(exe) is false.","commonSituations":"Fresh install where CrispASR was never downloaded; user deleted the tools folder; antivirus quarantined the exe; the install step was interrupted.","solutions":["Install CrispASR via Video -> Audio to text as the message instructs.","Verify the path returned by GetCrispAsrExecutable() exists.","Restore the exe from AV quarantine if it was removed.","Re-run the install with adequate disk space and network."],"exampleFix":"// before: assume CrispASR is installed\nEnsureServerRunningAsync(modelKey, ct);\n// after: pre-check and guide the user\nif (!File.Exists(GetCrispAsrExecutable()))\n    return RequestUserInstallCrispAsr();","handlingStrategy":"validation","validationCode":"var exe = GetCrispAsrExecutable();\nif (!File.Exists(exe)) return NeedInstall(\"CrispASR\", exe);","typeGuard":null,"tryCatchPattern":"try { EnsureServerRunningAsync(modelKey, ct).Wait(); }\ncatch (FileNotFoundException ex) when (ex.Message.Contains(\"CrispASR executable not found\"))\n{ /* prompt user to install via Video -> Audio to text */ }","preventionTips":["Check File.Exists(GetCrispAsrExecutable()) at engine init, not only at server start.","Guide the user to the install action before any synthesis is attempted.","Restore the exe from AV quarantine if it goes missing."],"tags":["chatterbox","crispasr","missing-executable","dependency","text-to-speech"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}