Views
No views yet

SwiftVR is the first generative video restoration model to reach real-time 1080p streaming on a consumer-grade GPU (≈26 FPS on a single RTX 5090), sustains 31 FPS at QHD (2560×1440) and 14 FPS at 4K (3840×2160) on a single H100, and streams at resolutions where every compared diffusion-based VR baseline runs out of memory.
| Metric | DOVE (tile) | SeedVR2-3B (tile) | FlashVSR-Tiny | SwiftVR (Ours) |
|---|---|---|---|---|
| Avg. Time (s) ↓ | 27.615 | 17.320 | 2.493 | 0.766 |
| FPS ↑ | 0.85 | 1.39 | 9.61 | 31.32 |
| Peak Mem. (GB) ↓ | 59.24 | 35.35 | 34.35 | 38.01 |
At 3840×2160, every compared diffusion-based VR baseline OOMs on a single H100; SwiftVR sustains 14 FPS.

1git clone https://github.com/H-oliday/SwiftVR.git
2cd SwiftVR
3
4conda create -n swiftvr python=3.10 -y
5conda activate swiftvr
6
7# Install PyTorch matching your CUDA toolkit first, e.g. CUDA 12.4:
8pip install torch==2.10.0 torchvision==0.25.0 --index-url https://download.pytorch.org/whl/cu124
9
10# Install SwiftVR (editable) and its dependencies:
11pip install -e .| Model Name | Date | Backbone | Link |
|---|---|---|---|
| SwiftVR | 2026.06 | Wan2.2-TI2V-5B | 🤗 HuggingFace |
huggingface-cli download H-oliday/SwiftVR --local-dir checkpoints/from_pretrained):checkpoints/
├── reae.safetensors # Restoration-aware Autoencoder weights
├── prompt_embedding.safetensors# precomputed empty-prompt text embedding (key: "prompt_emb")
└── transformer/ # diffusers-format DiT
├── config.json
└── diffusion_pytorch_model.safetensors1from swiftvr import SwiftVRPipeline
2
3pipe = SwiftVRPipeline.from_pretrained("H-oliday/SwiftVR").to("cuda", dtype="bfloat16")
4
5pipe.restore_video("low_quality.mp4", "restored.mp4", upscale=4)restore_video also accepts an image folder as input and can write a PNG sequence with png_save=True.clip_len: middle chunk size, multiple of 4dit_overlap: overlap for DiT inferencefps: output video frame ratequality: 0–100, mapped to x265 CRFqueue_size: pipeline queue size1session = pipe.stream(clip_len=24, resolution=(1920, 1080))
2
3for lq_chunk in read_chunks("low_quality.mp4", n=24): # lq_chunk: [T, H, W, 3] uint8
4 hq = session.step(lq_chunk) # [1, T', 3, H', W'] in [0, 1], or None if buffered
5 if hq is not None:
6 write(hq)
7
8tail = session.flush() # flush the final buffered frames1python scripts/inference.py \
2 --input low_quality.mp4 \
3 --output restored.mp4 \
4 --checkpoint checkpoints/ \
5 --upscale 4 \
6 --clip-len 24 \
7 --dtype bfloat16 \--png to write a PNG sequence.Full-length restored clips (low-quality input → SwiftVR, played back to back).
1@article{yan2026swiftvr,
2 title={SwiftVR: Real-Time One-Step Generative Video Restoration},
3 author={Yan, Jiaqi and Chen, Xiangyu and Zhong, Xinlin and Huang, Haibin and Zhang, Chi and Liu, Jie and Zhou, Jiantao and Li, Xuelong},
4 journal={arXiv preprint arXiv:2606.09516},
5 year={2026}
6}