mcpField
9
9router-image

9router-image

github.com/decoluaCreative & media31.6k169 installsUpdated today
Repository

About 9router-image

9router-image is a skill for generating images through a configured 9Router gateway. It uses provider-specific models and options, with responses available as URLs, base64 data, or binary image bytes.

Key features

  1. 01Discover image models and options
  2. 02Generate images from prompts
  3. 03URL, base64, or binary responses
  4. 04Provider-specific generation parameters
  5. 05Image inputs for supported providers

Use cases

  1. 01Generating an image from a text prompt
  2. 02Saving generated output as an image file
  3. 03Using supported image inputs for editing or reference

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/decolua/9router --skill 9router-image

After installing, type/9router-imagein Claude Code to confirm it loaded.

Details

From the project README

9Router — Image Generation

Requires NINEROUTER_URL (and NINEROUTER_KEY if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.

Discover

curl $NINEROUTER_URL/v1/models/image | jq '.data[].id'
# Per-model params/options (size enum, quality enum, capabilities like edit)
curl "$NINEROUTER_URL/v1/models/info?id=openai/dall-e-3"

Endpoint

POST $NINEROUTER_URL/v1/images/generations

FieldRequiredNotes
modelyesfrom /v1/models/image
promptyesimage description
nnocount (provider-dependent)
sizeno1024x1024, 1792x1024, ...
qualitynostandard / hd (OpenAI)
response_formatnourl (default) or b64_json

Add query ?response_format=binary to receive raw image bytes (handy for saving file).

Examples

Save to file (binary):

curl -X POST "$NINEROUTER_URL/v1/images/generations?response_format=binary" \
  -H "Authorization: Bearer $NINEROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gemini/gemini-3-pro-image-preview","prompt":"watercolor mountains at sunrise","size":"1024x1024"}' \
  --output out.png

JS (URL response):

const r = await fetch(`${process.env.NINEROUTER_URL}/v1/images/generations`, {
  method: "POST",
  headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ model: "gemini/gemini-3-pro-image-preview", prompt: "neon city", size: "1024x1024" }),
});
const { data } = await r.json();
console.log(data[0].url || data[0].b64_json.slice(0, 40));

Response shape

JSON (default response_format=url):

{ "created": 1735000000, "data": [{ "url": "https://..." }] }

response_format=b64_json:

{ "created": 1735000000, "data": [{ "b64_json": "iVBORw0KGgo..." }] }

Query ?response_format=binary returns raw image bytes (Content-Type image/png or image/jpeg).

Provider quirks

Common fields above work everywhere. These add/override:

ProviderExtra/changed fieldsNotes
openai, minimax, openrouter, recraftquality, style, response_formatStandard OpenAI shape
gemini (nano-banana)—Only prompt; ignores size/n
codex (gpt-5.4-image)image, images[], image_detail, output_format, backgroundSSE stream; ChatGPT Plus/Pro required
huggingface—Only prompt; returns single image
nanobananaimage, images[] (edit mode)size → aspect ratio; async polling
fal-aiimage (img2img)n → num_images; size → ratio; async
stability-aistyle (preset), output_formatsize → aspect_ratio
black-forest-labs (FLUX)image (ref)size → exact width/height; async
runwaymlimage (ref)size → ratio; async; video models exist
sdwebui, comfyui—Localhost noAuth (:7860 / :8188)

Comments

Markdown supported