TS Frame Interpolation
Buttery-smooth video from choppy model output
- images
- reference
- images
Video models output choppy footage. It's not your settings - most of them generate 12–24 frames that you're expected to smooth afterward. TS Frame Interpolation is that afterward. It takes an image batch and generates intermediate frames with RIFE or FILM models, turning a 12 fps animation into 24/48/60 fps or slowing a clip down to a fraction of its speed with genuinely interpolated motion instead of just duplicating frames.
If you're on the LTX, WAN, or Hunyuan path, this is the node you put between the sampler and the preview/saver. It's also the honest answer to "why is my video jerky": RIFE-class interpolation is what people reach for, and it's what this wraps.
How it works
RIFE and FILM are optical-flow-style networks trained to predict what frame sits between two frames. Feed it frame A and frame B and it invents the in-between. The node's mode dropdown decides what you do with that power:
slowdown_x- extends the clip byslowdown_factor. 2.0 doubles the length, inserting one interpolated frame per source frame. This is the "slow motion that actually moves" mode.fps_conversion- resamples the clip fromsource_fpstotarget_fps. 24 → 60, say, generating the missing frames and re-timing the result.
The model_name dropdown lists RIFE checkpoints from ComfyUI/models/rife/ (default rife_v4.26.safetensors), and the README promises missing files are downloaded automatically on first use.
The other inputs are VRAM management. max_timestep_batch (default 8) caps how many intermediate timestamps are evaluated at once - lower it if long clips blow up memory. tile_size (default 0 = auto) forces tiled interpolation for high-resolution video, with tile_overlap controlling the seam blend. If you've done tiled diffusion, the idea is the same: split the work so it fits.
The one output
images - the interpolated sequence at the requested cadence. Wire it into TS Animation Preview to check the motion, or straight into the saver for the final file.
Installing it
Part of comfyui-timesaver (ComfyUI Manager → "Timesaver", or):
cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt
Restart ComfyUI. RIFE weights download on first use into models/rife/.
Where people get burned
The OOM retry behavior is worth knowing: on out-of-memory, the node automatically retries with a smaller tile size rather than just crashing - that's a design decision, and it usually saves the run, but it means a slow first attempt isn't necessarily a misconfiguration. Real tips: keep max_timestep_batch modest for long clips, drop tile_size if you're fighting VRAM, and remember the input needs at least two frames - feeding a single still will just error out. Also be realistic about what interpolation does: it smooths motion, it doesn't invent content. A 2× slowdown on fast-moving, high-detail footage will show artifacts at the edges no matter which model you pick - that's the physics of the job, not a bug in the node.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Input frame sequence to interpolate. At least 2 frames are required. | |
| model_name | COMBO | rife_v4.26.safetensors | RIFE checkpoint stored in ComfyUI/models/rife. Missing files are downloaded automatically. |
| mode | COMBO | slowdown_x | slowdown_x extends the clip length. fps_conversion resamples motion to a target FPS. match_length restores an exact frame count after frames were trimmed. |
| slowdown_factor | FLOAT | 2.01–16 | Used when mode is slowdown_x. |
| source_fps | FLOAT | 24.01–240 | Used when mode is fps_conversion. |
| target_fps | FLOAT | 60.01–240 | Used when mode is fps_conversion. Must be greater than or equal to source_fps. |
| max_timestep_batch | INT | 81–64 | Maximum number of intermediate timestamps evaluated together. Lower values reduce VRAM peaks on long clips. |
| tile_size | INT | 00–4096 | 0 = automatic. Positive values force tiled interpolation for high-resolution video. |
| tile_overlap | INT | 6416–512 | Blend overlap between tiles. Higher values reduce seams but use more compute. |
| target_frames | INT | 00–100000 | Used when mode is match_length and reference is not connected. 0 = take the length from reference. |
| fill | COMBO | hold_start | Used when mode is match_length. hold_start repeats the first frame, hold_end repeats the last one, and both keep the surviving frames on their original indices. stretch resamples the whole clip with the model instead, which is smoother but shifts every frame in time. |
| referenceopt | IMAGE | Used when mode is match_length: the original batch, read only for its frame count. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | Interpolated frame sequence with the requested cadence. |