Diffusers documentation

MiniMax-H3-Image

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMax-H3-Image

MiniMax-H3-Image — это модель для работы с изображениями от MiniMax, основанная на MiniMax-H3, предназначенная для генерации изображений по текстовому описанию и редактирования изображений с опорой на референс. Чекпоинт доступен по адресу MiniMaxAI/MiniMax-H3-Image.

Как и MiniMax-H3, он интегрирован только в виде блоков Modular Diffusers: MiniMaxH3ImageBlocks и их MiniMaxH3ImageModularPipeline представляют собой всю интеграцию.

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)

Трансформер и текстовый энкодер занимают по ~62 ГБ в формате bfloat16 и не помещаются одновременно на GPU с 80 ГБ памяти, поэтому в примерах используется автоматическое выгружение (auto offloading): ComponentsManager перемещает каждый компонент на ускоритель в тот момент, когда блок в нём нуждается. При этом пиковое потребление памяти для изображения размером 4736x3552 составляет около 65 ГБ.

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

prompt = (
    "An overhead photograph of a rustic farm-to-table spread on a weathered wooden table: a round loaf of sourdough "
    "on burlap, wedges of cheese on a dark board, a copper bowl of vegetables, vine tomatoes, olives and walnuts."
)
image = pipe(
    prompt=prompt, height=3552, width=4736, generator=torch.Generator().manual_seed(42), output="images"
)[0]

Редактирование опорного изображения:

from diffusers.utils import load_image

reference = load_image("https://huggingface.co/MiniMaxAI/MiniMax-H3-Image/resolve/main/examples/reference1.png")
image = pipe(
    prompt="Keep everything in <Picture 1> as it is, but remove the headphones and have the two hosts fist bump.",
    image=reference,
    height=4096,
    width=4096,
    generator=torch.Generator().manual_seed(1234),
    output="images",
)[0]

Компоненты

КомпонентКласс
transformerMiniMaxH3ImageTransformer2DModel
text_encoderQwen3VLForConditionalGeneration
vaeAutoencoderKLMiniMaxH3Image
tokenizer, processorТокенизатор текстового энкодера и Qwen3VLProcessor
schedulerMiniMaxH3Scheduler

Текстовый энкодер — тот же самый, что используется в MiniMax-H3. Чекпоинт хранит собственную копию, чтобы репозиторий был самодостаточным; Hub дедуплицирует идентичные файлы между репозиториями, поэтому копия не занимает там дополнительное место.

Рабочие процессы

Рабочий процесс выбирается на входе image:

  • text2image генерирует изображение из prompt.
  • image_conditioned генерирует изображение по prompt и одному или нескольким опорным изображениям, переданным в качестве image. В промпте они упоминаются по порядку как <Picture 1>, <Picture 2> и так далее. Опорные изображения сохраняют свой исходный размер: каждое масштабируется только в том случае, если его короткая сторона выходит за пределы от 1024 до 2048 пикселей, и никогда не приводится к размеру генерируемого изображения.

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

Улучшение промпта

MiniMax-H3-Image-PE — это модель расширения промптов от MiniMax: она переписывает короткий запрос в детальное описание, с которым модель генерации изображений работает лучше всего, и рекомендует соотношение сторон. Кастомные блоки diffusers/minimax-h3-image-pe-blocks запускают её как отдельный конвейер. Для их работы требуется xgrammar и около 18 ГБ видеопамяти.

import torch
from diffusers import ModularPipeline

enhancer = ModularPipeline.from_pretrained("diffusers/minimax-h3-image-pe-blocks", trust_remote_code=True)
enhancer.load_components(dtype=torch.bfloat16, device_map="cuda")

state = enhancer(prompt="a cozy cabin in the snow")
prompt, aspect_ratio = state.get("prompt"), state.get("aspect_ratio")

Передайте эталонные изображения как image, чтобы расширить инструкцию для редактирования. Затем передайте prompt в пайплайн изображений, указав height и width, соответствующие aspect_ratio.

Размер изображения

height и width задают размер возвращаемого изображения и по умолчанию равны 2048. Модель генерирует изображения разрешением 4 мегапикселя и выше: если запрошенный размер меньше, генерация выполняется на более крупном холсте с тем же соотношением сторон, после чего изображение масштабируется обратно, поэтому запрос 1024x1024 обходится так же, как запрос 2048x2048. Параметр min_generation_area задаёт этот порог в пикселях; передайте 1024, чтобы всегда генерировать в запрошенном размере. В любом случае стороны холста округляются до кратных 32.

