π Sapsan-VFI Loader
Pick a weights file, let it fetch the rest
- vfi_model
The Sapsan-VFI Loader has exactly one job: hand a trained interpolation model to its sibling node. But in practice, 90% of what it does is quietly download a ~206 MB weights file for you on the first run, so you don't have to touch Hugging Face at all. It's the boring half of the pack, and that's fine - boring loaders are the loaders that don't break.
This is one of two nodes in SnJake/SnJake_Sapsan-VFI, a tiny MIT-licensed pack for x2 video frame interpolation. You'll find both under the π SnJake/VFI menu, alongside the π Sapsan-VFI Interpolate node that does the actual math. Frame interpolation is the standard smoothing step for generated video - Wan and LTX clips come out short and jittery at 16β24 fps, and the usual fix in the community is a VFI pass like GIMM-VFI. Sapsan is a lightweight newcomer to that job: about 50 million parameters, self-trained by the author on 2,700 videos, and light enough to run on modest GPUs (or, slowly, on CPU).
What it actually does
The loader reads two things: a weights_name and a force_reload toggle, both in the required inputs.
weights_name- a dropdown with two choices:Sapsan-VFI.safetensorsandSapsan-VFI.pt. These are the same model in two formats. The.safetensorsfile is the modern, safe pick;.ptis a legacy PyTorch pickle. Unless you have a reason to prefer the pickle, leave the default.force_reload- the model is cached in memory after the first load. Flip this totrue(or restart ComfyUI) if you swap the weights file on disk and want it picked up without restarting.
It outputs a single vfi_model of type SAPSAN_VFI_MODEL. That's a custom type, so it only plugs into the Interpolate node's vfi_model socket - it won't wire into anything else, and nothing else will feed it.
The download happens when the workflow executes, not when you drop the node on the canvas. On first run the loader pulls the chosen file from SnJake/Sapsan-VFI on Hugging Face into ComfyUI/models/sapsan_vfi/. That's a one-time ~206 MB fetch, and the node also scans that folder at menu-build time, so any weights you drop in there yourself (.pt, .pth, .ckpt, or .safetensors) show up in the dropdown.
Installing it
The whole pack installs in one step, whether you use ComfyUI Manager (search for "Sapsan" or "SnJake_Sapsan-VFI") or clone it manually:
cd ~/ComfyUI/custom_nodes/
git clone https://github.com/SnJake/SnJake_Sapsan-VFI.git
cd SnJake_Sapsan-VFI
pip install -r requirements.txt # pyyaml + huggingface_hub, that's it
The dependencies are refreshingly thin - just pyyaml and huggingface_hub, no separate torch or flash-attn installs. Restart ComfyUI after installing. If you're on a Portable install, run the pip line with python_embeded\python.exe instead and don't activate a venv.
Where people get tripped up
- The download needs internet on first run. If it fails partway, the node cleans up its temp file rather than leaving you a corrupt weights file - you can just run again. Or skip the download entirely by placing the file manually in
models/sapsan_vfi/and picking it from the dropdown. - Missing node in the menu almost always means the requirements didn't install or ComfyUI wasn't fully restarted.
- Not seeing your own weights? Make sure the extension matches (
.pt/.pth/.ckpt/.safetensors) - anything else is silently ignored.
That's the whole node. The part that actually makes your video smoother lives one wire away.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| weights_name | COMBO | Sapsan-VFI.safetensors | Select weights (auto-download if missing). |
| force_reload | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| vfi_model | SAPSAN_VFI_MODEL | β |