A video only stores a few frames each second. This model, RIFE, invents the frames in between — reconstructing the motion that the camera never captured. Drag the slider and watch it happen.
Left & right ends (t=0, t=1) are real frames. Everything between them is synthesized by the frozen model in ~34 ms per frame — no frame in the middle exists in the source video.
Older methods (DAIN, SuperSloMo) compute the motion between the two frames, then reverse it — slow and error-prone. RIFE's network, IFNet, predicts the flow from the middle to each side in one pass, warps both frames inward, and blends them with a learned fusion mask. No separate optical-flow network — that is why it runs in real time.
An invented frame has nothing to compare against — so PSNR/SSIM/LPIPS would be meaningless. The fix is the frame-decimation protocol: take a real video, hide every 2nd frame, rebuild it, and compare to the hidden real frame. Below, one real frame was hidden — switch between the methods and watch the numbers. RIFE must beat the two naive baselines to justify existing.
This is the real hidden frame — the target every method is trying to reconstruct.
Five motion types, each scored by the protocol above. RIFE wins by ~14 dB on camera pan and fast motion. But on repeated texture every method collapses to ~14 dB — the motion of a repeating pattern simply cannot be recovered from two frames (the aperture problem).
Across a scene cut the two frames share nothing, so no true middle frame exists — RIFE still tries, and paints a morphed "ghost". My SafeInterp layer detects the cut and holds the frame instead. Flip the switch and watch the middle frame.
Naive interpolation invents a ghost frame that belongs to neither scene.
ghost frames across the 6 known cuts — before, and after SafeInterp. The official guard missed 2 of the 6; PySceneDetect caught all six.