200 product videos in Sume: two queues of 100, 6 to 12 hours

Bulk-run 200 product videos: two queues of 100 items, 8 runs in flight, 25 rounds. At 15 to 30 minutes a run that is about 6.25 to 12.5 hours.

3 min readSume
All posts

The plan

A Sume bulk request holds 1 to 100 items, so 200 product videos need two queues. Each item is an ordinary Format run, with its own instruction, input and optional output_schema. concurrency is an integer from 1 to 16 and sets how many child runs stay in flight inside that queue.

Send each queue with POST /v1/formats/{handle}/{slug}/bulk-runs, a fresh Idempotency-Key per queue, and a key that carries formats:write. Poll GET /v1/format-run-queues/{queue_id} with formats:read. The queue itself has no webhook, so put communication.webhook_url on each item if you want one signed event per video.

How long it takes

The Format docs say long-form video usually takes 15 to 30 minutes of work per run. The arithmetic below is a best case, because it assumes every slot is full and the workspace's own generation concurrency does not cut the window. Rounds are 200 divided by runs in flight, rounded up.

Wall-clock estimate for 200 runs of 15 to 30 minutes each; arithmetic from docs figures, read 2026-10-08
Runs in flight (both queues)RoundsAt 15 min per runAt 30 min per run
4 (2 queues x 2)50750 min = 12 h 30 min1500 min = 25 h
8 (2 queues x 4)25375 min = 6 h 15 min750 min = 12 h 30 min
16 (2 queues x 8)13195 min = 3 h 15 min390 min = 6 h 30 min
32 (2 queues x 16)7105 min = 1 h 45 min210 min = 3 h 30 min

What can stop the window being full

Child runs still go through ordinary admission: wallet, workspace generation concurrency and spend caps. If the workspace allows fewer concurrent generations than you asked for, the queue does not run faster than that. Start at 8 and read counts before you raise it.

Also decide what a ceiling looks like before you start. Every Format has a spend cap, and a Format that never named one reports $400. A run can never spend more than its effective cap, but 200 items at a $400 cap is a theoretical ceiling of $80,000, and at a $120 cap it is $24,000. Those are ceilings, not forecasts. Set generation_spend_cap_usd per item to what one video should cost.

Run it and read it

Create both queues, then poll each queue with exponential backoff. A one-second poll gives you nothing on 15-minute work and spends read budget. Queue status becomes completed when every item is terminal, which is not the same as all succeeded. Branch on counts.failed and counts.canceled.

For each failed item, error is only the generic format_run_failed. Read the child receipt at GET /v1/format-runs/{run_id} for the real reason, then resubmit just those rows in a new queue with a new key. Replaying a spent key returns 202 with the old queue.

  • Two create calls cost two write requests. Even the Free plan's 120 writes a minute is far more than this needs.
  • Cancel a child with POST /v1/format-runs/{run_id}/cancel; there is no queue-level cancel.
  • A bad item fails the whole create with 400 and details.index before any queue exists.

Sources

Related posts

More in Formats

All Formats posts

Written by Sume