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.

5 min readSume
All posts

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

Brief inputs (read 2026-10-04)
QuestionRunway AgentSume Format run
Document typePDF onlyNo document attachment; text goes in input
Size limit20 MB per PDFinput: 2 MiB, up to 64 top-level keys
Scanned documentsSupportedYou run text extraction first
Images inside the documentAgent cannot extract them; upload them separatelyattachments: up to 30 images, 30 MB each, 500 MB per run
Where the brief landsIn the Agent's plan for the sessionA 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

All Comparisons posts

Written by Sume