Reel at 181 seconds: Timeline bills four minutes, keep it at 180
One second over 180 turns a $0.30 Timeline render into $0.40 and a Reel that may not fit. How the ceil(minute) rule works and how to cap it with the plan call.

A 181-second Reel render bills as four Timeline minutes, $0.40, while 180 seconds bills as three, $0.30. The rule is ceil(output minute) at $0.10 per minute, so the cost steps up at every full minute boundary, not per second. For Reels the more important problem is the length itself: Metricool (read 2026-10-03) reports that Instagram's 2026 Reels guide covers lengths up to 3 minutes, so 181 seconds is also past the range that guide describes.
Where the extra second comes from
Timeline output length is audio.duration_seconds. If you set it from a voice file, a voice that runs 180.4 seconds gives a 180.4-second render, which still bills four minutes because 180.4 divided by 60 rounds up to 4. Fades and soundtrack tails are inside that length, since fade_out_seconds and the soundtrack fade must fit within the spine, so adding an outro fade does not extend the render. Adding a final slot after the spine does, if you also lengthen the spine to match.
Plan first, render second
POST /v1/timeline-1.0/plan is unbilled, needs no Idempotency-Key, and does not download media. It returns duration_seconds, segment_count, billable_minutes and estimated_cost_usd_micros, which is enough to stop a 181-second job before it is created. A plan cannot predict warnings about padded or looped short sources.
import os, sys, requests
body = {
"audio": {"mode": "silence", "duration_seconds": 181},
"video": [{
"source_url": "https://media.sume.com/artifacts/artf_demo/a.mp4",
"start": 0,
"duration": 181,
}],
}
r = requests.post(
"https://api.sume.com/v1/timeline-1.0/plan",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
json=body,
)
r.raise_for_status()
plan = r.json()
print(plan["billable_minutes"], plan["estimated_cost_usd_micros"])
if plan["duration_seconds"] > 180:
sys.exit("over 180 s: trim the last slot before rendering")Fixing an over-long cut
Shorten the spine rather than the pictures: lower audio.duration_seconds to 180 and set audio.source_in if you need to drop the first moments of a single voice file. Slot coverage may trail the spine by at most 0.5 seconds, so a last slot that ends at 180 is valid. If the voice itself is too long, re-record or regenerate that segment slightly faster, or trim a pause, rather than cutting words from the middle of a take.
What Sume does not do
The plan call does not stop you from rendering past 3 minutes, and Sume does not read Instagram's limit for your account. The plan call is the guard you build yourself, as in the snippet above, and the cost table for the other lengths is in how long a Reel can be.
Sources
Related posts
More in Pricing
- Clip reject rate: what 25% and 50% rejects add to 40 kept clips
40 kept 8-second clips cost $40.00 on Wan 3.0 at 720p with no rejects, $53.33 at 25% rejected and $80.00 at 50%. Four models priced in one table.
- Retell AI pricing per minute: $0.07 to $0.31, line by line
Retell lists $0.055 for voice infrastructure, $0.015 for most TTS, an LLM line and $0.015 telephony. Add them up, and see how Sume's TTS price compares.
- Runway credit price by plan: $0.024 on Standard to $0.008 on Max
A Runway credit costs $0.024 on Standard monthly, $0.0192 annual and $0.008 on Max annual, against $0.01 through the API. Gen-4.5 per second follows.
- Season budget ceiling: spend cap per episode times the queue size
Cap each Sume bulk item with generation_spend_cap_usd and the queue has a hard ceiling: cap times items, with concurrency limiting what is exposed at once.
Written by Sume