diffsynth 2.1.5__tar.gz → 2.1.6__tar.gz

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 (278) hide show
  1. {diffsynth-2.1.5 → diffsynth-2.1.6}/PKG-INFO +13 -1
  2. {diffsynth-2.1.5 → diffsynth-2.1.6}/README.md +12 -0
  3. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/configs/model_configs.py +36 -2
  4. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/configs/vram_management_module_maps.py +16 -0
  5. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/flow_match.py +11 -1
  6. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/loss.py +2 -2
  7. diffsynth-2.1.6/diffsynth/models/minimax_h3_controlnet.py +105 -0
  8. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_dit.py +4 -1
  9. diffsynth-2.1.6/diffsynth/models/qwen_video_edit_dit.py +89 -0
  10. diffsynth-2.1.6/diffsynth/models/sensenova_u1_common.py +229 -0
  11. diffsynth-2.1.6/diffsynth/models/sensenova_u1_dit.py +897 -0
  12. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/minimax_h3_audio_video.py +144 -1
  13. diffsynth-2.1.6/diffsynth/pipelines/qwen_video_edit.py +356 -0
  14. diffsynth-2.1.6/diffsynth/pipelines/sensenova_u1_image.py +318 -0
  15. diffsynth-2.1.6/diffsynth/utils/state_dict_converters/minimax_h3_controlnet.py +75 -0
  16. diffsynth-2.1.6/diffsynth/utils/state_dict_converters/qwen_video_edit.py +6 -0
  17. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/version.py +1 -1
  18. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth.egg-info/PKG-INFO +13 -1
  19. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth.egg-info/SOURCES.txt +8 -0
  20. {diffsynth-2.1.5 → diffsynth-2.1.6}/LICENSE +0 -0
  21. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/__init__.py +0 -0
  22. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/configs/__init__.py +0 -0
  23. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/__init__.py +0 -0
  24. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/attention/__init__.py +0 -0
  25. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/attention/attention.py +0 -0
  26. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/data/__init__.py +0 -0
  27. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/data/operators.py +0 -0
  28. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/data/unified_dataset.py +0 -0
  29. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/device/__init__.py +0 -0
  30. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/device/npu_compatible_device.py +0 -0
  31. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/gradient/__init__.py +0 -0
  32. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/gradient/gradient_checkpoint.py +0 -0
  33. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/loader/__init__.py +0 -0
  34. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/loader/config.py +0 -0
  35. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/loader/file.py +0 -0
  36. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/loader/model.py +0 -0
  37. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/npu_patch/npu_fused_operator.py +0 -0
  38. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/offload_training/__init__.py +0 -0
  39. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/offload_training/manager.py +0 -0
  40. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/offload_training/memory_buffer.py +0 -0
  41. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/offload_training/offloader.py +0 -0
  42. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/__init__.py +0 -0
  43. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/backends/__init__.py +0 -0
  44. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/backends/bitsandbytes.py +0 -0
  45. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/backends/comfy_kitchen.py +0 -0
  46. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/backends/torchao.py +0 -0
  47. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/base.py +0 -0
  48. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/quant/config.py +0 -0
  49. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/vram/__init__.py +0 -0
  50. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/vram/disk_map.py +0 -0
  51. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/vram/initialization.py +0 -0
  52. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/core/vram/layers.py +0 -0
  53. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/__init__.py +0 -0
  54. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/base_pipeline.py +0 -0
  55. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/ddim_scheduler.py +0 -0
  56. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/dmd2.py +0 -0
  57. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/logger.py +0 -0
  58. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/parsers.py +0 -0
  59. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/runner.py +0 -0
  60. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/template.py +0 -0
  61. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/diffusion/training_module.py +0 -0
  62. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/__init__.py +0 -0
  63. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/aesthetic.py +0 -0
  64. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/base.py +0 -0
  65. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/bioclip.py +0 -0
  66. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/clip.py +0 -0
  67. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/fid.py +0 -0
  68. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/hpsv2.py +0 -0
  69. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/hpsv3.py +0 -0
  70. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/image_reward.py +0 -0
  71. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/lpips.py +0 -0
  72. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/pickscore.py +0 -0
  73. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/qwen_image_bench.py +0 -0
  74. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/unified_reward_2.py +0 -0
  75. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/metrics/unified_reward_edit.py +0 -0
  76. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_conditioner.py +0 -0
  77. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_dit.py +0 -0
  78. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_residual_fsq.py +0 -0
  79. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_text_encoder.py +0 -0
  80. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_tokenizer.py +0 -0
  81. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ace_step_vae.py +0 -0
  82. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/aesthetic.py +0 -0
  83. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/anima_dit.py +0 -0
  84. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/bioclip.py +0 -0
  85. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/boogu_image_dit.py +0 -0
  86. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/clip.py +0 -0
  87. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/demucs.py +0 -0
  88. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/dinov3_image_encoder.py +0 -0
  89. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ernie_image_dit.py +0 -0
  90. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ernie_image_text_encoder.py +0 -0
  91. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/fid.py +0 -0
  92. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux2_dit.py +0 -0
  93. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux2_text_encoder.py +0 -0
  94. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux2_vae.py +0 -0
  95. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_controlnet.py +0 -0
  96. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_dit.py +0 -0
  97. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_infiniteyou.py +0 -0
  98. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_ipadapter.py +0 -0
  99. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_lora_encoder.py +0 -0
  100. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_lora_patcher.py +0 -0
  101. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_redux.py +0 -0
  102. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_text_encoder_clip.py +0 -0
  103. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_text_encoder_t5.py +0 -0
  104. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_vae.py +0 -0
  105. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/flux_value_control.py +0 -0
  106. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/general_modules.py +0 -0
  107. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/hidream_common.py +0 -0
  108. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/hidream_o1_image_dit.py +0 -0
  109. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/hpsv2.py +0 -0
  110. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/hpsv3.py +0 -0
  111. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ideogram4_dit.py +0 -0
  112. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ideogram4_text_encoder.py +0 -0
  113. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ideogram4_vae.py +0 -0
  114. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/image_reward.py +0 -0
  115. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/joyai_image_dit.py +0 -0
  116. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/joyai_image_text_encoder.py +0 -0
  117. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/krea2_dit.py +0 -0
  118. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/krea2_text_encoder.py +0 -0
  119. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/lingbot_video_dit.py +0 -0
  120. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/longcat_video_dit.py +0 -0
  121. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/lpips.py +0 -0
  122. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_audio_vae.py +0 -0
  123. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_common.py +0 -0
  124. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_dit.py +0 -0
  125. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_text_encoder.py +0 -0
  126. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_upsampler.py +0 -0
  127. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/ltx2_video_vae.py +0 -0
  128. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_audio_vae.py +0 -0
  129. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_dit_comfy.py +0 -0
  130. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_text_encoder.py +0 -0
  131. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_video_vae.py +0 -0
  132. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_condition_encoder.py +0 -0
  133. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_dit.py +0 -0
  134. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_rvq_depth_decoder.py +0 -0
  135. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_text_encoder.py +0 -0
  136. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_vocoder.py +0 -0
  137. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/model_loader.py +0 -0
  138. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/mova_audio_dit.py +0 -0
  139. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/mova_audio_vae.py +0 -0
  140. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/mova_dual_tower_bridge.py +0 -0
  141. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/nexus_gen.py +0 -0
  142. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/nexus_gen_ar_model.py +0 -0
  143. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/nexus_gen_projector.py +0 -0
  144. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/pickscore.py +0 -0
  145. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_bench.py +0 -0
  146. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_controlnet.py +0 -0
  147. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_dit.py +0 -0
  148. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_image2lora.py +0 -0
  149. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_text_encoder.py +0 -0
  150. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/qwen_image_vae.py +0 -0
  151. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/sd_text_encoder.py +0 -0
  152. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/siglip2_image_encoder.py +0 -0
  153. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_text_encoder.py +0 -0
  154. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_unet.py +0 -0
  155. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_vae.py +0 -0
  156. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_xl_text_encoder.py +0 -0
  157. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_xl_unet.py +0 -0
  158. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/step1x_connector.py +0 -0
  159. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/step1x_text_encoder.py +0 -0
  160. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/unified_reward_2.py +0 -0
  161. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/unified_reward_edit.py +0 -0
  162. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_animate_2_dit.py +0 -0
  163. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_animate_adapter.py +0 -0
  164. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_camera_controller.py +0 -0
  165. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_dit.py +0 -0
  166. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_dit_s2v.py +0 -0
  167. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_image_encoder.py +0 -0
  168. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_mot.py +0 -0
  169. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_motion_controller.py +0 -0
  170. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_text_encoder.py +0 -0
  171. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_vace.py +0 -0
  172. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wan_video_vae.py +0 -0
  173. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wantodance.py +0 -0
  174. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/wav2vec.py +0 -0
  175. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/z_image_controlnet.py +0 -0
  176. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/z_image_dit.py +0 -0
  177. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/z_image_image2lora.py +0 -0
  178. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/models/z_image_text_encoder.py +0 -0
  179. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/ace_step.py +0 -0
  180. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/anima_image.py +0 -0
  181. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/boogu_image.py +0 -0
  182. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/ernie_image.py +0 -0
  183. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/flux2_image.py +0 -0
  184. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/flux_image.py +0 -0
  185. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/hidream_o1_image.py +0 -0
  186. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/ideogram4.py +0 -0
  187. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/joyai_image.py +0 -0
  188. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/krea2.py +0 -0
  189. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/lingbot_video.py +0 -0
  190. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/ltx2_audio_video.py +0 -0
  191. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/minimax_music3.py +0 -0
  192. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/mova_audio_video.py +0 -0
  193. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/qwen_image.py +0 -0
  194. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/stable_diffusion.py +0 -0
  195. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/stable_diffusion_xl.py +0 -0
  196. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/wan_video.py +0 -0
  197. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/pipelines/z_image.py +0 -0
  198. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/controlnet/__init__.py +0 -0
  199. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/controlnet/annotator.py +0 -0
  200. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/controlnet/controlnet_input.py +0 -0
  201. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/data/__init__.py +0 -0
  202. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/data/audio.py +0 -0
  203. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/data/audio_video.py +0 -0
  204. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/data/media_io_ltx2.py +0 -0
  205. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/data/minimax_h3.py +0 -0
  206. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/demucs/__init__.py +0 -0
  207. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/dequantizer/__init__.py +0 -0
  208. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/__init__.py +0 -0
  209. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/flux.py +0 -0
  210. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/flux_timestep.py +0 -0
  211. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/general.py +0 -0
  212. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/krea2.py +0 -0
  213. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/merge.py +0 -0
  214. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/minimax_h3.py +0 -0
  215. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/reset_rank.py +0 -0
  216. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/lora/sdxl.py +0 -0
  217. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/quant/serialization.py +0 -0
  218. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/ses/__init__.py +0 -0
  219. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/ses/ses.py +0 -0
  220. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/__init__.py +0 -0
  221. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_conditioner.py +0 -0
  222. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_dit.py +0 -0
  223. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_text_encoder.py +0 -0
  224. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_tokenizer.py +0 -0
  225. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/anima_dit.py +0 -0
  226. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/dino_v3.py +0 -0
  227. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ernie_image_text_encoder.py +0 -0
  228. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux2_text_encoder.py +0 -0
  229. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_controlnet.py +0 -0
  230. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_dit.py +0 -0
  231. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_infiniteyou.py +0 -0
  232. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_ipadapter.py +0 -0
  233. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_text_encoder_clip.py +0 -0
  234. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_text_encoder_t5.py +0 -0
  235. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_vae.py +0 -0
  236. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ideogram4_text_encoder.py +0 -0
  237. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/image_metrics.py +0 -0
  238. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/joyai_image_text_encoder.py +0 -0
  239. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/krea2_dit.py +0 -0
  240. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/krea2_text_encoder.py +0 -0
  241. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/lingbot_video_dit.py +0 -0
  242. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_audio_vae.py +0 -0
  243. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_dit.py +0 -0
  244. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_text_encoder.py +0 -0
  245. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_video_vae.py +0 -0
  246. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_audio_vae.py +0 -0
  247. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_text_encoder.py +0 -0
  248. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_video_vae.py +0 -0
  249. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_music3_text_encoder.py +0 -0
  250. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/nexus_gen.py +0 -0
  251. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/nexus_gen_projector.py +0 -0
  252. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/qwen_image_text_encoder.py +0 -0
  253. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl.py +0 -0
  254. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_text_encoder.py +0 -0
  255. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py +0 -0
  256. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_vae.py +0 -0
  257. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py +0 -0
  258. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py +0 -0
  259. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py +0 -0
  260. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/step1x_connector.py +0 -0
  261. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py +0 -0
  262. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_dit.py +0 -0
  263. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py +0 -0
  264. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_mot.py +0 -0
  265. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_vace.py +0 -0
  266. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_vae.py +0 -0
  267. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py +0 -0
  268. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/z_image_dit.py +0 -0
  269. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/z_image_text_encoder.py +0 -0
  270. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/tile/__init__.py +0 -0
  271. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/tile/tile_worker.py +0 -0
  272. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/xfuser/__init__.py +0 -0
  273. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth/utils/xfuser/xdit_context_parallel.py +0 -0
  274. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth.egg-info/dependency_links.txt +0 -0
  275. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth.egg-info/requires.txt +0 -0
  276. {diffsynth-2.1.5 → diffsynth-2.1.6}/diffsynth.egg-info/top_level.txt +0 -0
  277. {diffsynth-2.1.5 → diffsynth-2.1.6}/pyproject.toml +0 -0
  278. {diffsynth-2.1.5 → diffsynth-2.1.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth
3
- Version: 2.1.5
3
+ Version: 2.1.6
4
4
  Summary: Enjoy the magic of Diffusion models!
5
5
  Author: ModelScope Team
6
6
  License-Expression: Apache-2.0
@@ -107,6 +107,10 @@ See also:
107
107
 
108
108
  > Currently, the development personnel of this project are limited, with most of the work handled by [Artiprocher](https://github.com/Artiprocher) and [mi804](https://github.com/mi804). Therefore, the progress of new feature development will be relatively slow, and the speed of responding to and resolving issues is limited. We apologize for this and ask developers to understand.
109
109
 
110
+ - **September 1, 2026** We have integrated [SenseNova-U1.5](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT), SenseTime's unified multimodal model, for which we provide text-to-image generation, image editing, low VRAM inference, and training support. For details, please refer to the [documentation](/docs/en/Model_Details/SenseNova-U1.md) and [example code](/examples/sensenova_u1/).
111
+
112
+ - **August 31, 2026** We have integrated [Qwen-Video-Edit](https://modelscope.cn/models/yunpeng1998/Qwen-Video-Edit), a video editing model developed by open-source community contributor [yunpeng1998](https://github.com/yunpeng1998) based on the image editing model Qwen-Image-Edit. This serves as an excellent example of exploring and expanding model capabilities.
113
+
110
114
  - **August 25, 2026** We have open-sourced [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI), enabling one-click private deployment of LoRA training services. Combined with the model quantization feature, you can train large models even with consumer-grade GPUs.
111
115
 
112
116
  - **August 19, 2026** We have released the model quantization feature. It provides a unified `QuantizeConfig` entry point supporting multiple quantization backends including bitsandbytes, torchao, and comfy-kitchen, with capabilities such as online quantization, loading pre-quantized weights, mixed quantization, saving quantized models, and quantization + LoRA training. For details, please refer to the [documentation](/docs/en/Pipeline_Usage/Quantization.md).
@@ -373,6 +377,7 @@ Quick start: experience popular and the latest models:
373
377
  Model overview:
374
378
 
375
379
  - Image generation
380
+ - SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
376
381
  - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
377
382
  - Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/)
378
383
  - Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/)
@@ -640,6 +645,11 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
640
645
 
641
646
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
642
647
  |-|-|-|-|-|-|-|-|
648
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT.py) |
649
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-Edit.py) |
650
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-LoRAs: 8-step](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-LoRAs) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | - | - | - | - |
651
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT.py) |
652
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT-Edit.py) |
643
653
  | MiniMax-Music3 | [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) | [code](/examples/minimax_music3/model_inference/MiniMax-Music3.py) | [code](/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py) | — | — | — | — |
