Multi-Shot Video
The Multi-Shot Video recipe generates videos composed of multiple shots that cut between scenes, reusing Runway’s multi-shot workflow. Use it when a single continuous take isn’t enough — product narratives, brand spots, and sequences that need variety and pacing.
How it works
Section titled “How it works”Choose a mode. In auto mode, you provide a single story prompt and the recipe decomposes it into a set of shots for you. In custom mode, you provide your own shot list of 3–5 shots and the recipe polishes and assembles them. Either way, the recipe returns a task id you poll for the finished output.
Inputs
Section titled “Inputs”| Input | Required | Description |
|---|---|---|
mode | Yes | auto decomposes a story prompt into shots; custom polishes a shot list you provide. |
version | Yes | Workflow version. Use a dated version like 2026-06 to pin behavior, or unsafe-latest to track the newest stable version. |
prompt | auto only | Story prompt to decompose into shots (max 2500 characters). |
shots | custom only | An ordered list of 3–5 shots, each with a prompt (3–512 characters) and a duration in seconds. Per-shot durations must sum to duration. |
firstFrame | No | Optional image used as the first frame of the output video, as { uri }. |
ratio | No | Output dimensions. 720p ratios (1280:720, 720:1280, 960:960) use the standard tier; 1080p ratios (1920:1080, 1080:1920, 1440:1440) use the pro tier. Defaults to 1280:720. |
duration | No | Total output length in seconds: 5, 10, or 15. Defaults to 10. |
audio | No | Whether to generate audio. Defaults to true. |
Example
Section titled “Example”Auto mode decomposes a single story prompt into shots:
import RunwayML from '@runwayml/sdk';
const client = new RunwayML();
const task = await client.recipes.multiShotVideo({ version: '2026-06', mode: 'auto', prompt: 'A lone astronaut discovers a glowing forest on a distant planet', duration: 10, ratio: '1280:720',});
console.log(task);from runwayml import RunwayML
client = RunwayML()
task = client.recipes.multi_shot_video( version='2026-06', mode='auto', prompt='A lone astronaut discovers a glowing forest on a distant planet', duration=10, ratio='1280:720',)
print(task)curl -X POST https://api.dev.runwayml.com/v1/recipes/multi_shot_video \ -d '{ "version": "2026-06", "mode": "auto", "prompt": "A lone astronaut discovers a glowing forest on a distant planet", "duration": 10, "ratio": "1280:720" }' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $RUNWAYML_API_SECRET" \ -H "X-Runway-Version: 2024-11-06"Custom mode polishes and assembles a shot list you provide. Per-shot durations must sum to duration:
import RunwayML from '@runwayml/sdk';
const client = new RunwayML();
const task = await client.recipes.multiShotVideo({ version: '2026-06', mode: 'custom', duration: 10, ratio: '1280:720', shots: [ { prompt: 'Wide establishing shot of the product on a kitchen counter at sunrise', duration: 3 }, { prompt: 'Close-up of a hand picking up the product', duration: 3 }, { prompt: 'Product hero shot rotating against a clean background', duration: 4 }, ],});
console.log(task);from runwayml import RunwayML
client = RunwayML()
task = client.recipes.multi_shot_video( version='2026-06', mode='custom', duration=10, ratio='1280:720', shots=[ {'prompt': 'Wide establishing shot of the product on a kitchen counter at sunrise', 'duration': 3}, {'prompt': 'Close-up of a hand picking up the product', 'duration': 3}, {'prompt': 'Product hero shot rotating against a clean background', 'duration': 4}, ],)
print(task)curl -X POST https://api.dev.runwayml.com/v1/recipes/multi_shot_video \ -d '{ "version": "2026-06", "mode": "custom", "duration": 10, "ratio": "1280:720", "shots": [ { "prompt": "Wide establishing shot of the product on a kitchen counter at sunrise", "duration": 3 }, { "prompt": "Close-up of a hand picking up the product", "duration": 3 }, { "prompt": "Product hero shot rotating against a clean background", "duration": 4 } ] }' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $RUNWAYML_API_SECRET" \ -H "X-Runway-Version: 2024-11-06"The recipe returns a task id. Poll GET /v1/tasks/{id} for status and the output video URL — see Using the API for the task workflow.
Tips for best results
Section titled “Tips for best results”- Write one clear idea per shot — keep each shot’s prompt focused on a single scene.
- In custom mode, order shots the way you want them to play; the recipe preserves sequence.
- In custom mode, make sure each shot’s
durationadds up to the totalduration. - Reuse the same product or style language across shots for visual consistency.
- See Reference media guidelines for more.