> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bfl.ml/llms.txt
> Use this file to discover all available pages before exploring further.

# Audio and speech

> Learn how to prompt FLUX 3 for dialogue, voiceover, ambience, sound effects, music, and voice direction.

export const PromptDisplay = ({prompt}) => {
  const [copied, setCopied] = useState(false);
  const copy = () => {
    navigator.clipboard.writeText(prompt);
    setCopied(true);
    setTimeout(() => setCopied(false), 2000);
  };
  return <div className="not-prose" style={{
    marginTop: "1rem"
  }}>
      <div style={{
    backgroundColor: "#1a1a1a",
    borderRadius: "1rem",
    padding: "1.25rem 1.5rem",
    display: "flex",
    flexDirection: "column",
    gap: "1rem"
  }}>
        <p style={{
    color: "#e5e5e5",
    fontSize: "1rem",
    lineHeight: 1.6,
    margin: 0,
    fontFamily: "inherit"
  }}>
          {prompt}
        </p>
        <div style={{
    display: "flex",
    justifyContent: "flex-end"
  }}>
          <button onClick={copy} style={{
    backgroundColor: copied ? "#3d8a5b" : "var(--aspen-evergreen, #486A58)",
    color: "#fff",
    border: "none",
    borderRadius: "0.375rem",
    padding: "0.25rem 0.6rem",
    fontSize: "0.7rem",
    fontWeight: 600,
    cursor: "pointer",
    transition: "background-color 0.2s"
  }}>
            {copied ? "Copied!" : "Copy prompt"}
          </button>
        </div>
      </div>
    </div>;
};

export const PromptCompare = ({rows, weak, strong, weakLabel = "Weak", strongLabel = "Strong"}) => {
  const list = rows && rows.length ? rows : [{
    weak,
    strong
  }];
  const lines = v => Array.isArray(v) ? v : v == null ? [] : [v];
  const renderText = v => <p className="prompt-compare__text">
      {lines(v).map((l, j) => <span key={j} className="prompt-compare__line">
          {l}
        </span>)}
    </p>;
  return <div className="not-prose prompt-compare">
      {list.map((r, i) => <div className="prompt-compare__row" key={i}>
          <div className="prompt-compare__cell prompt-compare__cell--weak">
            <span className="prompt-compare__label prompt-compare__label--weak">
              {weakLabel}
            </span>
            {renderText(r.weak)}
          </div>
          <div className="prompt-compare__cell prompt-compare__cell--strong">
            <span className="prompt-compare__label prompt-compare__label--strong">
              {strongLabel}
            </span>
            {renderText(r.strong)}
          </div>
        </div>)}
    </div>;
};

export const LoopClip = ({src, poster, borderRadius = "0.75rem"}) => {
  const videoRef = useRef(null);
  const [muted, setMuted] = useState(true);
  const toggleMute = e => {
    e.stopPropagation();
    const v = videoRef.current;
    const next = !muted;
    setMuted(next);
    if (v) v.muted = next;
  };
  const iconBtn = {
    position: "absolute",
    top: "0.9rem",
    right: "0.9rem",
    zIndex: 3,
    display: "inline-flex",
    alignItems: "center",
    justifyContent: "center",
    width: "2.4rem",
    height: "2.4rem",
    padding: 0,
    borderRadius: "999px",
    border: "none",
    background: "rgba(12, 14, 18, 0.62)",
    backdropFilter: "blur(6px)",
    color: "#fff",
    cursor: "pointer",
    transition: "background 160ms ease"
  };
  return <div className="not-prose" style={{
    position: "relative",
    width: "100%",
    marginBottom: "1rem"
  }}>
      <video ref={videoRef} src={src} poster={poster} autoPlay loop muted={muted} playsInline preload="metadata" style={{
    width: "100%",
    display: "block",
    borderRadius
  }} />

      <button type="button" onClick={toggleMute} aria-label={muted ? "Unmute" : "Mute"} style={iconBtn}>
        {muted ? <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" />
            <line x1="23" y1="9" x2="17" y2="15" />
            <line x1="17" y1="9" x2="23" y2="15" />
          </svg> : <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" />
            <path d="M15.54 8.46a5 5 0 0 1 0 7.07" />
            <path d="M19.07 4.93a10 10 0 0 1 0 14.14" />
          </svg>}
      </button>
    </div>;
};