644
654
  | MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) |
645
655
  | MiniMax-H3 | [MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py) |
@@ -658,6 +668,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
658
668
  | MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py) |
659
669
  | MiniMax-H3 | [lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py) | - | - | - | - |
660
670
  | MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py) | - | - |
671
+ | MiniMax-H3 | [PAI/MiniMax-H3-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/MiniMax-H3-Fun-Controlnet-Union) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Fun-Controlnet-Union.py) |
661
672
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py) |
662
673
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py) |
663
674
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py) | - | - | - | - |
@@ -764,6 +775,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
764
775
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) |
765
776
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - |
766
777
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) | [code](/examples/qwen_image/model_inference/Qwen-Image-i2L.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py) | - | - | - | - |
778
+ | Qwen-Video-Edit | [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) |
767
779
  | Wan | [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py) |
768
780
  | Wan | [Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py) |
769
781
  | Wan | [Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py) |
@@ -40,6 +40,10 @@ See also:
40
40
 
41
41
  > Currently, the development personnel of this project are limited, with most of the work handled by [Artiprocher](https://github.com/Artiprocher) and [mi804](https://github.com/mi804). Therefore, the progress of new feature development will be relatively slow, and the speed of responding to and resolving issues is limited. We apologize for this and ask developers to understand.
42
42
 
43
+ - **September 1, 2026** We have integrated [SenseNova-U1.5](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT), SenseTime's unified multimodal model, for which we provide text-to-image generation, image editing, low VRAM inference, and training support. For details, please refer to the [documentation](/docs/en/Model_Details/SenseNova-U1.md) and [example code](/examples/sensenova_u1/).
44
+
45
+ - **August 31, 2026** We have integrated [Qwen-Video-Edit](https://modelscope.cn/models/yunpeng1998/Qwen-Video-Edit), a video editing model developed by open-source community contributor [yunpeng1998](https://github.com/yunpeng1998) based on the image editing model Qwen-Image-Edit. This serves as an excellent example of exploring and expanding model capabilities.
46
+
43
47
  - **August 25, 2026** We have open-sourced [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI), enabling one-click private deployment of LoRA training services. Combined with the model quantization feature, you can train large models even with consumer-grade GPUs.
44
48
 
45
49
  - **August 19, 2026** We have released the model quantization feature. It provides a unified `QuantizeConfig` entry point supporting multiple quantization backends including bitsandbytes, torchao, and comfy-kitchen, with capabilities such as online quantization, loading pre-quantized weights, mixed quantization, saving quantized models, and quantization + LoRA training. For details, please refer to the [documentation](/docs/en/Pipeline_Usage/Quantization.md).
@@ -306,6 +310,7 @@ Quick start: experience popular and the latest models:
306
310
  Model overview:
307
311
 
308
312
  - Image generation
313
+ - SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
309
314
  - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
310
315
  - Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/)
311
316
  - Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/)
