live
MODEL IDbfl:flux@3-image-klein

FLUX 3 Image Klein

Black Forest Labs
by
Available with Zero Data Retention

FLUX 3 Image Klein is the distilled checkpoint of Black Forest Labs' open-weights FLUX 3 image model, covering text-to-image generation and reference-based editing in a single model. It is built for speed without giving up quality, which suits interactive applications, rapid iteration, and high-volume production.

FLUX 3 Image Klein

Prompting

How to prompt FLUX 3 Image Klein for text-to-image: writing a full scene caption, holding a layout with the seed, sizing up to 4K, and trading steps for speed.

Introduction

FLUX 3 Image Klein was trained on full scene captions: paragraphs that state the framing, the subject, the background and the light. Black Forest Labs pairs it with a separate upsampler that rewrites short prompts into that form. On Runware there is no rewriting step, so the model reads your prompt exactly as you send it, and the caption is yours to write.

A complete caption is also what makes the model predictable. Every clause you write is a choice the model no longer makes for you, and the 5.6B checkpoint follows a long, specific caption closely.

This guide covers how to write that caption, what a short prompt leaves open, how to hold a layout with seed while you iterate, how to size the output up to 4K, and how steps and acceleration trade quality for speed.

Writing a scene caption

A caption that the model reads well covers four things in plain sentences: the framing, the subject, the background and the lighting. A short style line at the end sets the medium, the lens, the depth of field and the palette. The prompts in this guide all follow that order.

A medium shot from the waist up, the subject on the right third of the frame, a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture, Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall, Soft daylight from a large window on the left, gentle fill on his face from the laptop screen, Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette
FramingSubjectBackgroundLightingStyle

Framing goes first because it decides where everything else lands. "The subject on the right third of the frame" is why the man sits right of center with the office opening up to his left. The subject clause carries the action as well as the person: "one hand raised mid-gesture" is the difference between a stock photo of someone talking and one of someone sitting.

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@3-image-klein',
  positivePrompt: 'A medium shot from the waist up, the subject on the right third of the frame: a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture. Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall. Soft daylight from a large window on the left, gentle fill on his face from the laptop screen. Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette.',
  width: 1248,
  height: 832
})
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@3-image-klein",
            "positivePrompt": "A medium shot from the waist up, the subject on the right third of the frame: a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture. Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall. Soft daylight from a large window on the left, gentle fill on his face from the laptop screen. Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette.",
            "width": 1248,
            "height": 832
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "6c1f2a8e-3b4d-4e5f-9a0b-1c2d3e4f5a6b",
      "model": "bfl:flux@3-image-klein",
      "positivePrompt": "A medium shot from the waist up, the subject on the right third of the frame: a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture. Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall. Soft daylight from a large window on the left, gentle fill on his face from the laptop screen. Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette.",
      "width": 1248,
      "height": 832
    }
  ]'
runware run bfl:flux@3-image-klein \
  positivePrompt="A medium shot from the waist up, the subject on the right third of the frame: a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture. Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall. Soft daylight from a large window on the left, gentle fill on his face from the laptop screen. Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette." \
  width=1248 \
  height=832
{
  "taskType": "imageInference",
  "taskUUID": "6c1f2a8e-3b4d-4e5f-9a0b-1c2d3e4f5a6b",
  "model": "bfl:flux@3-image-klein",
  "positivePrompt": "A medium shot from the waist up, the subject on the right third of the frame: a man in his early thirties with short curly hair and round tortoiseshell glasses, wearing a sage green overshirt over a white t-shirt, talking on a video call at a standing desk with an open laptop, one hand raised mid-gesture. Behind him, slightly out of focus, a bright home office with a pale oak bookshelf, a trailing pothos and a framed print on a white wall. Soft daylight from a large window on the left, gentle fill on his face from the laptop screen. Photoreal lifestyle stock photography, 35mm lens, shallow depth of field, fresh neutral palette.",
  "width": 1248,
  "height": 832
}
Response
{
  "data": [
    {
      "taskType": "imageInference",
      "taskUUID": "6c1f2a8e-3b4d-4e5f-9a0b-1c2d3e4f5a6b",
      "imageUUID": "d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a",
      "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a.jpg"
    }
  ]
}

What a short prompt leaves open

A short prompt still returns an image, but every gap gets filled with the model's own defaults, and some of those defaults are not ones you can ship. The two pairs below use the same seed for each prompt, so the only difference is the text.

The four-word prompt came back with a label, and the model filled it with lettering that spells nothing. A product shot with invented text on it is unusable for a catalog. The caption says "a plain unlabeled body", and the label is gone. When the label should carry real copy, quote it, as the text rendering guide shows.

The short prompt produced a room that could belong to any chain hotel, with flat lamp light and a navy rug nobody asked for. The caption decides the plaster, the brass, the throw and the direction of the light, which is what turns a generic room into a listing photo for a specific property.

Holding a layout with the seed

The same prompt with the same seed returns the same image. Keep the seed fixed and change a single clause, and most of the layout carries over while the clause you changed takes effect. That is the fastest way to explore lighting or styling on a composition you already like.