FLUX 3 generates audio with the video. A scene that clearly implies sound may be enough for a first pass. When the sound matters, describe it as part of the shot instead of leaving the model to infer the whole soundtrack.

<LoopClip src="/images/flux3/audio/audio-hero-jazz-club.mp4" />

<PromptDisplay prompt={'One continuous unbroken real-time ten-second cinematic shot inside a small dim basement jazz club, late set. A live trio — upright bass, brushed drums, and piano — plays a slow, smoky number continuously from the first frame to the last, never stopping. Slow dolly along the bar toward a bartender in a rolled-sleeve white shirt polishing a glass. Over the music, he leans toward a regular seated at the bar and says in a low, warm voice: "Last call was an hour ago. For you, the night is still young." The music keeps playing under and after his words. Audio: the jazz trio constant throughout, murmur of a few late patrons, the soft clink of the glass as he sets it down, and a faint espresso-machine hiss from the back. No on-screen text, no subtitles.'} />

## Name the sound you want

A useful video prompt can include four kinds of sound:

| Layer    | What to describe                                   | Example                                                            |
| -------- | -------------------------------------------------- | ------------------------------------------------------------------ |
| Speech   | Who speaks, the exact words, and how they say them | `The mechanic says, "Try it now." Quiet, matter-of-fact delivery.` |
| Ambience | The sound of the place                             | `Rain against the windows, low diner chatter, refrigerator hum`    |
| Effects  | Sounds tied to visible actions                     | `A ceramic mug clicks against the saucer`                          |
| Music    | Style, pace, and where it sits in the mix          | `A sparse piano cue under the scene, low in the mix`               |

You do not need all four. A quiet room with one line of dialogue may only need speech and room tone. A product clip may need effects and music but no voice.

```text theme={null}
[Shot and action].
Dialogue or voiceover: [speaker and exact words].
Ambience: [place].
Effects: [visible actions].
Music: [style and role].
```

Specific sources usually work better than broad mood words. `Distant traffic and rain ticking against a metal awning` gives the model more to work with than `moody ambience`.

Name the sound source you want rather than asking for silence. `Rain against the window` or `a soft piano bed` gives the model something concrete; `quiet room tone` may collapse into static or dead air.

## Dialogue and voiceover

Put the exact spoken words in quotation marks and say who delivers them.

For a visible speaker, describe the person speaking on camera:

<PromptDisplay prompt={'Medium close-up of a tired station attendant behind the glass. She looks toward the stranded passenger and says, "The 6:10 is delayed again. They say ten minutes." Low, matter-of-fact delivery. Fluorescent room tone and rain against the platform roof. No on-screen text or subtitles.'} />

For an off-screen line, call it a voiceover:

<PromptDisplay prompt={'Locked shot of a studio microphone in a small treated booth. An off-screen voiceover says exactly once, "Most good tools have one thing in common. You stop noticing them." Close, dry recording. Rain against the window. No music, no second voice, no on-screen text or subtitles.'} />

A quoted line without a visible speaker or a voiceover cue may be treated as text that belongs in the frame. Make the distinction explicit when it matters.

<Note>
  A visible speaker gives FLUX 3 a face to lip-sync. An off-screen voice needs a clear `voiceover` or `narration` cue.
</Note>

## Direct the speaker

Phrases such as `professional, warm, and engaging` leave most of the voice to the model. They often produce the same polished read: careful diction, even pauses, and more energy than the scene needs.

Give the voice a few concrete anchors instead:

| Direction | Useful detail                                                         |
| --------- | --------------------------------------------------------------------- |
| Person    | Age range and accent, when either matters to the character            |
| Register  | Low, mid, bright, soft, rough, or another audible quality             |
| Recording | Close and dry, across a room, phone microphone, public-address system |
| Delivery  | Lightly amused, hesitant, practical, talking to one friend            |
| Guardrail | No announcer delivery, no sales voice, do not over-enunciate          |

<PromptDisplay prompt="A British man in his thirties with a warm low-mid voice, recorded close and dry. He sounds conversational and lightly amused, like he is letting a friend in on something. Imperfect human timing, one relaxed breath, no announcer delivery." />