@@ -573,6 +578,11 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
573
578
 
574
579
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
575
580
  |-|-|-|-|-|-|-|-|
581
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT.py) |
582
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-Edit.py) |
583
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-LoRAs: 8-step](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-LoRAs) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | - | - | - | - |
584
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT.py) |
585
+ | SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT-Edit.py) |
576
586
  | MiniMax-Music3 | [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) | [code](/examples/minimax_music3/model_inference/MiniMax-Music3.py) | [code](/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py) | — | — | — | — |
577
587
  | MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) |
578
588
  | MiniMax-H3 | [MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py) |
@@ -591,6 +601,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
591
601
  | MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py) |
592
602
  | MiniMax-H3 | [lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py) | - | - | - | - |
593
603
  | MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py) | - | - |
604
+ | MiniMax-H3 | [PAI/MiniMax-H3-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/MiniMax-H3-Fun-Controlnet-Union) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Fun-Controlnet-Union.py) |
594
605
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py) |
595
606
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py) |
596
607
  | LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py) | - | - | - | - |
@@ -697,6 +708,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
697
708
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) |
698
709
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - |
699
710
  | Qwen-Image | [DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) | [code](/examples/qwen_image/model_inference/Qwen-Image-i2L.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py) | - | - | - | - |
711
+ | Qwen-Video-Edit | [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) |
700
712
  | Wan | [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py) |
