SubtitleEdit/subtitleedit · error · InvalidOperationException

crispasr (indextts) exited during startup (code {exitCode}).

Error message

crispasr (indextts) exited during startup (code {exitCode}). Output: {tail}{LaunchCmdSuffix}

What it means

InvalidOperationException from IndexTtsCrispAsr.EnsureServerRunningAsync when the indextts crispasr server process exits before the first successful health probe. Mirrors the F5-TTS equivalent: the exit code, last 2000 chars of server log, and the launch command are attached. Server state fields (_serverProcess/_serverPort/_serverVoicePath/_serverModelKey) are cleared so the next call restarts cleanly.

Source

Thrown at src/ui/Features/Video/TextToSpeech/Engines/IndexTtsCrispAsr.cs:617

            HookProcessExitOnce();

            // First-run auto-download (~870 MB total) needs a generous timeout, but much
            // shorter than VibeVoice/Qwen3 thanks to the smaller model.
            var deadline = DateTime.UtcNow.AddMinutes(hasLocalTalker && hasLocalCodec ? 5 : 15);
            while (DateTime.UtcNow < deadline)
            {
                ct.ThrowIfCancellationRequested();
                if (process.HasExited)
                {
                    var tail = SnapshotServerLog();
                    var exitCode = process.ExitCode;
                    var exitedLaunchCommand = _serverLaunchCommand;
                    _serverProcess = null;
                    _serverPort = 0;
                    _serverLaunchCommand = null;
                    _serverVoicePath = null;
                    _serverModelKey = null;
                    throw new InvalidOperationException(
                        $"crispasr (indextts) 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 (indextts) did not report healthy within {(hasLocalTalker && hasLocalCodec ? 5 : 15)} minutes. Last output: {lastOutput}"
                + LaunchCmdSuffix(timeoutLaunchCommand));
        }
        finally

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Read the `Output:` tail — the indextts backend prints its abort reason there.
  2. Run the `Launch command:` line in a terminal for the full error.
  3. Confirm the reference WAV at the `--voice` path still exists and is readable.
  4. Verify both talker and codec GGUFs (or let `--auto-download` re-fetch on a stable link).
  5. Add the CrispASR folder to AV exclusions.
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-flight checks before first synth
if (!File.Exists(engine.GetCrispAsrExecutable())) { PromptInstallCrispAsr(); return; }
if (!File.Exists(indexVoice.FilePath)) { WarnUser("Reference WAV missing"); return; }

Try / catch

try { await indexEngine.Speak(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("exited during startup"))
{
    ShowDiagnostics(ex.Message); // exit code + Output tail + launch command
}

Prevention

When it happens

Trigger: Missing or corrupt talker/codec GGUF and `--auto-download` fails; the `--voice` reference WAV is unreadable so the indextts backend aborts at init; CUDA/runtime error at boot; the path-traversal `--voice` arg contains characters the backend rejects at startup; AV killing the process.

Common situations: Reference WAV deleted/moved after the voice was selected (path baked into `--voice` no longer valid); interrupted first-run ~870 MB model download; CrispASR CLI flag change between versions; GPU driver incompatibility.

Related errors


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/c2962ee34c074cf3. Report an issue: GitHub.