SubtitleEdit/subtitleedit · error · TimeoutException
crispasr (chatterbox) did not report healthy within 15 minut
Error message
crispasr (chatterbox) did not report healthy within 15 minutes. Last output: {lastOutput}{LaunchCmdSuffix} What it means
TimeoutException thrown by ChatterboxTtsCpp when the 15-minute startup deadline (DateTime.UtcNow.AddMinutes(15)) elapses without a successful /health probe and without the process exiting. The deadline is intentionally long because the first run auto-downloads ~880 MB of model weights.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/ChatterboxTtsCpp.cs:686
+ "https://github.com/CrispStrobe/CrispASR/issues with the log below."
+ Environment.NewLine + Environment.NewLine + tail
+ LaunchCmdSuffix(exitedLaunchCommand));
}
throw new InvalidOperationException(
$"crispasr (chatterbox) exited during startup (code {exitCode}). Output: {tail}"
+ LaunchCmdSuffix(exitedLaunchCommand));
}
if (await ProbeHealthAsync(port, TimeSpan.FromSeconds(2), ct))
{
return;
}
await Task.Delay(TimeSpan.FromSeconds(1), ct);
}
var lastOutput = SnapshotServerLog();
var timeoutLaunchCommand = _serverLaunchCommand;
StopServerInternal();
throw new TimeoutException(
$"crispasr (chatterbox) did not report healthy within 15 minutes. Last output: {lastOutput}"
+ LaunchCmdSuffix(timeoutLaunchCommand));
}
finally
{
ServerLock.Release();
}
}
private static bool LooksLikeOutdatedCrispAsr(string output)
{
// v0.5.x exits 0 and prints `error: unknown argument: ...` when it doesn't
// recognise --voice-dir / --backend chatterbox. v0.6.x without the chatterbox
// backend (e.g. ASR-only build) prints `unknown backend 'chatterbox'`.
return output.Contains("unknown argument", StringComparison.Ordinal)
|| output.Contains("unknown backend", StringComparison.Ordinal);
}
View on GitHub (pinned to 17a9f07487)
Solutions
- Re-run — the partial model download is cached and the second attempt continues from where it stopped.
- Check network/proxy/antivirus access to the CrispASR model host so the download is not throttled.
- Pre-stage the GGUFs in the configured models folder so startup is local and fast.
- If on a very slow CPU, allow more time or move to a GPU host for warm-up.
- Inspect 'Last output' in the message — if it shows a download progress stall, the CDN/firewall is the culprit.
Defensive patterns
Strategy: retry
Validate before calling
// First run downloads ~880 MB; the 15-min deadline can be tight. If you can detect a partial // download, pre-stage or resume before calling Speak so the local deadline (not the download // one) applies.
Try / catch
try { await engine.Speak(text, out, voice, lang, region, model, ct); }
catch (TimeoutException ex) when (ex.Message.Contains("did not report healthy within 15 minutes", StringComparison.Ordinal))
{
Se.WriteToolsLog("Chatterbox startup timed out (likely download); retrying.", true);
await engine.Speak(text, out, voice, lang, region, model, ct); // download is now cached
} Prevention
- Pre-download the Chatterbox GGUFs out-of-band so the first synthesis is local and fast.
- Whitelist the CrispASR model CDN in proxy/AV so the download is not throttled.
- On slow networks, expect the first run to need a second attempt — the cache makes it fast.
When it happens
Trigger: EnsureServerRunningAsync launches crispasr; ProbeHealthAsync returns false every 2s for the full 15 minutes; process stays alive (so the exit-path errors never fire). On timeout, StopServerInternal kills it and throws.
Common situations: First run on a slow/throttled network where the ~880 MB download does not finish in 15 min; the server bound to the port but /health is hung; antivirus/proxy blocking the model CDN so download stalls silently; CPU so slow that model warm-up exceeds the window.
Related errors
- crispasr (cosyvoice3-tts) did not report healthy within {(al
- crispasr (moss-tts) did not report healthy within {10|60} mi
- crispasr (omnivoice) did not report healthy within {5|30} mi
- crispasr (qwen3-tts) did not report healthy within {hasLocal
- Chatterbox TTS "Turbo" model crashed CrispASR during startup
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/93f46a7b4dd3bf0c.
Report an issue: GitHub.