SubtitleEdit/subtitleedit · error · InvalidOperationException
IndexTTS (CrispASR) — the crispasr server crashed during syn
Error message
IndexTTS (CrispASR) — the crispasr server crashed during synthesis.
What it means
InvalidOperationException from the HttpRequestException catch in IndexTtsCrispAsr.Speak when the POST to `/v1/audio/speech` throws AND the server process has already exited (`died == true`). The server crashed mid-synthesis; StopServerInternal is called, the inner HttpRequestException is chained, and the server log + launch command are appended. This means a fresh server will be started on the next call.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/IndexTtsCrispAsr.cs:424
response = await HttpClient.PostAsync($"{ServerBaseUrl}/v1/audio/speech", content, cancellationToken);
}
catch (HttpRequestException ex)
{
var serverLog = SnapshotServerLog();
var launchCommand = _serverLaunchCommand;
var died = _serverProcess?.HasExited == true;
if (died)
{
StopServerInternal();
}
var failMsg = $"IndexTTS (CrispASR) request failed — Voice: {indexVoice}, Text: {text}, "
+ $"RequestJson: {body}, ServerExited: {died}, ServerLog: {serverLog}"
+ LaunchCmdSuffix(launchCommand);
Se.LogError(ex, failMsg);
Se.WriteToolsLog(failMsg);
throw new InvalidOperationException(
(died
? "IndexTTS (CrispASR) — the crispasr server crashed during synthesis."
: "IndexTTS (CrispASR) request failed — the connection to the crispasr server was dropped.")
+ (string.IsNullOrEmpty(serverLog) ? string.Empty : $"{Environment.NewLine}Server log:{Environment.NewLine}{serverLog}")
+ LaunchCmdSuffix(launchCommand),
ex);
}
using (response)
{
if (!response.IsSuccessStatusCode)
{
var errorBody = await SafeReadErrorAsync(response, cancellationToken);
var serverLog = SnapshotServerLog();
var launchCommand = _serverLaunchCommand;
var errMsg = $"IndexTTS (CrispASR) server error {(int)response.StatusCode} {response.StatusCode} — "
+ $"Voice: {indexVoice}, Text: {text}, RequestJson: {body}, "
+ $"ResponseBody: {errorBody}, ServerLog: {serverLog}"View on GitHub (pinned to 17a9f07487)
Solutions
- Inspect the appended `Server log:` tail — the backend's crash reason is logged right before exit.
- Retry once; EnsureServerRunningAsync will start a fresh server. If it dies again on the same input, the reference WAV or model is the cause.
- Re-encode the reference WAV to 24 kHz mono PCM.
- Check VRAM/free RAM at the moment of failure; close other GPU workloads.
- If the crash is input-specific (long text), chunk the text and retry per chunk.
Defensive patterns
Strategy: retry
Validate before calling
// Before batch synth, probe the server is alive and the reference WAV is valid
if (engine.IsServerDown() || !File.Exists(indexVoice.FilePath)) { WarnUser(...); return; } Try / catch
try { await indexEngine.Speak(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("server crashed during synthesis"))
{
// Server is auto-stopped; EnsureServerRunningAsync will start a fresh one. Retry once.
await indexEngine.Speak(...);
} Prevention
- Pre-validate the reference WAV format (24 kHz mono) to avoid mid-synth segfaults.
- Monitor VRAM and skip synth while another GPU job is running.
- Keep batch jobs single-threaded per server to avoid concurrent-clone crashes.
- Log the inner HttpRequestException to correlate with backend stack traces.
When it happens
Trigger: The reference WAV is malformed so the backend segfaults during cloning; an OOM/GPU fault kills the server mid-inference; the model GGUF is corrupt and the server aborts on the first synth; a CUDA driver crash during generation.
Common situations: Reference WAV is the wrong sample rate/channel layout; GPU VRAM exhausted by another process mid-render; corrupt or truncated model download; CrispASR backend bug on specific input text (e.g. very long or non-UTF8).
Related errors
- IndexTTS (CrispASR) request failed — the connection to the c
- MOSS-TTS (CrispASR) — the crispasr server crashed during syn
- CosyVoice3 (CrispASR) — the crispasr server crashed during s
- F5-TTS (CrispASR) — the crispasr server crashed during synth
- IndexTTS (CrispASR) synthesis failed ({(int)response.StatusC
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/d74d0378e48b166a.
Report an issue: GitHub.