Sakhanda Wire
NVDA $217.23 -1.84% MSFT $539.44 +1.08% GOOGL $349.22 +0.45% META $736.72 -0.11% AMZN $254.76 +0.27%
← К новостям

FLUX.3 Image Klein теперь в Diffusers

Встречайте FLUX.3 Image Klein в Diffusers: новейшая открытая модель генерации изображений от Black Forest Labs
Опубликовано 15 октября 2026 года
Обновить на GitHub
Black Forest Labs представляет FLUX.3 Image Klein, и с самого первого дня модель работает в Diffusers. Одна модель поддерживает преобразование текста в изображение и преобразование изображения в изображение с несколькими референсами, а также добавляет новую возможность — управление компоновкой. Вы указываете в запросе ограничивающие рамки, чтобы задать расположение каждой части изображения или указать, какие части референсного изображения нужно переместить.

Обе открытые контрольные точки доступны в коллекции FLUX.3 Image Klein:

Контрольная точка Описание Параметры по умолчанию
black-forest-labs/flux-3-image-klein Дистиллированная по временным шагам, для быстрого вывода 16 шагов, без CFG
black-forest-labs/flux-3-image-klein-base Базовая модель 50 шагов, с CFG

рыжая лиса в заснеженном лесу (текст в изображение), та же лиса, перерисованная на основе этого изображения (изображение в изображение), чёрный силуэт бегущего человека в точечной технике на шартрезном фоне, нарисованный внутри подписанной ограничивающей рамки, и вязаный рыцарь, перемещённый из рамки «из» в рамку «в» рядом с вязаным драконом (редактирование компоновки)

Перейдите в пространство Hugging Face и создайте изображения прямо сейчас!

Кратко

  • Одна модель для преобразования текста в изображение, преобразования изображения в изображение с несколькими референсами и управления компоновкой с помощью ограничивающих рамок.
  • Дистиллированная контрольная точка создаёт изображение 1024 × 1024 примерно за 2 секунды на H100.
  • Веса NVFP4 и FP8 загружаются с помощью from_single_file, что позволяет использовать менее мощные графические процессоры.
  • Скрипты обучения LoRA для преобразования текста в изображение и редактирования изображений.
  • Поставляется как модульный конвейер Diffusers, поэтому блоки можно извлекать или добавлять собственные.

Содержание

  • Начало работы
  • Возможности FLUX.3
  • Базовая модель и квантованные варианты
  • Дообучение LoRA
  • Стоимость запуска
  • Архитектура
  • Модульный Diffusers
  • Попробовать

Начало работы

Установите последние версии diffusers и transformers (для текстового кодировщика Qwen3-VL):

pip install -U diffusers transformers

Загрузите дистиллированную контрольную точку и создайте изображение:

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("black-forest-labs/flux-3-image-klein")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

pipe(prompt="a red fox", output="images")[0].save("fox.png")

Возможности FLUX.3

Текст в изображение

FLUX.3 лучше всего реагирует на подробное описание сцены с указанием объекта, окружения, освещения, композиции и стиля. В официальном руководстве по составлению запросов от Black Forest Labs приведено больше советов. Дистиллированная контрольная точка по умолчанию создаёт изображение 1024 × 1024 за 16 шагов. Передайте height, width или num_inference_steps, чтобы изменить эти параметры.

prompt = (
    "A wide-angle wildlife photograph of a red fox standing alert in a snow-covered forest clearing at golden hour. "
    "The fox is centered in the frame, its thick orange winter coat contrasting with the fresh white snow, breath "
    "visible in the cold air. Snow-laden pine trees fill the softly blurred background, and low warm sunlight rakes "
    "across the scene from the left, casting long blue shadows."
)

fox = pipe(
    prompt=prompt,
    generator=torch.Generator().manual_seed(0),
    output="images"
)[0]
fox.save("fox.png")
Рыжая лиса, настороженно стоящая на заснеженной лесной поляне, освещённая слева низким золотистым солнцем
Текст в изображение

Изображение в изображение

