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
diffusers/__init__.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = "0.
|
1
|
+
__version__ = "0.35.0"
|
2
2
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
|
@@ -34,10 +34,13 @@ from .utils import (
|
|
34
34
|
|
35
35
|
_import_structure = {
|
36
36
|
"configuration_utils": ["ConfigMixin"],
|
37
|
+
"guiders": [],
|
37
38
|
"hooks": [],
|
38
39
|
"loaders": ["FromOriginalModelMixin"],
|
39
40
|
"models": [],
|
41
|
+
"modular_pipelines": [],
|
40
42
|
"pipelines": [],
|
43
|
+
"quantizers.pipe_quant_config": ["PipelineQuantizationConfig"],
|
41
44
|
"quantizers.quantization_config": [],
|
42
45
|
"schedulers": [],
|
43
46
|
"utils": [
|
@@ -130,12 +133,30 @@ except OptionalDependencyNotAvailable:
|
|
130
133
|
_import_structure["utils.dummy_pt_objects"] = [name for name in dir(dummy_pt_objects) if not name.startswith("_")]
|
131
134
|
|
132
135
|
else:
|
136
|
+
_import_structure["guiders"].extend(
|
137
|
+
[
|
138
|
+
"AdaptiveProjectedGuidance",
|
139
|
+
"AutoGuidance",
|
140
|
+
"ClassifierFreeGuidance",
|
141
|
+
"ClassifierFreeZeroStarGuidance",
|
142
|
+
"FrequencyDecoupledGuidance",
|
143
|
+
"PerturbedAttentionGuidance",
|
144
|
+
"SkipLayerGuidance",
|
145
|
+
"SmoothedEnergyGuidance",
|
146
|
+
"TangentialClassifierFreeGuidance",
|
147
|
+
]
|
148
|
+
)
|
133
149
|
_import_structure["hooks"].extend(
|
134
150
|
[
|
135
151
|
"FasterCacheConfig",
|
152
|
+
"FirstBlockCacheConfig",
|
136
153
|
"HookRegistry",
|
154
|
+
"LayerSkipConfig",
|
137
155
|
"PyramidAttentionBroadcastConfig",
|
156
|
+
"SmoothedEnergyGuidanceConfig",
|
138
157
|
"apply_faster_cache",
|
158
|
+
"apply_first_block_cache",
|
159
|
+
"apply_layer_skip",
|
139
160
|
"apply_pyramid_attention_broadcast",
|
140
161
|
]
|
141
162
|
)
|
@@ -143,21 +164,25 @@ else:
|
|
143
164
|
[
|
144
165
|
"AllegroTransformer3DModel",
|
145
166
|
"AsymmetricAutoencoderKL",
|
167
|
+
"AttentionBackendName",
|
146
168
|
"AuraFlowTransformer2DModel",
|
147
169
|
"AutoencoderDC",
|
148
170
|
"AutoencoderKL",
|
149
171
|
"AutoencoderKLAllegro",
|
150
172
|
"AutoencoderKLCogVideoX",
|
173
|
+
"AutoencoderKLCosmos",
|
151
174
|
"AutoencoderKLHunyuanVideo",
|
152
175
|
"AutoencoderKLLTXVideo",
|
153
176
|
"AutoencoderKLMagvit",
|
154
177
|
"AutoencoderKLMochi",
|
178
|
+
"AutoencoderKLQwenImage",
|
155
179
|
"AutoencoderKLTemporalDecoder",
|
156
180
|
"AutoencoderKLWan",
|
157
181
|
"AutoencoderOobleck",
|
158
182
|
"AutoencoderTiny",
|
159
183
|
"AutoModel",
|
160
184
|
"CacheMixin",
|
185
|
+
"ChromaTransformer2DModel",
|
161
186
|
"CogVideoXTransformer3DModel",
|
162
187
|
"CogView3PlusTransformer2DModel",
|
163
188
|
"CogView4Transformer2DModel",
|
@@ -166,14 +191,17 @@ else:
|
|
166
191
|
"ControlNetModel",
|
167
192
|
"ControlNetUnionModel",
|
168
193
|
"ControlNetXSAdapter",
|
194
|
+
"CosmosTransformer3DModel",
|
169
195
|
"DiTTransformer2DModel",
|
170
196
|
"EasyAnimateTransformer3DModel",
|
171
197
|
"FluxControlNetModel",
|
172
198
|
"FluxMultiControlNetModel",
|
173
199
|
"FluxTransformer2DModel",
|
200
|
+
"HiDreamImageTransformer2DModel",
|
174
201
|
"HunyuanDiT2DControlNetModel",
|
175
202
|
"HunyuanDiT2DModel",
|
176
203
|
"HunyuanDiT2DMultiControlNetModel",
|
204
|
+
"HunyuanVideoFramepackTransformer3DModel",
|
177
205
|
"HunyuanVideoTransformer3DModel",
|
178
206
|
"I2VGenXLUNet",
|
179
207
|
"Kandinsky3UNet",
|
@@ -189,10 +217,13 @@ else:
|
|
189
217
|
"OmniGenTransformer2DModel",
|
190
218
|
"PixArtTransformer2DModel",
|
191
219
|
"PriorTransformer",
|
220
|
+
"QwenImageTransformer2DModel",
|
221
|
+
"SanaControlNetModel",
|
192
222
|
"SanaTransformer2DModel",
|
193
223
|
"SD3ControlNetModel",
|
194
224
|
"SD3MultiControlNetModel",
|
195
225
|
"SD3Transformer2DModel",
|
226
|
+
"SkyReelsV2Transformer3DModel",
|
196
227
|
"SparseControlNetModel",
|
197
228
|
"StableAudioDiTModel",
|
198
229
|
"StableCascadeUNet",
|
@@ -210,6 +241,16 @@ else:
|
|
210
241
|
"UVit2DModel",
|
211
242
|
"VQModel",
|
212
243
|
"WanTransformer3DModel",
|
244
|
+
"WanVACETransformer3DModel",
|
245
|
+
"attention_backend",
|
246
|
+
]
|
247
|
+
)
|
248
|
+
_import_structure["modular_pipelines"].extend(
|
249
|
+
[
|
250
|
+
"ComponentsManager",
|
251
|
+
"ComponentSpec",
|
252
|
+
"ModularPipeline",
|
253
|
+
"ModularPipelineBlocks",
|
213
254
|
]
|
214
255
|
)
|
215
256
|
_import_structure["optimization"] = [
|
@@ -266,6 +307,7 @@ else:
|
|
266
307
|
"EulerDiscreteScheduler",
|
267
308
|
"FlowMatchEulerDiscreteScheduler",
|
268
309
|
"FlowMatchHeunDiscreteScheduler",
|
310
|
+
"FlowMatchLCMScheduler",
|
269
311
|
"HeunDiscreteScheduler",
|
270
312
|
"IPNDMScheduler",
|
271
313
|
"KarrasVeScheduler",
|
@@ -323,6 +365,16 @@ except OptionalDependencyNotAvailable:
|
|
323
365
|
]
|
324
366
|
|
325
367
|
else:
|
368
|
+
_import_structure["modular_pipelines"].extend(
|
369
|
+
[
|
370
|
+
"FluxAutoBlocks",
|
371
|
+
"FluxModularPipeline",
|
372
|
+
"StableDiffusionXLAutoBlocks",
|
373
|
+
"StableDiffusionXLModularPipeline",
|
374
|
+
"WanAutoBlocks",
|
375
|
+
"WanModularPipeline",
|
376
|
+
]
|
377
|
+
)
|
326
378
|
_import_structure["pipelines"].extend(
|
327
379
|
[
|
328
380
|
"AllegroPipeline",
|
@@ -345,6 +397,8 @@ else:
|
|
345
397
|
"AuraFlowPipeline",
|
346
398
|
"BlipDiffusionControlNetPipeline",
|
347
399
|
"BlipDiffusionPipeline",
|
400
|
+
"ChromaImg2ImgPipeline",
|
401
|
+
"ChromaPipeline",
|
348
402
|
"CLIPImageProjection",
|
349
403
|
"CogVideoXFunControlPipeline",
|
350
404
|
"CogVideoXImageToVideoPipeline",
|
@@ -353,6 +407,11 @@ else:
|
|
353
407
|
"CogView3PlusPipeline",
|
354
408
|
"CogView4ControlPipeline",
|
355
409
|
"CogView4Pipeline",
|
410
|
+
"ConsisIDPipeline",
|
411
|
+
"Cosmos2TextToImagePipeline",
|
412
|
+
"Cosmos2VideoToWorldPipeline",
|
413
|
+
"CosmosTextToWorldPipeline",
|
414
|
+
"CosmosVideoToWorldPipeline",
|
356
415
|
"CycleDiffusionPipeline",
|
357
416
|
"EasyAnimateControlPipeline",
|
358
417
|
"EasyAnimateInpaintPipeline",
|
@@ -366,12 +425,16 @@ else:
|
|
366
425
|
"FluxFillPipeline",
|
367
426
|
"FluxImg2ImgPipeline",
|
368
427
|
"FluxInpaintPipeline",
|
428
|
+
"FluxKontextInpaintPipeline",
|
429
|
+
"FluxKontextPipeline",
|
369
430
|
"FluxPipeline",
|
370
431
|
"FluxPriorReduxPipeline",
|
432
|
+
"HiDreamImagePipeline",
|
371
433
|
"HunyuanDiTControlNetPipeline",
|
372
434
|
"HunyuanDiTPAGPipeline",
|
373
435
|
"HunyuanDiTPipeline",
|
374
436
|
"HunyuanSkyreelsImageToVideoPipeline",
|
437
|
+
"HunyuanVideoFramepackPipeline",
|
375
438
|
"HunyuanVideoImageToVideoPipeline",
|
376
439
|
"HunyuanVideoPipeline",
|
377
440
|
"I2VGenXLPipeline",
|
@@ -409,6 +472,7 @@ else:
|
|
409
472
|
"LEditsPPPipelineStableDiffusionXL",
|
410
473
|
"LTXConditionPipeline",
|
411
474
|
"LTXImageToVideoPipeline",
|
475
|
+
"LTXLatentUpsamplePipeline",
|
412
476
|
"LTXPipeline",
|
413
477
|
"Lumina2Pipeline",
|
414
478
|
"Lumina2Text2ImgPipeline",
|
@@ -425,13 +489,24 @@ else:
|
|
425
489
|
"PixArtAlphaPipeline",
|
426
490
|
"PixArtSigmaPAGPipeline",
|
427
491
|
"PixArtSigmaPipeline",
|
492
|
+
"QwenImageEditPipeline",
|
493
|
+
"QwenImageImg2ImgPipeline",
|
494
|
+
"QwenImageInpaintPipeline",
|
495
|
+
"QwenImagePipeline",
|
428
496
|
"ReduxImageEncoder",
|
497
|
+
"SanaControlNetPipeline",
|
429
498
|
"SanaPAGPipeline",
|
430
499
|
"SanaPipeline",
|
500
|
+
"SanaSprintImg2ImgPipeline",
|
431
501
|
"SanaSprintPipeline",
|
432
502
|
"SemanticStableDiffusionPipeline",
|
433
503
|
"ShapEImg2ImgPipeline",
|
434
504
|
"ShapEPipeline",
|
505
|
+
"SkyReelsV2DiffusionForcingImageToVideoPipeline",
|
506
|
+
"SkyReelsV2DiffusionForcingPipeline",
|
507
|
+
"SkyReelsV2DiffusionForcingVideoToVideoPipeline",
|
508
|
+
"SkyReelsV2ImageToVideoPipeline",
|
509
|
+
"SkyReelsV2Pipeline",
|
435
510
|
"StableAudioPipeline",
|
436
511
|
"StableAudioProjectionModel",
|
437
512
|
"StableCascadeCombinedPipeline",
|
@@ -508,9 +583,12 @@ else:
|
|
508
583
|
"VersatileDiffusionPipeline",
|
509
584
|
"VersatileDiffusionTextToImagePipeline",
|
510
585
|
"VideoToVideoSDPipeline",
|
586
|
+
"VisualClozeGenerationPipeline",
|
587
|
+
"VisualClozePipeline",
|
511
588
|
"VQDiffusionPipeline",
|
512
589
|
"WanImageToVideoPipeline",
|
513
590
|
"WanPipeline",
|
591
|
+
"WanVACEPipeline",
|
514
592
|
"WanVideoToVideoPipeline",
|
515
593
|
"WuerstchenCombinedPipeline",
|
516
594
|
"WuerstchenDecoderPipeline",
|
@@ -518,6 +596,7 @@ else:
|
|
518
596
|
]
|
519
597
|
)
|
520
598
|
|
599
|
+
|
521
600
|
try:
|
522
601
|
if not (is_torch_available() and is_transformers_available() and is_opencv_available()):
|
523
602
|
raise OptionalDependencyNotAvailable()
|
@@ -676,6 +755,7 @@ else:
|
|
676
755
|
|
677
756
|
if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
678
757
|
from .configuration_utils import ConfigMixin
|
758
|
+
from .quantizers import PipelineQuantizationConfig
|
679
759
|
|
680
760
|
try:
|
681
761
|
if not is_bitsandbytes_available():
|
@@ -723,31 +803,51 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
723
803
|
except OptionalDependencyNotAvailable:
|
724
804
|
from .utils.dummy_pt_objects import * # noqa F403
|
725
805
|
else:
|
806
|
+
from .guiders import (
|
807
|
+
AdaptiveProjectedGuidance,
|
808
|
+
AutoGuidance,
|
809
|
+
ClassifierFreeGuidance,
|
810
|
+
ClassifierFreeZeroStarGuidance,
|
811
|
+
FrequencyDecoupledGuidance,
|
812
|
+
PerturbedAttentionGuidance,
|
813
|
+
SkipLayerGuidance,
|
814
|
+
SmoothedEnergyGuidance,
|
815
|
+
TangentialClassifierFreeGuidance,
|
816
|
+
)
|
726
817
|
from .hooks import (
|
727
818
|
FasterCacheConfig,
|
819
|
+
FirstBlockCacheConfig,
|
728
820
|
HookRegistry,
|
821
|
+
LayerSkipConfig,
|
729
822
|
PyramidAttentionBroadcastConfig,
|
823
|
+
SmoothedEnergyGuidanceConfig,
|
730
824
|
apply_faster_cache,
|
825
|
+
apply_first_block_cache,
|
826
|
+
apply_layer_skip,
|
731
827
|
apply_pyramid_attention_broadcast,
|
732
828
|
)
|
733
829
|
from .models import (
|
734
830
|
AllegroTransformer3DModel,
|
735
831
|
AsymmetricAutoencoderKL,
|
832
|
+
AttentionBackendName,
|
736
833
|
AuraFlowTransformer2DModel,
|
737
834
|
AutoencoderDC,
|
738
835
|
AutoencoderKL,
|
739
836
|
AutoencoderKLAllegro,
|
740
837
|
AutoencoderKLCogVideoX,
|
838
|
+
AutoencoderKLCosmos,
|
741
839
|
AutoencoderKLHunyuanVideo,
|
742
840
|
AutoencoderKLLTXVideo,
|
743
841
|
AutoencoderKLMagvit,
|
744
842
|
AutoencoderKLMochi,
|
843
|
+
AutoencoderKLQwenImage,
|
745
844
|
AutoencoderKLTemporalDecoder,
|
746
845
|
AutoencoderKLWan,
|
747
846
|
AutoencoderOobleck,
|
748
847
|
AutoencoderTiny,
|
749
848
|
AutoModel,
|
750
849
|
CacheMixin,
|
850
|
+
ChromaTransformer2DModel,
|
751
851
|
CogVideoXTransformer3DModel,
|
752
852
|
CogView3PlusTransformer2DModel,
|
753
853
|
CogView4Transformer2DModel,
|
@@ -756,14 +856,17 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
756
856
|
ControlNetModel,
|
757
857
|
ControlNetUnionModel,
|
758
858
|
ControlNetXSAdapter,
|
859
|
+
CosmosTransformer3DModel,
|
759
860
|
DiTTransformer2DModel,
|
760
861
|
EasyAnimateTransformer3DModel,
|
761
862
|
FluxControlNetModel,
|
762
863
|
FluxMultiControlNetModel,
|
763
864
|
FluxTransformer2DModel,
|
865
|
+
HiDreamImageTransformer2DModel,
|
764
866
|
HunyuanDiT2DControlNetModel,
|
765
867
|
HunyuanDiT2DModel,
|
766
868
|
HunyuanDiT2DMultiControlNetModel,
|
869
|
+
HunyuanVideoFramepackTransformer3DModel,
|
767
870
|
HunyuanVideoTransformer3DModel,
|
768
871
|
I2VGenXLUNet,
|
769
872
|
Kandinsky3UNet,
|
@@ -779,10 +882,13 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
779
882
|
OmniGenTransformer2DModel,
|
780
883
|
PixArtTransformer2DModel,
|
781
884
|
PriorTransformer,
|
885
|
+
QwenImageTransformer2DModel,
|
886
|
+
SanaControlNetModel,
|
782
887
|
SanaTransformer2DModel,
|
783
888
|
SD3ControlNetModel,
|
784
889
|
SD3MultiControlNetModel,
|
785
890
|
SD3Transformer2DModel,
|
891
|
+
SkyReelsV2Transformer3DModel,
|
786
892
|
SparseControlNetModel,
|
787
893
|
StableAudioDiTModel,
|
788
894
|
T2IAdapter,
|
@@ -799,7 +905,10 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
799
905
|
UVit2DModel,
|
800
906
|
VQModel,
|
801
907
|
WanTransformer3DModel,
|
908
|
+
WanVACETransformer3DModel,
|
909
|
+
attention_backend,
|
802
910
|
)
|
911
|
+
from .modular_pipelines import ComponentsManager, ComponentSpec, ModularPipeline, ModularPipelineBlocks
|
803
912
|
from .optimization import (
|
804
913
|
get_constant_schedule,
|
805
914
|
get_constant_schedule_with_warmup,
|
@@ -854,6 +963,7 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
854
963
|
EulerDiscreteScheduler,
|
855
964
|
FlowMatchEulerDiscreteScheduler,
|
856
965
|
FlowMatchHeunDiscreteScheduler,
|
966
|
+
FlowMatchLCMScheduler,
|
857
967
|
HeunDiscreteScheduler,
|
858
968
|
IPNDMScheduler,
|
859
969
|
KarrasVeScheduler,
|
@@ -895,6 +1005,14 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
895
1005
|
except OptionalDependencyNotAvailable:
|
896
1006
|
from .utils.dummy_torch_and_transformers_objects import * # noqa F403
|
897
1007
|
else:
|
1008
|
+
from .modular_pipelines import (
|
1009
|
+
FluxAutoBlocks,
|
1010
|
+
FluxModularPipeline,
|
1011
|
+
StableDiffusionXLAutoBlocks,
|
1012
|
+
StableDiffusionXLModularPipeline,
|
1013
|
+
WanAutoBlocks,
|
1014
|
+
WanModularPipeline,
|
1015
|
+
)
|
898
1016
|
from .pipelines import (
|
899
1017
|
AllegroPipeline,
|
900
1018
|
AltDiffusionImg2ImgPipeline,
|
@@ -914,6 +1032,8 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
914
1032
|
AudioLDM2UNet2DConditionModel,
|
915
1033
|
AudioLDMPipeline,
|
916
1034
|
AuraFlowPipeline,
|
1035
|
+
ChromaImg2ImgPipeline,
|
1036
|
+
ChromaPipeline,
|
917
1037
|
CLIPImageProjection,
|
918
1038
|
CogVideoXFunControlPipeline,
|
919
1039
|
CogVideoXImageToVideoPipeline,
|
@@ -922,6 +1042,11 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
922
1042
|
CogView3PlusPipeline,
|
923
1043
|
CogView4ControlPipeline,
|
924
1044
|
CogView4Pipeline,
|
1045
|
+
ConsisIDPipeline,
|
1046
|
+
Cosmos2TextToImagePipeline,
|
1047
|
+
Cosmos2VideoToWorldPipeline,
|
1048
|
+
CosmosTextToWorldPipeline,
|
1049
|
+
CosmosVideoToWorldPipeline,
|
925
1050
|
CycleDiffusionPipeline,
|
926
1051
|
EasyAnimateControlPipeline,
|
927
1052
|
EasyAnimateInpaintPipeline,
|
@@ -935,12 +1060,16 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
935
1060
|
FluxFillPipeline,
|
936
1061
|
FluxImg2ImgPipeline,
|
937
1062
|
FluxInpaintPipeline,
|
1063
|
+
FluxKontextInpaintPipeline,
|
1064
|
+
FluxKontextPipeline,
|
938
1065
|
FluxPipeline,
|
939
1066
|
FluxPriorReduxPipeline,
|
1067
|
+
HiDreamImagePipeline,
|
940
1068
|
HunyuanDiTControlNetPipeline,
|
941
1069
|
HunyuanDiTPAGPipeline,
|
942
1070
|
HunyuanDiTPipeline,
|
943
1071
|
HunyuanSkyreelsImageToVideoPipeline,
|
1072
|
+
HunyuanVideoFramepackPipeline,
|
944
1073
|
HunyuanVideoImageToVideoPipeline,
|
945
1074
|
HunyuanVideoPipeline,
|
946
1075
|
I2VGenXLPipeline,
|
@@ -978,6 +1107,7 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
978
1107
|
LEditsPPPipelineStableDiffusionXL,
|
979
1108
|
LTXConditionPipeline,
|
980
1109
|
LTXImageToVideoPipeline,
|
1110
|
+
LTXLatentUpsamplePipeline,
|
981
1111
|
LTXPipeline,
|
982
1112
|
Lumina2Pipeline,
|
983
1113
|
Lumina2Text2ImgPipeline,
|
@@ -994,13 +1124,24 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
994
1124
|
PixArtAlphaPipeline,
|
995
1125
|
PixArtSigmaPAGPipeline,
|
996
1126
|
PixArtSigmaPipeline,
|
1127
|
+
QwenImageEditPipeline,
|
1128
|
+
QwenImageImg2ImgPipeline,
|
1129
|
+
QwenImageInpaintPipeline,
|
1130
|
+
QwenImagePipeline,
|
997
1131
|
ReduxImageEncoder,
|
1132
|
+
SanaControlNetPipeline,
|
998
1133
|
SanaPAGPipeline,
|
999
1134
|
SanaPipeline,
|
1135
|
+
SanaSprintImg2ImgPipeline,
|
1000
1136
|
SanaSprintPipeline,
|
1001
1137
|
SemanticStableDiffusionPipeline,
|
1002
1138
|
ShapEImg2ImgPipeline,
|
1003
1139
|
ShapEPipeline,
|
1140
|
+
SkyReelsV2DiffusionForcingImageToVideoPipeline,
|
1141
|
+
SkyReelsV2DiffusionForcingPipeline,
|
1142
|
+
SkyReelsV2DiffusionForcingVideoToVideoPipeline,
|
1143
|
+
SkyReelsV2ImageToVideoPipeline,
|
1144
|
+
SkyReelsV2Pipeline,
|
1004
1145
|
StableAudioPipeline,
|
1005
1146
|
StableAudioProjectionModel,
|
1006
1147
|
StableCascadeCombinedPipeline,
|
@@ -1076,9 +1217,12 @@ if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
|
|
1076
1217
|
VersatileDiffusionPipeline,
|
1077
1218
|
VersatileDiffusionTextToImagePipeline,
|
1078
1219
|
VideoToVideoSDPipeline,
|
1220
|
+
VisualClozeGenerationPipeline,
|
1221
|
+
VisualClozePipeline,
|
1079
1222
|
VQDiffusionPipeline,
|
1080
1223
|
WanImageToVideoPipeline,
|
1081
1224
|
WanPipeline,
|
1225
|
+
WanVACEPipeline,
|
1082
1226
|
WanVideoToVideoPipeline,
|
1083
1227
|
WuerstchenCombinedPipeline,
|
1084
1228
|
WuerstchenDecoderPipeline,
|
diffusers/callbacks.py
CHANGED
@@ -207,3 +207,38 @@ class IPAdapterScaleCutoffCallback(PipelineCallback):
|
|
207
207
|
if step_index == cutoff_step:
|
208
208
|
pipeline.set_ip_adapter_scale(0.0)
|
209
209
|
return callback_kwargs
|
210
|
+
|
211
|
+
|
212
|
+
class SD3CFGCutoffCallback(PipelineCallback):
|
213
|
+
"""
|
214
|
+
Callback function for Stable Diffusion 3 Pipelines. After certain number of steps (set by `cutoff_step_ratio` or
|
215
|
+
`cutoff_step_index`), this callback will disable the CFG.
|
216
|
+
|
217
|
+
Note: This callback mutates the pipeline by changing the `_guidance_scale` attribute to 0.0 after the cutoff step.
|
218
|
+
"""
|
219
|
+
|
220
|
+
tensor_inputs = ["prompt_embeds", "pooled_prompt_embeds"]
|
221
|
+
|
222
|
+
def callback_fn(self, pipeline, step_index, timestep, callback_kwargs) -> Dict[str, Any]:
|
223
|
+
cutoff_step_ratio = self.config.cutoff_step_ratio
|
224
|
+
cutoff_step_index = self.config.cutoff_step_index
|
225
|
+
|
226
|
+
# Use cutoff_step_index if it's not None, otherwise use cutoff_step_ratio
|
227
|
+
cutoff_step = (
|
228
|
+
cutoff_step_index if cutoff_step_index is not None else int(pipeline.num_timesteps * cutoff_step_ratio)
|
229
|
+
)
|
230
|
+
|
231
|
+
if step_index == cutoff_step:
|
232
|
+
prompt_embeds = callback_kwargs[self.tensor_inputs[0]]
|
233
|
+
prompt_embeds = prompt_embeds[-1:] # "-1" denotes the embeddings for conditional text tokens.
|
234
|
+
|
235
|
+
pooled_prompt_embeds = callback_kwargs[self.tensor_inputs[1]]
|
236
|
+
pooled_prompt_embeds = pooled_prompt_embeds[
|
237
|
+
-1:
|
238
|
+
] # "-1" denotes the embeddings for conditional pooled text tokens.
|
239
|
+
|
240
|
+
pipeline._guidance_scale = 0.0
|
241
|
+
|
242
|
+
callback_kwargs[self.tensor_inputs[0]] = prompt_embeds
|
243
|
+
callback_kwargs[self.tensor_inputs[1]] = pooled_prompt_embeds
|
244
|
+
return callback_kwargs
|
diffusers/commands/__init__.py
CHANGED
@@ -0,0 +1,134 @@
|
|
1
|
+
# Copyright 2025 The HuggingFace Team. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
"""
|
16
|
+
Usage example:
|
17
|
+
TODO
|
18
|
+
"""
|
19
|
+
|
20
|
+
import ast
|
21
|
+
import importlib.util
|
22
|
+
import os
|
23
|
+
from argparse import ArgumentParser, Namespace
|
24
|
+
from pathlib import Path
|
25
|
+
|
26
|
+
from ..utils import logging
|
27
|
+
from . import BaseDiffusersCLICommand
|
28
|
+
|
29
|
+
|
30
|
+
EXPECTED_PARENT_CLASSES = ["ModularPipelineBlocks"]
|
31
|
+
CONFIG = "config.json"
|
32
|
+
|
33
|
+
|
34
|
+
def conversion_command_factory(args: Namespace):
|
35
|
+
return CustomBlocksCommand(args.block_module_name, args.block_class_name)
|
36
|
+
|
37
|
+
|
38
|
+
class CustomBlocksCommand(BaseDiffusersCLICommand):
|
39
|
+
@staticmethod
|
40
|
+
def register_subcommand(parser: ArgumentParser):
|
41
|
+
conversion_parser = parser.add_parser("custom_blocks")
|
42
|
+
conversion_parser.add_argument(
|
43
|
+
"--block_module_name",
|
44
|
+
type=str,
|
45
|
+
default="block.py",
|
46
|
+
help="Module filename in which the custom block will be implemented.",
|
47
|
+
)
|
48
|
+
conversion_parser.add_argument(
|
49
|
+
"--block_class_name",
|
50
|
+
type=str,
|
51
|
+
default=None,
|
52
|
+
help="Name of the custom block. If provided None, we will try to infer it.",
|
53
|
+
)
|
54
|
+
conversion_parser.set_defaults(func=conversion_command_factory)
|
55
|
+
|
56
|
+
def __init__(self, block_module_name: str = "block.py", block_class_name: str = None):
|
57
|
+
self.logger = logging.get_logger("diffusers-cli/custom_blocks")
|
58
|
+
self.block_module_name = Path(block_module_name)
|
59
|
+
self.block_class_name = block_class_name
|
60
|
+
|
61
|
+
def run(self):
|
62
|
+
# determine the block to be saved.
|
63
|
+
out = self._get_class_names(self.block_module_name)
|
64
|
+
classes_found = list({cls for cls, _ in out})
|
65
|
+
|
66
|
+
if self.block_class_name is not None:
|
67
|
+
child_class, parent_class = self._choose_block(out, self.block_class_name)
|
68
|
+
if child_class is None and parent_class is None:
|
69
|
+
raise ValueError(
|
70
|
+
"`block_class_name` could not be retrieved. Available classes from "
|
71
|
+
f"{self.block_module_name}:\n{classes_found}"
|
72
|
+
)
|
73
|
+
else:
|
74
|
+
self.logger.info(
|
75
|
+
f"Found classes: {classes_found} will be using {classes_found[0]}. "
|
76
|
+
"If this needs to be changed, re-run the command specifying `block_class_name`."
|
77
|
+
)
|
78
|
+
child_class, parent_class = out[0][0], out[0][1]
|
79
|
+
|
80
|
+
# dynamically get the custom block and initialize it to call `save_pretrained` in the current directory.
|
81
|
+
# the user is responsible for running it, so I guess that is safe?
|
82
|
+
module_name = f"__dynamic__{self.block_module_name.stem}"
|
83
|
+
spec = importlib.util.spec_from_file_location(module_name, str(self.block_module_name))
|
84
|
+
module = importlib.util.module_from_spec(spec)
|
85
|
+
spec.loader.exec_module(module)
|
86
|
+
getattr(module, child_class)().save_pretrained(os.getcwd())
|
87
|
+
|
88
|
+
# or, we could create it manually.
|
89
|
+
# automap = self._create_automap(parent_class=parent_class, child_class=child_class)
|
90
|
+
# with open(CONFIG, "w") as f:
|
91
|
+
# json.dump(automap, f)
|
92
|
+
with open("requirements.txt", "w") as f:
|
93
|
+
f.write("")
|
94
|
+
|
95
|
+
def _choose_block(self, candidates, chosen=None):
|
96
|
+
for cls, base in candidates:
|
97
|
+
if cls == chosen:
|
98
|
+
return cls, base
|
99
|
+
return None, None
|
100
|
+
|
101
|
+
def _get_class_names(self, file_path):
|
102
|
+
source = file_path.read_text(encoding="utf-8")
|
103
|
+
try:
|
104
|
+
tree = ast.parse(source, filename=file_path)
|
105
|
+
except SyntaxError as e:
|
106
|
+
raise ValueError(f"Could not parse {file_path!r}: {e}") from e
|
107
|
+
|
108
|
+
results: list[tuple[str, str]] = []
|
109
|
+
for node in tree.body:
|
110
|
+
if not isinstance(node, ast.ClassDef):
|
111
|
+
continue
|
112
|
+
|
113
|
+
# extract all base names for this class
|
114
|
+
base_names = [bname for b in node.bases if (bname := self._get_base_name(b)) is not None]
|
115
|
+
|
116
|
+
# for each allowed base that appears in the class's bases, emit a tuple
|
117
|
+
for allowed in EXPECTED_PARENT_CLASSES:
|
118
|
+
if allowed in base_names:
|
119
|
+
results.append((node.name, allowed))
|
120
|
+
|
121
|
+
return results
|
122
|
+
|
123
|
+
def _get_base_name(self, node: ast.expr):
|
124
|
+
if isinstance(node, ast.Name):
|
125
|
+
return node.id
|
126
|
+
elif isinstance(node, ast.Attribute):
|
127
|
+
val = self._get_base_name(node.value)
|
128
|
+
return f"{val}.{node.attr}" if val else node.attr
|
129
|
+
return None
|
130
|
+
|
131
|
+
def _create_automap(self, parent_class, child_class):
|
132
|
+
module = str(self.block_module_name).replace(".py", "").rsplit(".", 1)[-1]
|
133
|
+
auto_map = {f"{parent_class}": f"{module}.{child_class}"}
|
134
|
+
return {"auto_map": auto_map}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# Copyright
|
2
|
+
# Copyright 2025 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.
|
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
from argparse import ArgumentParser
|
17
17
|
|
18
|
+
from .custom_blocks import CustomBlocksCommand
|
18
19
|
from .env import EnvironmentCommand
|
19
20
|
from .fp16_safetensors import FP16SafetensorsCommand
|
20
21
|
|
@@ -26,6 +27,7 @@ def main():
|
|
26
27
|
# Register commands
|
27
28
|
EnvironmentCommand.register_subcommand(commands_parser)
|
28
29
|
FP16SafetensorsCommand.register_subcommand(commands_parser)
|
30
|
+
CustomBlocksCommand.register_subcommand(commands_parser)
|
29
31
|
|
30
32
|
# Let's go
|
31
33
|
args = parser.parse_args()
|
diffusers/commands/env.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2025 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.
|
@@ -59,7 +59,7 @@ class FP16SafetensorsCommand(BaseDiffusersCLICommand):
|
|
59
59
|
conversion_parser.add_argument(
|
60
60
|
"--use_auth_token",
|
61
61
|
action="store_true",
|
62
|
-
help="When working with checkpoints having private visibility. When used `
|
62
|
+
help="When working with checkpoints having private visibility. When used `hf auth login` needs to be run beforehand.",
|
63
63
|
)
|
64
64
|
conversion_parser.set_defaults(func=conversion_command_factory)
|
65
65
|
|