Grok Imagine's magic wand edit vs Sume's mask_url: who has one

xAI's Image 2.0 edits a selected region and keeps the rest. Sume's explicit mask exists on ChatGPT Image 2.5 only; here is what to send for Grok.

5 min readSume
All posts

xAI's Imagine Image 2.0 announcement lists a magic wand that edits specific regions while preserving the rest, plus segmentation for selecting precise areas. Those are tools in xAI's product; Sume's API has one explicit region control, mask_url, and its docs limit it to ChatGPT Image 2.5. For Grok on Sume, send the image in input_references and describe the region in words.

xAI's features are from its Image 2.0 announcement, read 2026-10-03. Sume's parameters are from the Image API docs.

What the announcement lists

Beyond the region tools, the page lists background removal that exports subjects on transparent backgrounds, multi-reference editing with up to 5 input images, and smart resize that recomposes an image to any aspect ratio. It says the model launched on August 7, 2026 and is available as grok-imagine-image-2.0 in the API, and it reports a ranking from Arena leaderboards as of the announcement date, which this post does not repeat as a current fact.

Region and mask control (read 2026-10-03)
NeedxAI's productSume API
Edit one regionMagic wand, segmentationmask_url on ChatGPT Image 2.5 only
Transparent outputBackground removalbackground: transparent on ChatGPT Image 2.5 only
Several sourcesUp to 5 imagesinput_references, ceiling per model in the catalog

What to send for Grok on Sume

The docs say mask_url and background are accepted by ChatGPT Image 2.5, and a parameter a model does not list is rejected with 400 unsupported_parameter. So a Grok call carries the source in input_references and a prompt that names the region and what must not change.

import os
import requests

key = os.environ["SUME_API_KEY"]
payload = {
    "model": "x-ai/grok-image",
    "prompt": "Change only the jacket on the person at left to dark green; leave the rest of the image untouched",
    "input_references": [
        {
            "type": "image_url",
            "image_url": {
                "url": "https://example.com/photo.png"
            }
        }
    ]
}
resp = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {key}"},
    json=payload,
    timeout=60,
)
if resp.status_code == 200:
    print([item["url"] for item in resp.json()["data"]])
elif resp.status_code == 202:
    print("still running:", resp.json()["data"]["status_url"])
else:
    print(resp.status_code, resp.text)

Limits

A prompt does not guarantee that nothing else moves. If an exact region matters, use openai/gpt-image-2.5 with a mask and compare the unchanged area pixel by pixel. Whether the Grok row accepts the reference count you want is in its input_references descriptor.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume