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 IndexTtsCrispAsr.EnsureServerRunningAsync when GetCrispAsrExecutable() resolves to a path that does not exist. The crispasr binary is shared with the Audio-to-text feature; the message directs the user to install it via Video → Audio to text. The missing file path is passed as the exception's FileName.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/IndexTtsCrispAsr.cs:524
await ServerLock.WaitAsync(ct);
try
{
if (_serverProcess is { HasExited: false } && _serverPort != 0
&& string.Equals(_serverVoicePath, voicePath, StringComparison.OrdinalIgnoreCase)
&& string.Equals(_serverModelKey, modelKey, StringComparison.OrdinalIgnoreCase))
{
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);
}
// Talker + codec GGUFs: use locally staged copies when present; otherwise fall back
// to crispasr's own --auto-download (fetches into ~/.cache/crispasr/ on first run).
var talkerFileName = GetTalkerFileName(modelKey);
var talker = GetTalkerPath(modelKey);
var hasLocalTalker = IsValidLocalModelFile(talker, talkerFileName);
var codec = GetCodecPath();
var hasLocalCodec = IsValidLocalModelFile(codec, CodecFileName);
var port = FindFreeLoopbackPort();
var psi = new ProcessStartInfo
{
WorkingDirectory = Path.GetDirectoryName(exe) ?? GetSetFolder(),
FileName = exe,
UseShellExecute = false,
CreateNoWindow = true,View on GitHub (pinned to 17a9f07487)
Solutions
- Run Video → Audio to text once to install/locate CrispASR, then retry IndexTTS.
- Verify the path returned by GetCrispAsrExecutable() actually contains the binary.
- If installed elsewhere, point the CrispASR location setting at the real folder.
- Reinstall CrispASR if the binary was deleted.
Defensive patterns
Strategy: validation
Validate before calling
var exe = engine.GetCrispAsrExecutable(); // if exposed
if (!File.Exists(exe))
{
PromptInstallCrispAsr(); // Video → Audio to text
return;
} Try / catch
try { await indexEngine.Speak(...); }
catch (FileNotFoundException ex) when (ex.Message.Contains("CrispASR executable not found"))
{
PromptInstallCrispAsr();
} Prevention
- Run Video → Audio to text once before first IndexTTS use to install CrispASR.
- Surface a UI guard that disables IndexTTS until the binary exists.
- Verify GetCrispAsrExecutable() path on settings changes.
- Treat the Audio-to-text and TTS CrispASR installs as one shared dependency.
When it happens
Trigger: CrispASR was never installed; the install was deleted/moved; the expected install location (registry/config) points at a stale path; a portable-mode folder layout change.
Common situations: Fresh machine where Audio-to-text (whisper/CrispASR) was never run; user cleaned up 'unused' folders; the binary is present but at a different path than GetCrispAsrExecutable returns.
Related errors
- CrispASR executable not found. Install CrispASR via Video →
- CrispASR executable not found. Install CrispASR via Video →
- Voice is not an IndexTtsVoice
- IndexTTS (CrispASR) requires a reference voice WAV. Import o
- IndexTTS (CrispASR) — the crispasr server crashed during syn
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/cdf47484d75ed7ee.
Report an issue: GitHub.