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 est un modèle d’images de MiniMax basé sur MiniMax-H3, destiné à la génération d’images à partir de texte et à l’édition d’images de référence. Vous pouvez trouver le point de contrôle sur MiniMaxAI/MiniMax-H3-Image.

Comme MiniMax-H3, il est intégré uniquement sous forme de blocs Modular Diffusers : MiniMaxH3ImageBlocks et leur MiniMaxH3ImageModularPipeline constituent l'intégralité de l'intégration.

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)

Le transformer et l'encodeur de texte font environ 62 Go chacun en bfloat16 et ne tiennent pas ensemble sur un GPU de 80 Go, les exemples utilisent donc le déchargement automatique : le ComponentsManager déplace chaque composant sur l'accélérateur lorsqu'un bloc en a besoin. Une image de 4736x3552 atteint alors un pic d'environ 65 Go.

Texte vers image :

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]

Édition d'une image de référence :

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]

Composants

ComposantClasse
transformerMiniMaxH3ImageTransformer2DModel
text_encoderQwen3VLForConditionalGeneration
vaeAutoencoderKLMiniMaxH3Image
tokenizer, processorLe tokenizer de l'encodeur de texte et un Qwen3VLProcessor
schedulerMiniMaxH3Scheduler

L’encodeur de texte est le même que celui utilisé par MiniMax-H3. Le point de contrôle conserve sa propre copie afin que le dépôt soit autonome ; le Hub déduplique les fichiers identiques entre les dépôts, de sorte que la copie n’occupe pas d’espace de stockage supplémentaire.

Flux de travail

Le flux de travail est sélectionné sur l'entrée image :

  • text2image génère à partir de prompt.
  • image_conditioned génère à partir de prompt et d’une ou plusieurs images de référence passées en tant que image. Le prompt les désigne dans l’ordre sous la forme <Picture 1>, <Picture 2>, et ainsi de suite. Les références conservent leur propre taille : chacune est redimensionnée uniquement si son côté le plus court est en dehors de la plage 1024 à 2048 pixels, et jamais à la taille de l’image générée.

Le prompt est utilisé tel quel, sans modèle de discussion, et les descriptions longues et complètes donnent les meilleurs résultats. Un prompt de modification indique généralement ce qu’il faut conserver, puis ce qu’il faut modifier, avant de décrire l’image cible dans son intégralité.

Amélioration du prompt

MiniMax-H3-Image-PE est le modèle d’expansion de prompt de MiniMax : il réécrit une demande brève en une description détaillée, du type avec lequel le modèle d’image fonctionne le mieux, et recommande un ratio d’aspect. Les blocs personnalisés diffusers/minimax-h3-image-pe-blocks l’exécutent comme un pipeline autonome. Ils nécessitent xgrammar et environ 18 Go de mémoire GPU.

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")

Transmettez les images de référence en tant que image pour étendre une instruction d’édition. Transmettez ensuite prompt au pipeline d’images, avec une height et une width correspondant à aspect_ratio.

Taille de l'image

height et width définissent la taille de l’image renvoyée et valent 2048 par défaut. Le modèle génère à partir de 4 mégapixels : une demande plus petite est générée sur un canevas plus grand de même ratio d’aspect puis redimensionnée, si bien qu’une demande de 1024x1024 coûte autant qu’une demande de 2048x2048. min_generation_area fixe ce seuil en pixels ; passez 1024 pour générer toujours à la taille demandée. Dans tous les cas, les côtés du canevas sont arrondis à des multiples de 32.

MiniMax recommande 4096x4096 pour 1:1, 4736x3552 pour 4:3, 5024x3360 pour 3:2, 5472x3072 pour 16:9 et 6272x2688 pour 21:9, ou les mêmes tailles avec la hauteur et la largeur inversées pour les formats portrait.

