Skip to main content
qwen avatar

Qwen-Image API

qwen/qwen-image

Generate high-quality images from a text prompt, with standout accurate, legible in-image text in English and Chinese.

0.02 per megapixel of image

Model Input

Input

The text prompt describing the image to generate. Put any words you want rendered inside the image in quotes.

The size of the generated image. Use a preset string (e.g. 'landscape_16_9') or a custom {width, height} object.

Min: 2 - Max: 250

The number of inference steps to perform. More steps can improve detail at the cost of speed.

Additional Settings

Customize your input with more control.

Min: 0 - Max: 20

The CFG (Classifier Free Guidance) scale. Higher values increase adherence to the prompt.

The same seed and the same prompt given to the same version of the model will output the same image every time.

Min: 1 - Max: 4

The number of images to generate. Each generated image is billed.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Generated image output
Generated in 27.006 seconds
Logs (1 lines)

Model Example Requests

Examples

Example output 1Example output 2

Qwen-Image API

Qwen-Image is a text-to-image AI model by qwen. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.02 per megapixel.

POST https://queue.modelrunner.run/qwen/qwen-image

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/qwen/qwen-image \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a vintage travel poster with the headline \"VISIT KYOTO\" in bold serif type, autumn maple leaves, warm golden tones",
    "image_size": "landscape_4_3",
    "num_images": 1,
    "guidance_scale": 2.5,
    "num_inference_steps": 30,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/qwen/qwen-image/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/qwen/qwen-image/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("qwen/qwen-image", {
  input: {
    "prompt": "a vintage travel poster with the headline \"VISIT KYOTO\" in bold serif type, autumn maple leaves, warm golden tones",
    "image_size": "landscape_4_3",
    "num_images": 1,
    "guidance_scale": 2.5,
    "num_inference_steps": 30
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/qwen/qwen-image",
    headers=headers,
    json={
      "prompt": "a vintage travel poster with the headline \"VISIT KYOTO\" in bold serif type, autumn maple leaves, warm golden tones",
      "image_size": "landscape_4_3",
      "num_images": 1,
      "guidance_scale": 2.5,
      "num_inference_steps": 30
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
promptstringyesThe text prompt describing the image to generate. Put any words you want rendered inside the image in quotes.
image_sizeenumnoThe size of the generated image. Use a preset string (e.g. 'landscape_16_9') or a custom {width, height} object. Default: "landscape_4_3".
num_inference_stepsintegernoThe number of inference steps to perform. More steps can improve detail at the cost of speed. Default: 30.
guidance_scalenumbernoThe CFG (Classifier Free Guidance) scale. Higher values increase adherence to the prompt. Default: 2.5.
seedintegernoThe same seed and the same prompt given to the same version of the model will output the same image every time.
num_imagesintegernoThe number of images to generate. Each generated image is billed. Default: 1.

Machine-readable: OpenAPI schema · llms.txt

Use Qwen-Image from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Qwen-Image becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint qwen/qwen-image.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run qwen/qwen-image on ModelRunner to generate image”. MCP setup guide.

Model Details

Model Details

Qwen-Image turns a text prompt into a high-quality image. Its standout strength is rendering accurate, legible text directly inside the image — and uniquely, it handles both English and Chinese, including dense multi-line layouts that most image models garble. Combined with strong prompt adherence, it is a reliable pick when the words in the picture matter as much as the picture itself: posters, signage, packaging, social graphics, and bilingual designs.

## Best for - Posters, flyers, and signage where headlines and body text must stay spelled correctly and legible - Logos, product labels, and packaging mockups that combine artwork with real words - Bilingual or Chinese-language designs (storefronts, menus, captions) that need correct CJK glyphs - General text-to-image scenes — illustrations, product shots, concept art — with faithful prompt following

## Choose another model when - You want to edit, restyle, or modify an existing image rather than generate one from scratch — use an image-editing / image-to-image model - You need photoreal portraits or a specialized aesthetic that a purpose-built model nails better - You want video or animation from your prompt — use a text-to-video model

## Tips - Put the exact words you want rendered in quotes inside the prompt, and describe their placement ("a red banner reading ..." / "a sign that says ...") - Pick `image_size` to match the layout: `landscape_16_9` for posters/banners, `portrait_4_3` for signage, `square` for social, or pass a custom `{ width, height }` object - Use `num_images` (1-4) to get several variations from one prompt in a single call - `guidance_scale` (default 2.5) trades creativity for prompt adherence; raise `num_inference_steps` (default 30) for more detail at the cost of speed

## Limitations - Very long passages of text or tiny font sizes can still introduce glyph errors - Highly photorealistic faces and hands may need a follow-up edit pass

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("qwen/qwen-image", { input: { prompt: "a vintage travel poster with the headline \"VISIT KYOTO\" in bold serif type, autumn maple leaves", image_size: "landscape_4_3", num_images: 1, }, }); ```