SubtitleEdit/subtitleedit · error · InvalidOperationException
Chatterbox TTS "Turbo" model crashed CrispASR during startup
Error message
Chatterbox TTS "Turbo" model crashed CrispASR during startup. This is a known upstream issue in the chatterbox-turbo backend (especially on macOS/CPU). Try the "Base" model instead, or file an issue at https://github.com/CrispStrobe/CrispASR/issues with the log below.
What it means
Thrown by ChatterboxTtsCpp when the spawned crispasr server process dies during its 15-minute startup health-check loop AND LooksLikeChatterboxTurboStartupCrash(modelKey, tail) matches the log. It signals a known upstream defect in the chatterbox-turbo backend (notably macOS/CPU). The message directs the user away from the Turbo model toward Base, which loads cleanly.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/ChatterboxTtsCpp.cs:664
+ GetSetModelsFolder() + " are likely stale or partially downloaded. "
+ "Delete them and try again so they re-download. Original output: " + tail
+ LaunchCmdSuffix(exitedLaunchCommand));
}
if (LooksLikeChatterboxTurboTokenizerMismatch(tail))
{
throw new InvalidOperationException(
"Chatterbox TTS \"Turbo\" does not load with CrispASR 0.8.0. The turbo model "
+ "is fine — 0.8.0's tokenizer/vocab check was overly strict and rejected its "
+ "benign embedding superset (50257-token tokenizer, text vocab size 50276). "
+ "This is fixed upstream (CrispStrobe/CrispASR#181): a newer CrispASR loads "
+ "Turbo normally, with no re-download. Until then, switch to the \"Base\" "
+ "Chatterbox model, which works."
+ Environment.NewLine + Environment.NewLine + tail
+ LaunchCmdSuffix(exitedLaunchCommand));
}
if (LooksLikeChatterboxTurboStartupCrash(modelKey, tail))
{
throw new InvalidOperationException(
"Chatterbox TTS \"Turbo\" model crashed CrispASR during startup. This is a known "
+ "upstream issue in the chatterbox-turbo backend (especially on macOS/CPU). "
+ "Try the \"Base\" model instead, or file an issue at "
+ "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);
}
View on GitHub (pinned to 17a9f07487)
Solutions
- Switch the Chatterbox model selection from 'Turbo' to 'Base' and regenerate — Base is unaffected.
- If you need Turbo, run on a CUDA GPU host where the crash signature is not seen.
- Track / pull the upstream CrispStrobe/CrispASR fix for the turbo startup crash and re-download CrispASR via Video → Audio to text → Engine settings → Re-download.
- Attach the captured server log tail (included in the exception message) to a new issue at https://github.com/CrispStrobe/CrispASR/issues if no fix is released yet.
Example fix
// before var modelKey = "chatterbox-turbo"; await engine.Speak(text, out, voice, lang, region, modelKey, ct); // after — prefer Base which loads cleanly on CPU/macOS var modelKey = "chatterbox-base"; await engine.Speak(text, out, voice, lang, region, modelKey, ct);
Defensive patterns
Strategy: fallback
Validate before calling
// Before synthesis, prefer Base unless you know the host has a working Turbo. var modelKey = IsCpuOrMacosHost() ? "chatterbox-base" : Se.Settings.Video.TextToSpeech.ChatterboxModel; // LooksLikeChatterboxTurboStartupCrash is internal — surface model choice via settings UI, // defaulting CPU/macOS users to Base.
Try / catch
try { await engine.Speak(text, out, voice, lang, region, "chatterbox-turbo", ct); }
catch (InvalidOperationException ex) when (ex.Message.Contains("Turbo", StringComparison.Ordinal) && ex.Message.Contains("Base", StringComparison.Ordinal))
{
Se.WriteToolsLog("Chatterbox Turbo crashed on startup; retrying with Base.", true);
await engine.Speak(text, out, voice, lang, region, "chatterbox-base", ct);
} Prevention
- Default CPU/macOS installations to the Base Chatterbox model.
- Track the upstream CrispStrobe/CrispASR fix and only re-enable Turbo after upgrading.
- Show the captured server log tail to the user so they can confirm the turbo-crash signature before switching models.
When it happens
Trigger: Selecting the Chatterbox 'Turbo' model key, then invoking synthesis so EnsureServerRunningAsync launches crispasr with --backend chatterbox; the process exits non-zero during startup and its captured stderr/stdout tail matches the turbo-crash signature. Most reproducible on macOS or CPU-only machines.
Common situations: Running Chatterbox Turbo on an Apple Silicon Mac or a CPU-only Linux box; a fresh install where Turbo is the default; after a CrispASR version bump that regressed the turbo backend.
Related errors
- Chatterbox TTS hit a CrispASR runtime bug during synthesis (
- crispasr (chatterbox) exited during startup (code {exitCode}
- crispasr (chatterbox) did not report healthy within 15 minut
- Voice is not a ChatterboxVoice
- Chatterbox TTS request failed — the crispasr server crashed
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/6d4114355da05522.
Report an issue: GitHub.