BlockRun
Back to Signal
Aug 2026

Grok Imagine Video 1.5: Resolution Is the Price

Three video frames of increasing size on a horizontal axis, with dots of increasing size beneath each, illustrating resolution tiers as price tiers

xai/grok-imagine-video-1.5 is live on BlockRun, on Base and Solana both. It is xAI's current flagship video model, and at the time of writing it sits first on the Image-to-Video Arena leaderboard.

It bills per second of output, by resolution:

ResolutionRate8-second clip
480p (default)$0.08 / sec$0.641
720p$0.14 / sec$1.121
1080p$0.25 / sec$2.001

Those are xAI's published rates, and we charge them exactly — no percentage on top. The stray tenth of a cent is a flat per-generation fee, and it is the same tenth of a cent whether the clip is 1 second or 15.

Resolution is not a quality knob here

On a token-metered model like Seedance, resolution changes how many tokens the clip costs, and the price falls out of the meter. On Grok Imagine it is simpler and stricter: the resolution you ask for is the price tier you are billed at, before a single frame is generated.

That makes an off-tier request a billing problem rather than a rendering one. If you ask for a resolution the model cannot produce, there are only bad options: quote you the nearest tier and let the upstream reject the job after you have paid, or quote you nothing and fail late. So the request dies at the gate, before the 402 is ever issued, and you are not charged.

The gate has to be per-model, not per-vendor

This is the part worth writing down, because we got it wrong first and the mistake is instructive.

Both Grok Imagine video models come from the same vendor, take the same parameters, and submit over the same path. The obvious implementation is one allowed-resolution list for the vendor. That list was 480p, 720p, which was correct for exactly as long as one model existed.

Grok Imagine Video 1.5 renders a real 1080p. The older xai/grok-imagine-video does not. A vendor-level list is wrong in both directions, and both directions cost someone money:

  • Too narrow, and you reject 1080p on a model that can serve it — refusing a sale while your own price card advertises the tier.
  • Too wide, and you accept a tier the model cannot render, bill the caller for it, and eat the upstream rejection after payment.

The valid set is now derived per model from the same price table the quote comes from. One consequence is worth stating plainly: the rejection message quotes rates read from that table, so the error you get can never contradict the price you would have been charged. They are the same number, read once.

What we measured, rather than read

Provider catalogs describe intent. We bill on behavior, so the numbers above are backed by a live render rather than a spec sheet:

  • A 1-second 480p clip came back as 848×480 — a real 480p, not an upscale of something cheaper.
  • It carried an AAC audio track. Audio is native and arrives in the same pass; there is no flag to set and no surcharge to pay.
  • The upstream billed us $0.08 for it — the same $0.08 we charge per second.

That last line is why the flat fee exists. There is no volume discount hiding behind our per-second rate: we pay list and we charge list, so the per-second leg nets exactly nothing. The tenth of a cent per generation is the entire spread on this model.

We could have buried it by quoting $0.0801/sec and calling it a rate. We would rather publish a rate that is verifiably xAI's and put our margin on its own line, where you can see it and where it does not quietly grow with the length of your clip.

Calling it

Same async contract as every video model on BlockRun — POST returns a job and a poll URL, and settlement happens on the first poll that observes a completed job. A failed generation costs you nothing.

curl -X POST https://blockrun.ai/api/v1/videos/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "xai/grok-imagine-video-1.5",
    "prompt": "a paper crane unfolding on a wooden desk, morning light",
    "duration_seconds": 8,
    "resolution": "1080p"
  }'

Omit resolution and you get 480p, billed and rendered — the default is the cheap tier on purpose, and it is the tier we send upstream, so what you paid for is what gets made. Add an image_url to seed the first frame. Durations run 1 to 15 seconds.

aspect_ratio takes 16:9, 9:16, 1:1, 4:3, 3:4, 3:2 or 2:3, and it is worth passing explicitly if you want vertical. Every parameter that changes what gets rendered is forwarded and validated before the 402 — a parameter quietly accepted and then dropped is the same bug as a wrong price, because you paid for something you did not get.

No API key. Pay per clip in USDC.