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

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.

Source

Thrown at src/ui/Features/Video/TextToSpeech/Engines/F5TtsCrispAsr.cs:547

        }

        await ServerLock.WaitAsync(ct);
        try
        {
            if (MatchesCurrent())
            {
                return;
            }

            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 talkerFileName = GetTalkerFileName(modelKey);
            var talker = GetTalkerPath(modelKey);
            var hasLocalTalker = IsValidLocalModelFile(talker, talkerFileName);

            var port = FindFreeLoopbackPort();
            var psi = new ProcessStartInfo
            {
                WorkingDirectory = Path.GetDirectoryName(exe) ?? GetSetFolder(),
                FileName = exe,
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardError = true,
                RedirectStandardOutput = true,
            };
            psi.ArgumentList.Add("--server");

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Open Video → Audio to text and run transcription once so the shared CrispASR binary downloads.
  2. Verify the path returned by GetCrispAsrExecutable() exists and is readable.
  3. Re-download CrispASR via Video → Audio to text → Engine settings → Re-download.
  4. If AV quarantined it, whitelist the CrispAsr folder and re-download.
Defensive patterns

Strategy: validation

Validate before calling

var exe = F5TtsCrispAsr.GetCrispAsrExecutable(); // assume exposed
if (!File.Exists(exe))
{
    Se.WriteToolsLog("CrispASR not installed — run Video → Audio to text first.", true);
    return; // or prompt the user to install
}

Try / catch

try { await f5TtsEngine.Speak(text, out, voice, lang, region, model, ct); }
catch (FileNotFoundException ex) when (ex.Message.Contains("CrispASR executable not found", StringComparison.Ordinal))
{ Se.WriteToolsLog("Install CrispASR via Video → Audio to text, then retry.", true); }

Prevention

When it happens

Trigger: EnsureServerRunningAsync passes the MatchesCurrent cache check and the existing-server teardown, then File.Exists(exe) returns false for the crispasr path.

Common situations: 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.

Related errors


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