FlashVSR β hosted API access
FlashVSR is a real-time, diffusion-based streaming video super-resolution model (CVPR 2026). This repository is not the model weights β it is a documentation page for running FlashVSR through a hosted API on apimodels.app, a multi-model API gateway where one key and one OpenAI-compatible endpoint reach 110+ image, video, audio and language models.
- Original model & weights: JunhaoZhuang/FlashVSR
- Authors: Junhao Zhuang, Shi Guo, Xin Cai, Xiaohui Li, Yihao Liu, Chun Yuan, Tianfan Xue
- License: Apache-2.0 (this page follows the upstream license)
This page is an independent, hosted-API integration. It is not affiliated with or endorsed by the authors and does not redistribute their weights. All credit for the model is theirs.
What it does
Turn a low-resolution clip into a sharper 720p / 1080p / 2K / 4K video. FlashVSR is a one-step streaming framework, so it is fast enough for real-time use.
Same frame and region: a 480p source clip (left) vs the FlashVSR result at 1080p (right), produced through the apimodels.app API. No other edits.
Use it via API
No GPU or setup on your side β call the hosted endpoint on apimodels.app. Get a key at https://apimodels.app, then:
# 1) upload the clip -> get a public URL
curl -X POST https://api.apimodels.app/v1/files \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@input.mp4;type=video/mp4"
# -> { "data": { "publicUrl": "https://r2.apimodels.app/uploads/.../input.mp4" } }
# 2) create the upscale task (resolution: 720p | 1080p | 2k | 4k)
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "flashvsr", "video": "<publicUrl>", "resolution": "1080p" }'
# -> { "data": { "taskId": "..." } }
# 3) poll until state == "completed"
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# -> { "data": { "state": "completed", "resultUrls": ["https://..."] } }
Python (OpenAI-style base URL not needed β plain HTTP):
import requests
BASE, KEY = "https://api.apimodels.app", "YOUR_API_KEY"
H = {"Authorization": f"Bearer {KEY}"}
pub = requests.post(f"{BASE}/v1/files", headers=H,
files={"file": ("input.mp4", open("input.mp4", "rb"), "video/mp4")}
).json()["data"]["publicUrl"]
task = requests.post(f"{BASE}/v1/video/generations", headers=H,
json={"model": "flashvsr", "video": pub, "resolution": "1080p"}
).json()["data"]["taskId"]
# then GET {BASE}/v1/video/generations?task_id=task until state == "completed"
Pricing
Billed per second of input video length (not output). Failed jobs are not charged. Result files are kept for 7 days.
| Resolution | Price / input second |
|---|---|
| 720p | $0.02 |
| 1080p | $0.03 |
| 2K | $0.035 |
| 4K | $0.06 |
Links
- Run it: apimodels.app
- API docs: https://apimodels.app/docs/flashvsr
- Original model: https://huggingface.co/JunhaoZhuang/FlashVSR
Model tree for stimi/flashVSR
Base model
JunhaoZhuang/FlashVSR