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, }, }); ```


