Super-Slow Motion
November 8, 2024
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.
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 token
is 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,
}
-
assetId
is 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. -
speed
required. Specify how much you want to slow down the original video.
Valid range from0.1
(ten times slower) to1
(original speed). -
duration
is 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. -
width
is 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. -
height
is 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. -
format
is optional. Specify desired output format.
Valid values:mp4
(default),prores
-
name
is optional. Specify desired output file name. -
replyUrl
is optional, if not provided value from account will be used.
Place here your callback URL. API will call the providedreplyUrl
once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like webhook.site to test callback URL functionality. -
replyRef
is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters. -
maxJobs
is 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
taskId
to retrieve task status and results using GET /tasks/taskId
. The generated videourl
can be found in theartifacts
array of the task with the statusSUCCEEDED
.If you specify the optional parameter
replyUrl
the API will call the providedreplyUrl
with 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, "features": { "storageGB": 500, "numPlanCredits_permitted": 2250, "numPlanCredits_used": 1315 }, "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
maxJobs
optional 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,
features: {
storageGB: number,
numPlanCredits_permitted: number,
numPlanCredits_used: number
},
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())