Model Capabilities
Image Generation
Generate images from text prompts with Grok Imagine models. The API supports batch generation of multiple images, and control over aspect ratio, resolution, and quality.
Quick Start
Generate an image with a single API call:
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="A collage of London landmarks in a stenciled street‑art style",
model="grok-imagine-image-2.0",
)
print(response.url)
Images are returned as URLs by default. URLs are temporary, so download or process promptly. You can also request base64 output for embedding images directly.
Configuration
Multiple Images
Generate multiple images in a single request with the n parameter (1–10). On the REST API and OpenAI-compatible SDKs, n is optional and defaults to 1. The xAI Python SDK uses sample() for a single image and sample_batch(n=...) for more than one — n is required on sample_batch().
import xai_sdk
client = xai_sdk.Client()
responses = client.image.sample_batch(
prompt="A futuristic city skyline at night",
model="grok-imagine-image-2.0",
n=4,
)
for i, image in enumerate(responses):
print(f"Variation {i + 1}: {image.url}")
Aspect Ratio
Control image dimensions with the aspect_ratio parameter. When omitted, the default is auto, which lets the model pick the best ratio for the prompt.
| Ratio | Use case |
|---|---|
1:1 | Social media, thumbnails |
16:9 / 9:16 | Widescreen, mobile, stories |
4:3 / 3:4 | Presentations, portraits |
3:2 / 2:3 | Photography |
2:1 / 1:2 | Banners, headers |
19.5:9 / 9:19.5 | Modern smartphone displays (iPhone) |
20:9 / 9:20 | Modern smartphone displays (Android) |
21:9 | Cinematic widescreen |
5:2 | Wide banners |
auto | Model auto-selects the best ratio for the prompt |
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="Mountain landscape at sunrise",
model="grok-imagine-image-2.0",
aspect_ratio="16:9",
)
print(response.url)
Resolution
You can specify different resolutions of the output image with the resolution parameter. Currently supported image resolutions are:
1k(default when omitted)2k
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="An astronaut performing EVA in LEO.",
model="grok-imagine-image-2.0",
resolution="2k"
)
print(response.url)
Quality
Control generation quality with the optional quality parameter. Allowed values are low and medium. When omitted, the default is medium. The parameter is only supported for grok-imagine-image-2.0.
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="A watercolor painting of a lighthouse at dawn",
model="grok-imagine-image-2.0",
quality="low",
)
print(response.url)
Base64 Output
Control the output format with the response_format parameter. When omitted, the default is url, which returns temporary hosted URLs. For embedding images directly without downloading, request base64:
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="A serene Japanese garden",
model="grok-imagine-image-2.0",
image_format="base64",
)
# Save to file
with open("garden.jpg", "wb") as f:
f.write(response.image)
Response Details
The xAI SDK exposes additional metadata on the response object beyond the image URL or base64 data.
Moderation — Check whether the generated image passed content moderation:
Python
if response.respect_moderation:
print(response.url)
else:
print("Image filtered by moderation")
Model — Get the actual model used (resolving any aliases):
Python
print(f"Model: {response.model}")
Concurrent Requests
When you need to generate multiple images with different prompts, such as generating unrelated images in parallel, use AsyncClient with asyncio.gather to fire requests concurrently. This is significantly faster than issuing them one at a time.
If you want multiple variations from the same prompt, use sample_batch() with the n parameter` instead. That generates all images in a single request and is the most efficient approach for same-prompt generation.
Python
import asyncio
import xai_sdk
async def generate_concurrently():
client = xai_sdk.AsyncClient()
# Each request uses a different prompt
prompts = [
"A futuristic city skyline at sunset",
"A serene Japanese garden in winter",
"An astronaut floating above Earth",
"A medieval castle on a misty mountain",
]
# Fire all requests concurrently
tasks = [
client.image.sample(
prompt=prompt,
model="grok-imagine-image-2.0",
)
for prompt in prompts
]
results = await asyncio.gather(*tasks)
for prompt, result in zip(prompts, results):
print(f"{prompt}: {result.url}")
asyncio.run(generate_concurrently())
Related
- Models — Available image models
- Image Editing — Edit images with natural language
- Image Generation Tool — Let Grok generate and edit images inside a conversation
- Video Generation — Generate videos from text prompts
- API Reference — Full endpoint documentation
- Imagine API Landing Page — Showcase of the Imagine API in action
Last updated: August 21, 2026