FLUX Video Upscale

FLUX Video Upscale is a dedicated video enhancement model from Black Forest Labs for increasing source footage to 1080p, 2K, or 4K while preserving motion and the original audio track. It supports a source-faithful precise mode for faces, products, and brand-sensitive footage, plus a more creative enhancement mode that restores and invents finer detail for generated clips, scenery, textures, and crowd shots. The endpoint accepts clips up to 20 seconds long and can optionally use a prompt to steer the type of detail it enhances.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesPrecise and creative enhancement
How to use FLUX Video Upscale's settings.creativity: precise, source-faithful sharpening for faces and brands, or creative detail restoration for scenery, textures, and crowds.
Two clips can need opposite things from an upscaler. A person's face or a brand's product has to come back exactly as it went in, only sharper. A soft landscape or a crowd scene is better served by an upscaler that invents the detail the source lost. settings.creativity is the switch between those two jobs: 0 preserves the source and sharpens it, while 1 restores and invents detail more aggressively, and it defaults to 1.
The owl below runs both ways. Drag between them and the creative pass rebuilds far more feather and eye detail, while the precise pass stays closer to what the source actually held:
Neither is simply better. The creative side is richer but has invented some of what it shows, and the precise side is more faithful but leaves detail the source never captured on the table. Which one is right depends entirely on the footage.
The request
creativity lives under settings and takes 0 or 1. Set it explicitly when you want the precise mode, since the default is the creative 1.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'bfl:flux@video-upscale',
deliveryMethod: 'async',
upscaleFactor: 2,
settings: {
creativity: 0
},
inputs: {
video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/9f0a1b2c-3d4e-5f60-a1b2-c3d4e5f6a708.mp4'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "bfl:flux@video-upscale",
"deliveryMethod": "async",
"upscaleFactor": 2,
"settings": {
"creativity": 0
},
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9f0a1b2c-3d4e-5f60-a1b2-c3d4e5f6a708.mp4"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "upscale",
"taskUUID": "c8d9e0f1-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
"model": "bfl:flux@video-upscale",
"deliveryMethod": "async",
"upscaleFactor": 2,
"settings": {
"creativity": 0
},
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9f0a1b2c-3d4e-5f60-a1b2-c3d4e5f6a708.mp4"
}
}
]'runware run bfl:flux@video-upscale \
deliveryMethod=async \
upscaleFactor=2 \
settings.creativity=0 \
inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/9f0a1b2c-3d4e-5f60-a1b2-c3d4e5f6a708.mp4{
"taskType": "upscale",
"taskUUID": "c8d9e0f1-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
"model": "bfl:flux@video-upscale",
"deliveryMethod": "async",
"upscaleFactor": 2,
"settings": {
"creativity": 0
},
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9f0a1b2c-3d4e-5f60-a1b2-c3d4e5f6a708.mp4"
}
}[
{
"taskType": "upscale",
"taskUUID": "c8d9e0f1-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
"videoUUID": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e.mp4"
}
]Precise mode holds identity
Set creativity to 0 for faces, logos, products, and brand-sensitive footage. The precise pass sharpens what is there without redrawing it, so a face keeps its features and a product keeps its exact shape. The creative pass, tuned to invent, can quietly change a face while it rebuilds detail, which is the last thing you want on a recognisable person:
On the presenter, the precise side stays the same person from the source, only cleaner. The creative side sharpens aggressively but nudges the features as it invents skin and hair detail. When the source is the source of truth, a client's talking head, a labelled product, a logo, the precise mode is the safe choice.
Creative mode rebuilds texture
Set creativity to 1, the default, for the footage that has no identity to protect and plenty of texture to gain: scenery, fabrics, foliage, crowds, and clips from a generative model that came out soft. Here the pass rebuilds plausible detail across a dense festival crowd, where a faithful sharpen would only firm up the blur:
The creative pass invents believable faces and clothing across the crowd, and because none of it has to match a specific real person, the invention reads as richness rather than error. This is the mode the owl wanted too: when detail matters more than exactness, let it invent.
creativity is an integer, not a boolean. It takes 0 or 1 today, and typing it as an integer keeps your mapping forward-compatible. Store and send it as a number rather than a true/false flag.
Tips
-
Default to precise for anything recognisable. Faces, logos, products, and brand footage should use
creativity: 0, since the creative pass can alter what it rebuilds. -
Default to creative for texture. Scenery, fabric, foliage, crowds, and soft generated clips gain the most from
creativity: 1, where invented detail reads as richness. -
Check faces at full size. After a creative upscale, review any face against the source before you ship it. If the identity has drifted, re-run in precise mode.
-
Let the content pick the mode, not the resolution. Both modes upscale by the same factor. Creativity only changes how much the model invents, so choose it from what is in the frame.
-
Map it as an integer. Treat
creativityas a numeric field in your integration rather than a boolean, so it stays compatible as the value set grows.