Image generation models compared: three ids, two billing models
grok-imagine-image at $0.01 an image and grok-imagine-image-quality at $0.04 are 1× — no discount. gpt-image-2 is 0.1× but billed on tokens, not per image.
Two of the three carry no discount at all
This site describes its pricing as "as low as 0.05×, 0.1× for mainstream models". That is true of the text catalog and it is not true here. grok-imagine-image and grok-imagine-image-quality both carry a 1× multiplier: you pay the official rate, $0.01 and $0.04 per generated image respectively, with nothing taken off.
gpt-image-2 is the exception among the exceptions. It carries the usual 0.1× multiplier, but it is billed on the tokens the gateway reports rather than per image — official $5 per million input tokens and $30 per million output, so $0.50/M and $3.00/M as you are charged.
That means the three ids cannot be lined up in a single price column. Two have a fixed, known cost per picture. The third has a cost that moves with the size and quality you ask for, and the only way to learn what a given setting costs you is to generate one and read the usage back.
export TOKEN_SHARE_KEY="<your-pool-api-key>"
# Grok Imagine — priced per generated image, so n is the whole cost story.
curl -sS https://token-share.app/v1/images/generations \
-H "Authorization: Bearer $TOKEN_SHARE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-image",
"prompt": "A cute baby sea otter",
"aspect_ratio": "1:1",
"resolution": "1k",
"response_format": "url"
}' | jq '.data[].url'
# GPT Image 2 — priced on reported tokens, so size and quality move the bill.
curl -sS https://token-share.app/v1/images/generations \
-H "Authorization: Bearer $TOKEN_SHARE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A cute baby sea otter",
"size": "1024x1024",
"quality": "high",
"response_format": "b64_json"
}' | jq '.usage'What the 4× between the two Grok ids buys
grok-imagine-image and grok-imagine-image-quality are the same family at two price points: $0.01 and $0.04 per image, a 4× step. Both are 1×, both answer on /v1/images/generations, both take the same request shape.
The catalog describes the quality id as the higher-fidelity model for polished output, and that is as far as any table can take you. Whether the difference is visible on your prompts, at your resolution, for your use, is a judgement about images — not a number, and not something this page can rank for you.
The honest test is cheap and takes a minute: run the same twenty prompts through both ids and look at the results side by side. Twenty images is $0.20 on the base id and $0.80 on the quality id. At a thousand images a month the same decision is $10 against $40, which is when it starts being worth an opinion.
Per-image and per-token are different risks
A per-image price is predictable in the way a subscription is: 5,000 images on grok-imagine-image is $50 and on grok-imagine-image-quality is $200, and no request parameter changes that. You can budget the month before you run it.
gpt-image-2 trades that certainty for a lower multiplier. At 0.1× of $5/M input and $30/M output you are charged for whatever the gateway reports, which the catalog notes scales with resolution and quality. A batch job that quietly moves to a larger size raises the bill without changing the code that counts images.
If your workload is a fixed number of pictures a day, the two Grok ids let you multiply and stop. If it is variable in size and quality, measure a representative sample on gpt-image-2 first and extrapolate from the usage it reports rather than from an assumed cost per picture.
What these ids do not do
All three list the image capability and nothing else — no text, no tools, no thinking. They generate pictures; they are not models you hold a conversation with, and they do not appear in the context-window table because they are not billed on a context at all.
Video is a separate id with separate billing: grok-imagine-video-1.5 is 0.1× and charged per video second, on /openai/v1/videos rather than the images endpoint. Asking an image model for a clip does not work; the routes are different.
All three image ids sit behind the same OpenAI-shaped call — POST /v1/images/generations with Authorization: Bearer — so moving between them is a model-field change plus whatever parameter differences the two families have.