Use only the details that change the read. Long stacks of personality adjectives can fight each other. Directions such as `one audible breath` can also make that breath too prominent. If you want natural timing, ask for a relaxed read and judge the result by ear.

### Write dialogue people can say

Voice direction cannot rescue stiff copy. Read the line aloud before generating it.

* Use contractions when the character would use them.
* Cut setup the listener can already see.
* Avoid a slogan at the end of every line.
* Give the speaker a reason to say the words to someone in the scene.
* Keep punctuation simple. Too many pauses can turn into a sing-song rhythm.

<PromptCompare weak={'A confident and engaging presenter says, "Today, we are excited to embark on a transformative journey that will redefine what is possible."'} strong={'A presenter checks the monitor, looks back to camera, and says, "That was the hard part. Now we can see if it actually works." Dry, conversational delivery.'} />

## Leave room for the line

Speech takes time, and the line may not start right away.

A short line in a longer clip is safer than copy written to fill every second. If the final word gets cut off, shorten the line or increase the clip duration. Timing instructions can give the model a target, but they are not exact:

```text theme={null}
The voiceover speaks once and aims to finish by 8 seconds. For the final two seconds, only rain against the window.
```

Do not force several speakers, a long script, and multiple visual beats into a short clip. Split the scene when each part needs its own timing.

Multi-speaker attribution and interruptions are still review-heavy. Name each speaker, keep turns short, and judge each take by ear before relying on who said what.

## Build the mix around the scene

Name sounds that have a source in the frame or just outside it. This keeps the audio tied to the picture.

<LoopClip src="/images/flux3/audio/build-the-mix-diner.mp4" />

<PromptDisplay prompt={'Medium close-up of an older man at a diner counter at night. He turns a chipped mug in both hands, then looks up and says, "Coffee\'s been cold for twenty minutes. I keep pretending that\'s why I\'m still here." The camera drifts forward by a few inches. Rain ticks against the window. Distant traffic sits under the room tone. The mug clicks against the saucer when he sets it down. No music, no on-screen text, no subtitles.'} />

If speech is the focus, keep other voices out of the background. Crowd conversation, a talking radio, or another narrator can compete with the main line. Weather, machinery, footsteps, and traffic are easier to layer under speech because they do not introduce more words.

## Languages and accents

FLUX 3 can generate speech in many languages and accents, and it can switch languages within one performance. Name each language directly, place it beside the line it belongs to, and describe the delivery as you would for any other speaker.

You can provide dialogue in native script, in a romanized or transliterated form, or as a plain-language instruction that names the target language and meaning. Use quoted dialogue when the exact words matter. No one format is always best, so use the one that fits how you write and review the result by ear.

For one speaker changing languages:

* Label each line with its language.
* Put the lines in the intended order.
* Say that the same speaker continues across the switch.
* Keep each segment short enough to leave room for a natural pause.

For several multilingual speakers, identify each person by a visible role or stable description. Assign each speaker a language, line, and delivery, then separate the turns instead of asking for overlapping dialogue.

Treat accents as part of a character and situation rather than as an isolated adjective. Pair the accent with pace, projection, emotion, and who the person is speaking to: `natural Hindi delivery, warm and relieved`, or `French spoken softly over a suit radio, with quiet wonder`.

<Note>
  Language, accent, line order, speaker attribution, and timing are directable targets rather than exact controls. Review each take by ear when the performance matters.
</Note>

### Switch languages in one voice

<LoopClip src="/images/flux3/audio/multilingual-aurora-conductor.mp4" />

<PromptDisplay prompt={'One continuous unbroken real-time ten-second cinematic shot inside a retro-futurist glass observation train gliding beneath a vivid violet aurora above snow-covered mountains. Medium shot of one conductor standing alone at a brass intercom, clearly visible from the waist up as moving aurora light crosses the curved windows behind her. She looks toward the passengers beside camera and makes one calm announcement in two languages, in this exact order, using the same warm, lightly amused voice. First in English: "Next stop: the northern lights." Then, after a short natural pause, in German, spoken slowly and clearly at a relaxed, unhurried pace with a gentle rest between words: "Bitte halten Sie Ihre Träume fest." She takes her time with the German line and says each line only once with natural pronunciation. No other speech. Audio: steady rail rhythm, soft wind against the glass, one departure bell, and a restrained analog-synth shimmer kept below the voice. No on-screen text, no subtitles.'} />