Передайте референсное изображение (или несколько) с помощью аргумента image. Сформулируйте запрос как подпись к изображению, которое вы хотите получить, включив в него описание изменения.

prompt = (
    "The same red fox in the same snow-covered forest clearing, now at night under a full moon: cool blue "
    "moonlight, deep shadows, stars visible through the pine branches, the fox's eyes catching the light."
)
night = pipe(
    prompt=prompt,
    image=fox, 
    generator=torch.Generator().manual_seed(0),
    output="images",
)[0]
night.save("night.png")
Лиса с предыдущего изображения, освещённая холодным синим светом
Изображение в изображение

При использовании нескольких референсов ссылайтесь на них в запросе как на <ref_image_0>, <ref_image_1> и т. д. в порядке их передачи в image:

red_fox = pipe(prompt="a red fox", generator=torch.Generator().manual_seed(0), output="images")[0]
bench = pipe(prompt="a wooden bench", generator=torch.Generator().manual_seed(0), output="images")[0]

combined = pipe(
    prompt="The fox from <ref_image_0> sitting on the wooden bench from <ref_image_1> in a snowy setting.",
    image=[red_fox, bench],
    output="images",
)[0]

combined.save("combined.png")
Рыжая лиса, сидящая на сухой траве Деревянная скамейка из планок на фоне простой серой стены Та же лиса, сидящая на той же скамейке, со снегом на земле
<ref_image_0>: рыжая лиса <ref_image_1>: деревянная скамейка Лиса на скамейке

Управление компоновкой

Добавьте список регионов в формате JSON после описания. Каждый регион содержит id, bbox и desc, а в описании на него нужно сослаться как на <id>.

Рамки записываются как [y_min, x_min, y_max, x_max] — сначала координата y — в масштабе от 0 до 1000. Поскольку масштаб нормализован, одна и та же рамка работает при любом размере изображения.

Размещение регионов в новом изображении

layout_prompt = (
    "Minimalist graphic illustration featuring a black silhouette of a person <silhouette_1> centered against a "
    "solid, vibrant chartreuse background <background_1>. The figure is captured in a dynamic, mid-stride running "
    "pose, facing toward the left side of the frame. "
    '[{"id": "background_1", "bbox": [0, 0, 1000, 1000], "desc": "A flat field of neon yellow-green with a subtle '
    'paper texture and fine, organic grain."}, {"id": "silhouette_1", "bbox": [150, 150, 850, 850], "desc": "A '
    "black silhouette of a person in motion, made of dense stippled ink. The leading edges are solid; the trailing "
    'arm and leg dissolve into coarse square pixels and scattered dots."}]'
)

runner = pipe(prompt=layout_prompt, generator=torch.Generator().manual_seed(0), output="images")[0]
Схема: описание и два описания регионов слева, две рамки на сетке 0–1000 в центре и созданное изображение справа, где чёрный силуэт бегущего человека заполняет рамку силуэта на шартрезном фоне
desc каждого региона отображается внутри его bbox

Перемещение регионов в референсном изображении

При редактировании каждый регион указывает, откуда берётся его содержимое (src_bbox в референсе) и куда оно перемещается (tgt_bbox в результате). Регион с одинаковыми рамками остаётся на месте.

В этом примере вязаный рыцарь перемещается вверх и влево, а фон, утёс, игла, дракон и огонь фиксируются:

from diffusers.utils import load_image