MiniMax рекомендует размеры 4096x4096 для соотношения 1:1, 4736x3552 для 4:3, 5024x3360 для 3:2, 5472x3072 для 16:9 и 6272x2688 для 21:9, либо те же размеры с переставленными высотой и шириной для портретных форматов.

Выборка

  • Чекпоинт выполняет сэмплирование за 6 шагов по своим sample_sigmas, а трансформер имеет один выходной слой на каждый шаг, поэтому параметра num_inference_steps нет.
  • Модель получена с помощью дистилляции с наведением, поэтому в ней нет наводящего элемента, negative_prompt или guidance_scale.

MiniMaxH3ImageModularPipeline

класс diffusers.MiniMaxH3ImageModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Модульный text2image для MiniMax-H3-Image: генерация изображений по тексту (text2image) и редактирование по опорному изображению (image_conditioned).

MiniMax-H3-Image выполняет трансформер MiniMax-H3 без аудио по одной упакованной последовательности строк текста, строк эталонных изображений и строк сгенерированного изображения, представляющего собой единственную латентную рамку. Чекпоинт дважды дистиллирован: guidance вшит в веса, поэтому нет guider, нет negative_prompt и нет guidance_scale, а сэмплирование происходит на фиксированной сетке из шести шагов с одним выходным слоем трансформера на каждый шаг, поэтому нет и num_inference_steps.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3-Image")
pipe.load_components(dtype=torch.bfloat16)

MiniMaxH3ImageBlocks

класс diffusers.MiniMaxH3ImageBlocks

< >

( )

Модульные блоки конвейера для MiniMax-H3-Image: text2image и редактирование по опорному изображению (image_conditioned), когда передан параметр image.

Поддерживаемые рабочие процессы:

  • text2image: требуется prompt
  • image_conditioned: требуется prompt, image

Компоненты: image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) tokenizer (Qwen2Tokenizer) processor (Qwen3VLProcessor) vae (AutoencoderKLMiniMaxH3Image) scheduler (MiniMaxH3Scheduler) transformer (MiniMaxH3ImageTransformer2DModel)

Конфигурации: reference_min_short_edge (по умолчанию: 1024) reference_max_short_edge (по умолчанию: 2048) vision_min_short_edge (по умолчанию: 1024) vision_max_short_edge (по умолчанию: 1024) sample_sigmas (по умолчанию: [1.0, 0.9675236940383911, 0.8875485062599182, 0.75, 0.5327739119529724, 0.23200887441635132, 0.0]): сетка сэмплирования, на которой были дистиллированы выходные головы по шагам для данного чекпоинта.

Входные данные: image (Image | list, необязательный): Справочное изображение для редактирования или список таких изображений. В промпте они упоминаются по порядку как <Picture 1>, <Picture 2>, … prompt (str): Промпт для управления генерацией, одна строка. vision_images (list, необязательный): Справочные изображения, изменённые по размеру для текстового энкодера. reference_images (list, необязательный): Справочные изображения, изменённые по размеру для VAE. generator (Generator, необязательный): Генератор запроса. Из него извлекается одна апостериорная выборка на каждое справочное изображение. height (int): Высота возвращаемого изображения в пикселях. width (int): Ширина возвращаемого изображения в пикселях. min_generation_area (int, необязательный, по умолчанию 4194304): Минимальная площадь, в пикселях, при которой генерируется изображение. Если height x width меньше, изображение генерируется на холсте, масштабированном до этой площади, и затем возвращается к размеру height x width после декодирования. Передайте 1024, чтобы всегда генерировать в запрошенном размере. reference_latents (list, необязательный): Условные латенты справочных изображений. Их форма определяет геометрию каждого справочного изображения. latents (Tensor): Предварительно сгенерированный шум формы (1, latent_channels, latent_height, latent_width), используемый вместо извлечения. reference_noise (list, необязательный): Предварительно сгенерированный шум для справочных изображений, один тензор формы каждого элемента reference_latents, используемый вместо извлечений. *denoiser_input_fields (None,необязательный): Структурное описание упакованной последовательности, которую трансформер читает по имени: token_tags, position_ids и два тензора индексов строк. output_type (str,необязательный*, по умолчанию pil): Формат вывода: ‘pil’, ‘np’, ‘pt’.

Вывод: images (list): Сгенерированные изображения.

Update on GitHub