Only the lighting sentence changed between the two prompts. The doorway framing, the sofa, the coffee table and both olive trees stay where they were, while the string lights and the evening skyline arrive with the new clause. The decking turned into concrete on the way, so treat the seed as a strong anchor rather than a lock: the more you change, the more of the scene moves with it.

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@3-image-klein',
  positivePrompt: 'A wide shot from standing height at the terrace doorway, the seating centered: an L-shaped outdoor sofa with oatmeal cushions, a low concrete coffee table and two potted olive trees on the rooftop terrace of a city apartment. Behind it, a glass balustrade and a skyline of mid-rise rooftops. Dusk just after sunset, warm string lights glowing overhead, lit windows across the skyline and a deep blue sky. Photoreal real estate photography, 24mm lens.',
  width: 1248,
  height: 832,
  seed: 777
})
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@3-image-klein",
            "positivePrompt": "A wide shot from standing height at the terrace doorway, the seating centered: an L-shaped outdoor sofa with oatmeal cushions, a low concrete coffee table and two potted olive trees on the rooftop terrace of a city apartment. Behind it, a glass balustrade and a skyline of mid-rise rooftops. Dusk just after sunset, warm string lights glowing overhead, lit windows across the skyline and a deep blue sky. Photoreal real estate photography, 24mm lens.",
            "width": 1248,
            "height": 832,
            "seed": 777
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "8a7b6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
      "model": "bfl:flux@3-image-klein",
      "positivePrompt": "A wide shot from standing height at the terrace doorway, the seating centered: an L-shaped outdoor sofa with oatmeal cushions, a low concrete coffee table and two potted olive trees on the rooftop terrace of a city apartment. Behind it, a glass balustrade and a skyline of mid-rise rooftops. Dusk just after sunset, warm string lights glowing overhead, lit windows across the skyline and a deep blue sky. Photoreal real estate photography, 24mm lens.",
      "width": 1248,
      "height": 832,
      "seed": 777
    }
  ]'
runware run bfl:flux@3-image-klein \
  positivePrompt="A wide shot from standing height at the terrace doorway, the seating centered: an L-shaped outdoor sofa with oatmeal cushions, a low concrete coffee table and two potted olive trees on the rooftop terrace of a city apartment. Behind it, a glass balustrade and a skyline of mid-rise rooftops. Dusk just after sunset, warm string lights glowing overhead, lit windows across the skyline and a deep blue sky. Photoreal real estate photography, 24mm lens." \
  width=1248 \
  height=832 \
  seed=777
{
  "taskType": "imageInference",
  "taskUUID": "8a7b6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
  "model": "bfl:flux@3-image-klein",
  "positivePrompt": "A wide shot from standing height at the terrace doorway, the seating centered: an L-shaped outdoor sofa with oatmeal cushions, a low concrete coffee table and two potted olive trees on the rooftop terrace of a city apartment. Behind it, a glass balustrade and a skyline of mid-rise rooftops. Dusk just after sunset, warm string lights glowing overhead, lit windows across the skyline and a deep blue sky. Photoreal real estate photography, 24mm lens.",
  "width": 1248,
  "height": 832,
  "seed": 777
}
Response
{
  "data": [
    {
      "taskType": "imageInference",
      "taskUUID": "8a7b6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
      "imageUUID": "3b4c5d6e-7f8a-4b9c-8d0e-1f2a3b4c5d6e",
      "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/3b4c5d6e-7f8a-4b9c-8d0e-1f2a3b4c5d6e.jpg",
      "seed": 777
    }
  ]
}

Choosing the output size

width and height take any value from 128 to 4096 in steps of 16, so the aspect ratio is yours to set: a 2:1 web banner and a 9:16 story both come out of the model at their final size. Both are required for text-to-image.

The model generates natively up to 4K. A large render holds detail you can crop into, which is what makes it worth the extra time and cost.

The crop covers less than a tenth of the frame, and the throw still shows separate cables and loose wool fibers next to the grain of the walnut slab. One 4K render can supply a listing's hero image and its detail shots.

Klein is billed by the compute each image takes, and the cost climbs faster than the pixel count. A 4K square takes more than ten times as long as a 1024 × 1024 one. Draft compositions small, and render at the delivery size once the caption is settled.

Steps and acceleration

steps defaults to 16 and acceleration to medium. Both trade a little of the model's work for speed, and since the bill follows the compute, fewer steps also cost less. The set below is one caption and one seed at five settings.

On this portrait, the face, the grease smudge, the glasses and the pegboard survive every setting. Measured at 1024 × 1024, the settings compare like this:

SettingTimeCost against the default
16 steps, medium (default)about 3 s1×
8 stepsabout 2.4 s½
4 stepsabout 2 s½
acceleration: "none"about 3.6 s1½×
acceleration: "high"about 2 s½

Dropping to 8 steps or high acceleration halves the bill with little visible change here, which makes them a sensible setting for previews and high-volume jobs. Check them against your own subject before switching a production pipeline over, and keep the default for the final render when in doubt.

Tips for best results

  1. Write all four parts. Framing, subject, background and lighting, then a style line. Any part you skip is a decision the model makes on its own, and it rarely makes the one you would have.

  2. State absences as what is there. Klein has no negative prompt, so say "a plain unlabeled bottle" or "an empty street" rather than listing what to leave out. FLUX 3 Image Klein Base takes a negative prompt if you need one.

  3. Quote any text you want in the frame. Text the prompt doesn't spell out comes back as invented lettering. Either quote the exact words or describe the surface as blank.

  4. Lock the seed while you iterate. Change one clause per run so you can tell what each change did.

  5. Draft small, deliver large. Settle the caption at 1K, then render once at the size you will ship.

  6. Use fewer steps for previews. 8 steps or high acceleration cost half of the default and are fast enough for interactive tools.