701
713
  | Wan | [Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py) |
702
714
  | Wan | [Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py) |
@@ -80,6 +80,23 @@ qwen_image_series = [
80
80
  },
81
81
  ]
82
82
 
83
+ qwen_video_edit_series = [
84
+ {
85
+ # Example: ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors")
86
+ "model_hash": "8ae0ca4ab286d00197f08986c7fbbade",
87
+ "model_name": "qwen_video_edit_dit",
88
+ "model_class": "diffsynth.models.qwen_image_dit.QwenImageDiT",
89
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.qwen_video_edit.QwenVideoEditDiTStateDictConverter",
90
+ },
91
+ {
92
+ # Example: ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors")
93
+ "model_hash": "8ae0ca4ab286d00197f08986c7fbbade",
94
+ "model_name": "qwen_video_edit_adapter",
95
+ "model_class": "diffsynth.models.qwen_video_edit_dit.QwenVideoEditAdapter",
96
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.qwen_video_edit.QwenVideoEditAdapterStateDictConverter",
97
+ },
98
+ ]
99
+
83
100
  wan_series = [
84
101
  {
85
102
  # Example: ModelConfig(model_id="Wan-AI/Wan2.2-Animate-2-14B", origin_file_pattern="wan_animate_2/wan_animate_2_bf16.safetensors")
@@ -1509,6 +1526,14 @@ minimax_h3_series = [
1509
1526
  "quant_config": {"method": "bitsandbytes_nf4", "load_prequantized": True},
1510
1527
  "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_audio_vae.MiniMaxH3AudioVAEStateDictConverter"
1511
1528
  },
1529
+ {
1530
+ # Example: ModelConfig(model_id="PAI/MiniMax-H3-Fun-Controlnet-Union", origin_file_pattern="MiniMax-H3-Fun-Controlnet-Union.safetensors")
1531
+ "model_hash": "91179e6f6150c072cd8e5fa29f58576e",
1532
+ "model_name": "minimax_h3_controlnet",
1533
+ "model_class": "diffsynth.models.minimax_h3_controlnet.MiniMaxH3ControlNet",
1534
+ "extra_kwargs": {'control_layers': (0, 10, 20, 30, 40), 'control_in_dim': 49, 'control_apply_audio': False, 'hidden_size': 5376, 'num_attention_heads': 56, 'attention_head_dim': 128, 'ffn_hidden_size': 14336, 'time_embed_dim': 2688, 'adaln_out_features': 96768, 'patch_size': (1, 2, 2), 'norm_eps': 1e-05, 'qk_norm_eps': 1e-05},
1535
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_controlnet.MiniMaxH3ControlNetStateDictConverter"
1536
+ },
1512
1537
  ]
1513
1538
 
1514
1539
  minimax_music3_series = [
@@ -1545,8 +1570,17 @@ minimax_music3_series = [
1545
1570
  },
1546
1571
  ]
1547
1572
 
1573
+ sensenova_u1_series = [
1574
+ {
1575
+ # Example: ModelConfig(model_id="SenseNova/SenseNova-U1.5-8B-MoT", origin_file_pattern="model*.safetensors")
1576
+ "model_hash": "90bb0c235120a99ea78f9912471de82a",
1577
+ "model_name": "sensenova_u1_dit",
1578
+ "model_class": "diffsynth.models.sensenova_u1_dit.SenseNovaU1DiT",
1579
+ },
1580
+ ]
1581
+
1548
1582
  MODEL_CONFIGS = (
1549
- stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + wan_series + flux_series + flux2_series + ernie_image_series
1583
+ stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + qwen_video_edit_series + wan_series + flux_series + flux2_series + ernie_image_series
1550
1584
  + z_image_series + ltx2_series + anima_series + mova_series + joyai_image_series + boogu_image_series + ace_step_series + hidream_o1_image_series
1551
- + image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series
1585
+ + image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series + sensenova_u1_series
1552
1586
  )
@@ -62,6 +62,10 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
62
62
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
63
63
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
64
64
  },
