FL Fal SeedVR Upscale
Run the best detail-preserving upscaler without owning the GPU
- image
- upscaled_image
- image_url
- width
- height
SeedVR2 is, by mid-2026, the upscaler most people reach for when they want detail added without the picture being reinvented. It's ByteDance's one-step restoration model, and its whole trick is restraint: it sharpens and rebuilds texture while leaving the subject alone, which is exactly why it took over face and product work that SUPIR used to own. The catch has always been VRAM. The local node is famous for OOM errors, and video upscaling with it wants a datacenter GPU.
This node sidesteps all of that. FL_Fal_SeedVR_Upscale doesn't run SeedVR on your machine - it ships your image off to Fal AI's hosted SeedVR endpoint, waits for the result, and hands you back the upscaled frame. No model download, no quantization headaches, no block-swap tuning. You pay Fal per call instead of paying in VRAM.
How it works
You give it an image and an upscale factor. The node uploads your tensor to fal.media, kicks off the SeedVR job on Fal's hardware, polls until it's done, then downloads the finished image. Because the heavy lifting happens remotely, the only thing your GPU does here is encode and decode - this node will happily run on a potato as long as you have a network connection and a Fal balance.
That remote setup also quietly solves the single most-corrected SeedVR gotcha: on the local node, GGUF quantization wrecks skin texture and FP8 adds tiling grids, so the community settled on FP16. Here you don't pick a quant at all - Fal runs it their way, so that whole class of "why does my output look scaly" problem doesn't apply.
The inputs and outputs that matter
Four inputs, all required:
api_key- your Fal AI key. This is the one that stops the node from working if you get it wrong. Paste it here (or the node won't have anywhere to send the job).image(IMAGE) - the frame to upscale. One image.upscale_factor(FLOAT, 1.0–10.0, default 2.0) - the multiplier. 2× is a sane default; go higher only when the source genuinely has detail to expand into.seed(INT, default -1) - leave it at -1 for a random seed each run, or pin it for reproducibility.
Outputs: upscaled_image (IMAGE) is the one you wire downstream - into a save node, a further pass, whatever. You also get image_url (the fal.media link), plus width and height as INTs, handy for feeding a downstream node that needs the new dimensions.
Installing it
Via ComfyUI Manager: search ComfyUI_Fill-Nodes, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart. Fill-Nodes is a big kitchen-sink pack by filliptm (Machine Delusions), so it pulls in a lot of dependencies on first launch - this particular node needs the Fal client and a Fal account with credit.
Common issues & troubleshooting
Nothing happens / auth error. No valid api_key, or an empty Fal balance. Every call costs money on Fal's side; there's no free local fallback here.
The output looks more "AI" than the input. SeedVR has a known, consistent contrast lift - some images come back reading as more obviously generated. That's the model, not the node. Ease the upscale factor or do a light color-match pass afterward if it bothers you.
It didn't fix my blurry/compressed source. SeedVR preserves what's there; it doesn't repair heavy degradation the way SUPIR does. If your input is genuinely damaged rather than just small, reach for SUPIR instead.
Faces went plasticky. SeedVR's one real weak spot is close-up skin texture. For a hero face, do a separate detail pass (ADetailer or inpainting) rather than leaning on a big upscale factor here.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| image | IMAGE | — | |
| upscale_factor | FLOAT | 2.01–10 | — |
| seed | INT | -1-1–999999999 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| upscaled_image | IMAGE | — |
| image_url | STRING | — |
| width | INT | — |
| height | INT | — |