Runway Agent long videos in Final Cut vs a Sume run deadline
Runway Agent has no hard length limit and joins clips in Final Cut. A Sume Format run has a 90-minute deadline. How to plan a long video on each.

Runway Agent has no hard duration limit: a video longer than the chosen model's limit generates as separate clips, which Agent joins in the Final Cut tab. A Sume Format run is one unattended agent turn with a deadline, expires_at, set 90 minutes after created_at. For long video on Sume, plan scenes inside that window and retry only the scene that failed with previous_run_id.
Length and time limits
| Question | Runway Agent | Sume Format run |
|---|---|---|
| Maximum length | No hard limit; split into clips | Set by the recipe; the run must finish before expires_at |
| Where clips are joined | Final Cut, automatically | Inside the run, by the recipe's timeline step |
| Time ceiling | Not stated on the page I read | 90 minutes from created_at, or sooner if older than 25 minutes and silent for 10 |
| Typical long-form time | Not stated | 15 to 30 minutes of work for long-form host video, per the docs |
| Resolution | 480p, 720p or 1080p; upscale to 4K afterwards | Chosen by the models the recipe calls |
Runway's cost habit
Runway's page suggests iterating at 720p to save credits, then upscaling the final version to 4K with the Upscale Video app. It also says very long conversations may see degraded performance and recommends a new session when you switch projects.
Use expires_at as your ceiling
On Sume, a non-terminal receipt carries the deadline after which the run is force-finalized as failed. Set your own timeout from it instead of inventing one, and back off while you wait: double the gap up to a minute. A 429 or 503 during polling is transient because the run keeps executing.
import json, os, sys, time, urllib.request
def get_run(run_id: str) -> dict:
req = urllib.request.Request(
f"https://api.sume.com/v1/format-runs/{run_id}",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
)
with urllib.request.urlopen(req) as resp:
return json.load(resp)["data"]
def wait(run_id: str) -> dict:
delay = 5
while True:
run = get_run(run_id)
if run["status"] not in ("queued", "processing"):
return run
print("waiting; deadline", run.get("expires_at"))
time.sleep(delay)
delay = min(delay * 2, 60)
if __name__ == "__main__":
done = wait(sys.argv[1])
print(done["status"], done.get("primary_output_url"))Retry one scene, not the show
If one scene is wrong, send previous_run_id on a new run with an instruction that names only that scene. A continuation is a new run with its own cap and receipt; the original never changes, and artifacts[] lists everything the thread generated while usage stays per run.
Sources
Related posts
More in Comparisons
- Runway Agent message credits: Opus 5.5, GPT-6 Astra, and Sume
Runway charges 24 credits per message on Opus 5.5 and 40 on GPT-6 Astra. Sume lets a run pick its orchestrator with one model field. The math and the gap.
- Runway Agent reads PDF briefs; what a Sume Format run accepts
Runway Agent takes PDFs up to 20 MB. A Sume Format run takes images as attachments and everything else as JSON input. How to send a brief, with a size check.
- Runway Agent skills vs a saved Sume Format you call by API
A Runway Agent skill is saved instructions you trigger with / in a chat. A Sume Format is a saved recipe your backend calls by handle and slug. Which fits when.
- Runway Agent UGC and Commercial skills vs Sume catalog Formats
Runway's UGC Video and Commercial skills run in an Agent chat. Sume's sume-close-camera-ugc and sume-product-commercial Formats are called by slug from code.
Written by Sume