Concurrent Submit | zhenzhen-FlashVSR-video-upscale-lowprice
Upscale video on a server, not your GPU — the Concurrent FlashVSR submit node
- input_video
- api_config
- task
Let's be clear about the trick this node plays: the name says "video upscale," but nothing is upscaled on your machine. This is an API call to FlashVSR - a real-time diffusion-based streaming video super-resolution model from the ByteDance side of the research world - running on the author's server. You feed it a 480p clip and get a sharper video back. FlashVSR itself is genuinely fast for what it is (people benchmark it against Topaz rather than against a KSampler), so the "lowprice" here is the author reselling it at near-cost. That's the whole model of the Comfyui-zhenzhen pack: no local weights, no VRAM, just a paid API key.
What it does and why you'd reach for it
The fashvsr channel takes exactly one kind of input: a 480P source, 3 to 15 seconds long. Give it anything else and the node's own validator stops you before you spend a credit. In exchange you get back an upscaled 480p→higher clip you can feed back into a video pipeline. If you already render video locally at low res to save time, this is the "polish pass on someone else's GPU" move - same shape as the upscalers in the KB's external-API-nodes essay, just aimed at video instead of stills.
Where it shines: batch jobs. The single (non-concurrent) version of this node blocks until the server finishes. This Submit variant doesn't - that's the whole point of the "Concurrent" prefix.
How it works
The regular Comfly_fashvsr_video_upscale_lowprice node is wrapped in a background thread pool shared by all video nodes in this pack (10 workers). The Submit node kicks off the HTTP job, returns a task handle instantly, and you collect the result later:
- Wire
taskinto Concurrent Collect Videos (10) (task_1, task_2, ...), one per job. - The collector waits for all of them, returns the videos in slot order plus a
statusstring. failure_modeon the collector:fail_fast(default) raises on the first failure;placeholderleaves an empty slot instead.
That's how you queue a dozen upscales in one go instead of babysitting one at a time. Fire ten jobs, walk away, come back to ten sharpened clips.
The inputs that matter
Only a couple are worth touching:
video_url- an optional public URL to the 480p source. Leave it empty if you're wiring ininput_video; you must supply exactly one source.input_video- wire your local video here (a loaded VIDEO tensor).api_config- theZHENZHEN_SEEDANCE2_CONFIGobject from the pack's Seedance2 API Settings node, which carries the lowprice-channel base URL and your key. The "lowprice" nodes route throughapi.seedance.nz, the author's domestic shop.seed- a cache-control seed only. FlashVSR doesn't take one, so "Fixed" just reuses the cached result. Don't expect seed-stable upscales.
Installing it
This ships inside the Comfyui-zhenzhen pack:
- ComfyUI Manager → Install Custom Nodes → search "Comfyui-zhenzhen" → install → restart.
- Or
cd ComfyUI/custom_nodes && git clone https://github.com/T8mars/Comfyui-zhenzhenand restart.
No models to download - requirements are the usual requests/aiohttp/Pillow stack that ComfyUI mostly already has. You do need a token from the author's site (the domestic shop at api.seedance.nz for the lowprice nodes), pasted into the API Settings node. Everything else is paid per job.
Gotchas
The pack's README is blunt about the network reality: these servers are overseas, so if you're in mainland China expect to need a proxy - the author literally recommends v2rayN with Tun mode and blames 360 firewall software for 443 errors. The code auto-fails over between .org and .cn endpoints (10-minute cache) to help. And the recurring real-world failure isn't the node - it's upstream rate limits. If a video job throws a 500, the author's standing advice is "run it again." Most of the time that's accurate. When it isn't, skip_error (false by default) is your escape hatch: flip it on and the node returns an empty result instead of exploding your whole queue.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video_url | STRING | Optional public video URL. Leave empty when input_video is connected. Source video must be 480P and 3-15 seconds. | |
| input_videoopt | VIDEO | — | |
| api_configopt | ZHENZHEN_SEEDANCE2_CONFIG | — | |
| skip_erroropt | BOOLEAN | false | — |
| seedopt | INT | 00–18446744073709550000 | ComfyUI cache seed only; this value is not sent to FlashVSR. Fixed reuses the cached result. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| task | COMFLY_VIDEO_FUTURE | — |