knight_image = load_image("knight_orig.png")
edit_prompt = (
    "In <ref_image_0>, move the miniature grey amigurumi knight figure <knight_1> upwards and to the left along the "
    "yarn cliff <cliff_1>. Keep the rest of the image completely unchanged, preserving the blurred yarn backdrop "
    "<backdrop_1>, the large knitted dragon <dragon_1>, and the fiery orange thread <fire_1>. "
    '[{"id": "knight_1", "from": "ref_image_0", "src_bbox": [500, 150, 850, 350], "tgt_bbox": [194, 55, 544, 255], '
    '"desc": "A miniature amigurumi knight crocheted from thick grey woolen yarn."}, '
    '{"id": "backdrop_1", "from": "ref_image_0", "src_bbox": [0, 0, 1000, 1000], "tgt_bbox": [0, 0, 1000, 1000], '
    '"desc": "A soft, out-of-focus backdrop of cream and indigo knitted yarn."}, '
    '{"id": "cliff_1", "from": "ref_image_0", "src_bbox": [300, 0, 1000, 450], "tgt_bbox": [300, 0, 1000, 450], '
    '"desc": "A steep cliff of stacked yarn skeins in mustard, terracotta, and indigo."}, '
    '{"id": "needle_1", "from": "ref_image_0", "src_bbox": [420, 250, 550, 450], "tgt_bbox": [420, 250, 550, 450], '
    '"desc": "An oversized polished steel tapestry needle."}, '
    '{"id": "dragon_1", "from": "ref_image_0", "src_bbox": [100, 600, 950, 1000], "tgt_bbox": [100, 600, 950, 1000], '
    '"desc": "A large, fluffy knitted dragon in terracotta and mustard yarn."}, '
    '{"id": "fire_1", "from": "ref_image_0", "src_bbox": [350, 400, 650, 650], "tgt_bbox": [350, 400, 650, 650], '
    '"desc": "Curled puffs of fiery orange angora thread suspended in mid-air."}]'
)

moved = pipe(prompt=edit_prompt, image=knight_image, generator=torch.Generator().manual_seed(0), output="images")[0]
Слева: референс с исходной рамкой рыцаря. Справа: результат со стрелкой от исходной рамки к целевой; зафиксированные регионы обведены белым
Рыцарь перемещается из src_bbox в tgt_bbox, а остальная сцена остаётся на месте

Базовая модель и квантованные варианты

Базовая модель

Во всём описанном выше используется дистиллированная контрольная точка. Базовая контрольная точка выполняет 50 шагов с classifier-free guidance и предназначена для дообучения (см. раздел «Дообучение LoRA»).

Контрольные точки в формате одного файла

Black Forest Labs также поставляет трансформер в виде одного файла — в формате bf16 и двух квантованных форматах: fp8r (построчный FP8) и nvfp4. Загрузите любой из них с помощью from_single_file, а затем загрузите остальные компоненты по имени, чтобы трансформер bf16 не скачивался повторно.

Дообучение LoRA

FLUX.3 поддерживает как преобразование текста в изображение, так и преобразование изображения в изображение, что делает её отличной базой для пользовательских LoRA. В diffusers есть скрипты обучения DreamBooth LoRA для обеих задач (также можно обучать с помощью AI Toolkit от Ostris).

Ниже приведён пример преобразования текста в изображение, в котором модель обучается стилю карт Таро на наборе данных multimodalart/1920-raider-waite-tarot-public-domain с триггером trtcrd:

Стоимость запуска

В этом разделе мы рассмотрим потребление памяти и скорость генерации моделей.

Память

название пиковое выделение (после загрузки), ГиБ пиковое выделение (после вывода), ГиБ
nvfp4 (RTX6000) 13.4 15.3
fp8r (H100) 14.35 16.27
bf16 (H100) 18.80 20.72

Если у вас меньше памяти:

  • Загрузите квантованный трансформер.
  • Запустите текстовый кодировщик отдельно и освободите его. Он запускается только один раз для каждого изображения, до удаления шума.
  • Включите автоматическую выгрузку на CPU, которая перемещает каждый компонент на GPU только на время его работы (мы это не тестировали).

Скорость

Сквозное время работы дистиллированной контрольной точки (16 шагов), усреднённое по трём запускам после прогрева:

Рабочий процесс Размер результата Время Пиковая память
Текст в изображение 1024 × 1024 1.93 с 23.8 ГиБ
Изображение в изображение, один референс 1024 × 1024 1024 × 1024 3.87 с 23.8 ГиБ
Редактирование компоновки (рыцарь), один референс 1360 × 768 1360 × 768 4.10 с 23.8 ГиБ

Один NVIDIA H100 80 ГБ, без выгрузки, стандартный бэкенд attention.

