Skip to main content
Glama

Generate Image

generate_image

Turn text prompts into images with OpenAI gpt-image-2 models. Saves the file locally and returns it inline for immediate review.

Instructions

Generate an image from a text prompt using OpenAI's image model family (models: "gpt-image-2.5-sunburst" (default), "gpt-image-2.5-flare", "gpt-image-2"). The image is written to disk and also returned inline so you can see it. These models handle photoreal, illustrations, infographics, multilingual text (incl. CJK), and complex structured visuals. For a transparent logo pass background="transparent" with output_format="png" — verified against this family; the origin decides, so check applied.background. Sizes accept presets or any custom "WxH" where edges are multiples of 16, max edge ≤ 3840px, aspect ratio within 1:3–3:1, and total pixels 655,360–8,294,400. Outputs above 2K are beta. Image work is slow, so this call hands off immediately: the first response carries a job_id — poll get_image_job until it reports state "completed" (the result arrives verbatim, images included). Set GPT_IMAGE_2_ASYNC_AFTER_MS to wait inline instead (below your host's tool-call timeout).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nNoHow many images to generate (1–10). Each counts toward rate limits and cost.
sizeNoOutput dimensions. "auto" (default), one of the presets "1024x1024", "1536x1024", "1024x1536", or a custom "WxH" where both edges are multiples of 16, max edge ≤ 3840px, aspect ratio within 1:3–3:1, and total pixels 655,360–8,294,400. Outputs above 2K are beta.auto
userNoOptional end-user identifier forwarded to OpenAI for abuse monitoring. Pass a stable hashed user ID, not PII.
modelNoModel to use. One of "gpt-image-2.5-sunburst", "gpt-image-2.5-flare", "gpt-image-2"; defaults to "gpt-image-2.5-sunburst". The 2.5 variants accept the same parameters. Cost/token estimates assume gpt-image-2 pricing.
promptYesImage description. gpt-image-2 handles very detailed prompts; use ALL CAPS or quote literal text you want rendered verbatim.
qualityNoGeneration quality. "low" for fast drafts, "medium" balanced (default when model picks), "high" for dense layouts and text, "auto" lets the model choose.auto
backgroundNoBackground behavior. "opaque" forces a filled background; "transparent" asks for alpha (PNG) — verified working for the gpt-image-2 family, and the origin still decides, so check applied.background; "auto" lets the model pick.auto
moderationNoModeration strictness. "auto" (default) applies standard safety filtering; "low" is less restrictive (still subject to OpenAI policy).auto
output_dirNoAbsolute or relative directory where generated images should be written. Defaults to $GPT_IMAGE_2_OUTPUT_DIR or a per-project subfolder under the OS config dir. The directory is created if missing.
output_formatNoFile format. "png" (default, lossless), "jpeg" (smaller, lossy), "webp" (best compression). When omitted on continue_edit_session, the session's current format is kept.
filename_prefixNoShort label appended to the generated filename so you can find it later (e.g. "hero-banner"). Letters/digits/hyphens only; auto-sanitized.
output_compressionNoCompression level 0–100 for jpeg/webp outputs. Ignored for png. Defaults to 100 (minimal compression).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
toolNo
modelNo
notesNo
routeNo
stateNo
usageNo
imagesNoWritten image files — present once the job completed successfully.
job_idNoPresent on background hand-off — pass to get_image_job.
promptNo
appliedNo
poll_hintNo
requestedNo
started_atNo
async_after_msNo
prompt_previewNo
cost_usd_estimatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.5.5
    • changedInput schema / properties / background / description
      Previous value: -"Background behavior. \"opaque\" forces a filled background; \"auto\" lets the model pick. gpt-image-2 does NOT support transparent backgrounds — use a different model for that."New value: +"Background behavior. \"opaque\" forces a filled background; \"transparent\" asks for alpha (PNG) — verified working for the gpt-image-2 family, and the origin still decides, so check applied.background; \"auto\" lets the model pick."
    • changedInput schema / properties / background / enum
      Previous value: -[
      -  "auto",
      -  "opaque"
      -]New value: +[
      +  "auto",
      +  "opaque",
      +  "transparent"
      +]
    • changedInput schema / properties / model / description
      Previous value: -"Model to use. One of \"gpt-image-2\", \"gpt-image-2.5-flare\", \"gpt-image-2.5-sunburst\"; defaults to \"gpt-image-2\". The 2.5 variants accept the same parameters. Cost/token estimates assume gpt-image-2 pricing."New value: +"Model to use. One of \"gpt-image-2.5-sunburst\", \"gpt-image-2.5-flare\", \"gpt-image-2\"; defaults to \"gpt-image-2.5-sunburst\". The 2.5 variants accept the same parameters. Cost/token estimates assume gpt-image-2 pricing."
    • changedInput schema / properties / model / enum
      Previous value: -[
      -  "gpt-image-2",
      -  "gpt-image-2.5-flare",
      -  "gpt-image-2.5-sunburst"
      -]New value: +[
      +  "gpt-image-2.5-sunburst",
      +  "gpt-image-2.5-flare",
      +  "gpt-image-2"
      +]
    • addedOutput schema / properties / images / description
      Added value: +"Written image files — present once the job completed successfully."
    • changedOutput schema / properties / usage / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "input_tokens": {
      -        "type": "number"
      -      },
      -      "input_tokens_details": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "image_tokens": {
      -            "type": "number"
      -          },
      -          "text_tokens": {
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "output_tokens": {
      -        "type": "number"
      -      },
      -      "output_tokens_details": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "image_tokens": {
      -            "type": "number"
      -          },
      -          "text_tokens": {
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "total_tokens": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "input_tokens",
      -      "output_tokens",
      -      "total_tokens"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "input_tokens": {
      +        "type": "number"
      +      },
      +      "input_tokens_details": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "image_tokens": {
      +            "type": "number"
      +          },
      +          "text_tokens": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "output_tokens": {
      +        "type": "number"
      +      },
      +      "output_tokens_details": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "image_tokens": {
      +            "type": "number"
      +          },
      +          "text_tokens": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "total_tokens": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. First observedv0.3.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide flags, but the description discloses meaningful side effects: the image is written to disk and also returned inline, the call hands off immediately with a job_id, and the result must be polled through get_image_job. It also surfaces non-obvious caveats such as the 2K beta status and the fact that the origin still decides whether transparency is honored.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well front-loaded and logically organized: purpose, capabilities, transparency recipe, size rules, then async behavior. It is not a perfect 5 because several sentences duplicate schema text (size math, 2K beta, model names) and the model-capabilities sentence, while useful, is optional context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter generator with full schema coverage, an output schema, and a slow async job, the description covers the critical unknown an agent needs: how results arrive and how to monitor completion. The transparent-background caveat, size limits, and disk-write behavior are all present, so nothing required to invoke or follow up on the call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description earns an extra point by pairing background="transparent" with output_format="png" as a verified practical recipe and by consolidating size constraints and model names for fast grounding. It adds little for quality, moderation, or compression parameters, which remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific action (generate), a specific resource (image from a text prompt), and the model family, making the core purpose immediately clear. It is also unmistakably distinct from the edit_image and get_image_job siblings: generation versus editing versus polling, so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear generation context, a concrete transparent-logo recipe, and operational guidance for the async completion flow via get_image_job, including the env-var alternative. It stops short of explicitly saying when not to use this tool or when to prefer edit_image/start_edit_session, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.