Nodes/ComfyUI-FLUX-BFL-API/Flux Video Upscale (BFL)
ComfyUI Node

Flux Video Upscale (BFL)

1.5–3× on a clip without renting a GPU

By gelasdev·Created 2 years ago·Updated a day ago· 49
Flux Video Upscale (BFL)
  • config
  • video
◄input_video►
◄upscale_factor2.0►
◄creativity1►
◄safety_tolerance2►
◄prompt►
◄webhook_url►
◄webhook_secret►

Video upscaling is the least settled problem in the whole upscaling stack, and the reason is temporal: consecutive frames have to agree. Run a good image upscaler over a clip frame by frame and fine repeating texture - wallpaper, knitwear, gravel - will shimmer, because nothing forces frame 40 to resolve the pattern the way frame 39 did. The open-source answers are real but heavy: SeedVR2 on video ran about 12 minutes for a 720p→4K clip on a rented L40S, and FlashVSR gets there with tiling tradeoffs on a 24GB card. Flux Video Upscale (BFL) replaces that with one hosted call to flux-tools/video-upscale-v1.

What it does

You hand over a clip, pick a factor between 1.5× and 3×, and get the clip back bigger, aim being "toward 4K". Aspect ratio and audio follow the source. A creativity switch decides whether the upscale stays faithful to the source or invents detail. No weights to download, no VRAM, no tiling experiments.

Be honest about when it's the right call: on an RTX card the local NVIDIA two-pass (DeBlur, then VSR) runs in seconds on ~4GB of VRAM, and reads as more natural than a generative upscaler on an already-clean clip. This node wins when you're not on RTX, or when the source is degraded enough that you want a generative pass over it.

The knobs that matter

  • input_video - a STRING, so an MP4 URL or base64. Same wiring as the pack's other video tools: Load Video → Video to Base64 (BFL) → Flux Video Upscale. Limits: up to 20 seconds, 50 MB, 2560×1440 max.
  • upscale_factor - 1.5 to 3.0 in 0.1 steps, default 2. Read the author's tooltip before you type 3 on a big source: frames are capped near 14 MP, so a large input comes back upscaled by less than you asked for. On a 1440p clip the cap bites long before 3×.
  • creativity - 0 or 1, and this is the one to think about, because the default is 1. One is "creative detail enhancement", which is a polite way of saying it invents detail. Zero is precise and source-faithful, which is what you want for faces and product shots, where invented detail shows up as a subtly wrong face or a changed label.
  • safety_tolerance - 0 to 4, default 2.
  • prompt (optional) - a description of what's in the clip that steers which detail gets enhanced. It only makes sense alongside creativity 1; at 0 there's nothing to steer.
  • webhook_url / webhook_secret / config - pass-throughs and the per-node key override; the node polls for the result regardless.

One quirk: the node only sends the fields you change - leave the factor at 2.0, creativity at 1 or tolerance at 2 and they're omitted, so BFL's defaults apply.

Output: video, the native VIDEO type - into Save Video, or straight into Video to Base64 (BFL) if you want to chain it (edit, then upscale, for instance).

Installing it

Manager → search ComfyUI-FLUX-BFL-API, or:

cd ComfyUI/custom_nodes
git clone https://github.com/gelasdev/ComfyUI-FLUX-BFL-API.git
pip install -r requirements.txt

requirements.txt is a single line, torch - nothing else to fetch, everything happens server-side. Then your key from api.bfl.ai goes in config.ini:

[API]
X_KEY = YOUR_API_KEY
BASE_URL = https://api.bfl.ai/v1/

Two plumbing notes. The video nodes need ComfyUI 0.3.30+, because they only register when ComfyUI's VIDEO type imports - on an older build this node won't appear in the search at all. And you can put the key on a Flux Config (BFL) node instead of the file, which survives the pack updates that overwrite config.ini.

Where people get burned

A black placeholder instead of a result. Failure, moderation and exhausted polling all return a one-frame black 512×512 video rather than an error, and video polling runs to roughly 20 minutes (240 attempts, 5 seconds apart) before it quits. The console says which it was; the node does not.

Base64 inflation against the 50 MB cap. A clip near the limit becomes a request body about a third bigger. Trim first - and note the input is also capped at 20 seconds and 2560×1440.

Expecting determinism. Creativity 1 is generative, and nothing here is seeded, so treat two attempts as two different attempts. Keep the one you like.

Cost. Metered per call, and video is the expensive end of this pack's price list. Check your balance with the Flux Credits (BFL) node before you queue a 20-second clip, not after.

Verdict

If the clip is already clean and your card is an RTX, stay local: the hardware path is cheaper, faster, and won't rewrite faces. If you're upscaling a degraded source, or you're on a laptop, this is one call for a temporally consistent result - which is more than you get from applying any image upscaler frame by frame.

CategoryBFL/Flux3

Inputs (8)

NameTypeDefaultDescription
input_videoSTRINGClip to upscale: MP4 URL or base64 (from Video to Base64). Up to 20 s, 50 MB and 2560x1440
upscale_factorFLOAT2.01.5–3Output scale relative to the source. Frames are capped near 14 MP, so large sources are upscaled by less than requested
creativityINT10–10 = precise (source-faithful, for faces and products), 1 = creative detail enhancement
safety_toleranceINT20–4—
promptoptSTRINGOptional description of the clip's content, steering the enhanced detail
webhook_urloptSTRING—
webhook_secretoptSTRING—
configoptBFL_CONFIG—

Outputs (1)

NameTypeDescription
videoVIDEO—