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 reads PDFs you upload, text-based or scanned, up to 20 MB each, and draws tone, references and specs from them. Sume's Format API does not take a PDF as an attachment: the only attachment type is input_image, so extract the brief's text yourself and send it in the input object, which holds up to 2 MiB. Images inside a PDF have to be sent separately on both products.
What each side accepts
| Question | Runway Agent | Sume Format run |
|---|---|---|
| Document type | PDF only | No document attachment; text goes in input |
| Size limit | 20 MB per PDF | input: 2 MiB, up to 64 top-level keys |
| Scanned documents | Supported | You run text extraction first |
| Images inside the document | Agent cannot extract them; upload them separately | attachments: up to 30 images, 30 MB each, 500 MB per run |
| Where the brief lands | In the Agent's plan for the session | A file the agent reads as data, not as instructions |
Do not paste the brief into instruction
The instruction field accepts 8000 characters, but only about the first 4000 are carried to the run as prompt text. The input object is written whole to a file in the run's workspace, so a long brief belongs there. The docs also describe input as the trust boundary for text you did not write, such as scraped copy, because the agent is told it is data.
Send the text and check the size first
This script builds the body, measures input the way the API counts it (compact serialization, UTF-8 bytes) and refuses to send anything over the cap. Replace the brief string with your extracted text.
import json
MAX_INPUT_BYTES = 2 * 1024 * 1024
brief = "Audience: first-time buyers.\nTone: warm, direct.\nKey claim: ships in 2 days."
body = {
"instruction": "Vertical 9:16 teaser that follows the brief in input.brief_text.",
"input": {"brief_text": brief, "brand": "Acme"},
"generation_spend_cap_usd": 25,
}
size = len(json.dumps(body["input"], separators=(",", ":")).encode("utf-8"))
if size > MAX_INPUT_BYTES:
raise SystemExit(f"input is {size} bytes; the cap is {MAX_INPUT_BYTES}")
print(f"input is {size} bytes, within the cap")What to do with the images
Pull the pictures out of the PDF yourself and send them as attachments with type input_image and a public HTTPS image_url, or an asset_id from the Assets API. Sume fetches each one at create time and fails the call early if one is unreachable, so a broken link never costs you a run.
Sources
Related posts
More in Comparisons
- 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.
- Runway API credit rates for a 10-second clip, next to Sume's rows
At $0.01 per credit, Runway's API lists gen4.5 at $1.20 for 10 seconds and Veo 3.1 at $4.00. Sume rows: Wan 720p $1.25, H3 Max 768p $1.00. Not like for like.
- Runway enterprise exception requests vs Sume's queue-first admission
Runway's docs mention enterprise exception requests for higher volume. Sume takes extra jobs as queued and sets concurrency by plan. How to plan a big batch.
Written by Sume