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