Super-Slow Motion
November 8, 2024 (March 21, 2025)
Table of contents
Super-Slow Motion uses the power of AI to generate and add new frames to your clips for a crisper, cleaner slow-motion effect on any video of your choosing. It automatically generate new frames to convert your low-frame rate footage into a smooth slow motion video.
Runway AI Tools » Video tools » Super-Slow Motion.
Official Super-Slow Motion guide.
This endpoint offers free & unlimited Super-Slow Motion generations. It is available to users with free accounts without any limitations. You can run as many parallel jobs as you want. Additionally, this endpoint can be used to export your mp4 videos to Apple’s ProRes 4444 format.
The account you use to upload asset(s) via POST /assets will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
https://api.useapi.net/v1/runwayml/super_slow_motion
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"assetId": "Required assetId of video asset",
"speed": 0.5,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
-
assetIdis required. Specify the video assetId. Use GET /assets/?mediaType=video to see the list of video assets. Use POST /assets to upload new video asset. -
speedrequired. Specify how much you want to slow down the original video.
Valid range from0.1(ten times slower) to1(original speed). -
durationis optional video duration in seconds, required if assetId does not contain duration information.
NOTE You can set the duration to 1000 if you do not know the actual value. The Runway API will be able to determine the actual value. -
widthis optional video width in pixels, required if assetId does not contain width information or if you want to upscale or donwscale original video. Please note that this endpoint does not actually perform upscaling. While you will get a higher resolution output, it is more akin to digital zoom rather than actual upscaling. -
heightis optional video height in pixels, required if assetId does not contain height information or if you want to upscale or donwscale original video. Please note that this endpoint does not actually perform upscaling. While you will get a higher resolution output, it is more akin to digital zoom rather than actual upscaling. -
formatis optional. Specify desired output format.
Valid values:mp4(default),prores -
nameis optional. Specify desired output file name. -
replyUrlis optional, if not provided value from useapi.net account will be used.
Place here your callback URL. API will call the providedreplyUrlonce Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like webhook.site to test callback URL functionality. -
replyRefis optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters. -
maxJobsis optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
NOTE There’s no limit to how many parallel jobs this endpoint can execute, but we still recommend keeping it to a maximum of 10 jobs.
Responses
-
Use returned
taskIdto retrieve task status and results using GET /tasks/taskId. The generated videourlcan be found in theartifactsarray of the task with the statusSUCCEEDED.If you specify the optional parameter
replyUrlthe API will call the providedreplyUrlwith task progress updates until the task is complete or fails.{ "taskId": "user:user_id-runwayml:account_email-task:task_uuid", "id": "<uuid>", "name": "<name>", "image": null, "createdAt": "2024-08-01T01:02:03.456Z", "updatedAt": "2024-08-01T01:02:03.456Z", "taskType": "bake_stream", "options": { "name": "<name>", "ignoreAudioStreamFailure": true, "videoStreamDescription": { "model_name": "rife", "command_name": "slow_motion", "inputs": { "video": "<video asset url>", "factor": 2 }, "output_width": 768, "output_height": 1280 }, "videoStart": 0, "videoEnd": 20, "formatOptions": { "format": "mp4" }, "audioStreamDescription": { "model_name": "raw_audio", "command_name": "time_stretch", "inputs": { "audio": "<video asset url>", "factor": 2 } }, "audioStart": 0, "audioEnd": 20 }, "status": "PENDING", "error": null, "progressText": null, "progressRatio": null, "estimatedTimeToStartSeconds": 0, "artifacts": [], "sharedAsset": null, "replyUrl": "https://webhook.site/abc", "replyRef": "<your optional reference id>", "code": 200 } -
{ "error": "<Error message>", "code": 400 } -
{ "error": "Unauthorized", "code": 401 } -
{ "error": "Unable to retrieve assetId <uuid> (Not found.)", "code": 404 } -
Wait in a loop for at least 10..30 seconds and retry again.
There are two possible cases for API response 429:
- API query is full and can not accept new super_slow_motion requests. Size of query defined by
maxJobsoptional parameter.
{ "error": "Account <Runway account email> is busy executing <Account maxJobs> tasks", "runningTasks": { "<Runway account email>": [ { "email": "<Runway account email>", "taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid", "id": "<uuid>", "replyUrl": "<replyUrl if provided>", "replyRef": "<replyRef if provided>" }, { "email": "<Runway account email>", "taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid", "id": "<uuid>", "replyUrl": "<replyUrl if provided>", "replyRef": "<replyRef if provided>" } ] }, "code": 429 }- The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
{ "error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more." } - API query is full and can not accept new super_slow_motion requests. Size of query defined by
Model
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: any,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
ignoreAudioStreamFailure: boolean,
videoStreamDescription: {
model_name: 'rife',
command_name: 'slow_motion',
inputs: {
video: string,
factor: number
},
output_width: number,
output_height: number
},
videoStart: number,
videoEnd: number,
formatOptions: {
format: string,
profile?: string
},
audioStreamDescription: {
model_name: 'raw_audio',
command_name: 'time_stretch',
inputs: {
audio: string,
factor: number
}
},
audioStart: number,
audioEnd: number
},
status: string,
progressText: any,
progressRatio: any,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
Examples
-
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v1/runwayml/super_slow_motion" \ -d '{"assetId": "…", "speed": 0.5 }' -
const assetId = "assetId of video asset"; const speed = 0.5; const apiUrl = `https://api.useapi.net/v1/runwayml/super_slow_motion`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ assetId, speed }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); -
import requests assetId = "assetId of video asset" speed = 0.5 apiUrl = f"https://api.useapi.net/v1/runwayml/super_slow_motion" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "assetId": f"{assetId}", "speed": speed } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json())