Skip to main content
megvii-research avatar

RIFE Video Interpolation API

megvii-research/rife/video

Interpolate new in-between frames to boost a video's frame rate and produce smooth slow-motion.

A4000,RTX4000
0.0032365

Model Input

Input

URL of the video whose frame rate to interpolate.

Min: 1 - Max: 4

Number of intermediate frames to generate between each pair of input frames (1-4). Higher values yield a higher output frame rate and smoother slow-motion.

Additional Settings

Customize your input with more control.

Split the video into scenes before interpolating so frames are not blended across hard cuts.

Derive the output frame rate from the input frame rate times num_frames. When false, the fps value is used instead.

Min: 1 - Max: 60

Target output frame rate (1-60). Only used when use_calculated_fps is false.

Interpolate from the final frame back to the first to create a seamless looping video.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 26.771 seconds
Logs (1 lines)

Model Example Requests

Examples

Example output 1Example output 2

RIFE Video Interpolation API

RIFE Video Interpolation is a video-to-video AI model by megvii-research. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at about $0.0032365 per video.

POST https://queue.modelrunner.run/megvii-research/rife/video

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/megvii-research/rife/video \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fps": 8,
    "loop": false,
    "video_url": "https://media.modelrunner.ai/wIRSbtfvYKHdIGXV-rife-interpolation-input.mp4",
    "num_frames": 2,
    "use_calculated_fps": true,
    "use_scene_detection": false,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/megvii-research/rife/video/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/megvii-research/rife/video/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("megvii-research/rife/video", {
  input: {
    "fps": 8,
    "loop": false,
    "video_url": "https://media.modelrunner.ai/wIRSbtfvYKHdIGXV-rife-interpolation-input.mp4",
    "num_frames": 2,
    "use_calculated_fps": true,
    "use_scene_detection": false
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/megvii-research/rife/video",
    headers=headers,
    json={
      "fps": 8,
      "loop": false,
      "video_url": "https://media.modelrunner.ai/wIRSbtfvYKHdIGXV-rife-interpolation-input.mp4",
      "num_frames": 2,
      "use_calculated_fps": true,
      "use_scene_detection": false
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
video_urlstring (uri)yesURL of the video whose frame rate to interpolate.
num_framesintegernoNumber of intermediate frames to generate between each pair of input frames (1-4). Higher values yield a higher output frame rate and smoother slow-motion. Default: 1.
use_scene_detectionbooleannoSplit the video into scenes before interpolating so frames are not blended across hard cuts. Default: false.
use_calculated_fpsbooleannoDerive the output frame rate from the input frame rate times num_frames. When false, the fps value is used instead. Default: true.
fpsintegernoTarget output frame rate (1-60). Only used when use_calculated_fps is false. Default: 8.
loopbooleannoInterpolate from the final frame back to the first to create a seamless looping video. Default: false.

Machine-readable: OpenAPI schema · llms.txt

Use RIFE Video Interpolation from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and RIFE Video Interpolation becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint megvii-research/rife/video.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run megvii-research/rife/video on ModelRunner to generate video”. MCP setup guide.

Model Details

Model Details

RIFE (Real-Time Intermediate Flow Estimation) increases a video's frame rate by synthesizing new frames between existing ones. Provide a source video and it estimates the motion between consecutive frames and renders smooth intermediate frames, so the output plays back with a higher FPS or, slowed down, becomes fluid slow-motion. It works on the whole clip without a prompt or per-shot tuning, and is well suited to footage where you want motion to feel smoother than the original capture allowed.

## Best for - Boosting the frame rate of existing footage (e.g. 24/30 fps to 48/60 fps) for smoother playback - Generating fluid slow-motion from normal-speed video without a high-speed camera - Smoothing stop-motion, time-lapse, or animation that was shot at a low frame rate - Filling motion gaps in clips with fast pans or action so movement reads cleanly

## Choose another model when - You want to upscale resolution or recover detail rather than add frames — use a video upscaler - You need to generate a video from a text prompt or a single still image with no source clip — use a text-to-video or image-to-video model - You want to re-sync a talking head's mouth to new audio — use a lip-sync model

## Tips - `num_frames` (1–4) sets how many frames are inserted between each pair of input frames; higher values multiply the effective frame rate and the smoothness of slow-motion, at the cost of longer processing. - Leave `use_calculated_fps` on (the default) to let the model derive the output frame rate from the input times `num_frames`. Turn it off and set `fps` only when you need an exact target frame rate. - Enable `use_scene_detection` for clips with hard cuts so interpolation does not blend across scene boundaries. - Set `loop` to true to bridge the final frame back to the first for a seamless looping clip.

## Limitations - Very large or chaotic motion between frames can produce blending or ghosting artifacts in the interpolated frames. - Interpolation adds frames; it does not increase spatial resolution or remove existing noise.

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("megvii-research/rife/video", { input: { video_url: "https://storage.googleapis.com/falserverless/example_inputs/interpolation-video-input.mp4", num_frames: 2, }, }); ```