MODEL IDbfl:flux@video-upscale
live

FLUX Video Upscale

Black Forest Labs
by Black Forest Labs

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.

FLUX Video Upscale

Steering the enhancement with a prompt

How to steer FLUX Video Upscale with an optional positivePrompt: name the materials and textures you want rebuilt so the enhancement favours the detail that matters.

FLUX Video Upscale takes an optional prompt, and it works as a pointer at the detail you want rebuilt rather than a description of the scene. Leave it empty and the model enhances the frame evenly, spreading its work across everything. Name a material or a texture and the enhancement leans toward what you named, spending more of its detail on the part that matters.

The cable-knit sweater below is upscaled twice from the same soft source. The prompted pass was told to favour the knit, and the weave and stitching come back with more bite:

No promptPrompted

Both clips are sharper than the source. The difference is where the detail landed: with the prompt naming the cable weave and the wool fibres, the sweater's texture is rebuilt more assertively than in the even, unprompted pass.

The request

The prompt goes in positivePrompt, the same field as any generation, but here it steers rather than describes. Keep it to the elements you want favoured, not a full account of the shot.

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,
  positivePrompt: 'Crisp chunky cable-knit weave, individual wool fibres, defined cable stitching.',
  inputs: {
    video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/1a2b3c4d-5e6f-4708-9a1b-2c3d4e5f6071.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,
            "positivePrompt": "Crisp chunky cable-knit weave, individual wool fibres, defined cable stitching.",
            "inputs": {
                "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/1a2b3c4d-5e6f-4708-9a1b-2c3d4e5f6071.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": "d9e0f1a2-3b4c-4d5e-9f6a-7b8c9d0e1f2a",
      "model": "bfl:flux@video-upscale",
      "deliveryMethod": "async",
      "upscaleFactor": 2,
      "positivePrompt": "Crisp chunky cable-knit weave, individual wool fibres, defined cable stitching.",
      "inputs": {
        "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/1a2b3c4d-5e6f-4708-9a1b-2c3d4e5f6071.mp4"
      }
    }
  ]'
runware run bfl:flux@video-upscale \
  deliveryMethod=async \
  upscaleFactor=2 \
  positivePrompt="Crisp chunky cable-knit weave, individual wool fibres, defined cable stitching." \
  inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/1a2b3c4d-5e6f-4708-9a1b-2c3d4e5f6071.mp4
{
  "taskType": "upscale",
  "taskUUID": "d9e0f1a2-3b4c-4d5e-9f6a-7b8c9d0e1f2a",
  "model": "bfl:flux@video-upscale",
  "deliveryMethod": "async",
  "upscaleFactor": 2,
  "positivePrompt": "Crisp chunky cable-knit weave, individual wool fibres, defined cable stitching.",
  "inputs": {
    "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/1a2b3c4d-5e6f-4708-9a1b-2c3d4e5f6071.mp4"
  }
}
Response
[
  {
    "taskType": "upscale",
    "taskUUID": "d9e0f1a2-3b4c-4d5e-9f6a-7b8c9d0e1f2a",
    "videoUUID": "6c7d8e9f-0a1b-4c2d-8e3f-4a5b6c7d8e9f",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/6c7d8e9f-0a1b-4c2d-8e3f-4a5b6c7d8e9f.mp4"
  }
]

What to prompt for

Name the concrete materials and textures in the frame, not the mood or the story. Fabric weave, skin pores, wet stone, foliage, fur, brushed metal, engraving: the more specific the noun, the more clearly the model knows where to spend its detail. The dog below shows it on fur, with the prompt pointed at the individual strands and the whiskers:

No promptPrompted

The prompted pass separates out the individual fur strands and sharpens the whiskers, where the plain pass leaves the coat softer and more uniform. Prompt for what the eye should land on, and let the rest come up with the even enhancement.

Only name detail that is actually in the source. The prompt biases which existing texture gets rebuilt, it does not add objects that were never there. Asking for detail the frame does not contain wastes the steer and can push artefacts.

When to leave it empty

The prompt earns its place in the creative mode, where the model is already inventing detail and a steer decides what it invents. In precise mode the model is holding to the source rather than inventing, so a prompt has far less room to act. Leave positivePrompt empty when the even, whole-frame enhancement is what you want, or when the footage has no single subject that deserves the detail budget over everything else.

Tips

  1. Name materials, not the scene. A prompt like "wet cobblestones and brick texture" steers better than a narrative description of the street. Use concrete nouns for the surfaces you care about.

  2. Point at one or two things. The prompt is a budget for where detail goes, so a short list of the elements that matter beats a long inventory of the whole frame.

  3. Only prompt for what is there. The steer biases existing texture. It does not add missing objects, and asking it to can introduce artefacts.

  4. Pair it with the creative mode. Prompting does the most in creativity: 1, where the model invents detail. In precise mode the effect is small.

  5. Skip it when the frame is even. A clip with no clear focal subject, or one you want enhanced uniformly, usually looks best with no prompt at all.