The language labels, exact order, and `same voice` cue make the handoff explicit without turning the prompt into a timing sheet.

### Give each speaker a language

<LoopClip src="/images/flux3/audio/multilingual-orbital-greenhouse.mp4" />

<PromptDisplay prompt={'One continuous unbroken real-time ten-second cinematic shot inside an orbital greenhouse during a meteor shower. Medium two-shot: an astronaut in an orange work suit steadies a glowing irrigation valve on the left while an astronaut in a blue work suit reaches for the petal-shaped roof controls on the right. The orange-suited astronaut speaks first in Spanish, practical and excited: "Las raíces están listas." After she finishes, the blue-suited astronaut replies in French, smiling with quiet wonder: "Alors, ouvrons le ciel." Keep the speakers distinct, the turns short and separate, with no overlap and no other speech. As the French line ends, the glass roof petals open and meteor light sweeps across rows of floating plants. Audio: soft ventilation, water moving through transparent pipes, roof servos, faint radio texture, and distant muted meteor impacts; no music. No on-screen text, no subtitles.'} />

Visible roles such as `orange-suited astronaut` and `blue-suited astronaut` connect each language and line to the intended person.

### Use native-script dialogue

<LoopClip src="/images/flux3/audio/native-script-hindi-chai-stall.mp4" />

<PromptDisplay prompt={'One continuous unbroken real-time ten-second cinematic close shot of a chai vendor at his roadside tea stall on a rainy evening, framed chest-up under the warm tungsten bulb of the stall awning, his face large and clearly visible. Rain falls steadily beyond the awning. He pours steaming chai in a high arc between a steel pot and a glass, sets the glass down toward the camera, smiles, and says once in Hindi: "बारिश फिर शुरू हो गई। आइए, गरम चाय पीजिए।" Natural, warm Hindi delivery like an invitation to a regular customer; no announcer voice, no other speech. Audio: steady rain on the tarpaulin awning, the long pour of hot chai, the clink of the glass on the wooden counter, a distant auto-rickshaw passing; no music. No on-screen text, no subtitles.'} />

Native-script dialogue can make the intended words explicit. Name the language as well as the quoted line, then describe how the speaker should deliver it.

## Keeping a voice across clips

Reuse the full voice direction when a character returns. Keep the person, register, recording setup, and delivery wording stable, then replace only the script and scene details.

This can preserve the same kind of voice, but it does not guarantee the same performer on every generation. Treat the prompt as casting direction rather than a fixed speaker identity. Compare takes by ear before cutting them into the same sequence.

## Troubleshooting

| What happened                   | What to change                                                                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| The spoken line appears as text | Name a visible speaker or say `voiceover`, keep the exact line in quotes, and add `no on-screen text or subtitles`                 |
| The read sounds like an ad      | Replace generic praise words with a person, recording setup, and social situation; add `no announcer delivery` or `no sales voice` |
| The cadence is sing-song        | Simplify punctuation, remove repetitive sentence shapes, and ask for a relaxed conversational rhythm                               |
| The words become garbled        | Remove competing speech such as crowd conversation, a talking radio, or a second voice                                             |
| The last word is cut off        | Shorten the line, raise the duration, or ask for the line to finish earlier                                                        |
| The soundscape feels generic    | Name the source of each sound and connect effects to visible actions                                                               |
| The mix is too busy             | Keep the one or two layers the scene needs and remove the rest                                                                     |

## Related pages

<CardGroup cols={2}>
  <Card title="Text-to-Video" icon="film" href="/guides/prompting_video_text_to_video">
    Build the shot, action, camera movement, pacing, and scene around the audio.
  </Card>

  <Card title="Video Generation Overview" icon="film" href="/guides/prompting_video_overview">
    Choose the FLUX 3 video workflow that fits the source material and shot.
  </Card>

  <Card title="FLUX 3 Video" icon="waveform-lines" href="/flux_3/flux3_video">
    See how synchronized audio works in the API and how to turn it off.
  </Card>

  <Card title="Camera Terms, Prompts & Examples" icon="camera" href="/guides/prompting_video_camera_terms">
    Pair sound direction with clear framing and camera movement.
  </Card>
</CardGroup>
