Super-Slow Motion

November 8, 2024

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

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
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 from 0.1 (ten times slower) to 1 (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 provided replyUrl 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
  • 200 OK

    Use returned taskId to retrieve task status and results using GET /tasks/taskId. The generated video url can be found in the artifacts array of the task with the status SUCCEEDED.

    If you specify the optional parameter replyUrl the API will call the provided replyUrl 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
    }
    
  • 400 Bad Request

    {
      "error": "<Error message>",
      "code": 400
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized",
      "code": 401
    }
    
  • 404 Not Found

    {
        "error": "Unable to retrieve assetId <uuid> (Not found.)",
        "code": 404
    }
    
  • 429 Too Many Requests

    Wait in a loop for at least 10..30 seconds and retry again.

    There are two possible cases for API response 429:

    {
        "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."
    }
    
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())
    
Try It