{"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":"validation","errorClass":"Error","httpStatus":null,"severity":"critical","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/526360e320da9d1b36074be5ed64fe76e5bbfbbd/server/utils/ImageGenerators/openRouter/index.js#L1-L29","documentation":"Thrown synchronously in the OpenRouterImageGenerator constructor before building the OpenAI client pointed at openrouter.ai/api/v1. IMAGE_GEN_OPENROUTER_API_KEY is required because OpenRouter authenticates every request with a bearer token. This is distinct from the chat/embedding OpenRouter key so image access can be provisioned separately.","triggerScenarios":"Instantiating new OpenRouterImageGenerator() when process.env.IMAGE_GEN_OPENROUTER_API_KEY is unset or empty.","commonSituations":"Selecting OpenRouter as the image provider without an API key; confusing this with OPENROUTER_API_KEY (the chat/embedding key) and leaving the image variable blank; key not set in the container env.","solutions":["Set IMAGE_GEN_OPENROUTER_API_KEY to a valid OpenRouter key in .env.","Note this differs from OPENROUTER_API_KEY — set the dedicated image-generation key variable.","Restart the server after setting the variable.","Confirm the key has credits/access for image models on OpenRouter."],"exampleFix":"# before\nIMAGE_GEN_PROVIDER=openrouter\n# (no image key)\n\n# after\nIMAGE_GEN_PROVIDER=openrouter\nIMAGE_GEN_OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx","handlingStrategy":"validation","validationCode":"function hasOpenRouterImageKey() {\n  return typeof process.env.IMAGE_GEN_OPENROUTER_API_KEY === 'string'\n    && process.env.IMAGE_GEN_OPENROUTER_API_KEY.trim().length > 0;\n}\nif (!hasOpenRouterImageKey()) {\n  throw new Error('Set IMAGE_GEN_OPENROUTER_API_KEY before using OpenRouter image generation.');\n}","typeGuard":"function isOpenRouterImageKeySet() {\n  return !!process.env.IMAGE_GEN_OPENROUTER_API_KEY && process.env.IMAGE_GEN_OPENROUTER_API_KEY.trim().length > 0;\n}","tryCatchPattern":"try {\n  generator = new OpenRouterImageGenerator();\n} catch (e) {\n  if (/No OpenRouter image generation API key/.test(e.message)) {\n    throw new Error('Configure IMAGE_GEN_OPENROUTER_API_KEY (separate from OPENROUTER_API_KEY) and restart.');\n  }\n  throw e;\n}","preventionTips":["Use IMAGE_GEN_OPENROUTER_API_KEY (the dedicated image key), distinct from OPENROUTER_API_KEY.","Confirm the key has credits/access for image models on OpenRouter.","Validate the variable at startup.","Restart after .env changes."],"tags":["openrouter","image-generation","configuration","missing-api-key","constructor"],"backgroundTag":null,"analyzedSha":"526360e320da9d1b36074be5ed64fe76e5bbfbbd","analyzedAt":"2026-08-13T01:45:47.170Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}