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.
Files changed (551) hide show
  1. diffusers/__init__.py +145 -1
  2. diffusers/callbacks.py +35 -0
  3. diffusers/commands/__init__.py +1 -1
  4. diffusers/commands/custom_blocks.py +134 -0
  5. diffusers/commands/diffusers_cli.py +3 -1
  6. diffusers/commands/env.py +1 -1
  7. diffusers/commands/fp16_safetensors.py +2 -2
  8. diffusers/configuration_utils.py +11 -2
  9. diffusers/dependency_versions_check.py +1 -1
  10. diffusers/dependency_versions_table.py +3 -3
  11. diffusers/experimental/rl/value_guided_sampling.py +1 -1
  12. diffusers/guiders/__init__.py +41 -0
  13. diffusers/guiders/adaptive_projected_guidance.py +188 -0
  14. diffusers/guiders/auto_guidance.py +190 -0
  15. diffusers/guiders/classifier_free_guidance.py +141 -0
  16. diffusers/guiders/classifier_free_zero_star_guidance.py +152 -0
  17. diffusers/guiders/frequency_decoupled_guidance.py +327 -0
  18. diffusers/guiders/guider_utils.py +309 -0
  19. diffusers/guiders/perturbed_attention_guidance.py +271 -0
  20. diffusers/guiders/skip_layer_guidance.py +262 -0
  21. diffusers/guiders/smoothed_energy_guidance.py +251 -0
  22. diffusers/guiders/tangential_classifier_free_guidance.py +143 -0
  23. diffusers/hooks/__init__.py +17 -0
  24. diffusers/hooks/_common.py +56 -0
  25. diffusers/hooks/_helpers.py +293 -0
  26. diffusers/hooks/faster_cache.py +9 -8
  27. diffusers/hooks/first_block_cache.py +259 -0
  28. diffusers/hooks/group_offloading.py +332 -227
  29. diffusers/hooks/hooks.py +58 -3
  30. diffusers/hooks/layer_skip.py +263 -0
  31. diffusers/hooks/layerwise_casting.py +5 -10
  32. diffusers/hooks/pyramid_attention_broadcast.py +15 -12
  33. diffusers/hooks/smoothed_energy_guidance_utils.py +167 -0
  34. diffusers/hooks/utils.py +43 -0
  35. diffusers/image_processor.py +7 -2
  36. diffusers/loaders/__init__.py +10 -0
  37. diffusers/loaders/ip_adapter.py +260 -18
  38. diffusers/loaders/lora_base.py +261 -127
  39. diffusers/loaders/lora_conversion_utils.py +657 -35
  40. diffusers/loaders/lora_pipeline.py +2778 -1246
  41. diffusers/loaders/peft.py +78 -112
  42. diffusers/loaders/single_file.py +2 -2
  43. diffusers/loaders/single_file_model.py +64 -15
  44. diffusers/loaders/single_file_utils.py +395 -7
  45. diffusers/loaders/textual_inversion.py +3 -2
  46. diffusers/loaders/transformer_flux.py +10 -11
  47. diffusers/loaders/transformer_sd3.py +8 -3
  48. diffusers/loaders/unet.py +24 -21
  49. diffusers/loaders/unet_loader_utils.py +6 -3
  50. diffusers/loaders/utils.py +1 -1
  51. diffusers/models/__init__.py +23 -1
  52. diffusers/models/activations.py +5 -5
  53. diffusers/models/adapter.py +2 -3
  54. diffusers/models/attention.py +488 -7
  55. diffusers/models/attention_dispatch.py +1218 -0
  56. diffusers/models/attention_flax.py +10 -10
  57. diffusers/models/attention_processor.py +113 -667
  58. diffusers/models/auto_model.py +49 -12
  59. diffusers/models/autoencoders/__init__.py +2 -0
  60. diffusers/models/autoencoders/autoencoder_asym_kl.py +4 -4
  61. diffusers/models/autoencoders/autoencoder_dc.py +17 -4
  62. diffusers/models/autoencoders/autoencoder_kl.py +5 -5
  63. diffusers/models/autoencoders/autoencoder_kl_allegro.py +4 -4
  64. diffusers/models/autoencoders/autoencoder_kl_cogvideox.py +6 -6
  65. diffusers/models/autoencoders/autoencoder_kl_cosmos.py +1110 -0
  66. diffusers/models/autoencoders/autoencoder_kl_hunyuan_video.py +2 -2
  67. diffusers/models/autoencoders/autoencoder_kl_ltx.py +3 -3
  68. diffusers/models/autoencoders/autoencoder_kl_magvit.py +4 -4
  69. diffusers/models/autoencoders/autoencoder_kl_mochi.py +3 -3
  70. diffusers/models/autoencoders/autoencoder_kl_qwenimage.py +1070 -0
  71. diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +4 -4
  72. diffusers/models/autoencoders/autoencoder_kl_wan.py +626 -62
  73. diffusers/models/autoencoders/autoencoder_oobleck.py +1 -1
  74. diffusers/models/autoencoders/autoencoder_tiny.py +3 -3
  75. diffusers/models/autoencoders/consistency_decoder_vae.py +1 -1
  76. diffusers/models/autoencoders/vae.py +13 -2
  77. diffusers/models/autoencoders/vq_model.py +2 -2
  78. diffusers/models/cache_utils.py +32 -10
  79. diffusers/models/controlnet.py +1 -1
  80. diffusers/models/controlnet_flux.py +1 -1
  81. diffusers/models/controlnet_sd3.py +1 -1
  82. diffusers/models/controlnet_sparsectrl.py +1 -1
  83. diffusers/models/controlnets/__init__.py +1 -0
  84. diffusers/models/controlnets/controlnet.py +3 -3
  85. diffusers/models/controlnets/controlnet_flax.py +1 -1
  86. diffusers/models/controlnets/controlnet_flux.py +21 -20
  87. diffusers/models/controlnets/controlnet_hunyuan.py +2 -2
  88. diffusers/models/controlnets/controlnet_sana.py +290 -0
  89. diffusers/models/controlnets/controlnet_sd3.py +1 -1
  90. diffusers/models/controlnets/controlnet_sparsectrl.py +2 -2
  91. diffusers/models/controlnets/controlnet_union.py +5 -5
  92. diffusers/models/controlnets/controlnet_xs.py +7 -7
  93. diffusers/models/controlnets/multicontrolnet.py +4 -5
  94. diffusers/models/controlnets/multicontrolnet_union.py +5 -6
  95. diffusers/models/downsampling.py +2 -2
  96. diffusers/models/embeddings.py +36 -46
  97. diffusers/models/embeddings_flax.py +2 -2
  98. diffusers/models/lora.py +3 -3
  99. diffusers/models/model_loading_utils.py +233 -1
  100. diffusers/models/modeling_flax_utils.py +1 -2
  101. diffusers/models/modeling_utils.py +203 -108
  102. diffusers/models/normalization.py +4 -4
  103. diffusers/models/resnet.py +2 -2
  104. diffusers/models/resnet_flax.py +1 -1
  105. diffusers/models/transformers/__init__.py +7 -0
  106. diffusers/models/transformers/auraflow_transformer_2d.py +70 -24
  107. diffusers/models/transformers/cogvideox_transformer_3d.py +1 -1
  108. diffusers/models/transformers/consisid_transformer_3d.py +1 -1
  109. diffusers/models/transformers/dit_transformer_2d.py +2 -2
  110. diffusers/models/transformers/dual_transformer_2d.py +1 -1
  111. diffusers/models/transformers/hunyuan_transformer_2d.py +2 -2
  112. diffusers/models/transformers/latte_transformer_3d.py +4 -5
  113. diffusers/models/transformers/lumina_nextdit2d.py +2 -2
  114. diffusers/models/transformers/pixart_transformer_2d.py +3 -3
  115. diffusers/models/transformers/prior_transformer.py +1 -1
  116. diffusers/models/transformers/sana_transformer.py +8 -3
  117. diffusers/models/transformers/stable_audio_transformer.py +5 -9
  118. diffusers/models/transformers/t5_film_transformer.py +3 -3
  119. diffusers/models/transformers/transformer_2d.py +1 -1
  120. diffusers/models/transformers/transformer_allegro.py +1 -1
  121. diffusers/models/transformers/transformer_chroma.py +641 -0
  122. diffusers/models/transformers/transformer_cogview3plus.py +5 -10
  123. diffusers/models/transformers/transformer_cogview4.py +353 -27
  124. diffusers/models/transformers/transformer_cosmos.py +586 -0
  125. diffusers/models/transformers/transformer_flux.py +376 -138
  126. diffusers/models/transformers/transformer_hidream_image.py +942 -0
  127. diffusers/models/transformers/transformer_hunyuan_video.py +12 -8
  128. diffusers/models/transformers/transformer_hunyuan_video_framepack.py +416 -0
  129. diffusers/models/transformers/transformer_ltx.py +105 -24
  130. diffusers/models/transformers/transformer_lumina2.py +1 -1
  131. diffusers/models/transformers/transformer_mochi.py +1 -1
  132. diffusers/models/transformers/transformer_omnigen.py +2 -2
  133. diffusers/models/transformers/transformer_qwenimage.py +645 -0
  134. diffusers/models/transformers/transformer_sd3.py +7 -7
  135. diffusers/models/transformers/transformer_skyreels_v2.py +607 -0
  136. diffusers/models/transformers/transformer_temporal.py +1 -1
  137. diffusers/models/transformers/transformer_wan.py +316 -87
  138. diffusers/models/transformers/transformer_wan_vace.py +387 -0
  139. diffusers/models/unets/unet_1d.py +1 -1
  140. diffusers/models/unets/unet_1d_blocks.py +1 -1
  141. diffusers/models/unets/unet_2d.py +1 -1
  142. diffusers/models/unets/unet_2d_blocks.py +1 -1
  143. diffusers/models/unets/unet_2d_blocks_flax.py +8 -7
  144. diffusers/models/unets/unet_2d_condition.py +4 -3
  145. diffusers/models/unets/unet_2d_condition_flax.py +2 -2
  146. diffusers/models/unets/unet_3d_blocks.py +1 -1
  147. diffusers/models/unets/unet_3d_condition.py +3 -3
  148. diffusers/models/unets/unet_i2vgen_xl.py +3 -3
  149. diffusers/models/unets/unet_kandinsky3.py +1 -1
  150. diffusers/models/unets/unet_motion_model.py +2 -2
  151. diffusers/models/unets/unet_stable_cascade.py +1 -1
  152. diffusers/models/upsampling.py +2 -2
  153. diffusers/models/vae_flax.py +2 -2
  154. diffusers/models/vq_model.py +1 -1
  155. diffusers/modular_pipelines/__init__.py +83 -0
  156. diffusers/modular_pipelines/components_manager.py +1068 -0
  157. diffusers/modular_pipelines/flux/__init__.py +66 -0
  158. diffusers/modular_pipelines/flux/before_denoise.py +689 -0
  159. diffusers/modular_pipelines/flux/decoders.py +109 -0
  160. diffusers/modular_pipelines/flux/denoise.py +227 -0
  161. diffusers/modular_pipelines/flux/encoders.py +412 -0
  162. diffusers/modular_pipelines/flux/modular_blocks.py +181 -0
  163. diffusers/modular_pipelines/flux/modular_pipeline.py +59 -0
  164. diffusers/modular_pipelines/modular_pipeline.py +2446 -0
  165. diffusers/modular_pipelines/modular_pipeline_utils.py +672 -0
  166. diffusers/modular_pipelines/node_utils.py +665 -0
  167. diffusers/modular_pipelines/stable_diffusion_xl/__init__.py +77 -0
  168. diffusers/modular_pipelines/stable_diffusion_xl/before_denoise.py +1874 -0
  169. diffusers/modular_pipelines/stable_diffusion_xl/decoders.py +208 -0
  170. diffusers/modular_pipelines/stable_diffusion_xl/denoise.py +771 -0
  171. diffusers/modular_pipelines/stable_diffusion_xl/encoders.py +887 -0
  172. diffusers/modular_pipelines/stable_diffusion_xl/modular_blocks.py +380 -0
  173. diffusers/modular_pipelines/stable_diffusion_xl/modular_pipeline.py +365 -0
  174. diffusers/modular_pipelines/wan/__init__.py +66 -0
  175. diffusers/modular_pipelines/wan/before_denoise.py +365 -0
  176. diffusers/modular_pipelines/wan/decoders.py +105 -0
  177. diffusers/modular_pipelines/wan/denoise.py +261 -0
  178. diffusers/modular_pipelines/wan/encoders.py +242 -0
  179. diffusers/modular_pipelines/wan/modular_blocks.py +144 -0
  180. diffusers/modular_pipelines/wan/modular_pipeline.py +90 -0
  181. diffusers/pipelines/__init__.py +68 -6
  182. diffusers/pipelines/allegro/pipeline_allegro.py +11 -11
  183. diffusers/pipelines/amused/pipeline_amused.py +7 -6
  184. diffusers/pipelines/amused/pipeline_amused_img2img.py +6 -5
  185. diffusers/pipelines/amused/pipeline_amused_inpaint.py +6 -5
  186. diffusers/pipelines/animatediff/pipeline_animatediff.py +6 -6
  187. diffusers/pipelines/animatediff/pipeline_animatediff_controlnet.py +6 -6
  188. diffusers/pipelines/animatediff/pipeline_animatediff_sdxl.py +16 -15
  189. diffusers/pipelines/animatediff/pipeline_animatediff_sparsectrl.py +6 -6
  190. diffusers/pipelines/animatediff/pipeline_animatediff_video2video.py +5 -5
  191. diffusers/pipelines/animatediff/pipeline_animatediff_video2video_controlnet.py +5 -5
  192. diffusers/pipelines/audioldm/pipeline_audioldm.py +8 -7
  193. diffusers/pipelines/audioldm2/modeling_audioldm2.py +1 -1
  194. diffusers/pipelines/audioldm2/pipeline_audioldm2.py +22 -13
  195. diffusers/pipelines/aura_flow/pipeline_aura_flow.py +48 -11
  196. diffusers/pipelines/auto_pipeline.py +23 -20
  197. diffusers/pipelines/blip_diffusion/modeling_blip2.py +1 -1
  198. diffusers/pipelines/blip_diffusion/modeling_ctx_clip.py +2 -2
  199. diffusers/pipelines/blip_diffusion/pipeline_blip_diffusion.py +11 -10
  200. diffusers/pipelines/chroma/__init__.py +49 -0
  201. diffusers/pipelines/chroma/pipeline_chroma.py +949 -0
  202. diffusers/pipelines/chroma/pipeline_chroma_img2img.py +1034 -0
  203. diffusers/pipelines/chroma/pipeline_output.py +21 -0
  204. diffusers/pipelines/cogvideo/pipeline_cogvideox.py +17 -16
  205. diffusers/pipelines/cogvideo/pipeline_cogvideox_fun_control.py +17 -16
  206. diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video.py +18 -17
  207. diffusers/pipelines/cogvideo/pipeline_cogvideox_video2video.py +17 -16
  208. diffusers/pipelines/cogview3/pipeline_cogview3plus.py +9 -9
  209. diffusers/pipelines/cogview4/pipeline_cogview4.py +23 -22
  210. diffusers/pipelines/cogview4/pipeline_cogview4_control.py +7 -7
  211. diffusers/pipelines/consisid/consisid_utils.py +2 -2
  212. diffusers/pipelines/consisid/pipeline_consisid.py +8 -8
  213. diffusers/pipelines/consistency_models/pipeline_consistency_models.py +1 -1
  214. diffusers/pipelines/controlnet/pipeline_controlnet.py +7 -7
  215. diffusers/pipelines/controlnet/pipeline_controlnet_blip_diffusion.py +11 -10
  216. diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +7 -7
  217. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint.py +7 -7
  218. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +14 -14
  219. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +10 -6
  220. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +13 -13
  221. diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +226 -107
  222. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +12 -8
  223. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +207 -105
  224. diffusers/pipelines/controlnet/pipeline_flax_controlnet.py +1 -1
  225. diffusers/pipelines/controlnet_hunyuandit/pipeline_hunyuandit_controlnet.py +8 -8
  226. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet.py +7 -7
  227. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py +7 -7
  228. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs.py +12 -10
  229. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs_sd_xl.py +9 -7
  230. diffusers/pipelines/cosmos/__init__.py +54 -0
  231. diffusers/pipelines/cosmos/pipeline_cosmos2_text2image.py +673 -0
  232. diffusers/pipelines/cosmos/pipeline_cosmos2_video2world.py +792 -0
  233. diffusers/pipelines/cosmos/pipeline_cosmos_text2world.py +664 -0
  234. diffusers/pipelines/cosmos/pipeline_cosmos_video2world.py +826 -0
  235. diffusers/pipelines/cosmos/pipeline_output.py +40 -0
  236. diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py +5 -4
  237. diffusers/pipelines/ddim/pipeline_ddim.py +4 -4
  238. diffusers/pipelines/ddpm/pipeline_ddpm.py +1 -1
  239. diffusers/pipelines/deepfloyd_if/pipeline_if.py +10 -10
  240. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img.py +10 -10
  241. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img_superresolution.py +10 -10
  242. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting.py +10 -10
  243. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting_superresolution.py +10 -10
  244. diffusers/pipelines/deepfloyd_if/pipeline_if_superresolution.py +10 -10
  245. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion.py +8 -8
  246. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion_img2img.py +5 -5
  247. diffusers/pipelines/deprecated/audio_diffusion/mel.py +1 -1
  248. diffusers/pipelines/deprecated/audio_diffusion/pipeline_audio_diffusion.py +3 -3
  249. diffusers/pipelines/deprecated/latent_diffusion_uncond/pipeline_latent_diffusion_uncond.py +1 -1
  250. diffusers/pipelines/deprecated/pndm/pipeline_pndm.py +2 -2
  251. diffusers/pipelines/deprecated/repaint/pipeline_repaint.py +4 -3
  252. diffusers/pipelines/deprecated/score_sde_ve/pipeline_score_sde_ve.py +1 -1
  253. diffusers/pipelines/deprecated/spectrogram_diffusion/continuous_encoder.py +1 -1
  254. diffusers/pipelines/deprecated/spectrogram_diffusion/midi_utils.py +1 -1
  255. diffusers/pipelines/deprecated/spectrogram_diffusion/notes_encoder.py +1 -1
  256. diffusers/pipelines/deprecated/spectrogram_diffusion/pipeline_spectrogram_diffusion.py +1 -1
  257. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_cycle_diffusion.py +8 -8
  258. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_onnx_stable_diffusion_inpaint_legacy.py +9 -9
  259. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_inpaint_legacy.py +10 -10
  260. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_model_editing.py +10 -8
  261. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_paradigms.py +5 -5
  262. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_pix2pix_zero.py +18 -18
  263. diffusers/pipelines/deprecated/stochastic_karras_ve/pipeline_stochastic_karras_ve.py +1 -1
  264. diffusers/pipelines/deprecated/versatile_diffusion/modeling_text_unet.py +2 -2
  265. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion.py +6 -6
  266. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_dual_guided.py +5 -5
  267. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_image_variation.py +5 -5
  268. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_text_to_image.py +5 -5
  269. diffusers/pipelines/deprecated/vq_diffusion/pipeline_vq_diffusion.py +1 -1
  270. diffusers/pipelines/dit/pipeline_dit.py +4 -2
  271. diffusers/pipelines/easyanimate/pipeline_easyanimate.py +4 -4
  272. diffusers/pipelines/easyanimate/pipeline_easyanimate_control.py +4 -4
  273. diffusers/pipelines/easyanimate/pipeline_easyanimate_inpaint.py +7 -6
  274. diffusers/pipelines/flux/__init__.py +4 -0
  275. diffusers/pipelines/flux/modeling_flux.py +1 -1
  276. diffusers/pipelines/flux/pipeline_flux.py +37 -36
  277. diffusers/pipelines/flux/pipeline_flux_control.py +9 -9
  278. diffusers/pipelines/flux/pipeline_flux_control_img2img.py +7 -7
  279. diffusers/pipelines/flux/pipeline_flux_control_inpaint.py +7 -7
  280. diffusers/pipelines/flux/pipeline_flux_controlnet.py +7 -7
  281. diffusers/pipelines/flux/pipeline_flux_controlnet_image_to_image.py +31 -23
  282. diffusers/pipelines/flux/pipeline_flux_controlnet_inpainting.py +3 -2
  283. diffusers/pipelines/flux/pipeline_flux_fill.py +7 -7
  284. diffusers/pipelines/flux/pipeline_flux_img2img.py +40 -7
  285. diffusers/pipelines/flux/pipeline_flux_inpaint.py +12 -7
  286. diffusers/pipelines/flux/pipeline_flux_kontext.py +1134 -0
  287. diffusers/pipelines/flux/pipeline_flux_kontext_inpaint.py +1460 -0
  288. diffusers/pipelines/flux/pipeline_flux_prior_redux.py +2 -2
  289. diffusers/pipelines/flux/pipeline_output.py +6 -4
  290. diffusers/pipelines/free_init_utils.py +2 -2
  291. diffusers/pipelines/free_noise_utils.py +3 -3
  292. diffusers/pipelines/hidream_image/__init__.py +47 -0
  293. diffusers/pipelines/hidream_image/pipeline_hidream_image.py +1026 -0
  294. diffusers/pipelines/hidream_image/pipeline_output.py +35 -0
  295. diffusers/pipelines/hunyuan_video/__init__.py +2 -0
  296. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_skyreels_image2video.py +8 -8
  297. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video.py +26 -25
  298. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_framepack.py +1114 -0
  299. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_image2video.py +71 -15
  300. diffusers/pipelines/hunyuan_video/pipeline_output.py +19 -0
  301. diffusers/pipelines/hunyuandit/pipeline_hunyuandit.py +8 -8
  302. diffusers/pipelines/i2vgen_xl/pipeline_i2vgen_xl.py +10 -8
  303. diffusers/pipelines/kandinsky/pipeline_kandinsky.py +6 -6
  304. diffusers/pipelines/kandinsky/pipeline_kandinsky_combined.py +34 -34
  305. diffusers/pipelines/kandinsky/pipeline_kandinsky_img2img.py +19 -26
  306. diffusers/pipelines/kandinsky/pipeline_kandinsky_inpaint.py +7 -7
  307. diffusers/pipelines/kandinsky/pipeline_kandinsky_prior.py +11 -11
  308. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +6 -6
  309. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_combined.py +35 -35
  310. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet.py +6 -6
  311. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet_img2img.py +17 -39
  312. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +17 -45
  313. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpainting.py +7 -7
  314. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +10 -10
  315. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior_emb2emb.py +10 -10
  316. diffusers/pipelines/kandinsky3/pipeline_kandinsky3.py +7 -7
  317. diffusers/pipelines/kandinsky3/pipeline_kandinsky3_img2img.py +17 -38
  318. diffusers/pipelines/kolors/pipeline_kolors.py +10 -10
  319. diffusers/pipelines/kolors/pipeline_kolors_img2img.py +12 -12
  320. diffusers/pipelines/kolors/text_encoder.py +3 -3
  321. diffusers/pipelines/kolors/tokenizer.py +1 -1
  322. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_img2img.py +2 -2
  323. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_text2img.py +2 -2
  324. diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py +1 -1
  325. diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion_superresolution.py +3 -3
  326. diffusers/pipelines/latte/pipeline_latte.py +12 -12
  327. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py +13 -13
  328. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py +17 -16
  329. diffusers/pipelines/ltx/__init__.py +4 -0
  330. diffusers/pipelines/ltx/modeling_latent_upsampler.py +188 -0
  331. diffusers/pipelines/ltx/pipeline_ltx.py +64 -18
  332. diffusers/pipelines/ltx/pipeline_ltx_condition.py +117 -38
  333. diffusers/pipelines/ltx/pipeline_ltx_image2video.py +63 -18
  334. diffusers/pipelines/ltx/pipeline_ltx_latent_upsample.py +277 -0
  335. diffusers/pipelines/lumina/pipeline_lumina.py +13 -13
  336. diffusers/pipelines/lumina2/pipeline_lumina2.py +10 -10
  337. diffusers/pipelines/marigold/marigold_image_processing.py +2 -2
  338. diffusers/pipelines/mochi/pipeline_mochi.py +15 -14
  339. diffusers/pipelines/musicldm/pipeline_musicldm.py +16 -13
  340. diffusers/pipelines/omnigen/pipeline_omnigen.py +13 -11
  341. diffusers/pipelines/omnigen/processor_omnigen.py +8 -3
  342. diffusers/pipelines/onnx_utils.py +15 -2
  343. diffusers/pipelines/pag/pag_utils.py +2 -2
  344. diffusers/pipelines/pag/pipeline_pag_controlnet_sd.py +12 -8
  345. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_inpaint.py +7 -7
  346. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl.py +10 -6
  347. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl_img2img.py +14 -14
  348. diffusers/pipelines/pag/pipeline_pag_hunyuandit.py +8 -8
  349. diffusers/pipelines/pag/pipeline_pag_kolors.py +10 -10
  350. diffusers/pipelines/pag/pipeline_pag_pixart_sigma.py +11 -11
  351. diffusers/pipelines/pag/pipeline_pag_sana.py +18 -12
  352. diffusers/pipelines/pag/pipeline_pag_sd.py +8 -8
  353. diffusers/pipelines/pag/pipeline_pag_sd_3.py +7 -7
  354. diffusers/pipelines/pag/pipeline_pag_sd_3_img2img.py +7 -7
  355. diffusers/pipelines/pag/pipeline_pag_sd_animatediff.py +6 -6
  356. diffusers/pipelines/pag/pipeline_pag_sd_img2img.py +5 -5
  357. diffusers/pipelines/pag/pipeline_pag_sd_inpaint.py +8 -8
  358. diffusers/pipelines/pag/pipeline_pag_sd_xl.py +16 -15
  359. diffusers/pipelines/pag/pipeline_pag_sd_xl_img2img.py +18 -17
  360. diffusers/pipelines/pag/pipeline_pag_sd_xl_inpaint.py +12 -12
  361. diffusers/pipelines/paint_by_example/image_encoder.py +1 -1
  362. diffusers/pipelines/paint_by_example/pipeline_paint_by_example.py +8 -7
  363. diffusers/pipelines/pia/pipeline_pia.py +8 -6
  364. diffusers/pipelines/pipeline_flax_utils.py +5 -6
  365. diffusers/pipelines/pipeline_loading_utils.py +113 -15
  366. diffusers/pipelines/pipeline_utils.py +127 -48
  367. diffusers/pipelines/pixart_alpha/pipeline_pixart_alpha.py +14 -12
  368. diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py +31 -11
  369. diffusers/pipelines/qwenimage/__init__.py +55 -0
  370. diffusers/pipelines/qwenimage/pipeline_output.py +21 -0
  371. diffusers/pipelines/qwenimage/pipeline_qwenimage.py +726 -0
  372. diffusers/pipelines/qwenimage/pipeline_qwenimage_edit.py +882 -0
  373. diffusers/pipelines/qwenimage/pipeline_qwenimage_img2img.py +829 -0
  374. diffusers/pipelines/qwenimage/pipeline_qwenimage_inpaint.py +1015 -0
  375. diffusers/pipelines/sana/__init__.py +4 -0
  376. diffusers/pipelines/sana/pipeline_sana.py +23 -21
  377. diffusers/pipelines/sana/pipeline_sana_controlnet.py +1106 -0
  378. diffusers/pipelines/sana/pipeline_sana_sprint.py +23 -19
  379. diffusers/pipelines/sana/pipeline_sana_sprint_img2img.py +981 -0
  380. diffusers/pipelines/semantic_stable_diffusion/pipeline_semantic_stable_diffusion.py +7 -6
  381. diffusers/pipelines/shap_e/camera.py +1 -1
  382. diffusers/pipelines/shap_e/pipeline_shap_e.py +1 -1
  383. diffusers/pipelines/shap_e/pipeline_shap_e_img2img.py +1 -1
  384. diffusers/pipelines/shap_e/renderer.py +3 -3
  385. diffusers/pipelines/skyreels_v2/__init__.py +59 -0
  386. diffusers/pipelines/skyreels_v2/pipeline_output.py +20 -0
  387. diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2.py +610 -0
  388. diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing.py +978 -0
  389. diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing_i2v.py +1059 -0
  390. diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_diffusion_forcing_v2v.py +1063 -0
  391. diffusers/pipelines/skyreels_v2/pipeline_skyreels_v2_i2v.py +745 -0
  392. diffusers/pipelines/stable_audio/modeling_stable_audio.py +1 -1
  393. diffusers/pipelines/stable_audio/pipeline_stable_audio.py +5 -5
  394. diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py +8 -8
  395. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_combined.py +13 -13
  396. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_prior.py +9 -9
  397. diffusers/pipelines/stable_diffusion/__init__.py +0 -7
  398. diffusers/pipelines/stable_diffusion/clip_image_project_model.py +1 -1
  399. diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +11 -4
  400. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion.py +1 -1
  401. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_img2img.py +1 -1
  402. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_inpaint.py +1 -1
  403. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py +12 -11
  404. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_img2img.py +10 -10
  405. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_inpaint.py +11 -11
  406. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_upscale.py +10 -10
  407. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +10 -9
  408. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_depth2img.py +5 -5
  409. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_image_variation.py +5 -5
  410. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +5 -5
  411. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +5 -5
  412. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_instruct_pix2pix.py +5 -5
  413. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_latent_upscale.py +4 -4
  414. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +5 -5
  415. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip.py +7 -7
  416. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip_img2img.py +5 -5
  417. diffusers/pipelines/stable_diffusion/safety_checker.py +1 -1
  418. diffusers/pipelines/stable_diffusion/safety_checker_flax.py +1 -1
  419. diffusers/pipelines/stable_diffusion/stable_unclip_image_normalizer.py +1 -1
  420. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +13 -12
  421. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +7 -7
  422. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +7 -7
  423. diffusers/pipelines/stable_diffusion_attend_and_excite/pipeline_stable_diffusion_attend_and_excite.py +12 -8
  424. diffusers/pipelines/stable_diffusion_diffedit/pipeline_stable_diffusion_diffedit.py +15 -9
  425. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen.py +11 -9
  426. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen_text_image.py +11 -9
  427. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_k_diffusion.py +18 -12
  428. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_xl_k_diffusion.py +11 -8
  429. diffusers/pipelines/stable_diffusion_ldm3d/pipeline_stable_diffusion_ldm3d.py +11 -8
  430. diffusers/pipelines/stable_diffusion_panorama/pipeline_stable_diffusion_panorama.py +15 -12
  431. diffusers/pipelines/stable_diffusion_safe/pipeline_stable_diffusion_safe.py +8 -6
  432. diffusers/pipelines/stable_diffusion_safe/safety_checker.py +1 -1
  433. diffusers/pipelines/stable_diffusion_sag/pipeline_stable_diffusion_sag.py +15 -11
  434. diffusers/pipelines/stable_diffusion_xl/pipeline_flax_stable_diffusion_xl.py +1 -1
  435. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +16 -15
  436. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +18 -17
  437. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +12 -12
  438. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_instruct_pix2pix.py +16 -15
  439. diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +3 -3
  440. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +12 -12
  441. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py +18 -17
  442. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth.py +12 -7
  443. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth_img2img.py +12 -7
  444. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero.py +15 -13
  445. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero_sdxl.py +24 -21
  446. diffusers/pipelines/unclip/pipeline_unclip.py +4 -3
  447. diffusers/pipelines/unclip/pipeline_unclip_image_variation.py +4 -3
  448. diffusers/pipelines/unclip/text_proj.py +2 -2
  449. diffusers/pipelines/unidiffuser/modeling_text_decoder.py +2 -2
  450. diffusers/pipelines/unidiffuser/modeling_uvit.py +1 -1
  451. diffusers/pipelines/unidiffuser/pipeline_unidiffuser.py +8 -7
  452. diffusers/pipelines/visualcloze/__init__.py +52 -0
  453. diffusers/pipelines/visualcloze/pipeline_visualcloze_combined.py +444 -0
  454. diffusers/pipelines/visualcloze/pipeline_visualcloze_generation.py +952 -0
  455. diffusers/pipelines/visualcloze/visualcloze_utils.py +251 -0
  456. diffusers/pipelines/wan/__init__.py +2 -0
  457. diffusers/pipelines/wan/pipeline_wan.py +91 -30
  458. diffusers/pipelines/wan/pipeline_wan_i2v.py +145 -45
  459. diffusers/pipelines/wan/pipeline_wan_vace.py +975 -0
  460. diffusers/pipelines/wan/pipeline_wan_video2video.py +14 -16
  461. diffusers/pipelines/wuerstchen/modeling_paella_vq_model.py +1 -1
  462. diffusers/pipelines/wuerstchen/modeling_wuerstchen_diffnext.py +1 -1
  463. diffusers/pipelines/wuerstchen/modeling_wuerstchen_prior.py +1 -1
  464. diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py +8 -8
  465. diffusers/pipelines/wuerstchen/pipeline_wuerstchen_combined.py +16 -15
  466. diffusers/pipelines/wuerstchen/pipeline_wuerstchen_prior.py +6 -6
  467. diffusers/quantizers/__init__.py +3 -1
  468. diffusers/quantizers/base.py +17 -1
  469. diffusers/quantizers/bitsandbytes/bnb_quantizer.py +4 -0
  470. diffusers/quantizers/bitsandbytes/utils.py +10 -7
  471. diffusers/quantizers/gguf/gguf_quantizer.py +13 -4
  472. diffusers/quantizers/gguf/utils.py +108 -16
  473. diffusers/quantizers/pipe_quant_config.py +202 -0
  474. diffusers/quantizers/quantization_config.py +18 -16
  475. diffusers/quantizers/quanto/quanto_quantizer.py +4 -0
  476. diffusers/quantizers/torchao/torchao_quantizer.py +31 -1
  477. diffusers/schedulers/__init__.py +3 -1
  478. diffusers/schedulers/deprecated/scheduling_karras_ve.py +4 -3
  479. diffusers/schedulers/deprecated/scheduling_sde_vp.py +1 -1
  480. diffusers/schedulers/scheduling_consistency_models.py +1 -1
  481. diffusers/schedulers/scheduling_cosine_dpmsolver_multistep.py +10 -5
  482. diffusers/schedulers/scheduling_ddim.py +8 -8
  483. diffusers/schedulers/scheduling_ddim_cogvideox.py +5 -5
  484. diffusers/schedulers/scheduling_ddim_flax.py +6 -6
  485. diffusers/schedulers/scheduling_ddim_inverse.py +6 -6
  486. diffusers/schedulers/scheduling_ddim_parallel.py +22 -22
  487. diffusers/schedulers/scheduling_ddpm.py +9 -9
  488. diffusers/schedulers/scheduling_ddpm_flax.py +7 -7
  489. diffusers/schedulers/scheduling_ddpm_parallel.py +18 -18
  490. diffusers/schedulers/scheduling_ddpm_wuerstchen.py +2 -2
  491. diffusers/schedulers/scheduling_deis_multistep.py +16 -9
  492. diffusers/schedulers/scheduling_dpm_cogvideox.py +5 -5
  493. diffusers/schedulers/scheduling_dpmsolver_multistep.py +18 -12
  494. diffusers/schedulers/scheduling_dpmsolver_multistep_flax.py +22 -20
  495. diffusers/schedulers/scheduling_dpmsolver_multistep_inverse.py +11 -11
  496. diffusers/schedulers/scheduling_dpmsolver_sde.py +2 -2
  497. diffusers/schedulers/scheduling_dpmsolver_singlestep.py +19 -13
  498. diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py +13 -8
  499. diffusers/schedulers/scheduling_edm_euler.py +20 -11
  500. diffusers/schedulers/scheduling_euler_ancestral_discrete.py +3 -3
  501. diffusers/schedulers/scheduling_euler_discrete.py +3 -3
  502. diffusers/schedulers/scheduling_euler_discrete_flax.py +3 -3
  503. diffusers/schedulers/scheduling_flow_match_euler_discrete.py +20 -5
  504. diffusers/schedulers/scheduling_flow_match_heun_discrete.py +1 -1
  505. diffusers/schedulers/scheduling_flow_match_lcm.py +561 -0
  506. diffusers/schedulers/scheduling_heun_discrete.py +2 -2
  507. diffusers/schedulers/scheduling_ipndm.py +2 -2
  508. diffusers/schedulers/scheduling_k_dpm_2_ancestral_discrete.py +2 -2
  509. diffusers/schedulers/scheduling_k_dpm_2_discrete.py +2 -2
  510. diffusers/schedulers/scheduling_karras_ve_flax.py +5 -5
  511. diffusers/schedulers/scheduling_lcm.py +3 -3
  512. diffusers/schedulers/scheduling_lms_discrete.py +2 -2
  513. diffusers/schedulers/scheduling_lms_discrete_flax.py +1 -1
  514. diffusers/schedulers/scheduling_pndm.py +4 -4
  515. diffusers/schedulers/scheduling_pndm_flax.py +4 -4
  516. diffusers/schedulers/scheduling_repaint.py +9 -9
  517. diffusers/schedulers/scheduling_sasolver.py +15 -15
  518. diffusers/schedulers/scheduling_scm.py +1 -2
  519. diffusers/schedulers/scheduling_sde_ve.py +1 -1
  520. diffusers/schedulers/scheduling_sde_ve_flax.py +2 -2
  521. diffusers/schedulers/scheduling_tcd.py +3 -3
  522. diffusers/schedulers/scheduling_unclip.py +5 -5
  523. diffusers/schedulers/scheduling_unipc_multistep.py +21 -12
  524. diffusers/schedulers/scheduling_utils.py +3 -3
  525. diffusers/schedulers/scheduling_utils_flax.py +2 -2
  526. diffusers/schedulers/scheduling_vq_diffusion.py +1 -1
  527. diffusers/training_utils.py +91 -5
  528. diffusers/utils/__init__.py +15 -0
  529. diffusers/utils/accelerate_utils.py +1 -1
  530. diffusers/utils/constants.py +4 -0
  531. diffusers/utils/doc_utils.py +1 -1
  532. diffusers/utils/dummy_pt_objects.py +432 -0
  533. diffusers/utils/dummy_torch_and_transformers_objects.py +480 -0
  534. diffusers/utils/dynamic_modules_utils.py +85 -8
  535. diffusers/utils/export_utils.py +1 -1
  536. diffusers/utils/hub_utils.py +33 -17
  537. diffusers/utils/import_utils.py +151 -18
  538. diffusers/utils/logging.py +1 -1
  539. diffusers/utils/outputs.py +2 -1
  540. diffusers/utils/peft_utils.py +96 -10
  541. diffusers/utils/state_dict_utils.py +20 -3
  542. diffusers/utils/testing_utils.py +195 -17
  543. diffusers/utils/torch_utils.py +43 -5
  544. diffusers/video_processor.py +2 -2
  545. {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/METADATA +72 -57
  546. diffusers-0.35.0.dist-info/RECORD +703 -0
  547. {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/WHEEL +1 -1
  548. diffusers-0.33.1.dist-info/RECORD +0 -608
  549. {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/LICENSE +0 -0
  550. {diffusers-0.33.1.dist-info → diffusers-0.35.0.dist-info}/entry_points.txt +0 -0
  551. {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.33.1"
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
@@ -1,4 +1,4 @@
1
- # Copyright 2024 The HuggingFace Team. All rights reserved.
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.
@@ -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 2024 The HuggingFace Team. All rights reserved.
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 2024 The HuggingFace Team. All rights reserved.
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.
@@ -1,4 +1,4 @@
1
- # Copyright 2024 The HuggingFace Team. All rights reserved.
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 `huggingface-cli login` needs to be run beforehand.",
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