Diffusers documentation
MiniMax-H3-Image
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]Компоненты
| Компонент | Класс |
|---|---|
transformer | MiniMaxH3ImageTransformer2DModel |
text_encoder | Qwen3VLForConditionalGeneration |
vae | AutoencoderKLMiniMaxH3Image |
tokenizer, processor | Токенизатор текстового энкодера и Qwen3VLProcessor |
scheduler | MiniMaxH3Scheduler |
Текстовый энкодер — тот же самый, что используется в 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
< source >( 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.
MiniMaxH3ImageBlocks
Модульные блоки конвейера для MiniMax-H3-Image: text2image и редактирование по опорному изображению (image_conditioned), когда передан параметр image.
Поддерживаемые рабочие процессы:
text2image: требуетсяpromptimage_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):
Сгенерированные изображения.