Nodes/flux_3_api/Flux 3 Video Upscale (API)
ComfyUI Node

Flux 3 Video Upscale (API)

Send your video to 4K and keep the audio — this is the one API upscaler

By DenRakEiw·Created about a month ago·Updated a day ago· 6
Flux 3 Video Upscale (API)
  • video
  • video
  • metadata
target_resolution4K
creativitycreative
input_video_url
prompt
safety_tolerance2
timeout_minutes45
api_key

Upscaling video is normally a fight with your GPU - a local model, VRAM you don't have, and a pipeline that keeps the audio track separate from the frames. Flux3VideoUpscale sidesteps all of it: drop an mp4 in, pick a target, and BFL's video-upscale-v1 tool hands back a sharper clip with the source audio preserved. Same pack, same key, same install as its sibling Flux3Video - the two are meant to sit in one workflow, generate then upscale.

The catch is the inputs, not the mechanism. The source has to be short (max 20 seconds, 50 MB) and the delivered video is charged per megapixel-second, so this is a "final step after you've already edited" tool, not something you run on every draft. Run it last, on footage you're keeping, and it's genuinely good value.

How it works

You give the node a target_resolution - 1080p, 2K, or 4K, defined on the short side. It measures your source's dimensions, computes upscale_factor = target_short / min(w, h), and sends that factor to BFL along with your clip. The factor is clamped to a sane 1.5×–3.0× band, and the output keeps your aspect ratio.

The clever bit is how it handles a remote source. The input_video_url field takes an HTTP(S) URL that takes precedence over the video input - so for a big clip you don't have to base64-encode the whole file. The node only streams the mp4's moov atom to read the dimensions. No full download, no wasted bandwidth.

The one decision that matters: precise vs creative

creativity is where you can actually ruin something, so think about it before you render. precise (0) preserves the source exactly and sharpens it - the right call for faces, products, brand assets, real people. creative (1, the default) restores and invents fine detail more aggressively, which looks great on generated footage, landscapes and textures but lets faces and products drift. The general rule the community lands on for generative upscaling applies here too: the less compressed your source, the more detail there is to recover. The optional prompt field steers the enhanced detail, mostly in creative mode; leave it empty for a neutral upscale. safety_tolerance works the same as on the video node (0–4, default 2).

Outputs and the factor gotchas

video is a ComfyUI VIDEO type that feeds straight into Save Video, and metadata is a debug STRING (Show Any) that includes the computed factor and source resolution.

Two failure modes worth knowing. First: if your source is already at or above the target, the node errors - there's nothing to upscale, so pick a higher target or a smaller source. Second: a 360p source aiming at 4K would need more than 3.0×, so the node clamps to 3.0× and warns you that the target isn't fully reachable. BFL also caps output around 14.4 MP per frame, so very large sources land below the target even at 4K. None of these are bugs; they're the pricing guardrails made visible.

Install and pricing reality

Same pack as Flux3Video - ComfyUI Manager → "Flux 3 API", or git clone https://github.com/DenRakEiw/flux_3_api into custom_nodes, then restart. Only requests is required; PyAV is used just for that URL probe and ComfyUI ships it. Put your key in the pack's .env:

BFL_API_KEY=bfl_...

Pricing is per megapixel-second of delivered output - precise mode is $0.075/MP·s, creative $0.105/MP·s. Roughly per second of output that's about $0.15 for 1080p precise, $0.26 for 2K, $0.59 for 4K. You're charged for delivered output only, so a rejected oversize clip costs nothing. Two time-based traps: an upscale can take about as long as a generation, so timeout_minutes (default 45, up to 240) still applies, and the signed delivery URL expires about an hour after the job hits Ready - download in time. And remember the same rule as its sibling: if the timeout fires, the job keeps running at BFL and still bills you.

CategoryFlux3 API

Inputs (8)

NameTypeDefaultDescription
videoVIDEOThe clip to upscale (mp4). Max 20 s and 50 MB. Or use input_video_url instead.
target_resolutionCOMBO4KTarget resolution on the short side. The node measures the source and derives upscale_factor from it (factor = target_short / min(w, h), clamped to 1.5-3.0), keeping the source aspect ratio. 1080p is about 1920x1080, 2K about 2560x1440, 4K about 3840x2160, each at 16:9.
creativityCOMBOcreativeprecise (0) preserves identity and stays sharp, for faces, products and real people. creative (1, default) invents detail, good for generated footage, landscapes and textures, but faces and products may drift.
input_video_urloptSTRINGAlternative to the video input: an HTTP(S) URL to the source. It takes precedence over the video input and avoids base64 encoding a large clip. The node only streams the moov atom of the URL to measure the source dimensions, so there is no full download.
promptoptSTRINGOptional description of the clip. It steers the enhanced detail, above all in creative mode. Leave empty for a neutral upscale.
safety_toleranceoptINT20–40 (strictest) to 4, default 2. Moderates the prompt and the delivered frames.
timeout_minutesoptINT451–240How long the node waits for the result. An upscale can take about as long as generating a video.
api_keyoptSTRINGLeave empty to read it from .env

Outputs (2)

NameTypeDescription
videoVIDEO
metadataSTRING