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
@@ -15,6 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
import copy
|
18
|
+
import functools
|
18
19
|
import inspect
|
19
20
|
import itertools
|
20
21
|
import json
|
@@ -42,6 +43,7 @@ from ..quantizers.quantization_config import QuantizationMethod
|
|
42
43
|
from ..utils import (
|
43
44
|
CONFIG_NAME,
|
44
45
|
FLAX_WEIGHTS_NAME,
|
46
|
+
HF_ENABLE_PARALLEL_LOADING,
|
45
47
|
SAFE_WEIGHTS_INDEX_NAME,
|
46
48
|
SAFETENSORS_WEIGHTS_NAME,
|
47
49
|
WEIGHTS_INDEX_NAME,
|
@@ -62,12 +64,15 @@ from ..utils.hub_utils import (
|
|
62
64
|
load_or_create_model_card,
|
63
65
|
populate_model_card,
|
64
66
|
)
|
67
|
+
from ..utils.torch_utils import empty_device_cache
|
65
68
|
from .model_loading_utils import (
|
69
|
+
_caching_allocator_warmup,
|
66
70
|
_determine_device_map,
|
71
|
+
_expand_device_map,
|
67
72
|
_fetch_index_file,
|
68
73
|
_fetch_index_file_legacy,
|
69
|
-
|
70
|
-
|
74
|
+
_load_shard_file,
|
75
|
+
_load_shard_files_with_threadpool,
|
71
76
|
load_state_dict,
|
72
77
|
)
|
73
78
|
|
@@ -168,7 +173,11 @@ def get_parameter_dtype(parameter: torch.nn.Module) -> torch.dtype:
|
|
168
173
|
|
169
174
|
for name, param in parameter.named_parameters():
|
170
175
|
last_dtype = param.dtype
|
171
|
-
if
|
176
|
+
if (
|
177
|
+
hasattr(parameter, "_keep_in_fp32_modules")
|
178
|
+
and parameter._keep_in_fp32_modules
|
179
|
+
and any(m in name for m in parameter._keep_in_fp32_modules)
|
180
|
+
):
|
172
181
|
continue
|
173
182
|
|
174
183
|
if param.is_floating_point():
|
@@ -200,34 +209,6 @@ def get_parameter_dtype(parameter: torch.nn.Module) -> torch.dtype:
|
|
200
209
|
return last_tuple[1].dtype
|
201
210
|
|
202
211
|
|
203
|
-
def check_support_param_buffer_assignment(model_to_load, state_dict, start_prefix=""):
|
204
|
-
"""
|
205
|
-
Checks if `model_to_load` supports param buffer assignment (such as when loading in empty weights) by first
|
206
|
-
checking if the model explicitly disables it, then by ensuring that the state dict keys are a subset of the model's
|
207
|
-
parameters.
|
208
|
-
|
209
|
-
"""
|
210
|
-
if model_to_load.device.type == "meta":
|
211
|
-
return False
|
212
|
-
|
213
|
-
if len([key for key in state_dict if key.startswith(start_prefix)]) == 0:
|
214
|
-
return False
|
215
|
-
|
216
|
-
# Some models explicitly do not support param buffer assignment
|
217
|
-
if not getattr(model_to_load, "_supports_param_buffer_assignment", True):
|
218
|
-
logger.debug(
|
219
|
-
f"{model_to_load.__class__.__name__} does not support param buffer assignment, loading will be slower"
|
220
|
-
)
|
221
|
-
return False
|
222
|
-
|
223
|
-
# If the model does, the incoming `state_dict` and the `model_to_load` must be the same dtype
|
224
|
-
first_key = next(iter(model_to_load.state_dict().keys()))
|
225
|
-
if start_prefix + first_key in state_dict:
|
226
|
-
return state_dict[start_prefix + first_key].dtype == model_to_load.state_dict()[first_key].dtype
|
227
|
-
|
228
|
-
return False
|
229
|
-
|
230
|
-
|
231
212
|
@contextmanager
|
232
213
|
def no_init_weights():
|
233
214
|
"""
|
@@ -266,6 +247,7 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
266
247
|
_keep_in_fp32_modules = None
|
267
248
|
_skip_layerwise_casting_patterns = None
|
268
249
|
_supports_group_offloading = True
|
250
|
+
_repeated_blocks = []
|
269
251
|
|
270
252
|
def __init__(self):
|
271
253
|
super().__init__()
|
@@ -548,6 +530,7 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
548
530
|
use_stream: bool = False,
|
549
531
|
record_stream: bool = False,
|
550
532
|
low_cpu_mem_usage=False,
|
533
|
+
offload_to_disk_path: Optional[str] = None,
|
551
534
|
) -> None:
|
552
535
|
r"""
|
553
536
|
Activates group offloading for the current model.
|
@@ -588,17 +571,72 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
588
571
|
f"open an issue at https://github.com/huggingface/diffusers/issues."
|
589
572
|
)
|
590
573
|
apply_group_offloading(
|
591
|
-
self,
|
592
|
-
onload_device,
|
593
|
-
offload_device,
|
594
|
-
offload_type,
|
595
|
-
num_blocks_per_group,
|
596
|
-
non_blocking,
|
597
|
-
use_stream,
|
598
|
-
record_stream,
|
574
|
+
module=self,
|
575
|
+
onload_device=onload_device,
|
576
|
+
offload_device=offload_device,
|
577
|
+
offload_type=offload_type,
|
578
|
+
num_blocks_per_group=num_blocks_per_group,
|
579
|
+
non_blocking=non_blocking,
|
580
|
+
use_stream=use_stream,
|
581
|
+
record_stream=record_stream,
|
599
582
|
low_cpu_mem_usage=low_cpu_mem_usage,
|
583
|
+
offload_to_disk_path=offload_to_disk_path,
|
600
584
|
)
|
601
585
|
|
586
|
+
def set_attention_backend(self, backend: str) -> None:
|
587
|
+
"""
|
588
|
+
Set the attention backend for the model.
|
589
|
+
|
590
|
+
Args:
|
591
|
+
backend (`str`):
|
592
|
+
The name of the backend to set. Must be one of the available backends defined in
|
593
|
+
`AttentionBackendName`. Available backends can be found in
|
594
|
+
`diffusers.attention_dispatch.AttentionBackendName`. Defaults to torch native scaled dot product
|
595
|
+
attention as backend.
|
596
|
+
"""
|
597
|
+
from .attention import AttentionModuleMixin
|
598
|
+
from .attention_dispatch import AttentionBackendName, _check_attention_backend_requirements
|
599
|
+
|
600
|
+
# TODO: the following will not be required when everything is refactored to AttentionModuleMixin
|
601
|
+
from .attention_processor import Attention, MochiAttention
|
602
|
+
|
603
|
+
logger.warning("Attention backends are an experimental feature and the API may be subject to change.")
|
604
|
+
|
605
|
+
backend = backend.lower()
|
606
|
+
available_backends = {x.value for x in AttentionBackendName.__members__.values()}
|
607
|
+
if backend not in available_backends:
|
608
|
+
raise ValueError(f"`{backend=}` must be one of the following: " + ", ".join(available_backends))
|
609
|
+
backend = AttentionBackendName(backend)
|
610
|
+
_check_attention_backend_requirements(backend)
|
611
|
+
|
612
|
+
attention_classes = (Attention, MochiAttention, AttentionModuleMixin)
|
613
|
+
for module in self.modules():
|
614
|
+
if not isinstance(module, attention_classes):
|
615
|
+
continue
|
616
|
+
processor = module.processor
|
617
|
+
if processor is None or not hasattr(processor, "_attention_backend"):
|
618
|
+
continue
|
619
|
+
processor._attention_backend = backend
|
620
|
+
|
621
|
+
def reset_attention_backend(self) -> None:
|
622
|
+
"""
|
623
|
+
Resets the attention backend for the model. Following calls to `forward` will use the environment default or
|
624
|
+
the torch native scaled dot product attention.
|
625
|
+
"""
|
626
|
+
from .attention import AttentionModuleMixin
|
627
|
+
from .attention_processor import Attention, MochiAttention
|
628
|
+
|
629
|
+
logger.warning("Attention backends are an experimental feature and the API may be subject to change.")
|
630
|
+
|
631
|
+
attention_classes = (Attention, MochiAttention, AttentionModuleMixin)
|
632
|
+
for module in self.modules():
|
633
|
+
if not isinstance(module, attention_classes):
|
634
|
+
continue
|
635
|
+
processor = module.processor
|
636
|
+
if processor is None or not hasattr(processor, "_attention_backend"):
|
637
|
+
continue
|
638
|
+
processor._attention_backend = None
|
639
|
+
|
602
640
|
def save_pretrained(
|
603
641
|
self,
|
604
642
|
save_directory: Union[str, os.PathLike],
|
@@ -787,9 +825,8 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
787
825
|
cache_dir (`Union[str, os.PathLike]`, *optional*):
|
788
826
|
Path to a directory where a downloaded pretrained model configuration is cached if the standard cache
|
789
827
|
is not used.
|
790
|
-
torch_dtype (`
|
791
|
-
Override the default `torch.dtype` and load the model with another dtype.
|
792
|
-
dtype is automatically derived from the model's weights.
|
828
|
+
torch_dtype (`torch.dtype`, *optional*):
|
829
|
+
Override the default `torch.dtype` and load the model with another dtype.
|
793
830
|
force_download (`bool`, *optional*, defaults to `False`):
|
794
831
|
Whether or not to force the (re-)download of the model weights and configuration files, overriding the
|
795
832
|
cached versions if they exist.
|
@@ -815,14 +852,43 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
815
852
|
Mirror source to resolve accessibility issues if you're downloading a model in China. We do not
|
816
853
|
guarantee the timeliness or safety of the source, and you should refer to the mirror site for more
|
817
854
|
information.
|
818
|
-
device_map (`str` or `Dict[str, Union[int, str, torch.device]]`, *optional*):
|
855
|
+
device_map (`Union[int, str, torch.device]` or `Dict[str, Union[int, str, torch.device]]`, *optional*):
|
819
856
|
A map that specifies where each submodule should go. It doesn't need to be defined for each
|
820
857
|
parameter/buffer name; once a given module name is inside, every submodule of it will be sent to the
|
821
858
|
same device. Defaults to `None`, meaning that the model will be loaded on CPU.
|
822
859
|
|
860
|
+
Examples:
|
861
|
+
|
862
|
+
```py
|
863
|
+
>>> from diffusers import AutoModel
|
864
|
+
>>> import torch
|
865
|
+
|
866
|
+
>>> # This works.
|
867
|
+
>>> model = AutoModel.from_pretrained(
|
868
|
+
... "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map="cuda"
|
869
|
+
... )
|
870
|
+
>>> # This also works (integer accelerator device ID).
|
871
|
+
>>> model = AutoModel.from_pretrained(
|
872
|
+
... "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map=0
|
873
|
+
... )
|
874
|
+
>>> # Specifying a supported offloading strategy like "auto" also works.
|
875
|
+
>>> model = AutoModel.from_pretrained(
|
876
|
+
... "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map="auto"
|
877
|
+
... )
|
878
|
+
>>> # Specifying a dictionary as `device_map` also works.
|
879
|
+
>>> model = AutoModel.from_pretrained(
|
880
|
+
... "stabilityai/stable-diffusion-xl-base-1.0",
|
881
|
+
... subfolder="unet",
|
882
|
+
... device_map={"": torch.device("cuda")},
|
883
|
+
... )
|
884
|
+
```
|
885
|
+
|
823
886
|
Set `device_map="auto"` to have 🤗 Accelerate automatically compute the most optimized `device_map`. For
|
824
887
|
more information about each option see [designing a device
|
825
|
-
map](https://
|
888
|
+
map](https://huggingface.co/docs/accelerate/en/concept_guides/big_model_inference#the-devicemap). You
|
889
|
+
can also refer to the [Diffusers-specific
|
890
|
+
documentation](https://huggingface.co/docs/diffusers/main/en/training/distributed_inference#model-sharding)
|
891
|
+
for more concrete examples.
|
826
892
|
max_memory (`Dict`, *optional*):
|
827
893
|
A dictionary device identifier for the maximum memory. Will default to the maximum memory available for
|
828
894
|
each GPU and the available CPU RAM if unset.
|
@@ -850,8 +916,8 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
850
916
|
|
851
917
|
<Tip>
|
852
918
|
|
853
|
-
To use private or [gated models](https://huggingface.co/docs/hub/models-gated#gated-models), log-in with
|
854
|
-
|
919
|
+
To use private or [gated models](https://huggingface.co/docs/hub/models-gated#gated-models), log-in with `hf
|
920
|
+
auth login`. You can also activate the special
|
855
921
|
["offline-mode"](https://huggingface.co/diffusers/installation.html#offline-mode) to use this method in a
|
856
922
|
firewalled environment.
|
857
923
|
|
@@ -895,6 +961,10 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
895
961
|
dduf_entries: Optional[Dict[str, DDUFEntry]] = kwargs.pop("dduf_entries", None)
|
896
962
|
disable_mmap = kwargs.pop("disable_mmap", False)
|
897
963
|
|
964
|
+
is_parallel_loading_enabled = HF_ENABLE_PARALLEL_LOADING
|
965
|
+
if is_parallel_loading_enabled and not low_cpu_mem_usage:
|
966
|
+
raise NotImplementedError("Parallel loading is not supported when not using `low_cpu_mem_usage`.")
|
967
|
+
|
898
968
|
if torch_dtype is not None and not isinstance(torch_dtype, torch.dtype):
|
899
969
|
torch_dtype = torch.float32
|
900
970
|
logger.warning(
|
@@ -1230,6 +1300,7 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
1230
1300
|
hf_quantizer=hf_quantizer,
|
1231
1301
|
keep_in_fp32_modules=keep_in_fp32_modules,
|
1232
1302
|
dduf_entries=dduf_entries,
|
1303
|
+
is_parallel_loading_enabled=is_parallel_loading_enabled,
|
1233
1304
|
)
|
1234
1305
|
loading_info = {
|
1235
1306
|
"missing_keys": missing_keys,
|
@@ -1374,6 +1445,39 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
1374
1445
|
else:
|
1375
1446
|
return super().float(*args)
|
1376
1447
|
|
1448
|
+
def compile_repeated_blocks(self, *args, **kwargs):
|
1449
|
+
"""
|
1450
|
+
Compiles *only* the frequently repeated sub-modules of a model (e.g. the Transformer layers) instead of
|
1451
|
+
compiling the entire model. This technique—often called **regional compilation** (see the PyTorch recipe
|
1452
|
+
https://docs.pytorch.org/tutorials/recipes/regional_compilation.html) can reduce end-to-end compile time
|
1453
|
+
substantially, while preserving the runtime speed-ups you would expect from a full `torch.compile`.
|
1454
|
+
|
1455
|
+
The set of sub-modules to compile is discovered by the presence of **`_repeated_blocks`** attribute in the
|
1456
|
+
model definition. Define this attribute on your model subclass as a list/tuple of class names (strings). Every
|
1457
|
+
module whose class name matches will be compiled.
|
1458
|
+
|
1459
|
+
Once discovered, each matching sub-module is compiled by calling `submodule.compile(*args, **kwargs)`. Any
|
1460
|
+
positional or keyword arguments you supply to `compile_repeated_blocks` are forwarded verbatim to
|
1461
|
+
`torch.compile`.
|
1462
|
+
"""
|
1463
|
+
repeated_blocks = getattr(self, "_repeated_blocks", None)
|
1464
|
+
|
1465
|
+
if not repeated_blocks:
|
1466
|
+
raise ValueError(
|
1467
|
+
"`_repeated_blocks` attribute is empty. "
|
1468
|
+
f"Set `_repeated_blocks` for the class `{self.__class__.__name__}` to benefit from faster compilation. "
|
1469
|
+
)
|
1470
|
+
has_compiled_region = False
|
1471
|
+
for submod in self.modules():
|
1472
|
+
if submod.__class__.__name__ in repeated_blocks:
|
1473
|
+
submod.compile(*args, **kwargs)
|
1474
|
+
has_compiled_region = True
|
1475
|
+
|
1476
|
+
if not has_compiled_region:
|
1477
|
+
raise ValueError(
|
1478
|
+
f"Regional compilation failed because {repeated_blocks} classes are not found in the model. "
|
1479
|
+
)
|
1480
|
+
|
1377
1481
|
@classmethod
|
1378
1482
|
def _load_pretrained_model(
|
1379
1483
|
cls,
|
@@ -1388,10 +1492,11 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
1388
1492
|
low_cpu_mem_usage: bool = True,
|
1389
1493
|
dtype: Optional[Union[str, torch.dtype]] = None,
|
1390
1494
|
keep_in_fp32_modules: Optional[List[str]] = None,
|
1391
|
-
device_map: Dict[str, Union[int, str, torch.device]] = None,
|
1495
|
+
device_map: Union[str, int, torch.device, Dict[str, Union[int, str, torch.device]]] = None,
|
1392
1496
|
offload_state_dict: Optional[bool] = None,
|
1393
1497
|
offload_folder: Optional[Union[str, os.PathLike]] = None,
|
1394
1498
|
dduf_entries: Optional[Dict[str, DDUFEntry]] = None,
|
1499
|
+
is_parallel_loading_enabled: Optional[bool] = False,
|
1395
1500
|
):
|
1396
1501
|
model_state_dict = model.state_dict()
|
1397
1502
|
expected_keys = list(model_state_dict.keys())
|
@@ -1406,8 +1511,6 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
1406
1511
|
unexpected_keys = [k for k in unexpected_keys if re.search(pat, k) is None]
|
1407
1512
|
|
1408
1513
|
mismatched_keys = []
|
1409
|
-
|
1410
|
-
assign_to_params_buffers = None
|
1411
1514
|
error_msgs = []
|
1412
1515
|
|
1413
1516
|
# Deal with offload
|
@@ -1418,80 +1521,67 @@ class ModelMixin(torch.nn.Module, PushToHubMixin):
|
|
1418
1521
|
" for them. Alternatively, make sure you have `safetensors` installed if the model you are using"
|
1419
1522
|
" offers the weights in this format."
|
1420
1523
|
)
|
1421
|
-
|
1524
|
+
else:
|
1422
1525
|
os.makedirs(offload_folder, exist_ok=True)
|
1423
1526
|
if offload_state_dict is None:
|
1424
1527
|
offload_state_dict = True
|
1425
1528
|
|
1529
|
+
# If a device map has been used, we can speedup the load time by warming up the device caching allocator.
|
1530
|
+
# If we don't warmup, each tensor allocation on device calls to the allocator for memory (effectively, a
|
1531
|
+
# lot of individual calls to device malloc). We can, however, preallocate the memory required by the
|
1532
|
+
# tensors using their expected shape and not performing any initialization of the memory (empty data).
|
1533
|
+
# When the actual device allocations happen, the allocator already has a pool of unused device memory
|
1534
|
+
# that it can re-use for faster loading of the model.
|
1535
|
+
if device_map is not None:
|
1536
|
+
expanded_device_map = _expand_device_map(device_map, expected_keys)
|
1537
|
+
_caching_allocator_warmup(model, expanded_device_map, dtype, hf_quantizer)
|
1538
|
+
|
1426
1539
|
offload_index = {} if device_map is not None and "disk" in device_map.values() else None
|
1540
|
+
state_dict_folder, state_dict_index = None, None
|
1427
1541
|
if offload_state_dict:
|
1428
1542
|
state_dict_folder = tempfile.mkdtemp()
|
1429
1543
|
state_dict_index = {}
|
1430
|
-
else:
|
1431
|
-
state_dict_folder = None
|
1432
|
-
state_dict_index = None
|
1433
1544
|
|
1434
1545
|
if state_dict is not None:
|
1435
1546
|
# load_state_dict will manage the case where we pass a dict instead of a file
|
1436
1547
|
# if state dict is not None, it means that we don't need to read the files from resolved_model_file also
|
1437
1548
|
resolved_model_file = [state_dict]
|
1438
1549
|
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
if (
|
1460
|
-
model_key in model_state_dict
|
1461
|
-
and state_dict[checkpoint_key].shape != model_state_dict[model_key].shape
|
1462
|
-
):
|
1463
|
-
mismatched_keys.append(
|
1464
|
-
(checkpoint_key, state_dict[checkpoint_key].shape, model_state_dict[model_key].shape)
|
1465
|
-
)
|
1466
|
-
del state_dict[checkpoint_key]
|
1467
|
-
return mismatched_keys
|
1468
|
-
|
1469
|
-
mismatched_keys += _find_mismatched_keys(
|
1470
|
-
state_dict,
|
1471
|
-
model_state_dict,
|
1472
|
-
loaded_keys,
|
1473
|
-
ignore_mismatched_sizes,
|
1474
|
-
)
|
1550
|
+
# Prepare the loading function sharing the attributes shared between them.
|
1551
|
+
load_fn = functools.partial(
|
1552
|
+
_load_shard_files_with_threadpool if is_parallel_loading_enabled else _load_shard_file,
|
1553
|
+
model=model,
|
1554
|
+
model_state_dict=model_state_dict,
|
1555
|
+
device_map=device_map,
|
1556
|
+
dtype=dtype,
|
1557
|
+
hf_quantizer=hf_quantizer,
|
1558
|
+
keep_in_fp32_modules=keep_in_fp32_modules,
|
1559
|
+
dduf_entries=dduf_entries,
|
1560
|
+
loaded_keys=loaded_keys,
|
1561
|
+
unexpected_keys=unexpected_keys,
|
1562
|
+
offload_index=offload_index,
|
1563
|
+
offload_folder=offload_folder,
|
1564
|
+
state_dict_index=state_dict_index,
|
1565
|
+
state_dict_folder=state_dict_folder,
|
1566
|
+
ignore_mismatched_sizes=ignore_mismatched_sizes,
|
1567
|
+
low_cpu_mem_usage=low_cpu_mem_usage,
|
1568
|
+
)
|
1475
1569
|
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
unexpected_keys=unexpected_keys,
|
1485
|
-
offload_folder=offload_folder,
|
1486
|
-
offload_index=offload_index,
|
1487
|
-
state_dict_index=state_dict_index,
|
1488
|
-
state_dict_folder=state_dict_folder,
|
1489
|
-
)
|
1490
|
-
else:
|
1491
|
-
if assign_to_params_buffers is None:
|
1492
|
-
assign_to_params_buffers = check_support_param_buffer_assignment(model, state_dict)
|
1570
|
+
if is_parallel_loading_enabled:
|
1571
|
+
offload_index, state_dict_index, _mismatched_keys, _error_msgs = load_fn(resolved_model_file)
|
1572
|
+
error_msgs += _error_msgs
|
1573
|
+
mismatched_keys += _mismatched_keys
|
1574
|
+
else:
|
1575
|
+
shard_files = resolved_model_file
|
1576
|
+
if len(resolved_model_file) > 1:
|
1577
|
+
shard_files = logging.tqdm(resolved_model_file, desc="Loading checkpoint shards")
|
1493
1578
|
|
1494
|
-
|
1579
|
+
for shard_file in shard_files:
|
1580
|
+
offload_index, state_dict_index, _mismatched_keys, _error_msgs = load_fn(shard_file)
|
1581
|
+
error_msgs += _error_msgs
|
1582
|
+
mismatched_keys += _mismatched_keys
|
1583
|
+
|
1584
|
+
empty_device_cache()
|
1495
1585
|
|
1496
1586
|
if offload_index is not None and len(offload_index) > 0:
|
1497
1587
|
save_offload_index(offload_index, offload_folder)
|
@@ -1828,4 +1918,9 @@ class LegacyModelMixin(ModelMixin):
|
|
1828
1918
|
# resolve remapping
|
1829
1919
|
remapped_class = _fetch_remapped_cls_from_config(config, cls)
|
1830
1920
|
|
1831
|
-
|
1921
|
+
if remapped_class is cls:
|
1922
|
+
return super(LegacyModelMixin, remapped_class).from_pretrained(
|
1923
|
+
pretrained_model_name_or_path, **kwargs_copy
|
1924
|
+
)
|
1925
|
+
else:
|
1926
|
+
return remapped_class.from_pretrained(pretrained_model_name_or_path, **kwargs_copy)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
# Copyright
|
2
|
+
# Copyright 2025 HuggingFace Inc.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -237,7 +237,7 @@ class AdaLayerNormSingle(nn.Module):
|
|
237
237
|
r"""
|
238
238
|
Norm layer adaptive layer norm single (adaLN-single).
|
239
239
|
|
240
|
-
As proposed in PixArt-Alpha (see: https://
|
240
|
+
As proposed in PixArt-Alpha (see: https://huggingface.co/papers/2310.00426; Section 2.3).
|
241
241
|
|
242
242
|
Parameters:
|
243
243
|
embedding_dim (`int`): The size of each embedding vector.
|
@@ -510,7 +510,7 @@ else:
|
|
510
510
|
|
511
511
|
class RMSNorm(nn.Module):
|
512
512
|
r"""
|
513
|
-
RMS Norm as introduced in https://
|
513
|
+
RMS Norm as introduced in https://huggingface.co/papers/1910.07467 by Zhang et al.
|
514
514
|
|
515
515
|
Args:
|
516
516
|
dim (`int`): Number of dimensions to use for `weights`. Only effective when `elementwise_affine` is True.
|
@@ -600,7 +600,7 @@ class MochiRMSNorm(nn.Module):
|
|
600
600
|
|
601
601
|
class GlobalResponseNorm(nn.Module):
|
602
602
|
r"""
|
603
|
-
Global response normalization as introduced in ConvNeXt-v2 (https://
|
603
|
+
Global response normalization as introduced in ConvNeXt-v2 (https://huggingface.co/papers/2301.00808).
|
604
604
|
|
605
605
|
Args:
|
606
606
|
dim (`int`): Number of dimensions to use for the `gamma` and `beta`.
|
diffusers/models/resnet.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# Copyright
|
2
|
-
# `TemporalConvLayer` Copyright
|
1
|
+
# Copyright 2025 The HuggingFace Team. All rights reserved.
|
2
|
+
# `TemporalConvLayer` Copyright 2025 Alibaba DAMO-VILAB, The ModelScope Team and The HuggingFace Team. All rights reserved.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
diffusers/models/resnet_flax.py
CHANGED
@@ -17,15 +17,22 @@ if is_torch_available():
|
|
17
17
|
from .t5_film_transformer import T5FilmDecoder
|
18
18
|
from .transformer_2d import Transformer2DModel
|
19
19
|
from .transformer_allegro import AllegroTransformer3DModel
|
20
|
+
from .transformer_chroma import ChromaTransformer2DModel
|
20
21
|
from .transformer_cogview3plus import CogView3PlusTransformer2DModel
|
21
22
|
from .transformer_cogview4 import CogView4Transformer2DModel
|
23
|
+
from .transformer_cosmos import CosmosTransformer3DModel
|
22
24
|
from .transformer_easyanimate import EasyAnimateTransformer3DModel
|
23
25
|
from .transformer_flux import FluxTransformer2DModel
|
26
|
+
from .transformer_hidream_image import HiDreamImageTransformer2DModel
|
24
27
|
from .transformer_hunyuan_video import HunyuanVideoTransformer3DModel
|
28
|
+
from .transformer_hunyuan_video_framepack import HunyuanVideoFramepackTransformer3DModel
|
25
29
|
from .transformer_ltx import LTXVideoTransformer3DModel
|
26
30
|
from .transformer_lumina2 import Lumina2Transformer2DModel
|
27
31
|
from .transformer_mochi import MochiTransformer3DModel
|
28
32
|
from .transformer_omnigen import OmniGenTransformer2DModel
|
33
|
+
from .transformer_qwenimage import QwenImageTransformer2DModel
|
29
34
|
from .transformer_sd3 import SD3Transformer2DModel
|
35
|
+
from .transformer_skyreels_v2 import SkyReelsV2Transformer3DModel
|
30
36
|
from .transformer_temporal import TransformerTemporalModel
|
31
37
|
from .transformer_wan import WanTransformer3DModel
|
38
|
+
from .transformer_wan_vace import WanVACETransformer3DModel
|