SubtitleEdit/subtitleedit · error · FileNotFoundException
OmniVoice TTS models not found in {GetSetModelsFolder()}. Do
Error message
OmniVoice TTS models not found in {GetSetModelsFolder()}. Download them via the TTS download dialog. What it means
FileNotFoundException thrown when either the omnivoice main model (GetModelBasePath) or the tokenizer/codec model (GetModelTokenizerPath) does not exist in the OmniVoice models folder. Both files are required by the omnivoice-tts CLI via its --model and --codec arguments.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/OmniVoiceTtsCpp.cs:234
string? model,
CancellationToken cancellationToken)
{
if (voice.EngineVoice is not OmniVoice omniVoice)
{
throw new ArgumentException("Voice is not an OmniVoice");
}
var exe = GetExecutableFileName();
if (!File.Exists(exe))
{
throw new FileNotFoundException("omnivoice-tts executable not found.", exe);
}
var modelPath = GetModelBasePath();
var codecPath = GetModelTokenizerPath();
if (!File.Exists(modelPath) || !File.Exists(codecPath))
{
throw new FileNotFoundException(
$"OmniVoice TTS models not found in {GetSetModelsFolder()}. Download them via the TTS download dialog.");
}
var outputFileName = Path.Combine(TtsOutputFolder.Resolve(outputFolder, GetSetFolder), Guid.NewGuid() + ".wav");
var inputText = text;
var psi = new ProcessStartInfo
{
WorkingDirectory = GetSetFolder(),
FileName = exe,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
StandardInputEncoding = Encoding.UTF8,
};
View on GitHub (pinned to 17a9f07487)
Solutions
- Run the TTS download dialog to fetch the OmniVoice models (model + tokenizer pair).
- Check IsModelsInstalled() before calling Speak() to detect the missing-models state early.
- Verify both files exist: the model GGUF and the tokenizer GGUF in GetSetModelsFolder().
- If the download service changed model filenames, delete the old files and re-download to get the current pair.
Example fix
// before — throws mid-Speak if models are missing
if (!File.Exists(modelPath) || !File.Exists(codecPath))
throw new FileNotFoundException($"OmniVoice TTS models not found in {GetSetModelsFolder()}...");
// after — surface in the UI with a download action
if (!IsModelsInstalled())
{
await DialogService.ShowWarningAndAction(
$"OmniVoice models not found in {GetSetModelsFolder()}.",
"Download models", () => ShowDownloadDialog());
return;
} Defensive patterns
Strategy: validation
Validate before calling
// Check both model files exist before synthesis
if (!OmniVoiceTtsCpp.IsModelsInstalled())
{
await ShowDownloadDialog("OmniVoice models not installed.");
return;
} Type guard
null
Try / catch
catch (FileNotFoundException ex) when (ex.Message.Contains("models not found"))
{
await ShowDownloadDialog("Download OmniVoice models.");
// Retry after download
} Prevention
- Call IsModelsInstalled() before synthesis.
- Verify both the model GGUF and tokenizer GGUF exist after download.
- Re-download if file sizes don't match expected values.
When it happens
Trigger: File.Exists(modelPath) or File.Exists(codecPath) returns false. The model filenames come from OmniVoiceDownloadService.ModelBaseFileName and ModelTokenizerFileName, so they depend on which release was pinned at download time.
Common situations: The user downloaded the engine binary but not the models (two-step download); the models were partially downloaded and one file is missing; the models folder was cleaned up; the download service was updated to new model filenames but the old files remain (or vice versa).
Related errors
- CrispASR executable not found. Install CrispASR via Video →
- omnivoice-tts executable not found.
- CrispASR executable not found. Install CrispASR via Video →
- OmniVoice TTS voice cloning requires a transcript file at {r
- OmniVoice (CrispASR) — the crispasr server crashed during sy
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/403b78a1324b8671.
Report an issue: GitHub.