{"record":{"id":"9418376d202b23e5","repo":"Mintplex-Labs/anything-llm","slug":"no-openrouter-image-generation-api-key-was-set","errorCode":null,"errorMessage":"No OpenRouter image generation API key was set.","messagePattern":"No OpenRouter image generation API key was set\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/utils/ImageGenerators/openRouter/index.js","lineNumber":11,"sourceCode":"const { BaseImageGenerator } = require(\"../base\");\n\nclass OpenRouterImageGenerator extends BaseImageGenerator {\n  _extractImageBuffer(dataUrl) {\n    if (!dataUrl) throw new Error(\"OpenRouter returned no image data.\");\n    return Buffer.from(dataUrl.split(\",\").pop(), \"base64\");\n  }\n\n  constructor() {\n    if (!process.env.IMAGE_GEN_OPENROUTER_API_KEY)\n      throw new Error(\"No OpenRouter image generation API key was set.\");\n    if (!process.env.IMAGE_GEN_MODEL_PREF)\n      throw new Error(\"No OpenRouter image generation model was set.\");\n    const { OpenAI: OpenAIApi } = require(\"openai\");\n    super({\n      client: new OpenAIApi({\n        baseURL: \"https://openrouter.ai/api/v1\",\n        apiKey: process.env.IMAGE_GEN_OPENROUTER_API_KEY,\n        defaultHeaders: {\n          \"HTTP-Referer\": \"https://anythingllm.com\",\n          \"X-Title\": \"AnythingLLM\",\n        },\n      }),\n      model: process.env.IMAGE_GEN_MODEL_PREF,\n      className: \"OpenRouterImageGenerator\",\n    });\n  }\n\n  // OpenRouter does not expose /images/generations. Its image models return","sourceCodeStart":1,"sourceCodeEnd":29,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/3aec848f2885144aa8f1e53b9731a04310d5d558/server/utils/ImageGenerators/openRouter/index.js#L1-L29","documentation":"OpenRouterImageGenerator's constructor hard-fails when process.env.IMAGE_GEN_OPENROUTER_API_KEY is unset or empty. The class is only instantiated when the user selects OpenRouter as the image generation engine, so the throw happens at engine construction time, not per request.","triggerScenarios":"Selecting the OpenRouter image generation engine in settings (or the server restarting with it already selected) while IMAGE_GEN_OPENROUTER_API_KEY is missing from the environment.","commonSituations":"Key added to .env but server not restarted; Docker deployment where the variable was not passed with -e/--env-file; key name typo (e.g. IMAGE_GEN_OPENROUTER_KEY); .env placed where the server process cannot read it.","solutions":["Add IMAGE_GEN_OPENROUTER_API_KEY=<key> to the server .env and restart","For Docker, ensure the variable is passed to the container (docker run -e or env_file in compose) and recreate the container","Verify the variable name exactly matches IMAGE_GEN_OPENROUTER_API_KEY","Check the key is non-empty (no trailing whitespace or placeholder text)"],"exampleFix":"# before (.env)\n# (no image gen key)\n\n# after (.env)\nIMAGE_GEN_OPENROUTER_API_KEY=sk-or-v1-...","handlingStrategy":"validation","validationCode":"if (!process.env.IMAGE_GEN_OPENROUTER_API_KEY) {\n  throw new Error('Configure IMAGE_GEN_OPENROUTER_API_KEY before enabling the OpenRouter image engine.');\n}","typeGuard":null,"tryCatchPattern":"try {\n  generator = new OpenRouterImageGenerator();\n} catch (err) {\n  if (err.message.includes('OpenRouter image generation API key')) {\n    // show a settings prompt instead of crashing the request\n  }\n  throw err;\n}","preventionTips":["Validate required env vars in a startup checklist instead of constructor throws","Restart the server (and recreate containers) after every .env change","Use a config schema validator to fail fast with all missing keys listed at once"],"tags":["openrouter","image-generation","environment-variable","constructor"],"backgroundTag":"missing-env-var","analyzedSha":"3aec848f2885144aa8f1e53b9731a04310d5d558","analyzedAt":"2026-08-18T10:02:21.017Z","contentChangedAt":"2026-08-18T10:02:21.017Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}