65
+ "diffsynth.models.qwen_video_edit_dit.QwenVideoEditAdapter": {
66
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
67
+ "torch.nn.Conv3d": "diffsynth.core.vram.layers.AutoWrappedModule",
68
+ },
65
69
  "diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder": {
66
70
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
67
71
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
@@ -496,6 +500,18 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
496
500
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
497
501
  "transformers.models.qwen3.modeling_qwen3.Qwen3RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
498
502
  },
503
+ "diffsynth.models.minimax_h3_controlnet.MiniMaxH3ControlNet": {
504
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
505
+ "torch.nn.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
506
+ },
507
+ "diffsynth.models.sensenova_u1_dit.SenseNovaU1DiT": {
508
+ "diffsynth.models.sensenova_u1_dit.SenseNovaU1TimestepEmbedder": "diffsynth.core.vram.layers.AutoWrappedModule",
509
+ "diffsynth.models.sensenova_u1_dit.SenseNovaU1VisionEmbeddings": "diffsynth.core.vram.layers.AutoWrappedModule",
510
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
511
+ "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
512
+ "torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
513
+ "diffsynth.models.sensenova_u1_dit.SenseNovaU1RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
514
+ },
499
515
  }
500
516
 
501
517
  def QwenImageTextEncoder_Module_Map_Updater():
@@ -5,7 +5,7 @@ from typing_extensions import Literal
5
5
 
6
6
  class FlowMatchScheduler():
7
7
 