Референсное изображение примерно вдвое увеличивает время. Токены референса присоединяются к той же последовательности, что текст и создаваемое изображение, поэтому референс 1024 × 1024 добавляет 4096 токенов к каждому вызову трансформера.

Архитектура

Рассмотрим модель по частям. Модель принимает три вида токенов:

  1. текст
  2. зашумлённое изображение, которое создаётся
  3. необязательные референсные изображения

От пикселей к токенам

FLUX.3 — потоковая модель генерации изображений в латентном пространстве. Это означает, что денойзер принимает на вход латенты и выдаёт латенты. Для декодирования латентов обратно в пиксели используется VAE. FLUX.3 использует ту же архитектуру VAE, что и Flux.2.

VAE FLUX.2 сжимает изображение в 8 раз по каждому направлению до 32 каналов, а затем каждая область 2 × 2 этого латентного представления упаковывается в один токен со 128 каналами.

Таким образом, один токен охватывает область размером 16 × 16 пикселей, а изображение 1024 × 1024 превращается в сетку 64 × 64 из 4096 токенов. Зашумлённое изображение изначально представляет собой случайный шум именно такой формы. Референс проходит через тот же VAE-кодировщик и упаковку, сохраняя собственный размер.

От запроса к токенам

Текстовый кодировщик — Qwen3-VL, модель для работы с изображениями и языком. FLUX.3 использует не только её последний слой. Она считывает скрытые состояния восьми из 36 слоёв (слои 4, 8, …, 32) и объединяет их, поэтому каждый текстовый токен до применения линейного слоя превращается в вектор размерности 8 × 2560 = 20 480, а затем проецируется до ширины трансформера 3072.

Это даёт трансформеру признаки с нескольких уровней языковой модели, а не только с последнего слоя. Запрос дополняется до числа токенов, кратного 80, и трансформер также обрабатывает дополнение, поэтому конвейер принимает по одному запросу за вызов.

Два этапа

Трансформер обрабатывает токены в два этапа:

  1. Этап 1: блоки для отдельных режимов. Каждый поток проходит через 5 блоков с собственными весами. Для текста, зашумлённого изображения и референсных изображений используются отдельные блоки.
  2. Этап 2: совместные блоки. Потоки объединяются в одну последовательность [text | image | reference], которая проходит через 28 блоков с общим набором весов.

Эти два этапа различаются тем, кто на кого может обращать внимание.

На первом этапе каждый поток обращается только к самому себе, поэтому сначала каждый тип токенов уточняется отдельно. На втором этапе каждый токен обращается ко всем остальным: изображение получает информацию из текста и референсов. Для сравнения, двойные потоковые блоки FLUX.2 также используют отдельные веса для текста и изображения, но позволяют им взаимодействовать с самого начала. FLUX.3 сначала полностью разделяет потоки, а затем объединяет их.

В конце текстовые и референсные токены просто отбрасываются. Только токены изображения проходят через выходные слои, которые предсказывают, как переместить их на один шаг ближе к чистому изображению.

Внутри одного блока

Каждый блок на обоих этапах имеет одинаковую форму. Attention и MLP работают параллельно над одним и тем же нормализованным входом, а их сумма добавляется обратно в остаточный поток.

Каждый блок начинается с LayerNorm, у которого нет собственных обучаемых масштаба и сдвига. Вместо этого масштаб, сдвиг и вентиль поступают из встраивания временного шага (это называется модуляцией). Внутри attention запросы и ключи нормализуются с помощью RMS, а затем получают позиционные встраивания RoPE.

В совместном блоке все токены используют одни и те же веса, но текстовые, графические и референсные токены получают собственные масштаб, сдвиг и вентиль.

Каждый токен получает собственный временной шаг

В FLUX.1 и FLUX.2 одно встраивание временного шага модулирует каждый токен. В FLUX.3 модуляция зависит от типа токена.

Зашумлённые токены изображения модулируются текущим временным шагом t. Текстовые и референсные токены всегда модулируются временным шагом 0, что означает «чистый, здесь не нужно удалять шум». Поэтому даже референс, почти совпадающий с результатом, помечается как заданный контекст, а не как то, что нужно сгенерировать.

