live
MODEL IDbfl:flux@video-edit-fast

FLUX Video Edit [fast]

Black Forest Labs
by

FLUX Video Edit [fast] is Black Forest Labs' instruction-based video editing model for changing an existing clip with a natural-language prompt. It can add, remove, or replace objects and characters; alter settings, styles, actions, and on-screen text; and revise or translate dialogue while preserving unedited motion, camera work, timing, framing, and audio. It supports source clips up to 15 seconds and produces 24 FPS output at up to 720p while retaining the original duration and aspect ratio.

FLUX Video Edit [fast]

Dialogue, on-screen text and localization

How to change what someone says with FLUX Video Edit [fast], translate a line into another language, and swap the on-screen text in the same frame.

Introduction

A returns policy changes from sixty days to ninety, and the clip announcing it is otherwise perfect: the presenter is on brand, the light is right, the gesture lands. One number in it is now wrong, and fixing a number has always meant a re-record: a new session, a new approval, and a presenter who has to be available.

FLUX Video Edit [fast] rewrites the spoken line and re-syncs the mouth to the new words, on footage that was never shot with an edit in mind. The same request shape covers translating a line into another language and changing the text printed inside the frame.

Play both. Her gesture, her framing, her room and her voice are the source's, and only the sentence is new. This guide covers rewriting a line, the time budget that governs how much you can say, translating a clip, and changing text on a surface in the shot.

The request

Nothing structural changes for a dialogue edit. The clip goes in inputs.video, and the instruction says what should be said.

Try in Playground
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-edit-fast',
  positivePrompt: 'Make her say "Our returns window is now ninety days, and postage is free."',
  inputs: {
    video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/6b2e9c47-1d38-4f50-a3d8-7f2c5b9e1a46.mp4'
  },
  deliveryMethod: 'async'
})
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-edit-fast",
            "positivePrompt": "Make her say \"Our returns window is now ninety days, and postage is free.\"",
            "inputs": {
                "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/6b2e9c47-1d38-4f50-a3d8-7f2c5b9e1a46.mp4"
            },
            "deliveryMethod": "async"
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "d18f4a62-3c95-4b70-8e21-7a5c2d9f6b34",
      "model": "bfl:flux@video-edit-fast",
      "positivePrompt": "Make her say \"Our returns window is now ninety days, and postage is free.\"",
      "inputs": {
        "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/6b2e9c47-1d38-4f50-a3d8-7f2c5b9e1a46.mp4"
      },
      "deliveryMethod": "async"
    }
  ]'
runware run bfl:flux@video-edit-fast \
  positivePrompt="Make her say \"Our returns window is now ninety days, and postage is free.\"" \
  inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/6b2e9c47-1d38-4f50-a3d8-7f2c5b9e1a46.mp4 \
  deliveryMethod=async
{
  "taskType": "videoInference",
  "taskUUID": "d18f4a62-3c95-4b70-8e21-7a5c2d9f6b34",
  "model": "bfl:flux@video-edit-fast",
  "positivePrompt": "Make her say \"Our returns window is now ninety days, and postage is free.\"",
  "inputs": {
    "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/6b2e9c47-1d38-4f50-a3d8-7f2c5b9e1a46.mp4"
  },
  "deliveryMethod": "async"
}
Response
[
  {
    "taskType": "videoInference",
    "taskUUID": "d18f4a62-3c95-4b70-8e21-7a5c2d9f6b34",
    "videoUUID": "2c7a5e94-8b16-4d30-9f47-3e1d6c8a5b29",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/2c7a5e94-8b16-4d30-9f47-3e1d6c8a5b29.mp4"
  }
]

Put the new line in quotation marks. The quotes separate the words to be spoken from the instruction wrapped around them, and without them a phrase like make her say the returns window is now ninety days is as likely to be read as a description of a scene as a script.

Changing what someone says

The pattern is make {who} say "{what}". Naming the speaker matters as soon as more than one person is in frame, and it costs nothing when only one is.

In the pair above, what changes is the mouth and the voice. What does not change is the shape of the delivery: she still pauses where she paused, gestures on the same beat, and settles at the same moment, because the body's timing belongs to the source. That is what makes the edit read as the same take rather than a new one.

The practical consequence is that a rewrite works best when the new line has the same shape as the old one. Swapping a number, a date, a price, a product name or a short clause keeps the rhythm the body is already performing. Replacing a statement with a question asks the face to perform an intonation the original never had.

The time budget

This is the constraint that decides whether a dialogue edit is possible at all. The new line has to fit the time the original speech occupied. There is no duration on this model and no way to extend a clip, so the seconds available are fixed before you start.

Ask for more words than there is time for and they will not all render:

The second clip does not speed up to accommodate the script. It runs out of video partway through the sentence, which for a policy announcement means shipping a clip that stops mid-clause.

A rough working figure is two to three words per second of speech in the source, and the only reliable way to use it is to count the words in the original line rather than the seconds in the clip. A six-second clip with a two-second line has two seconds of speech to work with, not six.