8
- def __init__(self, template: Literal["FLUX.1", "Wan", "Qwen-Image", "FLUX.2", "Z-Image", "LTX-2", "Qwen-Image-Lightning", "ERNIE-Image", "ACE-Step", "Ideogram4", "Krea-2", "Boogu", "MiniMax-H3", "MiniMax-Music3", "LingBot-Video"] = "FLUX.1"):
8
+ def __init__(self, template: Literal["FLUX.1", "Wan", "Qwen-Image", "FLUX.2", "Z-Image", "LTX-2", "Qwen-Image-Lightning", "ERNIE-Image", "ACE-Step", "Ideogram4", "Krea-2", "Boogu", "MiniMax-H3", "MiniMax-Music3", "LingBot-Video", "SenseNova-U1"] = "FLUX.1"):
9
9
  self.set_timesteps_fn = {
10
10
  "FLUX.1": FlowMatchScheduler.set_timesteps_flux,
11
11
  "Wan": FlowMatchScheduler.set_timesteps_wan,
@@ -23,6 +23,7 @@ class FlowMatchScheduler():
23
23
  "MiniMax-H3": FlowMatchScheduler.set_timesteps_minimax_h3,
24
24
  "MiniMax-Music3": FlowMatchScheduler.set_timesteps_minimax_music3,
25
25
  "LingBot-Video": FlowMatchScheduler.set_timesteps_lingbot_video,
26
+ "SenseNova-U1": FlowMatchScheduler.set_timesteps_sensenova_u1,
26
27
  }.get(template, FlowMatchScheduler.set_timesteps_flux)
27
28
  self.num_train_timesteps = 1000
28
29
 
@@ -173,6 +174,15 @@ class FlowMatchScheduler():
173
174
  timesteps = sigmas * num_train_timesteps
174
175
  return sigmas, timesteps
175
176
 
177
+ @staticmethod
178
+ def set_timesteps_sensenova_u1(num_inference_steps=50, denoising_strength=1.0, shift=3.0):
179
+ num_train_timesteps = 1000
180
+ sigmas = torch.linspace(denoising_strength, 0.0, num_inference_steps + 1)[:-1]
181
+ if shift is not None and shift != 1.0:
182
+ sigmas = shift * sigmas / (1 + (shift - 1) * sigmas)
183
+ timesteps = sigmas * num_train_timesteps
184
+ return sigmas, timesteps
185
+
176
186
  @staticmethod
177
187
  def set_timesteps_ace_step(num_inference_steps=8, denoising_strength=1.0, shift=3.0):
178
188
  num_train_timesteps = 1000
@@ -63,7 +63,7 @@ def FlowMatchSFTAudioVideoLoss(pipe: BasePipeline, **inputs):
63
63
  return loss
64
64
 
65
65
 
66
- def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, training_cfg_scale: float = 1.0, inputs_nega: dict | None = None, **inputs):
66
+ def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, training_cfg_scale: float = 1.0, audio_loss_weight: float = 1.0, inputs_nega: dict | None = None, **inputs):
67
67
  max_timestep_boundary = int(inputs.get("max_timestep_boundary", 1) * len(pipe.scheduler.timesteps))
68
68
  min_timestep_boundary = int(inputs.get("min_timestep_boundary", 0) * len(pipe.scheduler.timesteps))
69
69
 
@@ -113,7 +113,7 @@ def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, training_cfg_scale:
113
113
  loss = loss * pipe.scheduler.training_weight(timestep_video)
114
114
  if "audio_input_latents" in inputs:
115
115
  loss_audio = torch.nn.functional.mse_loss(noise_pred_audio.float(), training_target_audio.float())
116
- loss_audio = loss_audio * pipe.scheduler_audio.training_weight(timestep_audio)
116
+ loss_audio = loss_audio * pipe.scheduler_audio.training_weight(timestep_audio) * audio_loss_weight
117
117
  loss = loss + loss_audio
118
118
  return loss
119
119
 
