Mintplex-Labs/anything-llm · error · Error
ENV: No TTS_PROVIDER value found in environment!
Error message
ENV: No TTS_PROVIDER value found in environment!
What it means
Thrown by getTTSProvider when TTS_PROVIDER does not match: openai, elevenlabs, generic-openai, kokoro. Unlike the STT index, the default value when TTS_PROVIDER is unset is 'openai' (line 2), which IS a valid case — so this default branch is only reached when TTS_PROVIDER is explicitly set to an unrecognized value. The message is a fixed string and does not echo the bad value.
Source
Thrown at server/utils/TextToSpeech/index.js:17
function getTTSProvider() {
const provider = process.env.TTS_PROVIDER || "openai";
switch (provider) {
case "openai":
const { OpenAiTTS } = require("./openAi");
return new OpenAiTTS();
case "elevenlabs":
const { ElevenLabsTTS } = require("./elevenLabs");
return new ElevenLabsTTS();
case "generic-openai":
const { GenericOpenAiTTS } = require("./openAiGeneric");
return new GenericOpenAiTTS();
case "kokoro":
const { KokoroTTS } = require("./kokoro");
return new KokoroTTS();
default:
throw new Error("ENV: No TTS_PROVIDER value found in environment!");
}
}
module.exports = { getTTSProvider };
View on GitHub (pinned to 526360e320)
Solutions
- Set TTS_PROVIDER to one of: openai, elevenlabs, generic-openai, kokoro (lowercase, exact).
- If unset is desired, leave it unset to fall back to 'openai'.
- Check for trailing whitespace, quotes, or typos in the .env value.
- Restart the server after changing .env.
Example fix
# before TTS_PROVIDER=ElevenLabs # (typo/case → throws) # after TTS_PROVIDER=elevenlabs TTS_ELEVEN_LABS_KEY=el_xxxxxxxx
Defensive patterns
Strategy: validation
Validate before calling
const VALID_TTS = ["openai", "elevenlabs", "generic-openai", "kokoro"];
const provider = process.env.TTS_PROVIDER;
if (provider && !VALID_TTS.includes(provider)) {
throw new Error(
`TTS_PROVIDER "${provider}" is invalid. Use one of: ${VALID_TTS.join(", ")}, or leave unset to default to 'openai'.`
);
} Type guard
const VALID_TTS = new Set(["openai", "elevenlabs", "generic-openai", "kokoro"]);
function isKnownTTSProvider(v) {
return v === undefined || (typeof v === "string" && VALID_TTS.has(v));
} Try / catch
try {
return getTTSProvider();
} catch (e) {
if (/No TTS_PROVIDER value found/i.test(e.message)) {
logger.error(
"TTS_PROVIDER is set to an unknown value. Use openai|elevenlabs|generic-openai|kokoro, or unset it to default to 'openai'."
);
}
throw e;
} Prevention
- Remember unset TTS_PROVIDER defaults to 'openai' (valid) — this error only fires for explicitly bad values.
- Use lowercase exact values; avoid typos and trailing whitespace.
- Document the allowed TTS provider list next to the env var.
When it happens
Trigger: TTS_PROVIDER is explicitly set to a typo or unsupported value (e.g. 'OpenAI', 'eleven', 'azure', 'polly'); trailing whitespace; a value intended for the frontend TTS picker.
Common situations: Manually setting TTS_PROVIDER to a provider that exists on the frontend but has no server implementation; copy-paste typo; uppercase value; leftover value from a previous config.
Related errors
- STT_PROVIDER "${provider}" is not a server-side provider.
- No OpenAI compatible endpoint was set. Please set this to us
- No OpenAI compatible endpoint was set. Please set this to us
- No ElevenLabs API key was set.
- No Kokoro endpoint was set. Please set TTS_KOKORO_ENDPOINT t
AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13).
Data as JSON: /api/errors/fde95891badf2310.
Report an issue: GitHub.