SubtitleEdit/subtitleedit · error · InvalidOperationException
Chatterbox failed to load its model — the GGUFs in {GetSetMo
Error message
Chatterbox failed to load its model — the GGUFs in {GetSetModelsFolder()} are likely stale or partially downloaded. Delete them and try again so they re-download. Original output: {tail}{LaunchCmdSuffix} What it means
Server exited at startup and LooksLikeStaleModelCache(tail) matched — the GGUF model files in GetSetModelsFolder() are partial, corrupt, or a mixed version. The message names the folder and tells the user to delete the GGUFs so they re-download; the original server output is appended.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/ChatterboxTtsCpp.cs:644
if (process.HasExited)
{
var tail = SnapshotServerLog();
var exitCode = process.ExitCode;
var exitedLaunchCommand = _serverLaunchCommand;
_serverProcess = null;
_serverPort = 0;
_serverModelKey = null;
_serverLaunchCommand = null;
if (LooksLikeOutdatedCrispAsr(tail))
{
throw new InvalidOperationException(
"Chatterbox requires CrispASR v0.6.0 or newer. Re-download CrispASR via "
+ "Video → Audio to text → Engine settings → Re-download, then try again."
+ LaunchCmdSuffix(exitedLaunchCommand));
}
if (LooksLikeStaleModelCache(tail))
{
throw new InvalidOperationException(
"Chatterbox failed to load its model — the GGUFs in "
+ 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))View on GitHub (pinned to 17a9f07487)
Solutions
- Delete the GGUFs in GetSetModelsFolder() and retry so they re-download (as the message instructs).
- Check free disk space before re-downloading.
- Verify network stability for the model download host.
- Read the appended tail output for the specific load error.
Defensive patterns
Strategy: validation
Validate before calling
var models = GetSetModelsFolder();
if (!Directory.EnumerateFiles(models, "*.gguf").Any()) return NeedDownload("Chatterbox GGUFs", models);
// optionally validate each GGUF size against expected Try / catch
try { EnsureServerRunningAsync(modelKey, ct).Wait(); }
catch (InvalidOperationException ex) when (ex.Message.Contains("stale or partially downloaded"))
{ /* delete GGUFs in GetSetModelsFolder(), then retry to re-download */ } Prevention
- Validate GGUF file sizes against expected values after download.
- Check free disk space before starting a model download.
- Delete partial GGUFs on download interruption rather than resuming onto corrupt files.
When it happens
Trigger: Server startup loop sees process.HasExited; LooksLikeOutdatedCrispAsr false, LooksLikeStaleModelCache true.
Common situations: Interrupted model download; disk filled mid-download; user copied a mix of GGUFs from different model versions; GGUF truncated by AV/network.
Related errors
- Chatterbox TTS hit a CrispASR runtime bug during synthesis (
- Chatterbox TTS request failed — the crispasr server crashed
- Chatterbox TTS request failed — the connection to the crispa
- Chatterbox TTS could not use the reference voice "{Path.GetF
- Chatterbox TTS synthesis failed ({(int)response.StatusCode})
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/83773d69d47c91a6.
Report an issue: GitHub.