Split a 181-second Reel into valid AI video jobs (even split)
Greedy 30-second jobs leave a 1-second tail no model accepts. An even split gives 7 Seedance 2.5 jobs or 19 Omni jobs. Python planner and prices at 720p.

A Reel can now run to 3 minutes, as NapoleonCat reports, and a 181-second cut is one second too long. The trap when you plan the jobs is the tail: six jobs of 30 seconds leave 1 second, and no video model on Sume takes 1 second (Wan 3.0 starts at 2). The fix is to pick the job count first and divide evenly.
The planner
Count jobs as ceil(total / max_seconds), then spread the seconds so each job is as close to equal as possible. Run it for your model's min and max.
def split(total, lo, hi):
n = -(-total // hi)
base, extra = divmod(total, n)
lens = [base + 1] * extra + [base] * (n - extra)
assert all(lo <= x <= hi for x in lens), lens
return lens
for name, lo, hi in [("seedance-2.5", 4, 30), ("wan-3.0", 2, 30),
("sume/auto", 3, 10), ("kling-3", 4, 15)]:
lens = split(181, lo, hi)
print(name, len(lens), lens)Jobs and cost for 181 seconds at 720p
The limits come from the video catalog: Seedance 2.5 and Wan 3.0 reach 30 seconds, sume/auto (Gemini Omni Flash) takes 3 to 10, Kling 3 takes 4 to 15. Prices are the 720p per-second rates times the job lengths.
| Model | Jobs | Lengths | Total |
|---|---|---|---|
| seedance-2.5 | 7 | six x 26 s, one x 25 s | $104.58 |
| wan-3.0 | 7 | six x 26 s, one x 25 s | $22.63 |
| sume/auto (Omni) | 19 | ten x 10 s, nine x 9 s | $22.63 |
| kling-3 (audio on) | 13 | twelve x 14 s, one x 13 s | $38.01 |
Then join them
Past 12 clips the final Timeline join auto-chunks, and a forced single render is refused above 12, which matters for the 19-job Omni plan. See the render_strategy post for the details. Totals exclude the Timeline render (3 minutes of output is $0.30, 181 seconds is $0.40).
Sources
Related posts
More in Developers
- Spot-check burned-in captions with video frames at STT word times
Check captions on a rendered video by pulling stills at word midpoints from a Sume STT result with POST /v1/video-frames, then compare text to speech.
- SQLite: add a sume_job_id column to rows that used sora-2 snapshots
OpenAI removed the Videos API and every sora-2 snapshot on Sept 24, 2026. A migration that tags old rows, then re-renders each once through Sume.
- SQLite ledger for Sume bulk queues: SKU to run id and what to retry
Record each bulk queue item by index in SQLite, keep the SKU you sent, and query the SKUs that failed or were canceled and never completed in a later queue.
- Start a Sume render from a serverless function: submit, save, 202
A function must not wait for a video. Submit with mode webhook and a stable Idempotency-Key, save the status URL, return 202, and let the signed webhook finish.
Written by Sume