Diffusers documentation
Qwen-Image 2.1
Qwen-Image 2.1
Qwen-Image 2.1 codifica el prompt y las imágenes de condición junto con un modelo Qwen3-VL y luego desruidifica la imagen objetivo con un transformer de flujo único y causal por bloques. Consulte QwenImage21Transformer2DModel para la atención causal por bloques, los procesadores de atención y causal_condition.
Los valores predeterminados son los que recomienda Qwen: 40 pasos y sin guía. Pasa un negative_prompt junto con true_cfg_scale > 1 para activar la guía libre de clasificador, lo que duplica el trabajo por paso.
import torch
from diffusers import QwenImage21Pipeline
pipe = QwenImage21Pipeline.from_pretrained("Qwen/Qwen-Image-2.1", dtype=torch.bfloat16).to("cuda")
# Text-to-image
image = pipe("A capybara wearing a wizard hat, oil painting").images[0]
image.save("t2i.png")
# Image-conditioned editing
edited = pipe("Move it to a snowy mountain top", image=image).images[0]
edited.save("edit.png")Imágenes de múltiples condiciones
Pase una lista a image y cada entrada se convierte en su propio bloque en la secuencia conjunta: el codificador de Qwen3-VL las ve como contexto visual y el VAE aporta sus tokens latentes. La atención causal por bloques mantiene cada bloque internamente bidireccional, mientras permite que los bloques posteriores y la imagen objetivo atiendan a los anteriores, por lo que el orden en que las pase es el orden en que el modelo las lee.
edited = pipe("Put the flowers from the first image into the second scene", image=[flowers, scene]).images[0]Atención más rápida con flex_attention
El QwenImage21AttnProcessor predeterminado ejecuta el prefill causal por bloques como una llamada de atención por segmento de prefijo. No requiere compilación y funciona en cualquier compilación de PyTorch. QwenImage21FlexAttnProcessor expresa la misma máscara como una única llamada a flex_attention, lo cual es más rápido una vez que el modelo está compilado.
Compila el modelo al cambiar al procesador flex. Un
flex_attentionsin compilar materializa la matriz completa de puntuaciones de atención en fp32, lo cual es mucho más lento y agota la memoria a alta resolución.
from diffusers.models.transformers.transformer_qwenimage21 import QwenImage21FlexAttnProcessor
pipe.transformer.set_attn_processor(QwenImage21FlexAttnProcessor())
pipe.transformer.compile()Carga de puntos de control de un solo archivo
import torch
from diffusers import QwenImage21Pipeline, QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_single_file(
"https://huggingface.co/Comfy-Org/Qwen-Image-2.1/blob/main/diffusion_models/qwen_image_2.1_bf16.safetensors",
dtype=torch.bfloat16,
)
pipe = QwenImage21Pipeline.from_pretrained("Qwen/Qwen-Image-2.1", transformer=transformer, dtype=torch.bfloat16).to(
"cuda"
)Sigmas de muestreo
Los autores de modelos pueden configurar una cuadrícula de muestreo predeterminada con sample_sigmas en la configuración de la pipeline. Al cargar un checkpoint publicado, su cuadrícula predeterminada y la configuración del scheduler se restauran automáticamente.
Para experimentar con una cuadrícula diferente en tiempo de ejecución, pase sigmas a la llamada de la pipeline:
# Use the checkpoint's default sampling grid.
image = pipe(prompt).images[0]
# Override the default grid for this call.
image = pipe(prompt, sigmas=[1.0, 0.8, 0.5, 0.2]).images[0]La cuadrícula personalizada anterior ilustra la API; la calidad de la generación depende del checkpoint y de la cuadrícula. Las listas de Sigma excluyen
el sigma terminal, que el scheduler añade. Los sigmas explícitos reemplazan a los sample_sigmas configurados, y cualquiera de
las dos listas determina el número de pasos en lugar de num_inference_steps. Si no se proporciona ninguna, el pipeline utiliza num_inference_steps para generar el schedule. El scheduler aplica su procesamiento configurado a cualquiera de las dos cuadrículas.
Modular
Qwen-Image 2.1 también está disponible como pipeline modular. Los mismos bloques ejecutan la generación de texto a imagen y la generación condicionada por imagen: pase image para condicionar en una o más imágenes. La guía sin clasificador se configura a través del componente guider en lugar de un argumento de llamada true_cfg_scale, y la caché KV de prefijo está activada por defecto (use_kv_cache=False la desactiva).
import torch
from diffusers import ClassifierFreeGuidance, ModularPipeline
pipe = ModularPipeline.from_pretrained("Qwen/Qwen-Image-2.1")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")
image = pipe(prompt="A capybara wearing a wizard hat, oil painting").images[0]
# Turn classifier-free guidance on for an edit.
pipe.update_components(guider=ClassifierFreeGuidance(guidance_scale=4.0))
edited = pipe(prompt="Move it to a snowy mountain top", negative_prompt="blurry", image=image).images[0]El checkpoint de Turbo se corresponde con sus propios bloques (QwenImage21TurboAutoBlocks): se ejecuta sin un guider, no toma un negative_prompt y muestrea la cuadrícula de sigma que incluye. ModularPipeline.from_pretrained selecciona los bloques de Turbo a partir de la entrada sample_sigmas en la configuración del checkpoint, por lo que no es necesario configurar nada:
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("Qwen/Qwen-Image-2.1-Turbo")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")
image = pipe(prompt="A capybara wearing a wizard hat, oil painting").images[0]QwenImage21Pipeline
clase diffusers.QwenImage21Pipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLQwenImage21text_encoder: Qwen3VLForConditionalGenerationprocessor: Qwen3VLProcessortransformer: QwenImage21Transformer2DModelsample_sigmas: list[float] | None = None )
Parámetros
- scheduler (FlowMatchEulerDiscreteScheduler) — Programador utilizado para desruidar los latentes de la imagen codificada.
- vae (AutoencoderKLQwenImage21) — Autoencoder variacional que mapea imágenes hacia y desde el espacio latente de 64 canales.
- text_encoder (
Qwen3VLForConditionalGeneration) — Modelo Qwen3-VL que genera las incrustaciones conjuntas de texto e imagen. - processor (
Qwen3VLProcessor) — Procesador que construye la plantilla de chat y tokeniza el prompt y las imágenes de condición. - transformer (QwenImage21Transformer2DModel) — El transformer de flujo único con causalidad por bloques que desruidiza los latentes.
- sample_sigmas (
list[float], opcional) — Sigmas de muestreo predeterminados configurados por el autor del modelo, excluyendo la sigma terminal. Su longitud determina el número de pasos de desruido. Para experimentar con una cuadrícula diferente en tiempo de ejecución, pasesigmasa__call__.
Generación de texto a imagen y generación condicionada por imagen con Qwen-Image 2.1.
Las imágenes de prompt y de condición se codifican juntas mediante un modelo Qwen3-VL, por lo que una imagen de condición ocupa los espacios de visión que el codificador reservó para ella y el transformer ve una secuencia intercalada de texto e imágenes.
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Nonenegative_prompt: str | list[str] = Nonetrue_cfg_scale: float = 1.0height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 40sigmas: list[float] | None = Nonenum_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']output_resolution: int = 1024use_kv_cache: bool = True ) → ~pipelines.qwenimage.QwenImagePipelineOutput or tuple
Parámetros
- prompt (
strolist[str], opcional) — El prompt para guiar la generación de imágenes. Pasaprompt_embedsen su lugar para proporcionar embeddings directamente. - image (
PipelineImageInput, opcional) — Una o más imágenes de condición, como una imagen PIL o un array de numpy. Se codifican por el codificador de texto como contexto visual y por el VAE en tokens latentes que se antepone al ruido. Una lista es un conjunto de imágenes compartido por cada prompt del lote, no una entrada por prompt. - negative_prompt (
strolist[str], opcional) — El prompt que no debe guiar la generación de la imagen. Se ignora cuandotrue_cfg_scaleno es mayor que 1. - true_cfg_scale (
float, opcional, valor predeterminado 1.0) — Escala de guía sin clasificador. Se activa contrue_cfg_scale > 1junto con un prompt negativo. Qwen-Image 2.1 está diseñado para muestrear sin guía, por lo que el valor predeterminado es 1.0. - height (
int, opcional) — Altura en píxeles de la imagen generada. Si se omite, se deriva de la relación de aspecto de la imagen de condición. - width (
int, opcional) — Ancho en píxeles de la imagen generada. Si se omite, se deriva de la relación de aspecto de la imagen de condición. - num_inference_steps (
int, opcional, valor predeterminado 40) — Número de pasos de desruido. Se ignora cuando se usasigmaso elsample_sigmasconfigurado en el pipeline; la longitud de esa secuencia determina el número de pasos. - sigmas (
list[float], opcional) — Sigmas de muestreo a probar en esta llamada, excluyendo la sigma terminal. Anula elsample_sigmasconfigurado en el pipeline y determina el número de pasos de desruido. El programador aplica su procesamiento configurado a estos valores. - num_images_per_prompt (
int, opcional, valor predeterminado 1) — Número de imágenes generadas por indicación. - generator (
torch.Generatorolist[torch.Generator], opcional) — Generador(es) para hacer la generación determinista. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas que omiten la codificación del prompt. Pasaprompt_embeds_maskjunto con ellas. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara booleana que marca las posiciones válidas deprompt_embeds. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas, utilizadas en lugar denegative_prompt. Pasanegative_prompt_embeds_maskjunto con ellas. - negative_prompt_embeds_mask (
torch.Tensor, opcional) — Máscara booleana que marca las posiciones válidas denegative_prompt_embeds. - output_type (
str, opcional, por defecto"pil") — Formato de salida,"pil","np","pt"o"latent". - return_dict (
bool, opcional, valor predeterminadoTrue) — Si se debe devolver un~pipelines.qwenimage.QwenImagePipelineOutputen lugar de una tupla simple. - attention_kwargs (
dict, opcional) — Se transmite al procesador de atención. - callback_on_step_end (
Callable, opcional) — Se llama al final de cada paso de desruido. - callback_on_step_end_tensor_inputs (
list[str], opcional, valor predeterminado["latents"]) — Tensores del bucle de desruido que se pasan acallback_on_step_end. Deben estar listados en_callback_tensor_inputsdel pipeline. - output_resolution (
int, opcional, valor predeterminado 1024) — Lado objetivo utilizado para derivarheight/widthy para redimensionar las imágenes de condición. - use_kv_cache (
bool, opcional, por defectoTrue) — Almacena en caché las claves y valores del texto y de la imagen de condición después del primer paso. Es válido porquecausal_conditionmodula esos tokens desdet = 0, haciendo que sus activaciones sean independientes del paso. Alternar esta opción no reproduce la misma imagen bit a bit en precisión reducida. La caché hace que el paso de decodificación atienda con un diseño de secuencia diferente al del paso de prellenado, por lo que ambos se dividen en bloques de forma distinta y caen en redondeos diferentes; ambos coinciden con una referencia en fp32 dentro de la misma tolerancia. Una diferencia de un ULP en el primer bloque se amplifica entonces con 32 bloques y cada paso del muestreador, por lo que ambas configuraciones producen muestras igualmente válidas pero visualmente distintas. Para fijar una muestra, fije esta bandera.Alternar esta opción no reproduce la misma imagen bit a bit en precisión reducida. La caché hace que el paso de decodificación atienda con un diseño de secuencia diferente al del paso de prellenado, por lo que los dos se dividen en bloques de forma distinta y caen en redondeos diferentes; ambos coinciden con una referencia en fp32 dentro de la misma tolerancia. Una diferencia de un ULP en el primer bloque se amplifica entonces por 32 bloques y cada paso del muestreador, por lo que las dos configuraciones producen muestras igualmente válidas pero visualmente distintas. Fije una muestra fijando esta bandera.
Devuelve
~pipelines.qwenimage.QwenImagePipelineOutput o tuple
~pipelines.qwenimage.QwenImagePipelineOutput si return_dict es True, de lo contrario una tuple cuyo primer
elemento es una lista con las imágenes generadas.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
>>> import torch
>>> from diffusers import QwenImage21Pipeline
>>> pipe = QwenImage21Pipeline.from_pretrained("Qwen/Qwen-Image-2.1", dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A capybara wearing a wizard hat, reading a book by candlelight, oil painting"
>>> image = pipe(prompt).images[0]
>>> image.save("qwenimage21.png")encode_prompt
< source >( prompt: str | list[str]image: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Noneimage_pad_mask: typing.Optional[torch.Tensor] = None )
Parámetros
- prompt (
strolist[str], opcional) — Prompt a codificar. - image (
list[PipelineImageInput], opcional) — Imágenes de condición para codificar junto con el prompt. - device (
torch.device) — Dispositivo de Torch. - num_images_per_prompt (
int) — Número de imágenes generadas por prompt. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Omite la codificación si se proporciona.
QwenImagePipelineOutput
clase diffusers.pipelines.qwenimage.pipeline_output.QwenImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Clase de salida para las tuberías de Stable Diffusion.
QwenImage21ModularPipeline
clase diffusers.QwenImage21ModularPipeline
< 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 )
Un ModularPipeline para Qwen-Image 2.1.
QwenImage21AutoBlocks
Pipeline modular automático para la generación de texto a imagen y generación condicionada por imagen usando Qwen-Image 2.1.
- para la generación de texto a imagen, solo necesitas proporcionar
prompt - para la generación condicionada por imagen, debes proporcionar
prompteimage(una imagen o una lista)
Flujos de trabajo admitidos:
text2image: requierepromptimage_conditioned: requiereprompt,image
Componentes:
image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) processor
(Qwen3VLProcessor) vae (AutoencoderKLQwenImage21) scheduler (FlowMatchEulerDiscreteScheduler) guider
(ClassifierFreeGuidance) transformer (QwenImage21Transformer2DModel)
Entradas:
image (Image | list, opcional):
Imagen(es) de referencia para el desruido. Puede ser una sola imagen o una lista de imágenes.
output_resolution (int, opcional, valor predeterminado 1024):
Longitud del lado objetivo utilizada para derivar el tamaño de salida y para redimensionar las imágenes de condición.
prompt (str):
El prompt o prompts para guiar la generación de imágenes.
negative_prompt (str, opcional):
El prompt o prompts que no deben guiar la generación de imágenes.
generator (Generator, opcional):
Generador de Torch para una generación determinista.
num_images_per_prompt (int, opcional, valor predeterminado 1):
El número de imágenes a generar por prompt.
height (int, opcional):
La altura en píxeles de la imagen generada.
width (int, opcional):
El ancho en píxeles de la imagen generada.
image_latents (list, opcional):
Latentes normalizados de cada imagen de condición. Pueden generarse desde el paso vae_encoder.
latents (Tensor):
Latentes ruidosos pregenerados para la generación de imágenes.
num_inference_steps (int):
El número de pasos de desruido.
sigmas (list, opcional):
Sigmas personalizados para el proceso de desruido.
use_kv_cache (bool, opcional, valor predeterminado True):
Almacena en caché las claves y valores del texto y de la imagen de condición después del primer paso. Es válido porque causal_condition modula esos tokens desde t = 0, lo que hace que sus activaciones sean independientes del paso. Alternar esta opción no
reproduce la misma imagen bit a bit en precisión reducida.
attention_kwargs (dict, opcional):
Kwargs adicionales para los procesadores de atención.
*denoiser_input_fields (None,opcional):
entradas del modelo condicional para el desruidador: por ejemplo, prompt_embeds, negative_prompt_embeds, etc.
output_type (str,opcional*, valor predeterminado pil):
Formato de salida: ‘pil’, ‘np’, ‘pt’.
Salidas:
images (list):
Imágenes generadas.
QwenImage21TurboModularPipeline
clase diffusers.QwenImage21TurboModularPipeline
< 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 )
Un ModularPipeline para Qwen-Image 2.1 Turbo, el punto de control acelerado que muestrea en pocos pasos sin guía.
QwenImage21TurboAutoBlocks
Auto Modular pipeline para la generación de texto a imagen y la generación condicionada por imagen usando Qwen-Image 2.1 Turbo, el checkpoint acelerado que muestrea su cuadrícula de sigma incluida en pocos pasos sin guía.
- para la generación de texto a imagen, solo necesitas proporcionar
prompt - para la generación condicionada por imagen, debes proporcionar
prompteimage(una imagen o una lista)
Flujos de trabajo admitidos:
text2image: requierepromptimage_conditioned: requiereprompt,image
Componentes:
image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) processor
(Qwen3VLProcessor) vae (AutoencoderKLQwenImage21) scheduler (FlowMatchEulerDiscreteScheduler)
transformer (QwenImage21Transformer2DModel)
Configs:
sample_sigmas (predeterminado: None): Cuadrícula de muestreo que se incluye con el punto de control, utilizada cuando no se pasa sigmas.
Entradas:
image (Image | list, opcional):
Imagen(es) de referencia para el desruido. Puede ser una sola imagen o una lista de imágenes.
output_resolution (int, opcional, valor predeterminado 1024):
Longitud del lado objetivo utilizada para derivar el tamaño de salida y para redimensionar las imágenes de condición.
prompt (str):
El prompt o prompts para guiar la generación de imágenes.
generator (Generator, opcional):
Generador de Torch para una generación determinista.
num_images_per_prompt (int, opcional, valor predeterminado 1):
El número de imágenes a generar por prompt.
height (int, opcional):
La altura en píxeles de la imagen generada.
width (int, opcional):
El ancho en píxeles de la imagen generada.
image_latents (list, opcional):
Latentes normalizados de cada imagen de condición. Pueden generarse desde el paso vae_encoder.
latents (Tensor):
Latentes ruidosos pregenerados para la generación de imágenes.
num_inference_steps (int):
El número de pasos de desruido.
sigmas (list, opcional):
Sigmas personalizados para el proceso de desruido.
use_kv_cache (bool, opcional, valor predeterminado True):
Almacena en caché las claves y valores del texto y de la imagen de condición después del primer paso. Es válido porque causal_condition modula esos tokens desde t = 0, lo que hace que sus activaciones sean independientes del paso. Alternar esta opción no
reproduce la misma imagen bit a bit en precisión reducida.
attention_kwargs (dict, opcional):
Kwargs adicionales para los procesadores de atención.
*denoiser_input_fields (None,opcional):
entradas del modelo condicional para el desruidador: p. ej. prompt_embeds, negative_prompt_embeds, etc.
output_type (str,opcional*, valor predeterminado pil):
Formato de salida: ‘pil’, ‘np’, ‘pt’.
Salidas:
images (list):
Imágenes generadas.