@@ -0,0 +1,105 @@
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+ from ..core.gradient import gradient_checkpoint_forward
5
+ from .minimax_h3_dit import MiniMaxH3DiTBlock, _PATCH_H, _PATCH_T, _PATCH_W
6
+
7
+
8
+ class MiniMaxH3ControlNetBlock(MiniMaxH3DiTBlock):
9
+ def __init__(self, hidden_size, num_attention_heads, attention_head_dim, ffn_hidden_size, time_embed_dim, adaln_out_features, norm_eps, qk_norm_eps, block_id=0):
10
+ super().__init__(hidden_size, num_attention_heads, attention_head_dim, ffn_hidden_size, time_embed_dim, adaln_out_features, norm_eps, qk_norm_eps)
11
+ self.block_id = block_id
12
+ if block_id == 0:
13
+ self.before_proj = nn.Linear(hidden_size, hidden_size)
14
+ self.after_proj = nn.Linear(hidden_size, hidden_size)
15
+
16
+ def forward(self, c, x, *, t_emb, combined_indices, rope_freqs, cu_seqlens, max_seqlen):
17
+ if self.block_id == 0:
18
+ c = self.before_proj(c) + x
19
+ all_c = []
20
+ else:
21
+ all_c = list(torch.unbind(c))
22
+ c = all_c.pop(-1)
23
+ c = super().forward(c, t_emb=t_emb, combined_indices=combined_indices, rope_freqs=rope_freqs, cu_seqlens=cu_seqlens, max_seqlen=max_seqlen)
24
+ c_skip = self.after_proj(c)
25
+ all_c += [c_skip, c]
26
+ return torch.stack(all_c)
27
+
28
+
29
+ class MiniMaxH3ControlNet(nn.Module):
30
+ _repeated_blocks = ["MiniMaxH3ControlNetBlock"]
31
+
32
+ def __init__(
33
+ self,
34
+ control_layers: tuple = (0, 10, 20, 30, 40),
35
+ control_in_dim: int = 49,
36
+ control_apply_audio: bool = False,
37
+ hidden_size: int = 5376,
38
+ num_attention_heads: int = 56,
39
+ attention_head_dim: int = 128,
40
+ ffn_hidden_size: int = 14336,
41
+ time_embed_dim: int = 2688,
42
+ adaln_out_features: int = 96768,
43
+ patch_size: tuple = (1, 2, 2),
44
+ norm_eps: float = 1e-5,
45
+ qk_norm_eps: float = 1e-5,
46
+ **kwargs,
47
+ ):
48
+ super().__init__()
49
+ self.control_layers = tuple(sorted({int(i) for i in control_layers}))
50
+ if not self.control_layers or self.control_layers[0] != 0:
51
+ raise ValueError(f"control_layers must start at layer 0 so the control stream is re-based on the main branch's input embeddings, got {self.control_layers}")
52
+ self.control_in_dim = control_in_dim
53
+ self.control_apply_audio = control_apply_audio
54
+ self.control_layers_mapping = {i: n for n, i in enumerate(self.control_layers)}
55
+ self.blocks = nn.ModuleList([
56
+ MiniMaxH3ControlNetBlock(hidden_size, num_attention_heads, attention_head_dim, ffn_hidden_size, time_embed_dim, adaln_out_features, norm_eps, qk_norm_eps, block_id=n)
57
+ for n in range(len(self.control_layers))
58
+ ])
59
+ control_patch_dim = control_in_dim * patch_size[0] * patch_size[1] * patch_size[2]
60
+ self.control_patch_proj = nn.Linear(control_patch_dim, hidden_size, bias=True)
61
+
62
+ def patch_columns(self):
63
+ return self.control_in_dim * _PATCH_T * _PATCH_H * _PATCH_W
64
+
65
+ def forward(
66
+ self,
67
+ embeddings,
68
+ control_rows,
69
+ img_pos,
70
+ audio_pos,
71
+ *,
72
+ t_emb,
73
+ combined_indices,
74
+ rope_freqs,
75
+ cu_seqlens,
76
+ max_seqlen,
77
+ use_gradient_checkpointing=False,
78
+ use_gradient_checkpointing_offload=False,
79
+ ):
80
+ expected = self.patch_columns()
81
+ if control_rows.shape[-1] != expected:
82
+ raise ValueError(f"control_rows carry {control_rows.shape[-1]} columns but control_in_dim={self.control_in_dim} expects {expected}")
83
+ if control_rows.shape[0] != img_pos.shape[0]:
84
+ raise ValueError(f"control_rows hold {control_rows.shape[0]} rows but the packed sequence has {img_pos.shape[0]} video rows; one control row per video row is required, in the same order")
85
+ control_embeds = self.control_patch_proj(control_rows.to(self.control_patch_proj.weight.dtype))
86
+ c = embeddings.index_copy(0, img_pos, control_embeds.to(embeddings.dtype))
87
+ for block in self.blocks:
88
+ c = gradient_checkpoint_forward(
89
+ block,
90
+ use_gradient_checkpointing,
91
+ use_gradient_checkpointing_offload,
92
+ c,
93
+ embeddings,
94
+ t_emb=t_emb,
95
+ combined_indices=combined_indices,
96
+ rope_freqs=rope_freqs,
97
+ cu_seqlens=cu_seqlens,
98
+ max_seqlen=max_seqlen,
99
+ )
100
+ hints = torch.unbind(c)[:-1]
101
+ if not self.control_apply_audio and audio_pos.numel():
102
+ keep = torch.ones(embeddings.shape[0], dtype=hints[0].dtype, device=hints[0].device)
103
+ keep[audio_pos] = 0
104
+ hints = tuple(hint * keep.unsqueeze(-1) for hint in hints)
105
+ return hints
@@ -336,6 +336,7 @@ class MiniMaxH3DiT(nn.Module):
336
336
  use_gradient_checkpointing_offload=False,
337
337
  update_audio_mask=None,
338
338
  skip_mask_out_condition=False,
339
+ control_hints=None,
339
340
  ) -> tuple[torch.Tensor, torch.Tensor]:
340
341
  inverse_indices = inverse_indices.view(-1).to(torch.long)
341
342
  token_tags = token_tags.view(-1).to(torch.long)
@@ -371,7 +372,7 @@ class MiniMaxH3DiT(nn.Module):
371
372
 
372
373
  hidden = decoder_input
373
374
  cu_seqlens = cu_seqlens.to(device)
374
- for block in self.blocks:
375
+ for block_id, block in enumerate(self.blocks):
375
376
  hidden = gradient_checkpoint_forward(
376
377
  block,
377
378
  use_gradient_checkpointing,
@@ -383,6 +384,8 @@ class MiniMaxH3DiT(nn.Module):
383
384
  cu_seqlens=cu_seqlens,
384
385
  max_seqlen=max_seqlen,
385
386
  )
387
+ if control_hints is not None and block_id in control_hints:
388
+ hidden = hidden + control_hints[block_id].to(hidden.device, hidden.dtype)
386
389
 
387
390
  video_logits, audio_logits = self.final_layer(hidden, t_emb=t_emb, inverse_indices=inverse_indices)
388
391
 
