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

  1. Install CrispASR via Video -> Audio to text as the message instructs.
  2. Verify the path returned by GetCrispAsrExecutable() exists.
  3. Restore the exe from AV quarantine if it was removed.
  4. 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

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


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/fb4688e68fdd9e0e. Report an issue: GitHub.