# Practical-RIFE: frame interpolation as an engineer's tool, not an app

> Practical-RIFE is a research-flavoured frame interpolation toolkit built on RIFE and SAFA, with a long series of trained model variants for anime, for diffusion generated video and for cheaper hardware. The project states plainly that it is for engineers and developers, and it points end users at ready made applications instead of asking them to manage Python environments and model files.

**hzwer/Practical-RIFE** — More practical frame interpolation approach.

- Repository: https://github.com/hzwer/Practical-RIFE
- Stars: 1,029 · Forks: 133
- Language: Python
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/hzwer-practical-rife

## The project tells you who it is for

Practical-RIFE is based on RIFE and on SAFA, and the stated aim is to enhance their practicality for users by incorporating various features and designing new models. The reason given is a good one and worth taking seriously: improving the PSNR index is not consistent with subjective perception.

That sentence is the whole philosophy of the project. A frame interpolation model can be improved on the metrics it is trained against and get worse on the thing a viewer notices, which is whether the motion looks right. The practical response is a series of models, each tuned for a different kind of content, rather than a single model that claims to be best.

The audience is stated in the same paragraph. This project is intended for engineers and developers, and for general users the README recommends other software instead, naming SVFI, RIFE-App and FlowFrames. That is an unusual thing for a project to write about itself, and it saves everyone time, because a graphical application and a repository of inference scripts with model directories are different products.

The codebase is small and legible. There is inference_video.py for the main video path, inference_img.py and inference_img_SR.py for image sequences, one of them the super resolution variant, and inference_video_enhance.py for the enhanced path. The model/ directory holds the model definitions and the training log, demo/ holds the sample frames and the side by side comparisons, and requirements.txt pins the dependencies. The licence is MIT.

## Twelve model versions, and choosing between them

The model list is long, and it is the most useful part of the README for anyone deciding what to download. The content of the linked models is under the same MIT licence as the project, and a lite model means using a similar training framework but a lower computational cost model.

At the top, 4.26 from 2024.09.21 and 4.25 from 2024.09.19, the latter with a lite variant from 2024.10.20. The README says 4.25 is currently recommended by default for most scenes, and explains what changed in it: more flow blocks were used, so the scale_list changes accordingly, and it seems the anime scenes have been significantly improved. That is a specific claim about a specific content type, and it is the kind of thing the model zoo exists to let you exploit.

Below that sit 4.22, 4.20, 4.18, 4.17 and 4.15, 4.14, and then the older v4.9.2, v4.3, v3.8 and v3.1 from 2021 to 2023, with lite variants for several of them. The 4.17 entry notes that it added a gram loss taken from FILM, which is a hint about what kind of change each version carries.

There is one more piece of guidance, and it is dated 2024.08. The README says 4.24 and above is quite suitable for post-processing of diffusion model generated videos, with a folder of examples linked. Given that generated video is now a common source of material with unsteady motion, a model trained for that failure mode is genuinely useful rather than a curiosity.

Every model is hosted on Google Drive with a Baidu netdisk mirror, and older versions are collected on the upstream RIFE issues page.

## Installing means a clone, a pip install and a model directory

The installation instructions are minimal, and there are two constraints stated before anything else. Python must be at most 3.11, and the model files have to be placed by hand.

```bash
git clone git@github.com:hzwer/Practical-RIFE.git
cd Practical-RIFE
pip3 install -r requirements.txt
```

Then you download a model from the model list and put the .py file and flownet.pkl on train_log/. The model is not fetched by a script, so the directory layout is something you assemble yourself, and the model and the inference code have to be matched by hand.

The requirements file is where the age of the project shows. numpy is pinned to at least 1.16 and at most 1.23.5, torch needs at least 1.3.0, torchvision at least 0.7.0, opencv-python at least 4.1.2, moviepy at least 1.0.3, plus sk-video and tqdm. The numpy ceiling is the interesting one, because numpy 1.23 predates the 2.0 release and several modern packages want a newer numpy than that.

So the install is a normal Python install with a version floor, and the friction is not in the tooling but in the environment. If you already have a modern data stack on your machine, the sensible move is a dedicated environment for this project rather than a shared one.

## Running the interpolation, and the flags that matter

The run commands are short, and the output naming is predictable.

```bash
python3 inference_video.py --multi=2 --video=video.mp4
```

That doubles the frame rate and writes video_2X_xxfps.mp4. A four times multiplier is the same command with --multi=4, and the same script handles a directory of PNG frames when the names are numbers, in the form input/0.png through input/612.png.

```bash
python3 inference_video.py --multi=4 --img=input/
```

The flag that catches people out on real footage is --scale, which defaults to 1.0. The README recommends setting --scale=0.5 for high resolution video such as 4K, because the flow network is expensive at full resolution, and there is a dedicated --UHD flag that is equivalent to setting scale to 0.5.

The rest of the parameter list is straightforward. --img and --video are the input, --output sets the output video name, --model is the directory with the trained model files, --fps sets the output frame rate manually, and --ext sets the output format, with mp4 as the default.

