Model Capabilities
Image Generation
Generate images from text prompts, edit existing images with natural language, or iteratively refine images through multi-turn conversations. The API supports batch generation of multiple images, and control over aspect ratio and resolution.
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",
)
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.
Image Editing
Edit an existing image by providing a source image along with your prompt. The model understands the image content and applies your requested changes.
The OpenAI SDK's images.edit() method is not supported for image editing because it uses multipart/form-data, while the xAI API requires application/json. Use the xAI SDK, Vercel AI SDK, or direct HTTP requests instead.
With the xAI SDK, use the same sample() method — just add the image_url parameter:
import base64
import xai_sdk
client = xai_sdk.Client()
# Load image from file and encode as base64
with open("landmarks.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = client.image.sample(
prompt="Change the landmarks to be New York City landmarks",
model="grok-imagine-image",
image_url=f"data:image/jpeg;base64,{image_data}",
)
print(response.url)
You can provide the source image as:
- A public URL pointing to an image
- A base64-encoded data URI (e.g.,
data:image/jpeg;base64,...)
Multi-Turn Editing
Chain multiple edits together by using each output as the input for the next. This enables iterative refinement — start with a base image and progressively add details, adjust styles, or make corrections.



import xai_sdkclient = xai_sdk.Client()response = client.image.sample( prompt="A modern living room with large windows overlooking the city", model="grok-imagine-image",) print(response.url)Style Transfer
The grok-imagine-image model excels across a wide range of visual styles — from ultra-realistic photography to anime, oil paintings, pencil sketches, and beyond. Transform existing images by simply describing the desired aesthetic in your prompt.






import xai_sdkclient = xai_sdk.Client()response = client.image.sample( prompt="Render this image as an oil painting in the style of impressionism", model="grok-imagine-image", image_url="https://docs.x.ai/assets/api-examples/images/style-realistic.png",)print(response.url)Concurrent Requests
When you need to generate multiple images with different prompts — such as applying various style transfers to the same source image, or 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()
source_image = "https://example.com/portrait.jpg"
# Each request uses a different prompt
prompts = [
"Render this image as an oil painting in the style of impressionism",
"Render this image as a pencil sketch with detailed shading",
"Render this image as pop art with bold colors and halftone dots",
"Render this image as a watercolor painting with soft edges",
]
# Fire all requests concurrently
tasks = [
client.image.sample(
prompt=prompt,
model="grok-imagine-image",
image_url=source_image,
)
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())
Configuration
Multiple Images
Generate multiple images in a single request using the sample_batch() method and the n parameter. This returns a list of ImageResponse objects.
import xai_sdk
client = xai_sdk.Client()
responses = client.image.sample_batch(
prompt="A futuristic city skyline at night",
model="grok-imagine-image",
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:
| 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 |
20:9 / 9:20 | Ultra-wide displays |
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",
aspect_ratio="16:9",
)
print(response.url)
Resolution
You can specify different resolutions of the output image. Currently supported image resolutions are:
- 1k
- 2k
import xai_sdk
client = xai_sdk.Client()
response = client.image.sample(
prompt="An astronaut performing EVA in LEO.",
model="grok-imagine-image",
resolution="2k"
)
Base64 Output
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",
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}")
Pricing
Image generation uses flat per-image pricing rather than token-based pricing like text models. Each generated image incurs a fixed fee regardless of prompt length.
For image editing, you are charged for both the input image and the generated output image.
For full pricing details on the grok-imagine-image model, see the model page.
Limitations
- Maximum images per request: 10
- URL expiration: Generated URLs are temporary
- Content moderation: Images are subject to content policy review
Related
- Models — Available image models
- Video Generation — Animate generated images
- API Reference — Full endpoint documentation