The budget is the speech, not the shot. Silence at the head and tail of a clip is not spare capacity, because the model is replacing a spoken passage in place rather than re-timing the performance around a new one.

When a script genuinely will not fit, the options are all upstream: cut the message into more clips, record a longer source, or use a model built to generate a performance from a script rather than edit one.

Translating a line

Translation is the same edit with the instruction pointed at the language instead of the words. Because the model is re-syncing the mouth anyway, the result is a lip-synced localization rather than a dub laid over unchanged footage:

Two details in that instruction are doing real work.

"The same sentence" points at the audio already in the clip, so you do not have to transcribe it. For a line you want translated exactly as recorded, this is more reliable than retyping it, because a retyped line is a new script and a new chance to drift.

"With no English words" is the clause that stops a partial translation. Brand names, product names and technical terms are the usual leaks, and if you want them left in the source language, name them: "say the same sentence in German, but keep the product name in English".

Languages are not equally compressible. A sentence that takes four seconds in English can take five in German, and the time budget does not grow to accommodate it. Check the longest target language first. If the line fits in German it will fit in most things, and if it does not, you want to know before you commission the English master.

Localizing this way keeps one thing no dubbing workflow can: the same person, in the same room, in every market. There is no second casting, no continuity risk between language versions, and no set of markets that got a different presenter because the first one was unavailable.

On-screen text

Text printed inside the frame is edited the same way, and it is the other half of a localization that a dub alone leaves broken. Signage, packaging, labels, stencils, shelf talkers and hand-written boards all sit in shot and all say the wrong thing in a new market:

Say which surface carries the text and the exact replacement string, in capitals if the original is in capitals. "Change the stencil on the wooden crate to read HARVEST" names a physical object and a literal result. "Change the text" names neither.

Short strings on a flat, well-lit, front-facing surface are the reliable case. Text that curves around a bottle, sits at a steep angle, is small in frame, or is partly occluded by a moving subject is asking for a much harder render, and long strings of small type are where the letterforms give out.

Localizing a whole asset

Dialogue and on-screen text are two edits, and they belong in one prompt. Stacking them means the frame is rendered once with both changes rather than twice with a chance to disagree:

Say the same sentence entirely in French, with no English words.
Change the stencil on the wooden crate to read RECOLTE.
One request, one market

Say the same sentence entirely in French, with no English words. Change the stencil on the wooden crate to read RECOLTE.

That is a full market version of an asset from a single source clip, and the whole set of markets is the same prompt with two substitutions. One sentence per edit is what keeps the two from being read as one instruction, and it is why the French text and the French audio can be different strings without confusing the model.

Accented characters are where on-screen text renders least reliably. If a target string carries diacritics, check the rendered letterforms at full size before shipping, and consider whether an unaccented form of the word is acceptable in that market. Spoken audio does not have this problem, so a language can be safe to dub and awkward to print.

What the audio track does

Only the spoken line is ever rewritten. Everything else the microphone picked up is carried through untouched, which is why an unrelated edit never needs a clause asking for it to survive. The same rule cuts the other way: a silent source returns a silent result, and since there is no audio input here, a clip that arrives with no sound cannot be given a voice by asking for one. Generate the speech elsewhere and bring it in through a model that takes an audio input.

The limit worth knowing before you plan around it is that the sound bed cannot be edited on its own. Asking to strip crowd noise, traffic or room ambience while keeping the voice does not work, and the background comes back with the request unchanged. Fix the bed in your edit, where you have a fader, rather than in the prompt.

Tips

  1. Quote the new line. Quotation marks separate the script from the instruction, and without them a sentence can be read as a scene description.

  2. Name the speaker when more than one person is in frame. "Make the woman on the left say" resolves what "make him say" cannot.

  3. Count the words in the original line, not the seconds in the clip. The budget is the speech that is being replaced, not the runtime.

  4. Keep the new line the same shape as the old one. Numbers, dates and product names swap cleanly. A statement turned into a question asks the face for an intonation it never performed.

  5. Say "the same sentence" to translate. It points at the recorded audio instead of asking you to transcribe it, which removes a chance to drift.

  6. Add "with no English words". Partial translations that leave the brand or the technical term behind are the common failure, so state which way you want it.

  7. Test the longest language first. German or French will overrun a budget that English fits comfortably, and you want that news before the master is approved.

  8. Name the surface for on-screen text. "The stencil on the wooden crate" is a target. "The text" is not.

  9. Stack the dialogue and the text edit. One render with both changes beats two passes that can disagree.

  10. Check diacritics at full size. Accented letterforms are the least reliable part of a text edit, and a word that is safe to say can still be awkward to print.

  11. Do not try to clean the sound bed. Crowd noise, traffic and room ambience survive a request to remove them. Dialogue is the only part of the track this model rewrites, so the bed is a job for your edit.