Дистиллированная контрольная точка представляет собой flow map. Ей также сообщается временной шаг, к которому переходит каждый шаг. Это второе встраивание временного шага добавляется к модуляции каждого токена, поэтому каждый из 16 шагов может совершать более крупный переход.

Позиции в четырёх измерениях

Сам по себе attention не знает, где расположен токен (это явление называется эквивариантностью относительно перестановок). RoPE исправляет это, поворачивая каждый запрос и ключ на величину, зависящую от позиции токена. FLUX.3 использует четыре позиционные оси (t, h, w, l) (временной шаг, высота, ширина, длина последовательности) и выделяет каждой четверть (32 измерения) каждой головы attention размерностью 128:

Токены t: временной шаг h: высота w: ширина l: длина последовательности
текстовый токен i 0 0 0 i
токен изображения в (строка, столбец) 0 строка / 2 столбец / 2 0
референс k в (строка, столбец) 0 строка / 2 столбец / 2 −(k + 1)

Текстовые токены выстраиваются вдоль l, как слова в предложении. Изображение и референсы представляют собой двумерные сетки в (h, w), разделённые вдоль l. Поскольку референс использует те же координаты (h, w), что и результат, «та же точка в референсе» имеет для модели точное значение — на этом основано редактирование с помощью src_bbox / tgt_bbox.

Цикл удаления шума

FLUX.3 — модель сопоставления потоков. Генерация начинается с чистого шума, и на каждом из 50 шагов трансформер предсказывает скорость. Это направление от шума к чистому изображению. Планировщик делает по нему один шаг.

На каждом шаге также можно получить текущую оценку моделью конечного изображения. Если декодировать эту оценку на нескольких шагах, видно, как формируется изображение:

Лиса, её поза и освещение уже сформированы к 10-му шагу, пока уровень шума всё ещё равен 0,97. Заснеженные ветви и текстура шерсти появляются лишь на последних шагах. Планировщик FLUX.3 использует большое временное смещение (6,93), благодаря чему уровень шума остаётся высоким большую часть процесса: 44 из 50 шагов выполняются при σ = 0,5. Мы создали эту иллюстрацию, добавив в конвейер небольшой блок, что приводит нас к модульному Diffusers.

Если вы впервые знакомитесь с сопоставлением потоков, воспользуйтесь нашим доступным руководством для начинающих и видеоматериалом, объясняющими принцип работы.

Модульный Diffusers

FLUX.3 поставляется как конвейер Modular Diffusers.

Просмотр рабочих процессов

Можно вывести список рабочих процессов и точные блоки каждого из них, не загружая веса.

Однократное кодирование, многократная генерация

Извлеките текстовый кодировщик, закодируйте запрос один раз, освободите кодировщик и создавайте изображения из кэшированных встраиваний.

Добавление шага внутрь цикла

Приведённая выше иллюстрация удаления шума создана с помощью дополнительного блока, который записывает оценку моделью чистого изображения на каждом шаге:

Попробовать

Создали что-то с помощью FLUX.3? Делитесь своими LoRA и конвейерами на Hub. Мы будем рады их увидеть! 😎

Модели, упомянутые в этой статье 2

Наборы данных, упомянутые в этой статье 1

Пространства, упомянутые в этой статье 2

Коллекции, упомянутые в этой статье 1

Сообщество

Загружайте изображения, аудио и видео, перетаскивая их в поле ввода текста, вставляя или нажимая здесь.
Нажмите или вставьте сюда, чтобы загрузить изображения

· Зарегистрируйтесь или войдите, чтобы оставить комментарий

Модели, упомянутые в этой статье 2

Наборы данных, упомянутые в этой статье 1

Пространства, упомянутые в этой статье 2

Коллекции, упомянутые в этой статье 1

Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.

Впервые опубликовано изданием Hugging Face

Читать оригинал на Hugging Face ↗

Текст и изображения принадлежат Hugging Face и приводятся здесь с указанием авторства и ссылкой на оригинальную публикацию.

← К новостям

Ещё новости

Все последние новости