File size: 3,476 Bytes
cd1aaa0
 
6428e53
 
 
 
 
 
 
 
 
cd1aaa0
6428e53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2ff17b7
 
 
 
 
6428e53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
---
license: apache-2.0
base_model: JunhaoZhuang/FlashVSR
language:
  - en
tags:
  - video-super-resolution
  - video-upscaling
  - flashvsr
  - api
  - apimodels
---

# 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](https://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](https://huggingface.co/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.

![FlashVSR before/after: 480p source vs FlashVSR 1080p](before-after.jpg)

*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:

```bash
# 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):

```python
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](https://apimodels.app)**
- API docs: https://apimodels.app/docs/flashvsr
- Original model: https://huggingface.co/JunhaoZhuang/FlashVSR