Omni draft grid: four 360p variants, then one final. What it costs
Google's Draft Room idea, run through the Sume API: four 8-second 360p drafts that change one thing each, then a 1080p final. Total $2.70, with a script.

A four-draft grid on Gemini Omni Flash 1.1 costs $1.20 at 360p for 8-second clips, and one 1080p final adds $1.50, so the whole pass is $2.70 on Sume. The method comes from Google's launch post, which suggests generating three or four 360p drafts, changing one variable at a time, then upscaling the best.
The grid
One base prompt, four variants, each differing by a single clause. If two things change between drafts you cannot tell which one caused the difference.
| Pass | Resolution | Per second | Clips | Total |
|---|---|---|---|---|
| Drafts | 360p | $0.0375 | 4 | $1.20 |
| Final | 1080p | $0.1875 | 1 | $1.50 |
| Pass total | $2.70 |
Script
The loop below sends four async requests concurrently, each with its own Idempotency-Key. Reusing one key across different bodies would collide, so the key carries the variant name. Re-running the script with the same keys returns the same jobs instead of billing new ones.
import asyncio, json, os, urllib.request
def submit(prompt, key):
req = urllib.request.Request(
"https://api.sume.com/v1/video-router/generate",
data=json.dumps({"model": "gemini-omni-flash-1.1", "prompt": prompt,
"duration": 8, "resolution": "360p", "mode": "async"}).encode(),
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json", "Idempotency-Key": key})
with urllib.request.urlopen(req) as resp:
return json.load(resp)
BASE = "A ceramic mug on a wooden table, steam rising, slow push-in. "
VARIANTS = {
"light-warm": "Warm morning window light.",
"light-cool": "Cool overcast daylight.",
"angle-low": "Low camera angle.",
"angle-top": "Top-down camera angle.",
}
async def main():
jobs = await asyncio.gather(*[
asyncio.to_thread(submit, BASE + text, "draft-grid-" + name)
for name, text in VARIANTS.items()])
print(json.dumps(jobs, indent=2))
asyncio.run(main())Why not just run four finals
Four 8-second finals at 1080p would cost $6.00, against $1.20 for four drafts. The grid keeps the choice cheap and puts the money in the one clip you will ship. If none of the four drafts is right, the miss cost $1.20, not $6.00, and the next grid can start from what you learned.
Keep a record of each key, prompt and result. When a client picks the second draft two days later, you want to rerun that exact prompt rather than reconstruct it.
What to vary
Pick the variable that matters most to the final and hold the rest.
- Lighting: warm or cool, window or overhead.
- Camera: low, eye level, top-down.
- Movement: push-in, static, orbit.
- Subject detail: the one prop you are unsure about.
Reading the drafts
Judge drafts on what survives upscaling: composition, motion direction and subject placement. Fine texture and small text will not tell you much at 360p. Watch with the sound on as well, because audio is generated with the clip and cannot be switched off on this model, so a draft with an odd sound bed will have one at 1080p too.
Four is a ceiling, not a target. If the first two variants answer the question, stop; each extra draft is another $0.30. Write the winning variant's clause into the base prompt before the final, so the final does not depend on a draft you no longer have.
Choosing and finishing
Google says 360p previews generate up to 60 percent faster and at a third of the cost of 720p, and that you can upscale a chosen draft. Sume's catalog exposes resolutions as a request field, so the practical route is to repeat the winning prompt at 1080p, which is a new request, not a re-render of the draft. Expect the final to resemble the draft rather than match it frame for frame.
For longer pieces, the six-shot storyboard pass applies the same idea to a sequence, and the 360p draft note lists the rates per tier.
Sources
Related posts
More in Developers
- One Sume webhook signature, three languages: a shared test vector
A fixed secret, timestamp and body that must sign to the same sume-v1 value in Python, Node and Go. Use it to test a verifier in any language you add.
- Agents SDK cache_tools_list: stale tools after you grant Sume Write
With cache_tools_list on, an OpenAI Agents SDK MCP server can keep an old tool list. After a Sume Write grant, call invalidate_tools_cache() to see paid tools.
- OpenAI gave six months' notice on Sora: dates and a checklist
OpenAI told developers on 2026-03-24 that the Videos API and Sora 2 ids go on 2026-09-24, with no replacement listed. Six ids and a checklist.
- X-OpenRouter-Idempotency-Key vs Sume webhook dedupe on job_id
OpenRouter's webhook dedupe key is job_id plus status. Sume says dedupe on job_id. A SQLite sample builds a job_id plus event key that skips replays.
Written by Sume