@@ -0,0 +1,89 @@
1
+ import torch, torch.nn as nn
2
+ from einops import rearrange
3
+
4
+ from .qwen_image_dit import QwenEmbedRope
5
+
6
+
7
+ class QwenVideoEditRope(QwenEmbedRope):
8
+ """Grid-aware RoPE for Qwen-Video-Edit"""
9
+
10
+ def _expand_pos_freqs_if_needed(self, video_fhw, txt_seq_lens):
11
+ if isinstance(video_fhw, list) and video_fhw and isinstance(video_fhw[0], dict):
12
+ video_fhw = (max(x["frame"] + 1 for x in video_fhw),
13
+ max(x["full_height"] for x in video_fhw),
14
+ max(x["full_width"] for x in video_fhw))
15
+ super()._expand_pos_freqs_if_needed(video_fhw, txt_seq_lens)
16
+
17
+ def forward(self, video_fhw, txt_seq_lens, device):
18
+ if not video_fhw or not isinstance(video_fhw[0], dict):
19
+ return super().forward(video_fhw, txt_seq_lens, device)
20
+ self._expand_pos_freqs_if_needed(video_fhw, txt_seq_lens)
21
+ if self.pos_freqs.device != device:
22
+ self.pos_freqs = self.pos_freqs.to(device)
23
+ self.neg_freqs = self.neg_freqs.to(device)
24
+ freqs_pos = self.pos_freqs.split([x // 2 for x in self.axes_dim], dim=1)
25
+ freqs_neg = self.neg_freqs.split([x // 2 for x in self.axes_dim], dim=1)
26
+ values = []
27
+ max_index = 0
28
+ for item in video_fhw:
29
+ frame, h, w = item["frame"], item["height"], item["width"]
30
+ full_h, full_w = item["full_height"], item["full_width"]
31
+ key = "grid_" + "_".join(str(item[x]) for x in
32
+ ("frame", "height", "width", "h_off", "w_off", "full_height", "full_width"))
33
+ if key not in self.rope_cache:
34
+ axis_h = freqs_pos[1][:full_h]
35
+ axis_w = freqs_pos[2][:full_w]
36
+ if self.scale_rope:
37
+ axis_h = torch.cat([freqs_neg[1][-(full_h - full_h // 2):], freqs_pos[1][:full_h // 2]])
38
+ axis_w = torch.cat([freqs_neg[2][-(full_w - full_w // 2):], freqs_pos[2][:full_w // 2]])
39
+ frame_freq = freqs_pos[0][frame:frame + 1].view(1, 1, 1, -1).expand(1, h, w, -1)
40
+ height_freq = axis_h[item["h_off"]:item["h_off"] + h].view(1, h, 1, -1).expand(1, h, w, -1)
41
+ width_freq = axis_w[item["w_off"]:item["w_off"] + w].view(1, 1, w, -1).expand(1, h, w, -1)
42
+ self.rope_cache[key] = torch.cat([frame_freq, height_freq, width_freq], dim=-1).reshape(h * w, -1).contiguous()
43
+ values.append(self.rope_cache[key])
44
+ if self.scale_rope:
45
+ max_index = max(full_h // 2, full_w // 2, max_index)
46
+ else:
47
+ max_index = max(full_h, full_w, max_index)
48
+ return torch.cat(values, dim=0), self.pos_freqs[max_index:max_index + max(txt_seq_lens)]
49
+
50
+
51
+ class WanToQwenProjection(nn.Module):
52
+ def __init__(self, in_channels=16, inner_dim=3072):
53
+ super().__init__()
54
+ self.group = 1
55
+ self.proj = nn.Conv3d(in_channels, inner_dim, (1, 2, 2), stride=(1, 2, 2))
56
+
57
+ @torch.no_grad()
58
+ def init_from_qwen_dit(self, dit):
59
+ self.proj.weight.copy_(dit.img_in.weight.view(self.proj.out_channels, self.proj.in_channels, 2, 2).unsqueeze(2))
60
+ self.proj.bias.copy_(dit.img_in.bias)
61
+
62
+ def forward(self, x):
63
+ return rearrange(self.proj(x), "B D T H W -> B (T H W) D")
64
+
65
+
66
+ class QwenToWanProjection(nn.Module):
67
+ def __init__(self, out_channels=16, inner_dim=3072):
68
+ super().__init__()
69
+ self.group = 1
70
+ self.proj = nn.Linear(inner_dim, out_channels * 4)
71
+
72
+ @torch.no_grad()
73
+ def init_from_qwen_dit(self, dit):
74
+ self.proj.load_state_dict(dit.proj_out.state_dict())
75
+
76
+ def forward(self, x, num_frames, tokens_h, tokens_w):
77
+ return rearrange(self.proj(x), "B (T H W) (C P Q) -> B C T (H P) (W Q)", T=num_frames, H=tokens_h, W=tokens_w, P=2, Q=2)
78
+
79
+
80
+ class QwenVideoEditAdapter(nn.Module):
81
+ def __init__(self, inner_dim=3072, in_channels=16, out_channels=16):
82
+ super().__init__()
83
+ self.in_proj = WanToQwenProjection(in_channels=in_channels, inner_dim=inner_dim)
84
+ self.out_proj = QwenToWanProjection(out_channels=out_channels, inner_dim=inner_dim)
85
+
86
+ @torch.no_grad()
87
+ def init_from_qwen_dit(self, dit):
88
+ self.in_proj.init_from_qwen_dit(dit)
89
+ self.out_proj.init_from_qwen_dit(dit)