diffusers 0.33.1__py3-none-any.whl → 0.35.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- diffusers/__init__.py +145 -1
- diffusers/callbacks.py +35 -0
- diffusers/commands/__init__.py +1 -1
- diffusers/commands/custom_blocks.py +134 -0
- diffusers/commands/diffusers_cli.py +3 -1
- diffusers/commands/env.py +1 -1
- diffusers/commands/fp16_safetensors.py +2 -2
- diffusers/configuration_utils.py +11 -2
- diffusers/dependency_versions_check.py +1 -1
- diffusers/dependency_versions_table.py +3 -3
- diffusers/experimental/rl/value_guided_sampling.py +1 -1
- diffusers/guiders/__init__.py +41 -0
- diffusers/guiders/adaptive_projected_guidance.py +188 -0
- diffusers/guiders/auto_guidance.py +190 -0
- diffusers/guiders/classifier_free_guidance.py +141 -0
- diffusers/guiders/classifier_free_zero_star_guidance.py +152 -0
- diffusers/guiders/frequency_decoupled_guidance.py +327 -0
- diffusers/guiders/guider_utils.py +309 -0
- diffusers/guiders/perturbed_attention_guidance.py +271 -0
- diffusers/guiders/skip_layer_guidance.py +262 -0
- diffusers/guiders/smoothed_energy_guidance.py +251 -0
- diffusers/guiders/tangential_classifier_free_guidance.py +143 -0
- diffusers/hooks/__init__.py +17 -0
- diffusers/hooks/_common.py +56 -0
- diffusers/hooks/_helpers.py +293 -0
- diffusers/hooks/faster_cache.py +9 -8
- diffusers/hooks/first_block_cache.py +259 -0
- diffusers/hooks/group_offloading.py +332 -227
- diffusers/hooks/hooks.py +58 -3
- diffusers/hooks/layer_skip.py +263 -0
- diffusers/hooks/layerwise_casting.py +5 -10
- diffusers/hooks/pyramid_attention_broadcast.py +15 -12
- diffusers/hooks/smoothed_energy_guidance_utils.py +167 -0
- diffusers/hooks/utils.py +43 -0
- diffusers/image_processor.py +7 -2
- diffusers/loaders/__init__.py +10 -0
- diffusers/loaders/ip_adapter.py +260 -18
- diffusers/loaders/lora_base.py +261 -127
- diffusers/loaders/lora_conversion_utils.py +657 -35
- diffusers/loaders/lora_pipeline.py +2778 -1246
- diffusers/loaders/peft.py +78 -112
- diffusers/loaders/single_file.py +2 -2
- diffusers/loaders/single_file_model.py +64 -15
- diffusers/loaders/single_file_utils.py +395 -7
- diffusers/loaders/textual_inversion.py +3 -2
- diffusers/loaders/transformer_flux.py +10 -11
- diffusers/loaders/transformer_sd3.py +8 -3
- diffusers/loaders/unet.py +24 -21
- diffusers/loaders/unet_loader_utils.py +6 -3
- diffusers/loaders/utils.py +1 -1
- diffusers/models/__init__.py +23 -1
- diffusers/models/activations.py +5 -5
- diffusers/models/adapter.py +2 -3
- diffusers/models/attention.py +488 -7
- diffusers/models/attention_dispatch.py +1218 -0
- diffusers/models/attention_flax.py +10 -10
- diffusers/models/attention_processor.py +113 -667
- diffusers/models/auto_model.py +49 -12
- diffusers/models/autoencoders/__init__.py +2 -0
- diffusers/models/autoencoders/autoencoder_asym_kl.py +4 -4
- diffusers/models/autoencoders/autoencoder_dc.py +17 -4
- diffusers/models/autoencoders/autoencoder_kl.py +5 -5
- diffusers/models/autoencoders/autoencoder_kl_allegro.py +4 -4
- diffusers/models/autoencoders/autoencoder_kl_cogvideox.py +6 -6
- diffusers/models/autoencoders/autoencoder_kl_cosmos.py +1110 -0
- diffusers/models/autoencoders/autoencoder_kl_hunyuan_video.py +2 -2
- diffusers/models/autoencoders/autoencoder_kl_ltx.py +3 -3
- diffusers/models/autoencoders/autoencoder_kl_magvit.py +4 -4
- diffusers/models/autoencoders/autoencoder_kl_mochi.py +3 -3
- diffusers/models/autoencoders/autoencoder_kl_qwenimage.py +1070 -0
- diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +4 -4
- diffusers/models/autoencoders/autoencoder_kl_wan.py +626 -62
- diffusers/models/autoencoders/autoencoder_oobleck.py +1 -1
- diffusers/models/autoencoders/autoencoder_tiny.py +3 -3
- diffusers/models/autoencoders/consistency_decoder_vae.py +1 -1
- diffusers/models/autoencoders/vae.py +13 -2
- diffusers/models/autoencoders/vq_model.py +2 -2
- diffusers/models/cache_utils.py +32 -10
- diffusers/models/controlnet.py +1 -1
- diffusers/models/controlnet_flux.py +1 -1
- diffusers/models/controlnet_sd3.py +1 -1
- diffusers/models/controlnet_sparsectrl.py +1 -1
- diffusers/models/controlnets/__init__.py +1 -0
- diffusers/models/controlnets/controlnet.py +3 -3
- diffusers/models/controlnets/controlnet_flax.py +1 -1
- diffusers/models/controlnets/controlnet_flux.py +21 -20
- diffusers/models/controlnets/controlnet_hunyuan.py +2 -2
- diffusers/models/controlnets/controlnet_sana.py +290 -0
- diffusers/models/controlnets/controlnet_sd3.py +1 -1
- diffusers/models/controlnets/controlnet_sparsectrl.py +2 -2
- diffusers/models/controlnets/controlnet_union.py +5 -5
- diffusers/models/controlnets/controlnet_xs.py +7 -7
- diffusers/models/controlnets/multicontrolnet.py +4 -5
- diffusers/models/controlnets/multicontrolnet_union.py +5 -6
- diffusers/models/downsampling.py +2 -2
- diffusers/models/embeddings.py +36 -46
- diffusers/models/embeddings_flax.py +2 -2
- diffusers/models/lora.py +3 -3
- diffusers/models/model_loading_utils.py +233 -1
- diffusers/models/modeling_flax_utils.py +1 -2
- diffusers/models/modeling_utils.py +203 -108
- diffusers/models/normalization.py +4 -4
- diffusers/models/resnet.py +2 -2
- diffusers/models/resnet_flax.py +1 -1
- diffusers/models/transformers/__init__.py +7 -0
- diffusers/models/transformers/auraflow_transformer_2d.py +70 -24
- diffusers/models/transformers/cogvideox_transformer_3d.py +1 -1
- diffusers/models/transformers/consisid_transformer_3d.py +1 -1
- diffusers/models/transformers/dit_transformer_2d.py +2 -2
- diffusers/models/transformers/dual_transformer_2d.py +1 -1
- diffusers/models/transformers/hunyuan_transformer_2d.py +2 -2
- diffusers/models/transformers/latte_transformer_3d.py +4 -5
- diffusers/models/transformers/lumina_nextdit2d.py +2 -2
- diffusers/models/transformers/pixart_transformer_2d.py +3 -3
- diffusers/models/transformers/prior_transformer.py +1 -1
- diffusers/models/transformers/sana_transformer.py +8 -3
- diffusers/models/transformers/stable_audio_transformer.py +5 -9
- diffusers/models/transformers/t5_film_transformer.py +3 -3
- diffusers/models/transformers/transformer_2d.py +1 -1
- diffusers/models/transformers/transformer_allegro.py +1 -1
- diffusers/models/transformers/transformer_chroma.py +641 -0
- diffusers/models/transformers/transformer_cogview3plus.py +5 -10
- diffusers/models/transformers/transformer_cogview4.py +353 -27
- diffusers/models/transformers/transformer_cosmos.py +586 -0
- diffusers/models/transformers/transformer_flux.py +376 -138
- diffusers/models/transformers/transformer_hidream_image.py +942 -0
- diffusers/models/transformers/transformer_hunyuan_video.py +12 -8
- diffusers/models/transformers/transformer_hunyuan_video_framepack.py +416 -0
- diffusers/models/transformers/transformer_ltx.py +105 -24
- diffusers/models/transformers/transformer_lumina2.py +1 -1
- diffusers/models/transformers/transformer_mochi.py +1 -1
- diffusers/models/transformers/transformer_omnigen.py +2 -2
- diffusers/models/transformers/transformer_qwenimage.py +645 -0
- diffusers/models/transformers/transformer_sd3.py +7 -7
- diffusers/models/transformers/transformer_skyreels_v2.py +607 -0
- diffusers/models/transformers/transformer_temporal.py +1 -1
- diffusers/models/transformers/transformer_wan.py +316 -87
- diffusers/models/transformers/transformer_wan_vace.py +387 -0
- diffusers/models/unets/unet_1d.py +1 -1
- diffusers/models/unets/unet_1d_blocks.py +1 -1
- diffusers/models/unets/unet_2d.py +1 -1
- diffusers/models/unets/unet_2d_blocks.py +1 -1
- diffusers/models/unets/unet_2d_blocks_flax.py +8 -7
- diffusers/models/unets/unet_2d_condition.py +4 -3
- diffusers/models/unets/unet_2d_condition_flax.py +2 -2
- diffusers/models/unets/unet_3d_blocks.py +1 -1
- diffusers/models/unets/unet_3d_condition.py +3 -3
- diffusers/models/unets/unet_i2vgen_xl.py +3 -3
- diffusers/models/unets/unet_kandinsky3.py +1 -1
- diffusers/models/unets/unet_motion_model.py +2 -2
- diffusers/models/unets/unet_stable_cascade.py +1 -1
- diffusers/models/upsampling.py +2 -2
- diffusers/models/vae_flax.py +2 -2
- diffusers/models/vq_model.py +1 -1
- diffusers/modular_pipelines/__init__.py +83 -0
- diffusers/modular_pipelines/components_manager.py +1068 -0
- diffusers/modular_pipelines/flux/__init__.py +66 -0
- diffusers/modular_pipelines/flux/before_denoise.py +689 -0
- diffusers/modular_pipelines/flux/decoders.py +109 -0
- diffusers/modular_pipelines/flux/denoise.py +227 -0
- diffusers/modular_pipelines/flux/encoders.py +412 -0
- diffusers/modular_pipelines/flux/modular_blocks.py +181 -0
- diffusers/modular_pipelines/flux/modular_pipeline.py +59 -0
- diffusers/modular_pipelines/modular_pipeline.py +2446 -0
- diffusers/modular_pipelines/modular_pipeline_utils.py +672 -0
- diffusers/modular_pipelines/node_utils.py +665 -0
- diffusers/modular_pipelines/stable_diffusion_xl/__init__.py +77 -0
- diffusers/modular_pipelines/stable_diffusion_xl/before_denoise.py +1874 -0
- diffusers/modular_pipelines/stable_diffusion_xl/decoders.py +208 -0
- diffusers/modular_pipelines/stable_diffusion_xl/denoise.py +771 -0
- diffusers/modular_pipelines/stable_diffusion_xl/encoders.py +887 -0
- diffusers/modular_pipelines/stable_diffusion_xl/modular_blocks.py +380 -0
- diffusers/modular_pipelines/stable_diffusion_xl/modular_pipeline.py +365 -0
- diffusers/modular_pipelines/wan/__init__.py +66 -0
- diffusers/modular_pipelines/wan/before_denoise.py +365 -0
- diffusers/modular_pipelines/wan/decoders.py +105 -0
- diffusers/modular_pipelines/wan/denoise.py +261 -0
- diffusers/modular_pipelines/wan/encoders.py +242 -0
- diffusers/modular_pipelines/wan/modular_blocks.py +144 -0
- diffusers/modular_pipelines/wan/modular_pipeline.py +90 -0
- diffusers/pipelines/__init__.py +68 -6
- diffusers/pipelines/allegro/pipeline_allegro.py +11 -11
- diffusers/pipelines/amused/pipeline_amused.py +7 -6
- diffusers/pipelines/amused/pipeline_amused_img2img.py +6 -5
- diffusers/pipelines/amused/pipeline_amused_inpaint.py +6 -5
- diffusers/pipelines/animatediff/pipeline_animatediff.py +6 -6
- diffusers/pipelines/animatediff/pipeline_animatediff_controlnet.py +6 -6
- diffusers/pipelines/animatediff/pipeline_animatediff_sdxl.py +16 -15
- diffusers/pipelines/animatediff/pipeline_animatediff_sparsectrl.py +6 -6
- diffusers/pipelines/animatediff/pipeline_animatediff_video2video.py +5 -5
- diffusers/pipelines/animatediff/pipeline_animatediff_video2video_controlnet.py +5 -5
- diffusers/pipelines/audioldm/pipeline_audioldm.py +8 -7
- diffusers/pipelines/audioldm2/modeling_audioldm2.py +1 -1
- diffusers/pipelines/audioldm2/pipeline_audioldm2.py +22 -13
- diffusers/pipelines/aura_flow/pipeline_aura_flow.py +48 -11
- diffusers/pipelines/auto_pipeline.py +23 -20
- diffusers/pipelines/blip_diffusion/modeling_blip2.py +1 -1
- diffusers/pipelines/blip_diffusion/modeling_ctx_clip.py +2 -2
- diffusers/pipelines/blip_diffusion/pipeline_blip_diffusion.py +11 -10
- diffusers/pipelines/chroma/__init__.py +49 -0
- diffusers/pipelines/chroma/pipeline_chroma.py +949 -0
- diffusers/pipelines/chroma/pipeline_chroma_img2img.py +1034 -0
- diffusers/pipelines/chroma/pipeline_output.py +21 -0
- diffusers/pipelines/cogvideo/pipeline_cogvideox.py +17 -16
- diffusers/pipelines/cogvideo/pipeline_cogvideox_fun_control.py +17 -16
- diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video.py +18 -17
- diffusers/pipelines/cogvideo/pipeline_cogvideox_video2video.py +17 -16
- diffusers/pipelines/cogview3/pipeline_cogview3plus.py +9 -9
- diffusers/pipelines/cogview4/pipeline_cogview4.py +23 -22
- diffusers/pipelines/cogview4/pipeline_cogview4_control.py +7 -7
- diffusers/pipelines/consisid/consisid_utils.py +2 -2
- diffusers/pipelines/consisid/pipeline_consisid.py +8 -8
- diffusers/pipelines/consistency_models/pipeline_consistency_models.py +1 -1
- diffusers/pipelines/controlnet/pipeline_controlnet.py +7 -7
- diffusers/pipelines/controlnet/pipeline_controlnet_blip_diffusion.py +11 -10
- diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +7 -7
- diffusers/pipelines/controlnet/pipeline_controlnet_inpaint.py +7 -7
- diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +14 -14
- diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +10 -6
- diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +13 -13
- diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +226 -107
- diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +12 -8
- diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +207 -105
- diffusers/pipelines/controlnet/pipeline_flax_controlnet.py +1 -1
- diffusers/pipelines/controlnet_hunyuandit/pipeline_hunyuandit_controlnet.py +8 -8
- diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet.py +7 -7
- diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py +7 -7
- diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs.py +12 -10
- diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs_sd_xl.py +9 -7
- diffusers/pipelines/cosmos/__init__.py +54 -0
- diffusers/pipelines/cosmos/pipeline_cosmos2_text2image.py +673 -0
- diffusers/pipelines/cosmos/pipeline_cosmos2_video2world.py +792 -0
- diffusers/pipelines/cosmos/pipeline_cosmos_text2world.py +664 -0
- diffusers/pipelines/cosmos/pipeline_cosmos_video2world.py +826 -0
- diffusers/pipelines/cosmos/pipeline_output.py +40 -0
- diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py +5 -4
- diffusers/pipelines/ddim/pipeline_ddim.py +4 -4
- diffusers/pipelines/ddpm/pipeline_ddpm.py +1 -1
- diffusers/pipelines/deepfloyd_if/pipeline_if.py +10 -10
- diffusers/pipelines/deepfloyd_if/pipeline_if_img2img.py +10 -10
- diffusers/pipelines/deepfloyd_if/pipeline_if_img2img_superresolution.py +10 -10
- diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting.py +10 -10
- diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting_superresolution.py +10 -10
- diffusers/pipelines/deepfloyd_if/pipeline_if_superresolution.py +10 -10
- diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion.py +8 -8
- diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion_img2img.py +5 -5
- diffusers/pipelines/deprecated/audio_diffusion/mel.py +1 -1
- diffusers/pipelines/deprecated/audio_diffusion/pipeline_audio_diffusion.py +3 -3
- diffusers/pipelines/deprecated/latent_diffusion_uncond/pipeline_latent_diffusion_uncond.py +1 -1
- diffusers/pipelines/deprecated/pndm/pipeline_pndm.py +2 -2
- diffusers/pipelines/deprecated/repaint/pipeline_repaint.py +4 -3
- diffusers/pipelines/deprecated/score_sde_ve/pipeline_score_sde_ve.py +1 -1
- diffusers/pipelines/deprecated/spectrogram_diffusion/continuous_encoder.py +1 -1
- diffusers/pipelines/deprecated/spectrogram_diffusion/midi_utils.py +1 -1
- diffusers/pipelines/deprecated/spectrogram_diffusion/notes_encoder.py +1 -1
- diffusers/pipelines/deprecated/spectrogram_diffusion/pipeline_spectrogram_diffusion.py +1 -1
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_cycle_diffusion.py +8 -8
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_onnx_stable_diffusion_inpaint_legacy.py +9 -9
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_inpaint_legacy.py +10 -10
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_model_editing.py +10 -8
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_paradigms.py +5 -5
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_pix2pix_zero.py +18 -18
- diffusers/pipelines/deprecated/stochastic_karras_ve/pipeline_stochastic_karras_ve.py +1 -1
- diffusers/pipelines/deprecated/versatile_diffusion/modeling_text_unet.py +2 -2
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion.py +6 -6
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_dual_guided.py +5 -5
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_image_variation.py +5 -5
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_text_to_image.py +5 -5
- diffusers/pipelines/deprecated/vq_diffusion/pipeline_vq_diffusion.py +1 -1
- diffusers/pipelines/dit/pipeline_dit.py +4 -2
- diffusers/pipelines/easyanimate/pipeline_easyanimate.py +4 -4
- diffusers/pipelines/easyanimate/pipeline_easyanimate_control.py +4 -4
- diffusers/pipelines/easyanimate/pipeline_easyanimate_inpaint.py +7 -6
- diffusers/pipelines/flux/__init__.py +4 -0
- diffusers/pipelines/flux/modeling_flux.py +1 -1
- diffusers/pipelines/flux/pipeline_flux.py +37 -36
- diffusers/pipelines/flux/pipeline_flux_control.py +9 -9
- diffusers/pipelines/flux/pipeline_flux_control_img2img.py +7 -7
- diffusers/pipelines/flux/pipeline_flux_control_inpaint.py +7 -7
- diffusers/pipelines/flux/pipeline_flux_controlnet.py +7 -7
- diffusers/pipelines/flux/pipeline_flux_controlnet_image_to_image.py +31 -23
- diffusers/pipelines/flux/pipeline_flux_controlnet_inpainting.py +3 -2
- diffusers/pipelines/flux/pipeline_flux_fill.py +7 -7
- diffusers/pipelines/flux/pipeline_flux_img2img.py +40 -7
- diffusers/pipelines/flux/pipeline_flux_inpaint.py +12 -7
- diffusers/pipelines/flux/pipeline_flux_kontext.py +1134 -0
- diffusers/pipelines/flux/pipeline_flux_kontext_inpaint.py +1460 -0
- diffusers/pipelines/flux/pipeline_flux_prior_redux.py +2 -2
- diffusers/pipelines/flux/pipeline_output.py +6 -4
- diffusers/pipelines/free_init_utils.py +2 -2
- diffusers/pipelines/free_noise_utils.py +3 -3
- diffusers/pipelines/hidream_image/__init__.py +47 -0
- diffusers/pipelines/hidream_image/pipeline_hidream_image.py +1026 -0
- diffusers/pipelines/hidream_image/pipeline_output.py +35 -0
- diffusers/pipelines/hunyuan_video/__init__.py +2 -0
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_skyreels_image2video.py +8 -8
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video.py +26 -25
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_framepack.py +1114 -0
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_image2video.py +71 -15
- diffusers/pipelines/hunyuan_video/pipeline_output.py +19 -0
- diffusers/pipelines/hunyuandit/pipeline_hunyuandit.py +8 -8
- diffusers/pipelines/i2vgen_xl/pipeline_i2vgen_xl.py +10 -8
- diffusers/pipelines/kandinsky/pipeline_kandinsky.py +6 -6
- diffusers/pipelines/kandinsky/pipeline_kandinsky_combined.py +34 -34
- diffusers/pipelines/kandinsky/pipeline_kandinsky_img2img.py +19 -26
- diffusers/pipelines/kandinsky/pipeline_kandinsky_inpaint.py +7 -7
- diffusers/pipelines/kandinsky/pipeline_kandinsky_prior.py +11 -11
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +6 -6
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_combined.py +35 -35
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet.py +6 -6
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet_img2img.py +17 -39
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +17 -45
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpainting.py +7 -7
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +10 -10
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior_emb2emb.py +10 -10
- diffusers/pipelines/kandinsky3/pipeline_kandinsky3.py +7 -7
- diffusers/pipelines/kandinsky3/pipeline_kandinsky3_img2img.py +17 -38
- diffusers/pipelines/kolors/pipeline_kolors.py +10 -10
- diffusers/pipelines/kolors/pipeline_kolors_img2img.py +12 -12
- diffusers/pipelines/kolors/text_encoder.py +3 -3
- diffusers/pipelines/kolors/tokenizer.py +1 -1
- diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_img2img.py +2 -2
- diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_text2img.py +2 -2
- diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py +1 -1
- diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion_superresolution.py +3 -3
- diffusers/pipelines/latte/pipeline_latte.py +12 -12
- diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py +13 -13
- diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py +17 -16
- diffusers/pipelines/ltx/__init__.py +4 -0
- diffusers/pipelines/ltx/modeling_latent_upsampler.py +188 -0
- diffusers/pipelines/ltx/pipeline_ltx.py +64 -18
- diffusers/pipelines/ltx/pipeline_ltx_condition.py +117 -38
- diffusers/pipelines/ltx/pipeline_ltx_image2video.py +63 -18
- diffusers/pipelines/ltx/pipeline_ltx_latent_upsample.py +277 -0
- diffusers/pipelines/lumina/pipeline_lumina.py +13 -13
- diffusers/pipelines/lumina2/pipeline_lumina2.py +10 -10
- diffusers/pipelines/marigold/marigold_image_processing.py +2 -2
- diffusers/pipelines/mochi/pipeline_mochi.py +15 -14
- diffusers/pipelines/musicldm/pipeline_musicldm.py +16 -13
- diffusers/pipelines/omnigen/pipeline_omnigen.py +13 -11
- diffusers/pipelines/omnigen/processor_omnigen.py +8 -3
- diffusers/pipelines/onnx_utils.py +15 -2
- diffusers/pipelines/pag/pag_utils.py +2 -2
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd.py +12 -8
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_inpaint.py +7 -7
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl.py +10 -6
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl_img2img.py +14 -14
- diffusers/pipelines/pag/pipeline_pag_hunyuandit.py +8 -8
- diffusers/pipelines/pag/pipeline_pag_kolors.py +10 -10
- diffusers/pipelines/pag/pipeline_pag_pixart_sigma.py +11 -11
- diffusers/pipelines/pag/pipeline_pag_sana.py +18 -12
- diffusers/pipelines/pag/pipeline_pag_sd.py +8 -8
- diffusers/pipelines/pag/pipeline_pag_sd_3.py +7 -7
- diffusers/pipelines/pag/pipeline_pag_sd_3_img2img.py +7 -7
- diffusers/pipelines/pag/pipeline_pag_sd_animatediff.py +6 -6
- diffusers/pipelines/pag/pipeline_pag_sd_img2img.py +5 -5
- diffusers/pipelines/pag/pipeline_pag_sd_inpaint.py +8 -8
- diffusers/pipelines/pag/pipeline_pag_sd_xl.py +16 -15
- diffusers/pipelines/pag/pipeline_pag_sd_xl_img2img.py +18 -17
- diffusers/pipelines/pag/pipeline_pag_sd_xl_inpaint.py +12 -12
- diffusers/pipelines/paint_by_example/image_encoder.py +1 -1
- diffusers/pipelines/paint_by_example/pipeline_paint_by_example.py +8 -7
- diffusers/pipelines/pia/pipeline_pia.py +8 -6
- diffusers/pipelines/pipeline_flax_utils.py +5 -6
- diffusers/pipelines/pipeline_loading_utils.py +113 -15
- diffusers/pipelines/pipeline_utils.py +127 -48
- diffusers/pipelines/pixart_alpha/pipeline_pixart_alpha.py +14 -12
- diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py +31 -11
- diffusers/pipelines/qwenimage/__init__.py +55 -0
- diffusers/pipelines/qwenimage/pipeline_output.py +21 -0
- diffusers/pipelines/qwenimage/pipeline_qwenimage.py +726 -0
- diffusers/pipelines/qwenimage/pipeline_qwenimage_edit.py +882 -0
- diffusers/pipelines/qwenimage/pipeline_qwenimage_img2img.py +829 -0
- diffusers/pipelines/qwenimage/pipeline_qwenimage_inpaint.py +1015 -0
- diffusers/pipelines/sana/__init__.py +4 -0
- diffusers/pipelines/sana/pipeline_sana.py +23 -21
- diffusers/pipelines/sana/pipeline_sana_controlnet.py +1106 -0
- diffusers/pipelines/sana/pipeline_sana_sprint.py +23 -19
- diffusers/pipelines/sana/pipeline_sana_sprint_img2img.py +981 -0
- diffusers/pipelines/semantic_stable_diffusion/pipeline_semantic_stable_diffusion.py +7 -6
- diffusers/pipelines/shap_e/camera.py +1 -1
- diffusers/pipelines/shap_e/pipeline_shap_e.py +1 -1
- diffusers/pipelines/shap_e/pipeline_shap_e_img2img.py +1 -1
- diffusers/pipelines/shap_e/renderer.py +3 -3
- diffusers/pipelines/skyreels_v2/__init__.py +59 -0
- diffusers/pipelines/skyreels_v2/pipeline_output.py +20 -0
- diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2.py +610 -0
- diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing.py +978 -0
- diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing_i2v.py +1059 -0
- diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing_v2v.py +1063 -0
- diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_i2v.py +745 -0
- diffusers/pipelines/stable_audio/modeling_stable_audio.py +1 -1
- diffusers/pipelines/stable_audio/pipeline_stable_audio.py +5 -5
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py +8 -8
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade_combined.py +13 -13
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade_prior.py +9 -9
- diffusers/pipelines/stable_diffusion/__init__.py +0 -7
- diffusers/pipelines/stable_diffusion/clip_image_project_model.py +1 -1
- diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +11 -4
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion.py +1 -1
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_img2img.py +1 -1
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_inpaint.py +1 -1
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py +12 -11
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_img2img.py +10 -10
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_inpaint.py +11 -11
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_upscale.py +10 -10
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +10 -9
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_depth2img.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_image_variation.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_instruct_pix2pix.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_latent_upscale.py +4 -4
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +5 -5
- diffusers/pipelines/stable_diffusion/pipeline_stable_unclip.py +7 -7
- diffusers/pipelines/stable_diffusion/pipeline_stable_unclip_img2img.py +5 -5
- diffusers/pipelines/stable_diffusion/safety_checker.py +1 -1
- diffusers/pipelines/stable_diffusion/safety_checker_flax.py +1 -1
- diffusers/pipelines/stable_diffusion/stable_unclip_image_normalizer.py +1 -1
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +13 -12
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +7 -7
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +7 -7
- diffusers/pipelines/stable_diffusion_attend_and_excite/pipeline_stable_diffusion_attend_and_excite.py +12 -8
- diffusers/pipelines/stable_diffusion_diffedit/pipeline_stable_diffusion_diffedit.py +15 -9
- diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen.py +11 -9
- diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen_text_image.py +11 -9
- diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_k_diffusion.py +18 -12
- diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_xl_k_diffusion.py +11 -8
- diffusers/pipelines/stable_diffusion_ldm3d/pipeline_stable_diffusion_ldm3d.py +11 -8
- diffusers/pipelines/stable_diffusion_panorama/pipeline_stable_diffusion_panorama.py +15 -12
- diffusers/pipelines/stable_diffusion_safe/pipeline_stable_diffusion_safe.py +8 -6
- diffusers/pipelines/stable_diffusion_safe/safety_checker.py +1 -1
- diffusers/pipelines/stable_diffusion_sag/pipeline_stable_diffusion_sag.py +15 -11
- diffusers/pipelines/stable_diffusion_xl/pipeline_flax_stable_diffusion_xl.py +1 -1
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +16 -15
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +18 -17
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +12 -12
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_instruct_pix2pix.py +16 -15
- diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +3 -3
- diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +12 -12
- diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py +18 -17
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth.py +12 -7
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth_img2img.py +12 -7
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero.py +15 -13
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero_sdxl.py +24 -21
- diffusers/pipelines/unclip/pipeline_unclip.py +4 -3
- diffusers/pipelines/unclip/pipeline_unclip_image_variation.py +4 -3
- diffusers/pipelines/unclip/text_proj.py +2 -2
- diffusers/pipelines/unidiffuser/modeling_text_decoder.py +2 -2
- diffusers/pipelines/unidiffuser/modeling_uvit.py +1 -1
- diffusers/pipelines/unidiffuser/pipeline_unidiffuser.py +8 -7
- diffusers/pipelines/visualcloze/__init__.py +52 -0
- diffusers/pipelines/visualcloze/pipeline_visualcloze_combined.py +444 -0
- diffusers/pipelines/visualcloze/pipeline_visualcloze_generation.py +952 -0
- diffusers/pipelines/visualcloze/visualcloze_utils.py +251 -0
- diffusers/pipelines/wan/__init__.py +2 -0
- diffusers/pipelines/wan/pipeline_wan.py +91 -30
- diffusers/pipelines/wan/pipeline_wan_i2v.py +145 -45
- diffusers/pipelines/wan/pipeline_wan_vace.py +975 -0
- diffusers/pipelines/wan/pipeline_wan_video2video.py +14 -16
- diffusers/pipelines/wuerstchen/modeling_paella_vq_model.py +1 -1
- diffusers/pipelines/wuerstchen/modeling_wuerstchen_diffnext.py +1 -1
- diffusers/pipelines/wuerstchen/modeling_wuerstchen_prior.py +1 -1
- diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py +8 -8
- diffusers/pipelines/wuerstchen/pipeline_wuerstchen_combined.py +16 -15
- diffusers/pipelines/wuerstchen/pipeline_wuerstchen_prior.py +6 -6
- diffusers/quantizers/__init__.py +3 -1
- diffusers/quantizers/base.py +17 -1
- diffusers/quantizers/bitsandbytes/bnb_quantizer.py +4 -0
- diffusers/quantizers/bitsandbytes/utils.py +10 -7
- diffusers/quantizers/gguf/gguf_quantizer.py +13 -4
- diffusers/quantizers/gguf/utils.py +108 -16
- diffusers/quantizers/pipe_quant_config.py +202 -0
- diffusers/quantizers/quantization_config.py +18 -16
- diffusers/quantizers/quanto/quanto_quantizer.py +4 -0
- diffusers/quantizers/torchao/torchao_quantizer.py +31 -1
- diffusers/schedulers/__init__.py +3 -1
- diffusers/schedulers/deprecated/scheduling_karras_ve.py +4 -3
- diffusers/schedulers/deprecated/scheduling_sde_vp.py +1 -1
- diffusers/schedulers/scheduling_consistency_models.py +1 -1
- diffusers/schedulers/scheduling_cosine_dpmsolver_multistep.py +10 -5
- diffusers/schedulers/scheduling_ddim.py +8 -8
- diffusers/schedulers/scheduling_ddim_cogvideox.py +5 -5
- diffusers/schedulers/scheduling_ddim_flax.py +6 -6
- diffusers/schedulers/scheduling_ddim_inverse.py +6 -6
- diffusers/schedulers/scheduling_ddim_parallel.py +22 -22
- diffusers/schedulers/scheduling_ddpm.py +9 -9
- diffusers/schedulers/scheduling_ddpm_flax.py +7 -7
- diffusers/schedulers/scheduling_ddpm_parallel.py +18 -18
- diffusers/schedulers/scheduling_ddpm_wuerstchen.py +2 -2
- diffusers/schedulers/scheduling_deis_multistep.py +16 -9
- diffusers/schedulers/scheduling_dpm_cogvideox.py +5 -5
- diffusers/schedulers/scheduling_dpmsolver_multistep.py +18 -12
- diffusers/schedulers/scheduling_dpmsolver_multistep_flax.py +22 -20
- diffusers/schedulers/scheduling_dpmsolver_multistep_inverse.py +11 -11
- diffusers/schedulers/scheduling_dpmsolver_sde.py +2 -2
- diffusers/schedulers/scheduling_dpmsolver_singlestep.py +19 -13
- diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py +13 -8
- diffusers/schedulers/scheduling_edm_euler.py +20 -11
- diffusers/schedulers/scheduling_euler_ancestral_discrete.py +3 -3
- diffusers/schedulers/scheduling_euler_discrete.py +3 -3
- diffusers/schedulers/scheduling_euler_discrete_flax.py +3 -3
- diffusers/schedulers/scheduling_flow_match_euler_discrete.py +20 -5
- diffusers/schedulers/scheduling_flow_match_heun_discrete.py +1 -1
- diffusers/schedulers/scheduling_flow_match_lcm.py +561 -0
- diffusers/schedulers/scheduling_heun_discrete.py +2 -2
- diffusers/schedulers/scheduling_ipndm.py +2 -2
- diffusers/schedulers/scheduling_k_dpm_2_ancestral_discrete.py +2 -2
- diffusers/schedulers/scheduling_k_dpm_2_discrete.py +2 -2
- diffusers/schedulers/scheduling_karras_ve_flax.py +5 -5
- diffusers/schedulers/scheduling_lcm.py +3 -3
- diffusers/schedulers/scheduling_lms_discrete.py +2 -2
- diffusers/schedulers/scheduling_lms_discrete_flax.py +1 -1
- diffusers/schedulers/scheduling_pndm.py +4 -4
- diffusers/schedulers/scheduling_pndm_flax.py +4 -4
- diffusers/schedulers/scheduling_repaint.py +9 -9
- diffusers/schedulers/scheduling_sasolver.py +15 -15
- diffusers/schedulers/scheduling_scm.py +1 -2
- diffusers/schedulers/scheduling_sde_ve.py +1 -1
- diffusers/schedulers/scheduling_sde_ve_flax.py +2 -2
- diffusers/schedulers/scheduling_tcd.py +3 -3
- diffusers/schedulers/scheduling_unclip.py +5 -5
- diffusers/schedulers/scheduling_unipc_multistep.py +21 -12
- diffusers/schedulers/scheduling_utils.py +3 -3
- diffusers/schedulers/scheduling_utils_flax.py +2 -2
- diffusers/schedulers/scheduling_vq_diffusion.py +1 -1
- diffusers/training_utils.py +91 -5
- diffusers/utils/__init__.py +15 -0
- diffusers/utils/accelerate_utils.py +1 -1
- diffusers/utils/constants.py +4 -0
- diffusers/utils/doc_utils.py +1 -1
- diffusers/utils/dummy_pt_objects.py +432 -0
- diffusers/utils/dummy_torch_and_transformers_objects.py +480 -0
- diffusers/utils/dynamic_modules_utils.py +85 -8
- diffusers/utils/export_utils.py +1 -1
- diffusers/utils/hub_utils.py +33 -17
- diffusers/utils/import_utils.py +151 -18
- diffusers/utils/logging.py +1 -1
- diffusers/utils/outputs.py +2 -1
- diffusers/utils/peft_utils.py +96 -10
- diffusers/utils/state_dict_utils.py +20 -3
- diffusers/utils/testing_utils.py +195 -17
- diffusers/utils/torch_utils.py +43 -5
- diffusers/video_processor.py +2 -2
- {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/METADATA +72 -57
- diffusers-0.35.0.dist-info/RECORD +703 -0
- {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/WHEEL +1 -1
- diffusers-0.33.1.dist-info/RECORD +0 -608
- {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/LICENSE +0 -0
- {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/entry_points.txt +0 -0
- {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/top_level.txt +0 -0
@@ -47,6 +47,7 @@ from ..configuration_utils import ConfigMixin
|
|
47
47
|
from ..models import AutoencoderKL
|
48
48
|
from ..models.attention_processor import FusedAttnProcessor2_0
|
49
49
|
from ..models.modeling_utils import _LOW_CPU_MEM_USAGE_DEFAULT, ModelMixin
|
50
|
+
from ..quantizers import PipelineQuantizationConfig
|
50
51
|
from ..quantizers.bitsandbytes.utils import _check_bnb_status
|
51
52
|
from ..schedulers.scheduling_utils import SCHEDULER_CONFIG_NAME
|
52
53
|
from ..utils import (
|
@@ -58,6 +59,7 @@ from ..utils import (
|
|
58
59
|
_is_valid_type,
|
59
60
|
is_accelerate_available,
|
60
61
|
is_accelerate_version,
|
62
|
+
is_hpu_available,
|
61
63
|
is_torch_npu_available,
|
62
64
|
is_torch_version,
|
63
65
|
is_transformers_version,
|
@@ -65,7 +67,7 @@ from ..utils import (
|
|
65
67
|
numpy_to_pil,
|
66
68
|
)
|
67
69
|
from ..utils.hub_utils import _check_legacy_sharding_variant_format, load_or_create_model_card, populate_model_card
|
68
|
-
from ..utils.torch_utils import is_compiled_module
|
70
|
+
from ..utils.torch_utils import empty_device_cache, get_device, is_compiled_module
|
69
71
|
|
70
72
|
|
71
73
|
if is_torch_npu_available():
|
@@ -86,6 +88,7 @@ from .pipeline_loading_utils import (
|
|
86
88
|
_identify_model_variants,
|
87
89
|
_maybe_raise_error_for_incorrect_transformers,
|
88
90
|
_maybe_raise_warning_for_inpainting,
|
91
|
+
_maybe_warn_for_wrong_component_in_quant_config,
|
89
92
|
_resolve_custom_pipeline_and_cls,
|
90
93
|
_unwrap_model,
|
91
94
|
_update_init_kwargs_with_connected_pipeline,
|
@@ -105,7 +108,7 @@ LIBRARIES = []
|
|
105
108
|
for library in LOADABLE_CLASSES:
|
106
109
|
LIBRARIES.append(library)
|
107
110
|
|
108
|
-
SUPPORTED_DEVICE_MAP = ["balanced"]
|
111
|
+
SUPPORTED_DEVICE_MAP = ["balanced"] + [get_device()]
|
109
112
|
|
110
113
|
logger = logging.get_logger(__name__)
|
111
114
|
|
@@ -137,6 +140,43 @@ class AudioPipelineOutput(BaseOutput):
|
|
137
140
|
audios: np.ndarray
|
138
141
|
|
139
142
|
|
143
|
+
class DeprecatedPipelineMixin:
|
144
|
+
"""
|
145
|
+
A mixin that can be used to mark a pipeline as deprecated.
|
146
|
+
|
147
|
+
Pipelines inheriting from this mixin will raise a warning when instantiated, indicating that they are deprecated
|
148
|
+
and won't receive updates past the specified version. Tests will be skipped for pipelines that inherit from this
|
149
|
+
mixin.
|
150
|
+
|
151
|
+
Example usage:
|
152
|
+
```python
|
153
|
+
class MyDeprecatedPipeline(DeprecatedPipelineMixin, DiffusionPipeline):
|
154
|
+
_last_supported_version = "0.20.0"
|
155
|
+
|
156
|
+
def __init__(self, *args, **kwargs):
|
157
|
+
super().__init__(*args, **kwargs)
|
158
|
+
```
|
159
|
+
"""
|
160
|
+
|
161
|
+
# Override this in the inheriting class to specify the last version that will support this pipeline
|
162
|
+
_last_supported_version = None
|
163
|
+
|
164
|
+
def __init__(self, *args, **kwargs):
|
165
|
+
# Get the class name for the warning message
|
166
|
+
class_name = self.__class__.__name__
|
167
|
+
|
168
|
+
# Get the last supported version or use the current version if not specified
|
169
|
+
version_info = getattr(self.__class__, "_last_supported_version", __version__)
|
170
|
+
|
171
|
+
# Raise a warning that this pipeline is deprecated
|
172
|
+
logger.warning(
|
173
|
+
f"The {class_name} has been deprecated and will not receive bug fixes or feature updates after Diffusers version {version_info}. "
|
174
|
+
)
|
175
|
+
|
176
|
+
# Call the parent class's __init__ method
|
177
|
+
super().__init__(*args, **kwargs)
|
178
|
+
|
179
|
+
|
140
180
|
class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
141
181
|
r"""
|
142
182
|
Base class for all pipelines.
|
@@ -404,6 +444,11 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
404
444
|
if not is_accelerate_available() or is_accelerate_version("<", "0.14.0"):
|
405
445
|
return False
|
406
446
|
|
447
|
+
_, _, is_loaded_in_8bit_bnb = _check_bnb_status(module)
|
448
|
+
|
449
|
+
if is_loaded_in_8bit_bnb:
|
450
|
+
return False
|
451
|
+
|
407
452
|
return hasattr(module, "_hf_hook") and (
|
408
453
|
isinstance(module._hf_hook, accelerate.hooks.AlignDevicesHook)
|
409
454
|
or hasattr(module._hf_hook, "hooks")
|
@@ -445,6 +490,20 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
445
490
|
f"It seems like you have activated model offloading by calling `enable_model_cpu_offload`, but are now manually moving the pipeline to GPU. It is strongly recommended against doing so as memory gains from offloading are likely to be lost. Offloading automatically takes care of moving the individual components {', '.join(self.components.keys())} to GPU when needed. To make sure offloading works as expected, you should consider moving the pipeline back to CPU: `pipeline.to('cpu')` or removing the move altogether if you use offloading."
|
446
491
|
)
|
447
492
|
|
493
|
+
# Enable generic support for Intel Gaudi accelerator using GPU/HPU migration
|
494
|
+
if device_type == "hpu" and kwargs.pop("hpu_migration", True) and is_hpu_available():
|
495
|
+
os.environ["PT_HPU_GPU_MIGRATION"] = "1"
|
496
|
+
logger.debug("Environment variable set: PT_HPU_GPU_MIGRATION=1")
|
497
|
+
|
498
|
+
import habana_frameworks.torch # noqa: F401
|
499
|
+
|
500
|
+
# HPU hardware check
|
501
|
+
if not (hasattr(torch, "hpu") and torch.hpu.is_available()):
|
502
|
+
raise ValueError("You are trying to call `.to('hpu')` but HPU device is unavailable.")
|
503
|
+
|
504
|
+
os.environ["PT_HPU_MAX_COMPOUND_OP_SIZE"] = "1"
|
505
|
+
logger.debug("Environment variable set: PT_HPU_MAX_COMPOUND_OP_SIZE=1")
|
506
|
+
|
448
507
|
module_names, _ = self._get_signature_keys(self)
|
449
508
|
modules = [getattr(self, n, None) for n in module_names]
|
450
509
|
modules = [m for m in modules if isinstance(m, torch.nn.Module)]
|
@@ -552,12 +611,12 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
552
611
|
saved using
|
553
612
|
[`~DiffusionPipeline.save_pretrained`].
|
554
613
|
- A path to a *directory* (for example `./my_pipeline_directory/`) containing a dduf file
|
555
|
-
torch_dtype (`
|
556
|
-
Override the default `torch.dtype` and load the model with another dtype.
|
557
|
-
dtype
|
558
|
-
`
|
559
|
-
|
560
|
-
|
614
|
+
torch_dtype (`torch.dtype` or `dict[str, Union[str, torch.dtype]]`, *optional*):
|
615
|
+
Override the default `torch.dtype` and load the model with another dtype. To load submodels with
|
616
|
+
different dtype pass a `dict` (for example `{'transformer': torch.bfloat16, 'vae': torch.float16}`).
|
617
|
+
Set the default dtype for unspecified components with `default` (for example `{'transformer':
|
618
|
+
torch.bfloat16, 'default': torch.float16}`). If a component is not specified and no default is set,
|
619
|
+
`torch.float32` is used.
|
561
620
|
custom_pipeline (`str`, *optional*):
|
562
621
|
|
563
622
|
<Tip warning={true}>
|
@@ -611,14 +670,11 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
611
670
|
Mirror source to resolve accessibility issues if you’re downloading a model in China. We do not
|
612
671
|
guarantee the timeliness or safety of the source, and you should refer to the mirror site for more
|
613
672
|
information.
|
614
|
-
device_map (`str
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
Set `device_map="auto"` to have 🤗 Accelerate automatically compute the most optimized `device_map`. For
|
620
|
-
more information about each option see [designing a device
|
621
|
-
map](https://hf.co/docs/accelerate/main/en/usage_guides/big_modeling#designing-a-device-map).
|
673
|
+
device_map (`str`, *optional*):
|
674
|
+
Strategy that dictates how the different components of a pipeline should be placed on available
|
675
|
+
devices. Currently, only "balanced" `device_map` is supported. Check out
|
676
|
+
[this](https://huggingface.co/docs/diffusers/main/en/tutorials/inference_with_big_models#device-placement)
|
677
|
+
to know more.
|
622
678
|
max_memory (`Dict`, *optional*):
|
623
679
|
A dictionary device identifier for the maximum memory. Will default to the maximum memory available for
|
624
680
|
each GPU and the available CPU RAM if unset.
|
@@ -654,8 +710,8 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
654
710
|
|
655
711
|
<Tip>
|
656
712
|
|
657
|
-
To use private or [gated](https://huggingface.co/docs/hub/models-gated#gated-models) models, log-in with
|
658
|
-
|
713
|
+
To use private or [gated](https://huggingface.co/docs/hub/models-gated#gated-models) models, log-in with `hf
|
714
|
+
auth login`.
|
659
715
|
|
660
716
|
</Tip>
|
661
717
|
|
@@ -705,6 +761,7 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
705
761
|
use_safetensors = kwargs.pop("use_safetensors", None)
|
706
762
|
use_onnx = kwargs.pop("use_onnx", None)
|
707
763
|
load_connected_pipeline = kwargs.pop("load_connected_pipeline", False)
|
764
|
+
quantization_config = kwargs.pop("quantization_config", None)
|
708
765
|
|
709
766
|
if torch_dtype is not None and not isinstance(torch_dtype, dict) and not isinstance(torch_dtype, torch.dtype):
|
710
767
|
torch_dtype = torch.float32
|
@@ -721,6 +778,9 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
721
778
|
" install accelerate\n```\n."
|
722
779
|
)
|
723
780
|
|
781
|
+
if quantization_config is not None and not isinstance(quantization_config, PipelineQuantizationConfig):
|
782
|
+
raise ValueError("`quantization_config` must be an instance of `PipelineQuantizationConfig`.")
|
783
|
+
|
724
784
|
if low_cpu_mem_usage is True and not is_torch_version(">=", "1.9.0"):
|
725
785
|
raise NotImplementedError(
|
726
786
|
"Low memory initialization requires torch >= 1.9.0. Please either update your PyTorch version or set"
|
@@ -925,14 +985,18 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
925
985
|
|
926
986
|
# 7. Load each module in the pipeline
|
927
987
|
current_device_map = None
|
988
|
+
_maybe_warn_for_wrong_component_in_quant_config(init_dict, quantization_config)
|
928
989
|
for name, (library_name, class_name) in logging.tqdm(init_dict.items(), desc="Loading pipeline components..."):
|
929
990
|
# 7.1 device_map shenanigans
|
930
|
-
if final_device_map is not None
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
991
|
+
if final_device_map is not None:
|
992
|
+
if isinstance(final_device_map, dict) and len(final_device_map) > 0:
|
993
|
+
component_device = final_device_map.get(name, None)
|
994
|
+
if component_device is not None:
|
995
|
+
current_device_map = {"": component_device}
|
996
|
+
else:
|
997
|
+
current_device_map = None
|
998
|
+
elif isinstance(final_device_map, str):
|
999
|
+
current_device_map = final_device_map
|
936
1000
|
|
937
1001
|
# 7.2 - now that JAX/Flax is an official framework of the library, we might load from Flax names
|
938
1002
|
class_name = class_name[4:] if class_name.startswith("Flax") else class_name
|
@@ -981,6 +1045,7 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
981
1045
|
use_safetensors=use_safetensors,
|
982
1046
|
dduf_entries=dduf_entries,
|
983
1047
|
provider_options=provider_options,
|
1048
|
+
quantization_config=quantization_config,
|
984
1049
|
)
|
985
1050
|
logger.info(
|
986
1051
|
f"Loaded {name} as {class_name} from `{name}` subfolder of {pretrained_model_name_or_path}."
|
@@ -1034,6 +1099,8 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1034
1099
|
model.register_to_config(_name_or_path=pretrained_model_name_or_path)
|
1035
1100
|
if device_map is not None:
|
1036
1101
|
setattr(model, "hf_device_map", final_device_map)
|
1102
|
+
if quantization_config is not None:
|
1103
|
+
setattr(model, "quantization_config", quantization_config)
|
1037
1104
|
return model
|
1038
1105
|
|
1039
1106
|
@property
|
@@ -1084,19 +1151,20 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1084
1151
|
accelerate.hooks.remove_hook_from_module(model, recurse=True)
|
1085
1152
|
self._all_hooks = []
|
1086
1153
|
|
1087
|
-
def enable_model_cpu_offload(self, gpu_id: Optional[int] = None, device: Union[torch.device, str] =
|
1154
|
+
def enable_model_cpu_offload(self, gpu_id: Optional[int] = None, device: Union[torch.device, str] = None):
|
1088
1155
|
r"""
|
1089
1156
|
Offloads all models to CPU using accelerate, reducing memory usage with a low impact on performance. Compared
|
1090
|
-
to `enable_sequential_cpu_offload`, this method moves one whole model at a time to the
|
1091
|
-
method is called, and the model remains in
|
1092
|
-
`enable_sequential_cpu_offload`, but performance is much better due to the iterative execution
|
1157
|
+
to `enable_sequential_cpu_offload`, this method moves one whole model at a time to the accelerator when its
|
1158
|
+
`forward` method is called, and the model remains in accelerator until the next model runs. Memory savings are
|
1159
|
+
lower than with `enable_sequential_cpu_offload`, but performance is much better due to the iterative execution
|
1160
|
+
of the `unet`.
|
1093
1161
|
|
1094
1162
|
Arguments:
|
1095
1163
|
gpu_id (`int`, *optional*):
|
1096
1164
|
The ID of the accelerator that shall be used in inference. If not specified, it will default to 0.
|
1097
|
-
device (`torch.Device` or `str`, *optional*, defaults to
|
1165
|
+
device (`torch.Device` or `str`, *optional*, defaults to None):
|
1098
1166
|
The PyTorch device type of the accelerator that shall be used in inference. If not specified, it will
|
1099
|
-
|
1167
|
+
automatically detect the available accelerator and use.
|
1100
1168
|
"""
|
1101
1169
|
self._maybe_raise_error_if_group_offload_active(raise_error=True)
|
1102
1170
|
|
@@ -1118,6 +1186,11 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1118
1186
|
|
1119
1187
|
self.remove_all_hooks()
|
1120
1188
|
|
1189
|
+
if device is None:
|
1190
|
+
device = get_device()
|
1191
|
+
if device == "cpu":
|
1192
|
+
raise RuntimeError("`enable_model_cpu_offload` requires accelerator, but not found")
|
1193
|
+
|
1121
1194
|
torch_device = torch.device(device)
|
1122
1195
|
device_index = torch_device.index
|
1123
1196
|
|
@@ -1135,9 +1208,7 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1135
1208
|
self._offload_device = device
|
1136
1209
|
|
1137
1210
|
self.to("cpu", silence_dtype_warnings=True)
|
1138
|
-
|
1139
|
-
if hasattr(device_mod, "empty_cache") and device_mod.is_available():
|
1140
|
-
device_mod.empty_cache() # otherwise we don't see the memory savings (but they probably exist)
|
1211
|
+
empty_device_cache(device.type)
|
1141
1212
|
|
1142
1213
|
all_model_components = {k: v for k, v in self.components.items() if isinstance(v, torch.nn.Module)}
|
1143
1214
|
|
@@ -1196,20 +1267,20 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1196
1267
|
# make sure the model is in the same state as before calling it
|
1197
1268
|
self.enable_model_cpu_offload(device=getattr(self, "_offload_device", "cuda"))
|
1198
1269
|
|
1199
|
-
def enable_sequential_cpu_offload(self, gpu_id: Optional[int] = None, device: Union[torch.device, str] =
|
1270
|
+
def enable_sequential_cpu_offload(self, gpu_id: Optional[int] = None, device: Union[torch.device, str] = None):
|
1200
1271
|
r"""
|
1201
1272
|
Offloads all models to CPU using 🤗 Accelerate, significantly reducing memory usage. When called, the state
|
1202
1273
|
dicts of all `torch.nn.Module` components (except those in `self._exclude_from_cpu_offload`) are saved to CPU
|
1203
|
-
and then moved to `torch.device('meta')` and loaded to
|
1204
|
-
method called. Offloading happens on a submodule basis. Memory savings are higher than with
|
1274
|
+
and then moved to `torch.device('meta')` and loaded to accelerator only when their specific submodule has its
|
1275
|
+
`forward` method called. Offloading happens on a submodule basis. Memory savings are higher than with
|
1205
1276
|
`enable_model_cpu_offload`, but performance is lower.
|
1206
1277
|
|
1207
1278
|
Arguments:
|
1208
1279
|
gpu_id (`int`, *optional*):
|
1209
1280
|
The ID of the accelerator that shall be used in inference. If not specified, it will default to 0.
|
1210
|
-
device (`torch.Device` or `str`, *optional*, defaults to
|
1281
|
+
device (`torch.Device` or `str`, *optional*, defaults to None):
|
1211
1282
|
The PyTorch device type of the accelerator that shall be used in inference. If not specified, it will
|
1212
|
-
|
1283
|
+
automatically detect the available accelerator and use.
|
1213
1284
|
"""
|
1214
1285
|
self._maybe_raise_error_if_group_offload_active(raise_error=True)
|
1215
1286
|
|
@@ -1225,6 +1296,11 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1225
1296
|
"It seems like you have activated a device mapping strategy on the pipeline so calling `enable_sequential_cpu_offload() isn't allowed. You can call `reset_device_map()` first and then call `enable_sequential_cpu_offload()`."
|
1226
1297
|
)
|
1227
1298
|
|
1299
|
+
if device is None:
|
1300
|
+
device = get_device()
|
1301
|
+
if device == "cpu":
|
1302
|
+
raise RuntimeError("`enable_sequential_cpu_offload` requires accelerator, but not found")
|
1303
|
+
|
1228
1304
|
torch_device = torch.device(device)
|
1229
1305
|
device_index = torch_device.index
|
1230
1306
|
|
@@ -1242,10 +1318,9 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1242
1318
|
self._offload_device = device
|
1243
1319
|
|
1244
1320
|
if self.device.type != "cpu":
|
1321
|
+
orig_device_type = self.device.type
|
1245
1322
|
self.to("cpu", silence_dtype_warnings=True)
|
1246
|
-
|
1247
|
-
if hasattr(device_mod, "empty_cache") and device_mod.is_available():
|
1248
|
-
device_mod.empty_cache() # otherwise we don't see the memory savings (but they probably exist)
|
1323
|
+
empty_device_cache(orig_device_type)
|
1249
1324
|
|
1250
1325
|
for name, model in self.components.items():
|
1251
1326
|
if not isinstance(model, torch.nn.Module):
|
@@ -1358,8 +1433,8 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1358
1433
|
|
1359
1434
|
<Tip>
|
1360
1435
|
|
1361
|
-
To use private or [gated models](https://huggingface.co/docs/hub/models-gated#gated-models), log-in with
|
1362
|
-
|
1436
|
+
To use private or [gated models](https://huggingface.co/docs/hub/models-gated#gated-models), log-in with `hf
|
1437
|
+
auth login
|
1363
1438
|
|
1364
1439
|
</Tip>
|
1365
1440
|
|
@@ -1628,6 +1703,8 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1628
1703
|
signature_types[k] = (v.annotation,)
|
1629
1704
|
elif get_origin(v.annotation) == Union:
|
1630
1705
|
signature_types[k] = get_args(v.annotation)
|
1706
|
+
elif get_origin(v.annotation) in [List, Dict, list, dict]:
|
1707
|
+
signature_types[k] = (v.annotation,)
|
1631
1708
|
else:
|
1632
1709
|
logger.warning(f"cannot get type annotation for Parameter {k} of {cls}.")
|
1633
1710
|
return signature_types
|
@@ -1914,11 +1991,13 @@ class DiffusionPipeline(ConfigMixin, PushToHubMixin):
|
|
1914
1991
|
f"{'' if k.startswith('_') else '_'}{k}": v for k, v in original_config.items() if k not in pipeline_kwargs
|
1915
1992
|
}
|
1916
1993
|
|
1994
|
+
optional_components = (
|
1995
|
+
pipeline._optional_components
|
1996
|
+
if hasattr(pipeline, "_optional_components") and pipeline._optional_components
|
1997
|
+
else []
|
1998
|
+
)
|
1917
1999
|
missing_modules = (
|
1918
|
-
set(expected_modules)
|
1919
|
-
- set(pipeline._optional_components)
|
1920
|
-
- set(pipeline_kwargs.keys())
|
1921
|
-
- set(true_optional_modules)
|
2000
|
+
set(expected_modules) - set(optional_components) - set(pipeline_kwargs.keys()) - set(true_optional_modules)
|
1922
2001
|
)
|
1923
2002
|
|
1924
2003
|
if len(missing_modules) > 0:
|
@@ -1990,7 +2069,7 @@ class StableDiffusionMixin:
|
|
1990
2069
|
self.vae.disable_tiling()
|
1991
2070
|
|
1992
2071
|
def enable_freeu(self, s1: float, s2: float, b1: float, b2: float):
|
1993
|
-
r"""Enables the FreeU mechanism as in https://
|
2072
|
+
r"""Enables the FreeU mechanism as in https://huggingface.co/papers/2309.11497.
|
1994
2073
|
|
1995
2074
|
The suffixes after the scaling factors represent the stages where they are being applied.
|
1996
2075
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2025 PixArt-Alpha Authors and The HuggingFace Team. All rights reserved.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -256,7 +256,9 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
256
256
|
Tokenizer of class
|
257
257
|
[T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer).
|
258
258
|
transformer ([`PixArtTransformer2DModel`]):
|
259
|
-
A text conditioned `PixArtTransformer2DModel` to denoise the encoded image latents.
|
259
|
+
A text conditioned `PixArtTransformer2DModel` to denoise the encoded image latents. Initially published as
|
260
|
+
[`Transformer2DModel`](https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS/blob/main/transformer/config.json#L2)
|
261
|
+
in the config, but the mismatch can be ignored.
|
260
262
|
scheduler ([`SchedulerMixin`]):
|
261
263
|
A scheduler to be used in combination with `transformer` to denoise the encoded image latents.
|
262
264
|
"""
|
@@ -437,7 +439,7 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
437
439
|
def prepare_extra_step_kwargs(self, generator, eta):
|
438
440
|
# prepare extra kwargs for the scheduler step, since not all schedulers have the same signature
|
439
441
|
# eta (η) is only used with the DDIMScheduler, it will be ignored for other schedulers.
|
440
|
-
# eta corresponds to η in DDIM paper: https://
|
442
|
+
# eta corresponds to η in DDIM paper: https://huggingface.co/papers/2010.02502
|
441
443
|
# and should be between [0, 1]
|
442
444
|
|
443
445
|
accepts_eta = "eta" in set(inspect.signature(self.scheduler.step).parameters.keys())
|
@@ -598,7 +600,7 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
598
600
|
# &
|
599
601
|
caption = re.sub(r"&", "", caption)
|
600
602
|
|
601
|
-
# ip
|
603
|
+
# ip addresses:
|
602
604
|
caption = re.sub(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", " ", caption)
|
603
605
|
|
604
606
|
# article ids:
|
@@ -733,11 +735,11 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
733
735
|
their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is passed
|
734
736
|
will be used.
|
735
737
|
guidance_scale (`float`, *optional*, defaults to 4.5):
|
736
|
-
Guidance scale as defined in [Classifier-Free Diffusion
|
737
|
-
`guidance_scale` is defined as `w` of equation 2.
|
738
|
-
Paper](https://
|
739
|
-
1`. Higher guidance scale encourages to generate images that are closely linked to
|
740
|
-
usually at the expense of lower image quality.
|
738
|
+
Guidance scale as defined in [Classifier-Free Diffusion
|
739
|
+
Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` is defined as `w` of equation 2.
|
740
|
+
of [Imagen Paper](https://huggingface.co/papers/2205.11487). Guidance scale is enabled by setting
|
741
|
+
`guidance_scale > 1`. Higher guidance scale encourages to generate images that are closely linked to
|
742
|
+
the text `prompt`, usually at the expense of lower image quality.
|
741
743
|
num_images_per_prompt (`int`, *optional*, defaults to 1):
|
742
744
|
The number of images to generate per prompt.
|
743
745
|
height (`int`, *optional*, defaults to self.unet.config.sample_size):
|
@@ -745,8 +747,8 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
745
747
|
width (`int`, *optional*, defaults to self.unet.config.sample_size):
|
746
748
|
The width in pixels of the generated image.
|
747
749
|
eta (`float`, *optional*, defaults to 0.0):
|
748
|
-
Corresponds to parameter eta (η) in the DDIM paper: https://
|
749
|
-
[`schedulers.DDIMScheduler`], will be ignored for others.
|
750
|
+
Corresponds to parameter eta (η) in the DDIM paper: https://huggingface.co/papers/2010.02502. Only
|
751
|
+
applies to [`schedulers.DDIMScheduler`], will be ignored for others.
|
750
752
|
generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
|
751
753
|
One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)
|
752
754
|
to make generation deterministic.
|
@@ -832,7 +834,7 @@ class PixArtAlphaPipeline(DiffusionPipeline):
|
|
832
834
|
device = self._execution_device
|
833
835
|
|
834
836
|
# here `guidance_scale` is defined analog to the guidance weight `w` of equation (2)
|
835
|
-
# of the Imagen paper: https://
|
837
|
+
# of the Imagen paper: https://huggingface.co/papers/2205.11487 . `guidance_scale = 1`
|
836
838
|
# corresponds to doing no classifier free guidance.
|
837
839
|
do_classifier_free_guidance = guidance_scale > 1.0
|
838
840
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2025 PixArt-Sigma Authors and The HuggingFace Team. All rights reserved.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -185,6 +185,26 @@ def retrieve_timesteps(
|
|
185
185
|
class PixArtSigmaPipeline(DiffusionPipeline):
|
186
186
|
r"""
|
187
187
|
Pipeline for text-to-image generation using PixArt-Sigma.
|
188
|
+
|
189
|
+
This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods the
|
190
|
+
library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
|
191
|
+
|
192
|
+
Args:
|
193
|
+
vae ([`AutoencoderKL`]):
|
194
|
+
Variational Auto-Encoder (VAE) Model to encode and decode images to and from latent representations.
|
195
|
+
text_encoder ([`T5EncoderModel`]):
|
196
|
+
Frozen text-encoder. PixArt-Alpha uses
|
197
|
+
[T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel), specifically the
|
198
|
+
[t5-v1_1-xxl](https://huggingface.co/PixArt-alpha/PixArt-alpha/tree/main/t5-v1_1-xxl) variant.
|
199
|
+
tokenizer (`T5Tokenizer`):
|
200
|
+
Tokenizer of class
|
201
|
+
[T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer).
|
202
|
+
transformer ([`PixArtTransformer2DModel`]):
|
203
|
+
A text conditioned `PixArtTransformer2DModel` to denoise the encoded image latents. Initially published as
|
204
|
+
[`Transformer2DModel`](https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS/blob/main/transformer/config.json#L2)
|
205
|
+
in the config, but the mismatch can be ignored.
|
206
|
+
scheduler ([`SchedulerMixin`]):
|
207
|
+
A scheduler to be used in combination with `transformer` to denoise the encoded image latents.
|
188
208
|
"""
|
189
209
|
|
190
210
|
bad_punct_regex = re.compile(
|
@@ -363,7 +383,7 @@ class PixArtSigmaPipeline(DiffusionPipeline):
|
|
363
383
|
def prepare_extra_step_kwargs(self, generator, eta):
|
364
384
|
# prepare extra kwargs for the scheduler step, since not all schedulers have the same signature
|
365
385
|
# eta (η) is only used with the DDIMScheduler, it will be ignored for other schedulers.
|
366
|
-
# eta corresponds to η in DDIM paper: https://
|
386
|
+
# eta corresponds to η in DDIM paper: https://huggingface.co/papers/2010.02502
|
367
387
|
# and should be between [0, 1]
|
368
388
|
|
369
389
|
accepts_eta = "eta" in set(inspect.signature(self.scheduler.step).parameters.keys())
|
@@ -525,7 +545,7 @@ class PixArtSigmaPipeline(DiffusionPipeline):
|
|
525
545
|
# &
|
526
546
|
caption = re.sub(r"&", "", caption)
|
527
547
|
|
528
|
-
# ip
|
548
|
+
# ip addresses:
|
529
549
|
caption = re.sub(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", " ", caption)
|
530
550
|
|
531
551
|
# article ids:
|
@@ -660,11 +680,11 @@ class PixArtSigmaPipeline(DiffusionPipeline):
|
|
660
680
|
their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is passed
|
661
681
|
will be used.
|
662
682
|
guidance_scale (`float`, *optional*, defaults to 4.5):
|
663
|
-
Guidance scale as defined in [Classifier-Free Diffusion
|
664
|
-
`guidance_scale` is defined as `w` of equation 2.
|
665
|
-
Paper](https://
|
666
|
-
1`. Higher guidance scale encourages to generate images that are closely linked to
|
667
|
-
usually at the expense of lower image quality.
|
683
|
+
Guidance scale as defined in [Classifier-Free Diffusion
|
684
|
+
Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` is defined as `w` of equation 2.
|
685
|
+
of [Imagen Paper](https://huggingface.co/papers/2205.11487). Guidance scale is enabled by setting
|
686
|
+
`guidance_scale > 1`. Higher guidance scale encourages to generate images that are closely linked to
|
687
|
+
the text `prompt`, usually at the expense of lower image quality.
|
668
688
|
num_images_per_prompt (`int`, *optional*, defaults to 1):
|
669
689
|
The number of images to generate per prompt.
|
670
690
|
height (`int`, *optional*, defaults to self.unet.config.sample_size):
|
@@ -672,8 +692,8 @@ class PixArtSigmaPipeline(DiffusionPipeline):
|
|
672
692
|
width (`int`, *optional*, defaults to self.unet.config.sample_size):
|
673
693
|
The width in pixels of the generated image.
|
674
694
|
eta (`float`, *optional*, defaults to 0.0):
|
675
|
-
Corresponds to parameter eta (η) in the DDIM paper: https://
|
676
|
-
[`schedulers.DDIMScheduler`], will be ignored for others.
|
695
|
+
Corresponds to parameter eta (η) in the DDIM paper: https://huggingface.co/papers/2010.02502. Only
|
696
|
+
applies to [`schedulers.DDIMScheduler`], will be ignored for others.
|
677
697
|
generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
|
678
698
|
One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)
|
679
699
|
to make generation deterministic.
|
@@ -758,7 +778,7 @@ class PixArtSigmaPipeline(DiffusionPipeline):
|
|
758
778
|
device = self._execution_device
|
759
779
|
|
760
780
|
# here `guidance_scale` is defined analog to the guidance weight `w` of equation (2)
|
761
|
-
# of the Imagen paper: https://
|
781
|
+
# of the Imagen paper: https://huggingface.co/papers/2205.11487 . `guidance_scale = 1`
|
762
782
|
# corresponds to doing no classifier free guidance.
|
763
783
|
do_classifier_free_guidance = guidance_scale > 1.0
|
764
784
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
from typing import TYPE_CHECKING
|
2
|
+
|
3
|
+
from ...utils import (
|
4
|
+
DIFFUSERS_SLOW_IMPORT,
|
5
|
+
OptionalDependencyNotAvailable,
|
6
|
+
_LazyModule,
|
7
|
+
get_objects_from_module,
|
8
|
+
is_torch_available,
|
9
|
+
is_transformers_available,
|
10
|
+
)
|
11
|
+
|
12
|
+
|
13
|
+
_dummy_objects = {}
|
14
|
+
_additional_imports = {}
|
15
|
+
_import_structure = {"pipeline_output": ["QwenImagePipelineOutput", "QwenImagePriorReduxPipelineOutput"]}
|
16
|
+
|
17
|
+
try:
|
18
|
+
if not (is_transformers_available() and is_torch_available()):
|
19
|
+
raise OptionalDependencyNotAvailable()
|
20
|
+
except OptionalDependencyNotAvailable:
|
21
|
+
from ...utils import dummy_torch_and_transformers_objects # noqa F403
|
22
|
+
|
23
|
+
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_objects))
|
24
|
+
else:
|
25
|
+
_import_structure["modeling_qwenimage"] = ["ReduxImageEncoder"]
|
26
|
+
_import_structure["pipeline_qwenimage"] = ["QwenImagePipeline"]
|
27
|
+
_import_structure["pipeline_qwenimage_edit"] = ["QwenImageEditPipeline"]
|
28
|
+
_import_structure["pipeline_qwenimage_img2img"] = ["QwenImageImg2ImgPipeline"]
|
29
|
+
_import_structure["pipeline_qwenimage_inpaint"] = ["QwenImageInpaintPipeline"]
|
30
|
+
|
31
|
+
if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
32
|
+
try:
|
33
|
+
if not (is_transformers_available() and is_torch_available()):
|
34
|
+
raise OptionalDependencyNotAvailable()
|
35
|
+
except OptionalDependencyNotAvailable:
|
36
|
+
from ...utils.dummy_torch_and_transformers_objects import * # noqa F403
|
37
|
+
else:
|
38
|
+
from .pipeline_qwenimage import QwenImagePipeline
|
39
|
+
from .pipeline_qwenimage_edit import QwenImageEditPipeline
|
40
|
+
from .pipeline_qwenimage_img2img import QwenImageImg2ImgPipeline
|
41
|
+
from .pipeline_qwenimage_inpaint import QwenImageInpaintPipeline
|
42
|
+
else:
|
43
|
+
import sys
|
44
|
+
|
45
|
+
sys.modules[__name__] = _LazyModule(
|
46
|
+
__name__,
|
47
|
+
globals()["__file__"],
|
48
|
+
_import_structure,
|
49
|
+
module_spec=__spec__,
|
50
|
+
)
|
51
|
+
|
52
|
+
for name, value in _dummy_objects.items():
|
53
|
+
setattr(sys.modules[__name__], name, value)
|
54
|
+
for name, value in _additional_imports.items():
|
55
|
+
setattr(sys.modules[__name__], name, value)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from typing import List, Union
|
3
|
+
|
4
|
+
import numpy as np
|
5
|
+
import PIL.Image
|
6
|
+
|
7
|
+
from ...utils import BaseOutput
|
8
|
+
|
9
|
+
|
10
|
+
@dataclass
|
11
|
+
class QwenImagePipelineOutput(BaseOutput):
|
12
|
+
"""
|
13
|
+
Output class for Stable Diffusion pipelines.
|
14
|
+
|
15
|
+
Args:
|
16
|
+
images (`List[PIL.Image.Image]` or `np.ndarray`)
|
17
|
+
List of denoised PIL images of length `batch_size` or numpy array of shape `(batch_size, height, width,
|
18
|
+
num_channels)`. PIL images or numpy array present the denoised images of the diffusion pipeline.
|
19
|
+
"""
|
20
|
+
|
21
|
+
images: Union[List[PIL.Image.Image], np.ndarray]
|