Scenario Grok Imagine Images
Overview
Grok Imagine, xAI's image family on Scenario, puts generation and editing in every member: the same model reads an empty referenceImages as text-to-image and a filled one as an edit, so the inputs pick the mode and the member picks the tier. Members ship side by side, agreeing on the prompt contract and disagreeing on knobs and price, so discover them with search and treat model_schema_get as the contract. The Grok Imagine video members belong to the scenario-grok-imagine-video skill.
Connection and the core loop: see the scenario skill; model-agnostic image work: the scenario-image skill. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.
Quick reference
At authoring time (caps are per member, read the live schema):
| Member | Aspect ratios | Notes |
|---|
| 2.0 | 14 values up to 20:9 and 9:20, default auto | adds quality (low, medium); strongest text and edits |
| Quality | same 14, default 1:1 | fast at 2k; price near flat across variants |
| Image | 10 values, 2:1 through 1:2 | cheapest per image |
The rest is shared: prompt up to 10000 characters, referenceImages capped at 3, numOutputs 1 to 10, resolution at 1k or 2k. No seed, mask, negative prompt, or pixel sizing exists anywhere in the family: size is ratio times resolution tier, and aspectRatio decides what is in frame, not just the crop. In editing mode aspectRatio is ignored entirely and the output follows the source's proportions. The price spread is why the older members stay live: one image on the unversioned member cost a fraction of a versioned run at authoring time, and 2.0's 2k text-to-image ran well over a minute where the others took seconds. So iterate cheap and fast (the unversioned member, or 2.0 at quality: "low" and 1k), spend a medium 2k run on keepers, and dry_run two members on the same job before a batch: numOutputs, quality, resolution, and references all move price.
Write the copy, not a vibe
The family's edge is legible in-image text: posters, packaging, infographics, memes. It only pays when the prompt carries the copy verbatim: wrap every literal string in quotes, give each a role ("the title reads ...", "a line beneath reads ..."), keep strings short, and close with "no other text", or the model invents extra labels. Real numbers and statistics go in as quoted copy too, since invented figures look plausible. Render small type at 2k and proofread in asset_display before building on the result. For the rest, write a short natural-language brief, subject, setting, composition, light, finish, in 30 to 80 words: quality adjectives ("8K", "masterpiece") are ignored and negatives mostly too, so state positives ("clean empty background", not "no clutter") and keep one aesthetic per prompt.
Edits are instructions, no mask exists
Editing is prompt-driven: pass up to three referenceImages and describe the change. Two habits keep it surgical: describe only what changes and name what stays ("keep the pose, background, and lighting unchanged"), and chain one edit per run instead of stacking several. With more than one reference, state each image's role (subject, style, scene) so the blend lands where intended. The output inherits the source's proportions, so reframe before the edit, never with aspectRatio.
Worked example: a branded label onto a product photo
search with target="models", query="grok imagine image", public=true. Prefer the newest non-deprecated hit, e.g. model_xai-grok-imagine-image-2-0 (a live hit at authoring time: re-discover each session).
model_schema_get with that id: the reference cap, quality and resolution values, and the ratio list before anything else.
upload_asset the product photo (see the scenario skill) to get its asset id.
model_run with that model_id, dry_run=true, and the exact parameters={"prompt": "Add a minimalist front label to the bottle where the title reads \"LUMEN\" in a clean white serif and a smaller line beneath reads \"Sparkling Citrus Soda\". Keep the bottle shape, glass tint, background, shadows, and lighting unchanged, no other text.", "referenceImages": ["asset_abc"], "quality": "medium", "resolution": "2k"}; re-estimate after any change to quality, resolution, numOutputs, or references.
- Repeat
model_run with wait=false, then jobs_wait with the returned job id, re-called with pending_job_ids on timeout, never a second model_run.
asset_display and proofread the label at full size, then asset_download the keeper.
Common mistakes
- Setting
aspectRatio on an edit: it is ignored and the output keeps the source's proportions; reframe the source first.
- Describing copy loosely ("a catchy tagline"): text comes back garbled or invented; quote exact strings and end with "no other text".
- Negative prompts: largely ignored; state the positive instead.
- A bare string where the schema says array: one reference still goes as
["asset_x"].
- Carrying
quality beyond 2.0: at authoring time no other member had the field; check the live schema before reusing parameters across members.
- Fine print at 1k: small type blurs; render text-heavy finals at 2k.