Diffusers documentation
Qwen-Image 2.1
Qwen-Image 2.1
Qwen-Image 2.1 mengodekan prompt dan gambar kondisi apa pun bersama dengan model Qwen3-VL, kemudian melakukan denoising pada gambar target dengan transformer block-causal single-stream. Lihat QwenImage21Transformer2DModel untuk perhatian block-causal, prosesor perhatian, dan causal_condition.
Nilai bawaan adalah nilai yang direkomendasikan oleh Qwen: 40 langkah dan tanpa panduan. Sertakan negative_prompt bersama dengan true_cfg_scale > 1 untuk mengaktifkan classifier-free guidance, yang menggandakan pekerjaan per langkah.
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")Gambar kondisi ganda
Lewatkan daftar ke image dan setiap entri menjadi blok tersendiri dalam urutan gabungan: encoder Qwen3-VL melihatnya sebagai konteks visual dan VAE menyumbang token laten mereka. Atensi blok-kausal menjaga setiap blok tetap bidireksional secara internal sambil memungkinkan blok-blok berikutnya dan gambar target untuk memperhatikan blok-blok sebelumnya, sehingga urutan yang Anda lewati adalah urutan yang dibaca model.
edited = pipe("Put the flowers from the first image into the second scene", image=[flowers, scene]).images[0]Perhatian lebih cepat dengan flex_attention
QwenImage21AttnProcessor default menjalankan prefill blok-kausal sebagai satu panggilan perhatian per segmen prefiks. Tidak memerlukan kompilasi dan berfungsi pada build PyTorch apa pun. QwenImage21FlexAttnProcessor mengekspresikan mask yang sama sebagai satu panggilan flex_attention, yang lebih cepat setelah model di-kompilasi.
Compile model saat Anda beralih ke flex processor.
flex_attentionyang tidak di-compile akan mematerialisasi matriks skor attention penuh dalam fp32, yang jauh lebih lambat dan kehabisan memori pada resolusi tinggi.
from diffusers.models.transformers.transformer_qwenimage21 import QwenImage21FlexAttnProcessor
pipe.transformer.set_attn_processor(QwenImage21FlexAttnProcessor())
pipe.transformer.compile()Memuat checkpoint file tunggal
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"
)Sigma sampling
Penulis model dapat mengonfigurasi grid sampling default dengan sample_sigmas dalam konfigurasi pipeline. Saat Anda memuat checkpoint yang dirilis, pengaturan grid dan scheduler defaultnya dipulihkan secara otomatis.
Untuk bereksperimen dengan grid yang berbeda saat runtime, berikan sigmas ke panggilan 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]Grid kustom di atas mengilustrasikan API; kualitas generasi bergantung pada checkpoint dan grid. Daftar sigma mengecualikan sigma terminal, yang ditambahkan oleh scheduler. sigmas eksplisit menimpa sample_sigmas yang dikonfigurasi, dan salah satu daftar menentukan jumlah langkah alih-alih num_inference_steps. Jika keduanya tidak disediakan, pipeline menggunakan num_inference_steps untuk menghasilkan jadwal. Scheduler menerapkan pemrosesannya yang dikonfigurasi ke salah satu grid.
Modular
Qwen-Image 2.1 juga tersedia sebagai pipeline modular. Blok yang sama menjalankan generasi teks-ke-gambar dan generasi yang dikondisikan oleh gambar: berikan image untuk mengondisikan pada satu atau lebih gambar. Classifier-free guidance dikonfigurasi melalui komponen guider alih-alih argumen pemanggilan true_cfg_scale, dan cache KV prefix aktif secara default (use_kv_cache=False mematikannya).
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]Checkpoint Turbo dipetakan ke blok-bloknya sendiri (QwenImage21TurboAutoBlocks): berjalan tanpa guider, tidak menerima negative_prompt, dan mengambil sampel dari grid sigma yang disertakan. ModularPipeline.from_pretrained memilih blok Turbo dari entri sample_sigmas dalam konfigurasi checkpoint, sehingga tidak ada yang perlu dikonfigurasi:
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
kelas diffusers.QwenImage21Pipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLQwenImage21text_encoder: Qwen3VLForConditionalGenerationprocessor: Qwen3VLProcessortransformer: QwenImage21Transformer2DModelsample_sigmas: list[float] | None = None )
Parameter
- scheduler (FlowMatchEulerDiscreteScheduler) — Scheduler yang digunakan untuk menghilangkan noise dari latens gambar yang telah dikodekan.
- vae (AutoencoderKLQwenImage21) — Variational auto-encoder yang memetakan gambar ke dan dari ruang laten 64 kanal.
- text_encoder (
Qwen3VLForConditionalGeneration) — Model Qwen3-VL yang menghasilkan embedding teks/gambar gabungan. - processor (
Qwen3VLProcessor) — Processor yang membangun template chat dan melakukan tokenisasi prompt serta gambar kondisi. - transformer (QwenImage21Transformer2DModel) — Transformer blok-kausal single-stream yang melakukan denoising pada latents.
- sample_sigmas (
list[float], opsional) — Sigma sampling default yang dikonfigurasi oleh pengembang model, tidak termasuk sigma terminal. Panjangnya menentukan jumlah langkah denoising. Untuk bereksperimen dengan grid yang berbeda saat runtime, berikansigmaske__call__.
Generasi teks-ke-gambar dan berbasis kondisi gambar dengan Qwen-Image 2.1.
Gambar prompt dan kondisi dikodekan bersama oleh model Qwen3-VL, sehingga gambar kondisi menempati slot visi yang dialokasikan encoder untuknya dan transformer melihat satu urutan teks/gambar yang berselang-seling.
__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
Parameter
- prompt (
strataulist[str], opsional) — Prompt untuk memandu generasi gambar. Gunakanprompt_embedssebagai gantinya untuk menyediakan embedding secara langsung. - image (
PipelineImageInput, opsional) — Satu atau lebih gambar kondisi, berupa gambar PIL atau array numpy. Gambar-gambar ini dikodekan oleh text encoder sebagai konteks visual dan oleh VAE menjadi token laten yang ditambahkan di depan noise. Sebuah list adalah satu set gambar yang dibagikan oleh setiap prompt dalam batch, bukan satu entri per prompt. - negative_prompt (
strataulist[str], opsional) — Prompt yang tidak digunakan untuk mengarahkan generasi gambar. Diabaikan ketikatrue_cfg_scaletidak lebih besar dari 1. - true_cfg_scale (
float, opsional, default 1.0) — Skala panduan bebas klasifikator. Diaktifkan olehtrue_cfg_scale > 1bersamaan dengan prompt negatif. Qwen-Image 2.1 dimaksudkan untuk disampelkan tanpa panduan, sehingga default-nya 1.0. - height (
int, opsional) — Tinggi gambar yang dihasilkan dalam piksel. Diturunkan dari rasio aspek gambar kondisi jika diabaikan. - width (
int, opsional) — Lebar gambar yang dihasilkan dalam piksel. Diturunkan dari rasio aspek gambar kondisi jika diabaikan. - num_inference_steps (
int, opsional, default 40) — Jumlah langkah denoising. Diabaikan ketikasigmasatausample_sigmasyang dikonfigurasi pada pipeline digunakan; panjang jadwal tersebut menentukan jumlah langkah. - sigmas (
list[float], opsional) — Sigmas sampling yang akan dicoba untuk panggilan ini, tidak termasuk sigma terminal. Menimpasample_sigmasyang dikonfigurasi pada pipeline dan menentukan jumlah langkah denoising. Scheduler menerapkan pemrosesannya yang telah dikonfigurasi ke nilai-nilai ini. - num_images_per_prompt (
int, opsional, default 1) — Jumlah gambar yang dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Generator untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya, yang melewati proses encoding prompt. Sertakanprompt_embeds_maskbersamanya. - prompt_embeds_mask (
torch.Tensor, opsional) — Mask bool yang menandai posisi valid dariprompt_embeds. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya, digunakan sebagai penggantinegative_prompt. Sertakannegative_prompt_embeds_maskbersamanya. - negative_prompt_embeds_mask (
torch.Tensor, opsional) — Mask bool yang menandai posisi valid darinegative_prompt_embeds. - output_type (
str, opsional, default"pil") — Format output,"pil","np","pt"atau"latent". - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan~pipelines.qwenimage.QwenImagePipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Diteruskan ke pemroses perhatian. - callback_on_step_end (
Callable, opsional) — Dipanggil di akhir setiap langkah denoising. - callback_on_step_end_tensor_inputs (
list[str], opsional, default["latents"]) — Tensor dari loop denoising yang akan diteruskan kecallback_on_step_end. Mereka harus terdaftar dalam_callback_tensor_inputspipeline. - output_resolution (
int, opsional, default 1024) — Panjang sisi target yang digunakan untuk menurunkanheight/widthdan untuk mengubah ukuran gambar kondisi. - use_kv_cache (
bool, opsional, default keTrue) — Cache kunci dan nilai teks serta gambar kondisi setelah langkah pertama. Valid karenacausal_conditionmemodulasi token tersebut darit = 0, membuat aktivasi mereka tidak bergantung pada langkah. Mengubah ini tidak mereproduksi gambar yang sama bit-per-bit dalam presisi yang dikurangi. Caching membuat langkah decode memperhatikan dengan tata letak urutan yang berbeda dari langkah prefill, sehingga keduanya di-tile dengan cara yang berbeda dan menghasilkan pembulatan yang berbeda; keduanya sesuai dengan referensi fp32 hingga toleransi yang sama. Perbedaan satu-ULP pada blok pertama kemudian diperkuat oleh 32 blok dan setiap langkah sampler, sehingga kedua pengaturan memberikan sampel yang sama validnya tetapi terlihat berbeda. Perbaiki sampel dengan memperbaiki flag ini.Mengubah flag ini tidak mereproduksi gambar yang sama secara bit-per-bit dalam presisi yang dikurangi. Caching membuat langkah decode memperhatikan dengan tata letak urutan yang berbeda dari langkah prefill, sehingga keduanya di-tile secara berbeda dan mendarat pada pembulatan yang berbeda; keduanya sesuai dengan referensi fp32 hingga toleransi yang sama. Perbedaan satu-ULP pada blok pertama kemudian diperkuat oleh 32 blok dan setiap langkah sampler, sehingga kedua pengaturan memberikan sampel yang sama-sama valid tetapi terlihat berbeda. Perbaiki sampel dengan memperbaiki flag ini.
Mengembalikan
~pipelines.qwenimage.QwenImagePipelineOutput atau tuple
~pipelines.qwenimage.QwenImagePipelineOutput jika return_dict bernilai True, selain itu berupa tuple yang elemen pertamanya adalah daftar berisi gambar yang dihasilkan.
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> 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 )
Parameter
- prompt (
strataulist[str], opsional) — Prompt yang akan dienkod. - image (
list[PipelineImageInput], opsional) — Gambar kondisi untuk di-encode bersama prompt. - device (
torch.device) — Perangkat Torch. - num_images_per_prompt (
int) — Jumlah gambar yang dihasilkan per prompt. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Melompati proses encoding jika disediakan.
QwenImagePipelineOutput
kelas diffusers.pipelines.qwenimage.pipeline_output.QwenImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Kelas output untuk pipeline Stable Diffusion.
QwenImage21ModularPipeline
kelas 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 )
ModularPipeline untuk Qwen-Image 2.1.
QwenImage21AutoBlocks
Pipeline modular otomatis untuk pembuatan teks-ke-gambar dan pembuatan yang dikondisikan oleh gambar menggunakan Qwen-Image 2.1.
- untuk generasi teks-ke-gambar, yang perlu Anda berikan hanyalah
prompt - untuk generasi yang dikondisikan oleh gambar, Anda perlu menyediakan
promptdanimage(satu gambar atau daftar)
Alur kerja yang didukung:
text2image: membutuhkanpromptimage_conditioned: membutuhkanprompt,image
Komponen:
image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) processor
(Qwen3VLProcessor) vae (AutoencoderKLQwenImage21) scheduler (FlowMatchEulerDiscreteScheduler) guider
(ClassifierFreeGuidance) transformer (QwenImage21Transformer2DModel)
Inputs:
image (Image | list, optional):
Reference image(s) for denoising. Can be a single image or list of images.
output_resolution (int, optional, defaults to 1024):
Target side length used to derive the output size and to resize condition images.
prompt (str):
The prompt or prompts to guide image generation.
negative_prompt (str, optional):
The prompt or prompts not to guide the image generation.
generator (Generator, optional):
Torch generator for deterministic generation.
num_images_per_prompt (int, optional, defaults to 1):
The number of images to generate per prompt.
height (int, optional):
The height in pixels of the generated image.
width (int, optional):
The width in pixels of the generated image.
image_latents (list, optional):
Normalized latents of each condition image. Can be generated from vae_encoder step.
latents (Tensor):
Pre-generated noisy latents for image generation.
num_inference_steps (int):
The number of denoising steps.
sigmas (list, optional):
Custom sigmas for the denoising process.
use_kv_cache (bool, optional, defaults to True):
Cache the text and condition-image keys and values after the first step. Valid because causal_condition modulates those tokens from t = 0, making their activations step-independent. Toggling it does not
reproduce the same image bit-for-bit in reduced precision.
attention_kwargs (dict, optional):
Additional kwargs for attention processors.
*denoiser_input_fields (None,optional):
conditional model inputs for the denoiser: e.g. prompt_embeds, negative_prompt_embeds, etc.
output_type (str,optional*, defaults to pil):
Output format: ‘pil’, ‘np’, ‘pt’.
Output:
images (list):
Gambar yang dihasilkan.
QwenImage21TurboModularPipeline
kelas 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 )
ModularPipeline untuk Qwen-Image 2.1 Turbo, checkpoint yang dipercepat dan melakukan sampling dalam beberapa langkah tanpa panduan.
QwenImage21TurboAutoBlocks
Auto Modular pipeline untuk text-to-image dan generasi yang dikondisikan oleh gambar menggunakan Qwen-Image 2.1 Turbo, checkpoint yang dipercepat yang mengambil sampel grid sigma bawaannya dalam beberapa langkah tanpa guidance.
- untuk generasi teks-ke-gambar, yang perlu Anda berikan hanyalah
prompt - untuk generasi yang dikondisikan oleh gambar, Anda perlu menyediakan
promptdanimage(satu gambar atau daftar)
Alur kerja yang didukung:
text2image: membutuhkanpromptimage_conditioned: membutuhkanprompt,image
Komponen:
image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) processor
(Qwen3VLProcessor) vae (AutoencoderKLQwenImage21) scheduler (FlowMatchEulerDiscreteScheduler)
transformer (QwenImage21Transformer2DModel)
Konfigurasi:
sample_sigmas (default: None): Grid sampling yang disertakan bersama checkpoint, digunakan ketika sigmas tidak diteruskan.
Inputs:
image (Image | list, optional):
Reference image(s) for denoising. Can be a single image or list of images.
output_resolution (int, optional, defaults to 1024):
Target side length used to derive the output size and to resize condition images.
prompt (str):
The prompt or prompts to guide image generation.
generator (Generator, optional):
Torch generator for deterministic generation.
num_images_per_prompt (int, optional, defaults to 1):
The number of images to generate per prompt.
height (int, optional):
The height in pixels of the generated image.
width (int, optional):
The width in pixels of the generated image.
image_latents (list, optional):
Normalized latents of each condition image. Can be generated from vae_encoder step.
latents (Tensor):
Pre-generated noisy latents for image generation.
num_inference_steps (int):
The number of denoising steps.
sigmas (list, optional):
Custom sigmas for the denoising process.
use_kv_cache (bool, optional, defaults to True):
Cache the text and condition-image keys and values after the first step. Valid because causal_condition modulates those tokens from t = 0, making their activations step-independent. Toggling it does not
reproduce the same image bit-for-bit in reduced precision.
attention_kwargs (dict, optional):
Additional kwargs for attention processors.
*denoiser_input_fields (None,optional):
conditional model inputs for the denoiser: e.g. prompt_embeds, negative_prompt_embeds, etc.
output_type (str,optional*, defaults to pil):
Output format: ‘pil’, ‘np’, ‘pt’.
Output:
images (list):
Gambar yang dihasilkan.