Runway Ad Localization in 20 languages vs a Sume bulk run
Runway Ad Localization turns one ad image into one language at up to 21 credits. A Sume bulk queue runs one Format per language, 1 to 100 items at a time.

Runway's Ad Localization app takes one ad image and one target language and returns a localized image that keeps the layout, at up to 21 credits per generation, with 20 supported languages listed. At the 21-credit ceiling, 19 languages from an English source is 19 x 21 = 399 credits, and all 20 would be 420. On Sume you build the same set as a bulk queue: one run per language, each with the ad image attached and the language named in the instruction.
What the Runway app does
| Spec | Value |
|---|---|
| Input | One image: ad, poster or campaign creative |
| Output | Localized image matching the input aspect ratio |
| Languages | Arabic, Chinese (Simplified), Chinese (Traditional), Dutch, English, French, German, Hindi, Indonesian, Italian, Japanese, Korean, Portuguese, Russian, Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese |
| Credit cost | Up to 21 credits per generation |
| Review advice | Have a native speaker check copy where nuance matters |
The Sume version
A bulk request is a server-side queue of ordinary Format runs. The envelope has two keys: concurrency, an integer from 1 to 16, and items, 1 to 100 entries, each the same body as a single run. Each item can carry its own attachments, instruction and webhook. Mint a fresh Idempotency-Key per batch, because replaying a spent key returns the old queue.
The script below builds 19 items for a Format you own, here called acme/ad-localize, and prints the body size. It sends nothing.
import json
LANGS = ["Arabic", "Chinese (Simplified)", "Chinese (Traditional)", "Dutch", "French",
"German", "Hindi", "Indonesian", "Italian", "Japanese", "Korean", "Portuguese",
"Russian", "Spanish", "Swedish", "Thai", "Turkish", "Ukrainian", "Vietnamese"]
AD = "https://cdn.example.com/ads/spring.png"
items = [
{
"instruction": f"Translate all visible text to {lang}. Keep layout and style.",
"attachments": [{"type": "input_image", "image_url": AD}],
"generation_spend_cap_usd": 3,
}
for lang in LANGS
]
body = {"concurrency": 4, "items": items}
assert 1 <= len(items) <= 100
print(len(items), "items;", len(json.dumps(body)), "bytes")
# POST to /v1/formats/acme/ad-localize/bulk-runs with an Idempotency-Key header.Read the queue honestly
The queue status completed means every item is terminal, not that all succeeded: branch on counts.failed. The queue has no webhook, so poll GET /v1/format-run-queues/{id} or register a webhook per item.
Before you scale a batch
Run one item first and read the receipt, including usage and the spend cap, then queue the rest. A bulk queue is complete when every item is terminal, so check counts.failed rather than assuming success.
Sources
Related posts
More in Comparisons
- Runway Agent 'Ask before generating' vs a Sume spend cap
Runway Agent can pause for approval before each generation. A Sume API run has nobody to click approve, so the control is a per-run spend cap. How each works.
- Runway Agent Brand Kits from a PDF vs Sume Format package files
Runway Enterprise Brand Kits can be built from PDF text. Sume keeps brand rules as files in a Format package, edited by the Contents API.
- Runway Agent custom preferences vs a Sume run instruction
Runway's custom generation preferences are guidance Agent weighs, not rules. On a Sume run the instruction is composed after the Format and wins on conflicts.
- Runway Agent long sessions vs Sume previous_run_id continuation
Runway says very long Agent sessions may degrade; start fresh per project. Sume continues a Format run with previous_run_id; Agent Completions cannot.
Written by Sume