Échantillonnage

  • Les échantillons du point de contrôle sont générés en 6 étapes sur ses sample_sigmas, et le transformateur possède une tête de sortie par étape, il n'y a donc pas de num_inference_steps.
  • Le modèle est distillé avec guidage, il n'y a donc ni guideur, ni negative_prompt, ni guidance_scale.

MiniMaxH3ImageModularPipeline

classe 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 )

A ModularPipeline for MiniMax-H3-Image: text-to-image (text2image) and reference-image editing (image_conditioned).

MiniMax-H3-Image exécute le transformeur MiniMax-H3 sans audio sur une séquence compacte de lignes de texte, les lignes des images de référence et les lignes de l’image générée, qui constitue une seule trame latente. Le point de contrôle est distillé deux fois : le guidage est intégré dans les poids, il n’y a donc ni guideur, ni negative_prompt et ni guidance_scale, et l’échantillonnage s’effectue sur une grille fixe de six étapes avec une tête de sortie du transformeur par étape, il n’y a donc pas non plus de num_inference_steps.

import torch
from diffusers import ModularPipeline

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

MiniMaxH3ImageBlocks

classe diffusers.MiniMaxH3ImageBlocks

< >

( )

Blocs de pipeline modulaires pour MiniMax-H3-Image : text2image, et édition d'image de référence (image_conditioned) lorsque image est transmis.

Workflows pris en charge :

  • text2image : nécessite prompt
  • image_conditioned : nécessite prompt, image

Composants : image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) tokenizer (Qwen2Tokenizer) processor (Qwen3VLProcessor) vae (AutoencoderKLMiniMaxH3Image) scheduler (MiniMaxH3Scheduler) transformer (MiniMaxH3ImageTransformer2DModel)

Configurations : reference_min_short_edge (par défaut : 1024) reference_max_short_edge (par défaut : 2048) vision_min_short_edge (par défaut : 1024) vision_max_short_edge (par défaut : 1024) sample_sigmas (par défaut : [1.0, 0.9675236940383911, 0.8875485062599182, 0.75, 0.5327739119529724, 0.23200887441635132, 0.0]) : la grille d'échantillonnage sur laquelle les têtes de sortie par étape du point de contrôle ont été distillées.

Entrées : image (Image | list, facultatif) : L'image de référence de l'édition, ou une liste d'images. Le prompt les référence dans l'ordre sous la forme <Picture 1>, <Picture 2>, … prompt (str) : Le prompt pour guider la génération, une seule chaîne de caractères. vision_images (list, facultatif) : Les images de référence redimensionnées pour l'encodeur de texte. reference_images (list, facultatif) : Les images de référence redimensionnées pour le VAE. generator (Generator, facultatif) : Le générateur de la requête. Un échantillon a posteriori par référence est tiré de celui-ci. height (int) : Hauteur de l'image renvoyée en pixels. width (int) : Largeur de l'image renvoyée en pixels. min_generation_area (int, facultatif, par défaut 4194304) : La plus petite surface, en pixels, à laquelle une image est générée. Une height x width plus petite est générée sur un canvas mis à l'échelle jusqu'à cette surface puis redimensionnée à height x width après décodage. Passez 1024 pour toujours générer à la taille demandée. reference_latents (list, facultatif) : Les latents de conditionnement des images de référence. Leur forme est l'endroit d'où provient la géométrie de chaque référence. latents (Tensor) : Bruit pré-généré de forme (1, latent_channels, latent_height, latent_width), utilisé à la place du tirage. reference_noise (list, facultatif) : Bruit pré-généré pour les images de référence, un tenseur de la forme de chaque entrée de reference_latents, utilisé à la place des tirages. *denoiser_input_fields (None,facultatif) : La description structurelle de la séquence compacte que le transformer lit par nom : token_tags, position_ids et les deux tenseurs d'indices de lignes. output_type (str,facultatif*, par défaut pil) : Format de sortie : ‘pil’, ‘np’, ‘pt’.

Sorties : images (list) : Images générées.

Update on GitHub