Free.ai Video Upscaler
Self-hosted Real-ESRGAN x4 video upscaler with temporal smoothing — a free, GPU-backed alternative to Topaz Video Upscaler.
Powers the Free.ai video upscaler tool.
What it does
Takes a video, upscales every frame 4× with Real-ESRGAN, applies a temporal smoothing pass to eliminate frame-to-frame flicker, then re-encodes preserving the source audio. The output is competitive with commercial video upscalers on per-frame detail and temporal coherence.
Why temporal smoothing matters
Frame-by-frame neural upscalers (the cheap way) introduce high-frequency flicker because each frame is upscaled independently — a slight texture detail in pixel (12,34) might be reconstructed differently by the model on two consecutive frames, producing a shimmer. Topaz solves this by training a video-aware model with temporal context.
We solve it cheaper: a 3-tap weighted average over consecutive output frames (0.15 × prev + 0.7 × current + 0.15 × next) kills the high-freq flicker without smearing motion. A scene-cut detector (per-pixel mean-abs-diff > 60) skips smoothing when adjacent frames are too different — preserves crisp edits, scene transitions, and very fast motion.
Install
# 1. Install torch with the right CUDA version for your driver.
# Common choice for CUDA 12.x systems:
pip install torch==2.5.1 torchvision==0.20.1 \
--index-url https://download.pytorch.org/whl/cu121
# 2. Install the upscaler:
pip install free-video-upscaler
# 3. Patch basicsr's torchvision import (newer torchvision removed
# `functional_tensor` — known basicsr issue, no fix released yet):
python -c "import basicsr.data.degradations as _d, re, pathlib; \
p = pathlib.Path(_d.__file__); \
p.write_text(p.read_text().replace('torchvision.transforms.functional_tensor', \
'torchvision.transforms.functional'))"
# 4. Download model weights:
mkdir -p ~/.realesrgan/weights && cd ~/.realesrgan/weights
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth
CLI
free-upscaler --input my-video.mp4 --output upscaled.mp4 --scale 2
free-upscaler [-h] --input INPUT --output OUTPUT
[--scale {2,4}] [--model {x4plus,anime}]
[--tile TILE] [--no-temporal] [--fp32]
[--weights WEIGHTS] [--quiet] [--version]
Python API
from free_video_upscaler import upscale_video
upscale_video(
"in.mp4", "out.mp4",
scale=2, # 2 or 4
model="x4plus", # "x4plus" or "anime"
temporal_smooth=True,
progress=lambda i, n: print(f"{i}/{n}"),
)
How it compares
| Feature | This package | Topaz Video AI | Naive Real-ESRGAN |
|---|---|---|---|
| Per-frame upscale | Real-ESRGAN x4plus | Proteus / Iris | Real-ESRGAN x4plus |
| Temporal coherence | 3-tap smoothing | Video-aware net | None (flicker) |
| Anime / cel mode | x4plus_anime_6B | Artemis HQ | Anime variant |
| Audio preserved | Yes (-c:a copy) |
Yes | Manual |
| Cost | $0 (your GPU) | $299/yr | $0 |
| License | Apache 2.0 | Proprietary | BSD 3-Clause |
Scaling notes
- Real-ESRGAN x4plus uses ~6 GB VRAM at 1080p with
tile=256. Drop tile to 128 for 8 GB cards, or passtile=0for no tiling on big GPUs. - Anime variant runs ~4× faster (6-block vs 23-block RRDBNet) and uses less VRAM. Use it for line-art / cel content.
- For 60 s+ clips on a single GPU, the package extracts + upscales + re- encodes synchronously; expect 10–20 minutes for a 1080p 60 s clip on a consumer GPU. Run it as a background job for anything longer.
License
Apache-2.0. Real-ESRGAN model weights are themselves Apache-2.0 (see Tencent ARC's Real-ESRGAN repo).
Release files for free-video-upscaler 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| free_video_upscaler-0.1.0.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| free_video_upscaler-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.6 kB
Release files / free_video_upscaler-0.1.0.tar.gz
| Download URL | free_video_upscaler-0.1.0.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
08d5da2fbfc7583dcf02ec72c2a59a0187fae75ba4c16c447e8d2abcd1e4c367
|
|
BLAKE2b-256 checksum How to use checksums |
532da48b07e8cbf64bb304cf34fa58b44051175d0db0bac0186daf71706dc709
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / free_video_upscaler-0.1.0-py3-none-any.whl
| Download URL | free_video_upscaler-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd9b41c3c44d733cde986ae60ec0a9d76e15f91ea6db7c7e71e78a65f806e839
|
|
BLAKE2b-256 checksum How to use checksums |
bcecca8f80313b34b963a6de2ba7c355f9b4d8b3aac54d8b58e6482c32d201c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|