Mintplex-Labs/anything-llm · critical · Error

No OpenRouter image generation API key was set.

Error message

No OpenRouter image generation API key was set.

What it means

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.

Source

Thrown at server/utils/ImageGenerators/openRouter/index.js:11

const { BaseImageGenerator } = require("../base");

class OpenRouterImageGenerator extends BaseImageGenerator {
  _extractImageBuffer(dataUrl) {
    if (!dataUrl) throw new Error("OpenRouter returned no image data.");
    return Buffer.from(dataUrl.split(",").pop(), "base64");
  }

  constructor() {
    if (!process.env.IMAGE_GEN_OPENROUTER_API_KEY)
      throw new Error("No OpenRouter image generation API key was set.");
    if (!process.env.IMAGE_GEN_MODEL_PREF)
      throw new Error("No OpenRouter image generation model was set.");
    const { OpenAI: OpenAIApi } = require("openai");
    super({
      client: new OpenAIApi({
        baseURL: "https://openrouter.ai/api/v1",
        apiKey: process.env.IMAGE_GEN_OPENROUTER_API_KEY,
        defaultHeaders: {
          "HTTP-Referer": "https://anythingllm.com",
          "X-Title": "AnythingLLM",
        },
      }),
      model: process.env.IMAGE_GEN_MODEL_PREF,
      className: "OpenRouterImageGenerator",
    });
  }

  // OpenRouter does not expose /images/generations. Its image models return

View on GitHub (pinned to 526360e320)

Solutions

  1. Set IMAGE_GEN_OPENROUTER_API_KEY to a valid OpenRouter key in .env.
  2. Note this differs from OPENROUTER_API_KEY — set the dedicated image-generation key variable.
  3. Restart the server after setting the variable.
  4. Confirm the key has credits/access for image models on OpenRouter.

Example fix

# before
IMAGE_GEN_PROVIDER=openrouter
# (no image key)

# after
IMAGE_GEN_PROVIDER=openrouter
IMAGE_GEN_OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx
Defensive patterns

Strategy: validation

Validate before calling

function hasOpenRouterImageKey() {
  return typeof process.env.IMAGE_GEN_OPENROUTER_API_KEY === 'string'
    && process.env.IMAGE_GEN_OPENROUTER_API_KEY.trim().length > 0;
}
if (!hasOpenRouterImageKey()) {
  throw new Error('Set IMAGE_GEN_OPENROUTER_API_KEY before using OpenRouter image generation.');
}

Type guard

function isOpenRouterImageKeySet() {
  return !!process.env.IMAGE_GEN_OPENROUTER_API_KEY && process.env.IMAGE_GEN_OPENROUTER_API_KEY.trim().length > 0;
}

Try / catch

try {
  generator = new OpenRouterImageGenerator();
} catch (e) {
  if (/No OpenRouter image generation API key/.test(e.message)) {
    throw new Error('Configure IMAGE_GEN_OPENROUTER_API_KEY (separate from OPENROUTER_API_KEY) and restart.');
  }
  throw e;
}

Prevention

When it happens

Trigger: Instantiating new OpenRouterImageGenerator() when process.env.IMAGE_GEN_OPENROUTER_API_KEY is unset or empty.

Common situations: 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.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13). Data as JSON: /api/errors/9418376d202b23e5. Report an issue: GitHub.