SubtitleEdit/subtitleedit · error · FileNotFoundException
CrispASR executable not found. Install CrispASR via Video →
Error message
CrispASR executable not found. Install CrispASR via Video → Audio to text first.
What it means
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.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/ChatterboxTtsCpp.cs:548
await ServerLock.WaitAsync(ct);
try
{
if (_serverProcess is { HasExited: false } && _serverPort != 0 && _serverModelKey == modelKey)
{
return;
}
// Server not running — or running with a different model variant. (Re)start.
if (_serverProcess != null)
{
StopServerInternal();
}
var exe = GetCrispAsrExecutable();
if (!File.Exists(exe))
{
throw new FileNotFoundException(
"CrispASR executable not found. Install CrispASR via Video → Audio to text first.", exe);
}
var port = FindFreeLoopbackPort();
var psi = new ProcessStartInfo
{
// Run in the voices folder: the chatterbox backend opens the `voice` of a
// /v1/audio/speech request relative to its working directory. It does not resolve it
// against --voice-dir (that only backs the /v1/voices endpoints), and the server
// rejects a `voice` containing path separators, so this is what lets an imported
// reference WAV be found at all. Every path passed below is absolute, so nothing
// else depends on the working directory.
WorkingDirectory = GetSetVoicesFolder(),
FileName = exe,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardError = true,
RedirectStandardOutput = true,View on GitHub (pinned to 17a9f07487)
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.
Example fix
// before: assume CrispASR is installed
EnsureServerRunningAsync(modelKey, ct);
// after: pre-check and guide the user
if (!File.Exists(GetCrispAsrExecutable()))
return RequestUserInstallCrispAsr(); Defensive patterns
Strategy: validation
Validate before calling
var exe = GetCrispAsrExecutable();
if (!File.Exists(exe)) return NeedInstall("CrispASR", exe); Try / catch
try { EnsureServerRunningAsync(modelKey, ct).Wait(); }
catch (FileNotFoundException ex) when (ex.Message.Contains("CrispASR executable not found"))
{ /* prompt user to install via Video -> Audio to text */ } Prevention
- 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.
When it happens
Trigger: EnsureServerRunningAsync decides to (re)start the server; _serverProcess is null/different-model; File.Exists(exe) is false.
Common situations: Fresh install where CrispASR was never downloaded; user deleted the tools folder; antivirus quarantined the exe; the install step was interrupted.
Related errors
- Chatterbox TTS hit a CrispASR runtime bug during synthesis (
- Chatterbox TTS request failed — the crispasr server crashed
- Chatterbox TTS request failed — the connection to the crispa
- Chatterbox TTS could not use the reference voice "{Path.GetF
- Chatterbox TTS synthesis failed ({(int)response.StatusCode})
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/fb4688e68fdd9e0e.
Report an issue: GitHub.