Two flags are for presentation rather than for the interpolation itself. --montage splices the generated video together with the original, which is the fastest way to see what the model did. And --exp sets the multiplier as a power of two, so --exp 2 is the same as --multi 4.

There is also a flag that has been retired. --skip is described as no longer useful, with a reference to issue 207, which is a small example of the project documenting its own history instead of leaving dead options in place.

## The surrounding ecosystem and the tools around it

The README links a set of related projects, and they fall into two groups that are worth separating.

The first group is the deployment path for engineers. VapourSynth-RIFE is the classic route, a frame interpolation filter for the VapourSynth video processing framework. RIFE-ncnn-vulkan is the NCNN Vulkan build, which runs the model on a GPU through the Vulkan API rather than through PyTorch. There is also VapourSynth-RIFE-ncnn-Vulkan, and vs-mlrt, a VapourSynth plugin for machine learning runtime. The last one in the list is linked as a drop frame fixer and FPS converter.

The second group is the general user recommendation, and it is three graphical applications, SVFI, RIFE-App and FlowFrames, which is what the README tells non-engineers to use.

The reason the project points at all of these is structural. The inference scripts here are a development and experimentation surface: they read a file, they write a file, and they do it with whatever model you dropped into the directory. A video editor plugin is a different product, one that can be scrubbed, previewed and undone.

There is also a Colab notebook linked from the header, which is the practical answer to the environment problem described earlier for anyone who wants to try a model without setting up a machine.

## What the state of the repository means for you

The repository is not archived and the last push was on 2026-08-27, so the code is still being touched. There are no GitHub releases, so there is no tag to pin, and the model zoo in the README is the version history that matters.

The project is written in Chinese and English, with an iteration notes article on Zhihu and a question-and-answer issue on GitHub linked from the header, and the model list mixes Google Drive links with Baidu netdisk mirrors. The README thanks the SVFI team for support on model testing for animation, which is a hint about how the anime-tuned variants were evaluated.

The practical constraints come down to three things. The Python ceiling of 3.11 and the numpy ceiling of 1.23.5 mean this is a tool for a dedicated environment rather than for whatever your machine already has. The models are files you download and place, so the workflow is manual by design and reproducible once set up. And the model zoo has grown organically, with three different numbering schemes in it, the current 4.x line, the earlier v4.x line, and the v3.x line from 2021, so the recommendation to start from 4.25 and work backwards is the sane approach.

## Conclusion

Practical-RIFE fits an engineer who needs frame interpolation as a step in a pipeline, who can choose a model per content type, and who is comfortable with a script that writes files rather than an application with a timeline. It does not fit a general user, and the project says so itself, and it does not fit a modern Python environment, because the dependency set pins Python at 3.11 or older and numpy below 1.24. Verify three things before you build on it: that the numpy and torch versions in requirements.txt still install in your environment, that the model file you download matches the inference script you run, since the model directories hold both a .py file and flownet.pkl, and that the model choice suits your content, because 4.25 is the general default while the 4.24 and later line is the one the README points at for diffusion generated video.

## FAQ

### How do I install Practical-RIFE?

Python must be 3.11 or older. Clone the repository with git clone git@github.com:hzwer/Practical-RIFE.git, move into the directory, and run pip3 install -r requirements.txt. Then download a model from the model list and place the .py file and flownet.pkl in train_log/. The requirements pin numpy to at least 1.16 and at most 1.23.5, with torch from 1.3.0 and opencv-python from 4.1.2.

### Which Practical-RIFE model should I use?

The README recommends 4.25 by default for most scenes, noting that it uses more flow blocks so the scale_list changes and that anime scenes appear significantly improved. For post-processing of diffusion model generated video it points at 4.24 and later. Lite models use a similar training framework at lower computational cost, and several older versions are available, including the v3.x line from 2021.

### How do I interpolate a video with Practical-RIFE?

Run python3 inference_video.py --multi=2 --video=video.mp4, which writes video_2X_xxfps.mp4, and use --multi=4 for four times interpolation. For high resolution footage the README recommends --scale=0.5, which the --UHD flag is equivalent to. A directory of numerically named PNG frames can be processed with --img=input/.

### Is Practical-RIFE suitable for ordinary users?

The project says it is intended for engineers and developers, and for general users it recommends SVFI, RIFE-App and FlowFrames instead. It also links VapourSynth-RIFE, RIFE-ncnn-vulkan, VapourSynth-RIFE-ncnn-Vulkan and vs-mlrt for editor and command line integration.

### What do the extra Practical-RIFE flags do?

--output sets the output video name, --model is the directory with the trained model files, --fps sets the output frame rate, --ext sets the format with mp4 as the default, --exp sets the multiplier as a power of two, and --montage splices the generated video with the original for comparison. The --skip flag is described as no longer useful, with a reference to issue 207.

## Sources

- [hzwer/Practical-RIFE on GitHub](https://github.com/hzwer/Practical-RIFE)
- [Issues](https://github.com/hzwer/Practical-RIFE/issues)
- [License: MIT](https://github.com/hzwer/Practical-RIFE/blob/main/LICENSE)
- [README](https://github.com/hzwer/Practical-RIFE/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/hzwer-practical-rife
