Downloads · 30 days
0
filippawlicki/nanovsr
nanovsr is a machine learning model from filippawlicki. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for tensorrt. The card lists the license as mit.
Downloads · 30 days
0
Access
Public
Updated Jul 25, 2026
Repo size
36.6 MB
Likes
4
Public
Click a slice to open those files.
.pth36.6 MB · 100%
From the Hugging Face model README
Accepted to ECCV 2026
<img src="https://raw.githubusercontent.com/filippawlicki/nanovsr/main/assets/teaser.gif" width="720" alt="Low-resolution input vs. NanoVSR-644k output (4x upscaling)"/>4× video super-resolution with NanoVSR-644k — 27.2 FPS on a Jetson Orin NX (25 W).
</div>NanoVSR is a scalable, fully convolutional video super-resolution (VSR) architecture built for resource-constrained edge devices. It performs 4× upscaling with:
The baseline NanoVSR-644k reaches 28.64 dB PSNR on REDS4 at 27.20 FPS on an NVIDIA Jetson Orin NX 16GB (25 W); the scaled NanoVSR-1.7M reaches 29.15 dB at 19.58 FPS.
Upload your own low-resolution clip (or try the built-in REDS4 example) in the interactive Gradio demo — no setup required.
All checkpoints in this repo store the multi-branch (training) topology and perform 4× upscaling.
Loading code (utils.load_model) automatically reparameterizes them into the fused, deploy-ready
form. Runtime is ms/frame for a 180×320 input on an H100 (FP32); FPS is measured on Jetson Orin NX
16GB (25 W) with TensorRT FP16, 180×320 input, T=15.
| Checkpoint | Params | REDS4 (PSNR/SSIM) | Vid4 (PSNR/SSIM) | Vimeo-90K-T (PSNR/SSIM) | H100 (ms) | Orin NX (FPS) |
|---|---|---|---|---|---|---|
nanovsr_226k.pth | 226k | 28.23 / 0.8057 | 25.26 / 0.7252 | 34.31 / 0.9130 | 1.910 | 43.86 |
nanovsr_644k.pth (baseline) | 644k | 28.64 / 0.8215 | 26.05 / 0.7761 | 35.00 / 0.9226 | 2.982 | 27.20 |
nanovsr_1.7m.pth | 1.7M | 29.15 / 0.8364 | 26.44 / 0.7964 | 35.49 / 0.9294 | 4.268 | 19.58 |
nanovsr_5.4m.pth | 5.4M | 29.73 / 0.8526 | 26.76 / 0.8089 | 35.85 / 0.9335 | 8.547 | 8.66 |
PSNR/SSIM: RGB for REDS4, Y-channel for Vid4 and Vimeo-90K-T.
The model definition lives in the GitHub repo; this
Hub repo only hosts the pretrained weights. Clone the code, then load a checkpoint straight from
the Hub with huggingface_hub:
git clone https://github.com/filippawlicki/nanovsr.git
cd nanovsr
pip install -r requirements.txt huggingface_hub
from huggingface_hub import snapshot_download
from utils import load_model
# fetches just this checkpoint + config.json (not the other three variants)
repo_dir = snapshot_download(repo_id="filippawlicki/nanovsr",
allow_patterns=["config.json", "nanovsr_644k.pth"])
model = load_model(f"{repo_dir}/nanovsr_644k.pth", device="cuda") # reparameterizes into deploy form automatically
# model(x) expects x: [B, T, 3, H, W] float in [0, 1], genuinely low-res (e.g. 180x320-270x480)
# and returns [B, T, 3, H*4, W*4]
Or upscale a video end-to-end with the bundled demo script:
python demo.py --checkpoint nanovsr_644k.pth --input my_clip.mp4 --compare
See the GitHub README for training, evaluation, and ONNX/TensorRT export instructions.
Two-stage curriculum: 7-frame Vimeo-90K sequences for the first 50k iterations, then 30-frame REDS sequences until 150k total, with 256×256 GT patches, Charbonnier loss, and cosine-annealed LR. Evaluated on REDS4, Vid4, and Vimeo-90K-T (held out from training).
@misc{pawlicki2026nanovsr,
title={NanoVSR: Towards Real-Time Video Super-Resolution on Edge Devices},
author={Filip Pawlicki and Marcel Kańduła and Marcin Pucek and Kamil Dobies},
year={2026},
eprint={2607.10495},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2607.10495},
}
Released under the MIT License.