SubtitleEdit/subtitleedit · critical · 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 thrown by EnsureServerRunningAsync when GetCrispAsrExecutable() resolves to a path that does not exist. The message points the user at the install route ('Video → Audio to text') because CrispASR is shared with the transcription feature and is installed through that workflow, not bundled with the TTS engine.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/Qwen3TtsCrispAsr.cs:937
}
await ServerLock.WaitAsync(ct);
try
{
if (_serverProcess is { HasExited: false } && _serverPort != 0 && _serverModelKey == modelKey)
{
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 and codec GGUFs: if locally staged, use directly; otherwise hand off to
// crispasr's --auto-download to fetch them into ~/.cache/crispasr/ on first run.
// Slower the first time, instant after. A proper SE-side download service is a
// follow-up; this keeps the engine usable without manual file placement.
var talker = GetTalkerPath(modelKey);
var hasLocalTalker = IsValidLocalModelFile(talker, GetTalkerFileName(modelKey));
var codec = GetCodecPath();
var hasLocalCodec = IsValidLocalModelFile(codec, CodecFileName);
var port = FindFreeLoopbackPort();
var psi = new ProcessStartInfo
{
WorkingDirectory = Path.GetDirectoryName(exe) ?? GetSetFolder(),
FileName = exe,
UseShellExecute = false,View on GitHub (pinned to 17a9f07487)
Solutions
- Install CrispASR via Video → Audio to text first, as the message instructs.
- Check the FileName in the exception for the exact resolved path that's missing.
- Re-stage the CrispASR binary at the path GetCrispAsrExecutable() returns for your OS.
- If antivirus quarantined it, restore/whitelist the binary and reinstall.
Defensive patterns
Strategy: validation
Validate before calling
var exe = GetCrispAsrExecutable();
if (!File.Exists(exe))
throw new FileNotFoundException("CrispASR executable not found. Install CrispASR via Video → Audio to text first.", exe); Try / catch
try { await EnsureServerRunningAsync(modelKey, ct); }
catch (FileNotFoundException ex) when (ex.FileName == GetCrispAsrExecutable())
{ await OfferInstallCrispAsrAsync(); throw; } Prevention
- Surface an 'install CrispASR' prompt when the engine is selected, not only at Speak time.
- Run the Audio-to-text install flow as part of TTS engine setup.
- Whitelist the binary in antivirus to prevent quarantine.
When it happens
Trigger: CrispASR was never installed (the user went straight to TTS without running Audio-to-text); the executable was deleted or quarantined; the install path in settings points at the wrong location; a portable/moved install lost the binary.
Common situations: Fresh install where only the TTS engine was added; antivirus flagged and removed the binary; OS update cleared a temp install location; settings migrated to a new machine without reinstalling CrispASR.
Related errors
- CrispASR executable not found. Install CrispASR via Video →
- CrispASR executable not found. Install CrispASR via Video →
- CrispASR executable not found. Install CrispASR via Video →
- CrispASR executable not found. Install CrispASR via Video →
- Qwen3 TTS server executable not found.
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/e43ab4890ec38df3.
Report an issue: GitHub.