diffsynth 2.1.5__tar.gz → 2.1.7__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 (284) hide show
  1. {diffsynth-2.1.5 → diffsynth-2.1.7}/PKG-INFO +17 -1
  2. {diffsynth-2.1.5 → diffsynth-2.1.7}/README.md +14 -0
  3. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/configs/model_configs.py +50 -3
  4. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/configs/vram_management_module_maps.py +39 -2
  5. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/data/operators.py +45 -0
  6. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/flow_match.py +12 -1
  7. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/loss.py +2 -2
  8. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/runner.py +22 -0
  9. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/template.py +4 -3
  10. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_conditioner.py +6 -0
  11. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_vae.py +7 -7
  12. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/demucs.py +3 -1
  13. diffsynth-2.1.7/diffsynth/models/diffsynth_music_dit.py +237 -0
  14. diffsynth-2.1.7/diffsynth/models/minimax_h3_controlnet.py +105 -0
  15. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_h3_dit.py +4 -1
  16. diffsynth-2.1.7/diffsynth/models/qwen_video_edit_dit.py +89 -0
  17. diffsynth-2.1.7/diffsynth/models/sensenova_u1_common.py +229 -0
  18. diffsynth-2.1.7/diffsynth/models/sensenova_u1_dit.py +897 -0
  19. diffsynth-2.1.7/diffsynth/pipelines/diffsynth_music.py +353 -0
  20. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/minimax_h3_audio_video.py +144 -1
  21. diffsynth-2.1.7/diffsynth/pipelines/qwen_video_edit.py +356 -0
  22. diffsynth-2.1.7/diffsynth/pipelines/sensenova_u1_image.py +318 -0
  23. diffsynth-2.1.7/diffsynth/utils/controlnet/annotator.py +71 -0
  24. diffsynth-2.1.7/diffsynth/utils/music_tools/__init__.py +2 -0
  25. diffsynth-2.1.7/diffsynth/utils/music_tools/click.py +17 -0
  26. diffsynth-2.1.7/diffsynth/utils/music_tools/prosody.py +60 -0
  27. diffsynth-2.1.7/diffsynth/utils/state_dict_converters/minimax_h3_controlnet.py +75 -0
  28. diffsynth-2.1.7/diffsynth/utils/state_dict_converters/qwen_video_edit.py +6 -0
  29. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/version.py +1 -1
  30. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth.egg-info/PKG-INFO +17 -1
  31. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth.egg-info/SOURCES.txt +13 -0
  32. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth.egg-info/requires.txt +3 -0
  33. {diffsynth-2.1.5 → diffsynth-2.1.7}/pyproject.toml +3 -0
  34. diffsynth-2.1.5/diffsynth/utils/controlnet/annotator.py +0 -63
  35. {diffsynth-2.1.5 → diffsynth-2.1.7}/LICENSE +0 -0
  36. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/__init__.py +0 -0
  37. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/configs/__init__.py +0 -0
  38. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/__init__.py +0 -0
  39. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/attention/__init__.py +0 -0
  40. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/attention/attention.py +0 -0
  41. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/data/__init__.py +0 -0
  42. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/data/unified_dataset.py +0 -0
  43. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/device/__init__.py +0 -0
  44. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/device/npu_compatible_device.py +0 -0
  45. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/gradient/__init__.py +0 -0
  46. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/gradient/gradient_checkpoint.py +0 -0
  47. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/loader/__init__.py +0 -0
  48. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/loader/config.py +0 -0
  49. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/loader/file.py +0 -0
  50. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/loader/model.py +0 -0
  51. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/npu_patch/npu_fused_operator.py +0 -0
  52. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/offload_training/__init__.py +0 -0
  53. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/offload_training/manager.py +0 -0
  54. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/offload_training/memory_buffer.py +0 -0
  55. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/offload_training/offloader.py +0 -0
  56. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/__init__.py +0 -0
  57. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/backends/__init__.py +0 -0
  58. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/backends/bitsandbytes.py +0 -0
  59. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/backends/comfy_kitchen.py +0 -0
  60. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/backends/torchao.py +0 -0
  61. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/base.py +0 -0
  62. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/quant/config.py +0 -0
  63. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/vram/__init__.py +0 -0
  64. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/vram/disk_map.py +0 -0
  65. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/vram/initialization.py +0 -0
  66. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/core/vram/layers.py +0 -0
  67. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/__init__.py +0 -0
  68. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/base_pipeline.py +0 -0
  69. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/ddim_scheduler.py +0 -0
  70. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/dmd2.py +0 -0
  71. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/logger.py +0 -0
  72. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/parsers.py +0 -0
  73. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/diffusion/training_module.py +0 -0
  74. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/__init__.py +0 -0
  75. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/aesthetic.py +0 -0
  76. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/base.py +0 -0
  77. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/bioclip.py +0 -0
  78. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/clip.py +0 -0
  79. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/fid.py +0 -0
  80. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/hpsv2.py +0 -0
  81. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/hpsv3.py +0 -0
  82. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/image_reward.py +0 -0
  83. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/lpips.py +0 -0
  84. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/pickscore.py +0 -0
  85. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/qwen_image_bench.py +0 -0
  86. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/unified_reward_2.py +0 -0
  87. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/metrics/unified_reward_edit.py +0 -0
  88. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_dit.py +0 -0
  89. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_residual_fsq.py +0 -0
  90. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_text_encoder.py +0 -0
  91. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ace_step_tokenizer.py +0 -0
  92. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/aesthetic.py +0 -0
  93. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/anima_dit.py +0 -0
  94. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/bioclip.py +0 -0
  95. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/boogu_image_dit.py +0 -0
  96. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/clip.py +0 -0
  97. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/dinov3_image_encoder.py +0 -0
  98. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ernie_image_dit.py +0 -0
  99. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ernie_image_text_encoder.py +0 -0
  100. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/fid.py +0 -0
  101. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux2_dit.py +0 -0
  102. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux2_text_encoder.py +0 -0
  103. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux2_vae.py +0 -0
  104. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_controlnet.py +0 -0
  105. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_dit.py +0 -0
  106. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_infiniteyou.py +0 -0
  107. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_ipadapter.py +0 -0
  108. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_lora_encoder.py +0 -0
  109. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_lora_patcher.py +0 -0
  110. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_redux.py +0 -0
  111. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_text_encoder_clip.py +0 -0
  112. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_text_encoder_t5.py +0 -0
  113. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_vae.py +0 -0
  114. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/flux_value_control.py +0 -0
  115. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/general_modules.py +0 -0
  116. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/hidream_common.py +0 -0
  117. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/hidream_o1_image_dit.py +0 -0
  118. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/hpsv2.py +0 -0
  119. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/hpsv3.py +0 -0
  120. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ideogram4_dit.py +0 -0
  121. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ideogram4_text_encoder.py +0 -0
  122. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ideogram4_vae.py +0 -0
  123. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/image_reward.py +0 -0
  124. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/joyai_image_dit.py +0 -0
  125. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/joyai_image_text_encoder.py +0 -0
  126. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/krea2_dit.py +0 -0
  127. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/krea2_text_encoder.py +0 -0
  128. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/lingbot_video_dit.py +0 -0
  129. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/longcat_video_dit.py +0 -0
  130. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/lpips.py +0 -0
  131. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_audio_vae.py +0 -0
  132. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_common.py +0 -0
  133. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_dit.py +0 -0
  134. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_text_encoder.py +0 -0
  135. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_upsampler.py +0 -0
  136. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/ltx2_video_vae.py +0 -0
  137. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_h3_audio_vae.py +0 -0
  138. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_h3_dit_comfy.py +0 -0
  139. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_h3_text_encoder.py +0 -0
  140. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_h3_video_vae.py +0 -0
  141. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_music3_condition_encoder.py +0 -0
  142. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_music3_dit.py +0 -0
  143. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_music3_rvq_depth_decoder.py +0 -0
  144. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_music3_text_encoder.py +0 -0
  145. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/minimax_music3_vocoder.py +0 -0
  146. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/model_loader.py +0 -0
  147. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/mova_audio_dit.py +0 -0
  148. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/mova_audio_vae.py +0 -0
  149. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/mova_dual_tower_bridge.py +0 -0
  150. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/nexus_gen.py +0 -0
  151. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/nexus_gen_ar_model.py +0 -0
  152. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/nexus_gen_projector.py +0 -0
  153. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/pickscore.py +0 -0
  154. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_bench.py +0 -0
  155. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_controlnet.py +0 -0
  156. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_dit.py +0 -0
  157. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_image2lora.py +0 -0
  158. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_text_encoder.py +0 -0
  159. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/qwen_image_vae.py +0 -0
  160. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/sd_text_encoder.py +0 -0
  161. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/siglip2_image_encoder.py +0 -0
  162. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/stable_diffusion_text_encoder.py +0 -0
  163. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/stable_diffusion_unet.py +0 -0
  164. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/stable_diffusion_vae.py +0 -0
  165. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/stable_diffusion_xl_text_encoder.py +0 -0
  166. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/stable_diffusion_xl_unet.py +0 -0
  167. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/step1x_connector.py +0 -0
  168. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/step1x_text_encoder.py +0 -0
  169. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/unified_reward_2.py +0 -0
  170. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/unified_reward_edit.py +0 -0
  171. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_animate_2_dit.py +0 -0
  172. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_animate_adapter.py +0 -0
  173. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_camera_controller.py +0 -0
  174. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_dit.py +0 -0
  175. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_dit_s2v.py +0 -0
  176. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_image_encoder.py +0 -0
  177. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_mot.py +0 -0
  178. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_motion_controller.py +0 -0
  179. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_text_encoder.py +0 -0
  180. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_vace.py +0 -0
  181. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wan_video_vae.py +0 -0
  182. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wantodance.py +0 -0
  183. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/wav2vec.py +0 -0
  184. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/z_image_controlnet.py +0 -0
  185. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/z_image_dit.py +0 -0
  186. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/z_image_image2lora.py +0 -0
  187. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/models/z_image_text_encoder.py +0 -0
  188. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/ace_step.py +0 -0
  189. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/anima_image.py +0 -0
  190. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/boogu_image.py +0 -0
  191. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/ernie_image.py +0 -0
  192. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/flux2_image.py +0 -0
  193. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/flux_image.py +0 -0
  194. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/hidream_o1_image.py +0 -0
  195. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/ideogram4.py +0 -0
  196. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/joyai_image.py +0 -0
  197. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/krea2.py +0 -0
  198. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/lingbot_video.py +0 -0
  199. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/ltx2_audio_video.py +0 -0
  200. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/minimax_music3.py +0 -0
  201. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/mova_audio_video.py +0 -0
  202. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/qwen_image.py +0 -0
  203. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/stable_diffusion.py +0 -0
  204. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/stable_diffusion_xl.py +0 -0
  205. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/wan_video.py +0 -0
  206. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/pipelines/z_image.py +0 -0
  207. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/controlnet/__init__.py +0 -0
  208. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/controlnet/controlnet_input.py +0 -0
  209. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/data/__init__.py +0 -0
  210. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/data/audio.py +0 -0
  211. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/data/audio_video.py +0 -0
  212. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/data/media_io_ltx2.py +0 -0
  213. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/data/minimax_h3.py +0 -0
  214. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/demucs/__init__.py +0 -0
  215. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/dequantizer/__init__.py +0 -0
  216. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/__init__.py +0 -0
  217. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/flux.py +0 -0
  218. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/flux_timestep.py +0 -0
  219. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/general.py +0 -0
  220. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/krea2.py +0 -0
  221. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/merge.py +0 -0
  222. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/minimax_h3.py +0 -0
  223. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/reset_rank.py +0 -0
  224. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/lora/sdxl.py +0 -0
  225. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/quant/serialization.py +0 -0
  226. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/ses/__init__.py +0 -0
  227. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/ses/ses.py +0 -0
  228. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/__init__.py +0 -0
  229. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ace_step_conditioner.py +0 -0
  230. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ace_step_dit.py +0 -0
  231. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ace_step_text_encoder.py +0 -0
  232. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ace_step_tokenizer.py +0 -0
  233. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/anima_dit.py +0 -0
  234. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/dino_v3.py +0 -0
  235. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ernie_image_text_encoder.py +0 -0
  236. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux2_text_encoder.py +0 -0
  237. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_controlnet.py +0 -0
  238. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_dit.py +0 -0
  239. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_infiniteyou.py +0 -0
  240. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_ipadapter.py +0 -0
  241. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_text_encoder_clip.py +0 -0
  242. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_text_encoder_t5.py +0 -0
  243. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/flux_vae.py +0 -0
  244. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ideogram4_text_encoder.py +0 -0
  245. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/image_metrics.py +0 -0
  246. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/joyai_image_text_encoder.py +0 -0
  247. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/krea2_dit.py +0 -0
  248. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/krea2_text_encoder.py +0 -0
  249. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/lingbot_video_dit.py +0 -0
  250. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ltx2_audio_vae.py +0 -0
  251. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ltx2_dit.py +0 -0
  252. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ltx2_text_encoder.py +0 -0
  253. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/ltx2_video_vae.py +0 -0
  254. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/minimax_h3_audio_vae.py +0 -0
  255. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/minimax_h3_text_encoder.py +0 -0
  256. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/minimax_h3_video_vae.py +0 -0
  257. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/minimax_music3_text_encoder.py +0 -0
  258. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/nexus_gen.py +0 -0
  259. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/nexus_gen_projector.py +0 -0
  260. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/qwen_image_text_encoder.py +0 -0
  261. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/sdxl.py +0 -0
  262. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/sdxl_text_encoder.py +0 -0
  263. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py +0 -0
  264. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/sdxl_vae.py +0 -0
  265. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py +0 -0
  266. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py +0 -0
  267. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py +0 -0
  268. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/step1x_connector.py +0 -0
  269. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py +0 -0
  270. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_dit.py +0 -0
  271. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py +0 -0
  272. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_mot.py +0 -0
  273. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_vace.py +0 -0
  274. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wan_video_vae.py +0 -0
  275. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py +0 -0
  276. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/z_image_dit.py +0 -0
  277. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/state_dict_converters/z_image_text_encoder.py +0 -0
  278. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/tile/__init__.py +0 -0
  279. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/tile/tile_worker.py +0 -0
  280. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/xfuser/__init__.py +0 -0
  281. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth/utils/xfuser/xdit_context_parallel.py +0 -0
  282. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth.egg-info/dependency_links.txt +0 -0
  283. {diffsynth-2.1.5 → diffsynth-2.1.7}/diffsynth.egg-info/top_level.txt +0 -0
  284. {diffsynth-2.1.5 → diffsynth-2.1.7}/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.7
4
4
  Summary: Enjoy the magic of Diffusion models!
5
5
  Author: ModelScope Team
6
6
  License-Expression: Apache-2.0
@@ -43,6 +43,8 @@ Provides-Extra: npu-aarch64
43
43
  Requires-Dist: torch==2.7.1; extra == "npu-aarch64"
44
44
  Requires-Dist: torch-npu==2.7.1; extra == "npu-aarch64"
45
45
  Requires-Dist: torchvision==0.22.1; extra == "npu-aarch64"
46
+ Provides-Extra: controlnet
47
+ Requires-Dist: controlnet_aux; extra == "controlnet"
46
48
  Provides-Extra: infiniteyou
47
49
  Requires-Dist: insightface; extra == "infiniteyou"
48
50
  Requires-Dist: facexlib; extra == "infiniteyou"
@@ -107,6 +109,10 @@ See also:
107
109
 
108
110
  > 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
111
 
112
+ - **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/).
113
+
114
+ - **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.
115
+
110
116
  - **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
117
 
112
118
  - **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 +379,7 @@ Quick start: experience popular and the latest models:
373
379
  Model overview:
374
380
 
375
381
  - Image generation
382
+ - SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
376
383
  - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
377
384
  - Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/)
378
385
  - Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/)
@@ -392,6 +399,7 @@ Model overview:
392
399
  - LTX-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/LTX-2.html), [Example code](/examples/ltx2/)
393
400
  - Wan: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Wan.html), [Example code](/examples/wanvideo/)
394
401
  - Audio generation
402
+ - DiffSynth-Music: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/DiffSynth-Music.html), [Example code](/examples/diffsynth_music/)
395
403
  - MiniMax-Music3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MiniMax-Music3.html), [Example code](/examples/minimax_music3/)
396
404
  - ACE-Step: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/ACE-Step.html), [Example code](/examples/ace_step/)
397
405
  - Evaluation models: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Image-Quality-Metrics.html), [Example code](/examples/image_quality_metric/)
@@ -640,7 +648,13 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
640
648
 
641
649
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
642
650
  |-|-|-|-|-|-|-|-|
651
+ | 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) |
652
+ | 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) |
653
+ | 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) | - | - | - | - |
654
+ | 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) |
655
+ | 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
656
  | 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) | — | — | — | — |
657
+ | DiffSynth-Music | [DiffSynth-Studio/DiffSynth-Music](https://www.modelscope.cn/models/DiffSynth-Studio/DiffSynth-Music) | [code](/examples/diffsynth_music/model_inference/DiffSynth-Music.py) | [code](/examples/diffsynth_music/model_inference_low_vram/DiffSynth-Music.py) | [code](/examples/diffsynth_music/model_training/full/DiffSynth-Music.sh) | [code](/examples/diffsynth_music/model_training/validate_full/DiffSynth-Music.py) | - | - |
644
658
  | 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
659
  | 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) |
646
660
  | MiniMax-H3 | [MiniMax/MiniMax-H3: Retake](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Retake.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Retake.py) | - | - | - | - |
@@ -658,6 +672,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
658
672
  | 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
673
  | 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
674
  | 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) | - | - |
675
+ | 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
676
  | 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
677
  | 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
678
  | 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 +779,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
764
779
  | 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
780
  | 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
781
  | 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) | - | - | - | - |
782
+ | 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
783
  | 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
784
  | 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
785
  | 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/)
@@ -325,6 +330,7 @@ Model overview:
325
330
  - LTX-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/LTX-2.html), [Example code](/examples/ltx2/)
326
331
  - Wan: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Wan.html), [Example code](/examples/wanvideo/)
327
332
  - Audio generation
333
+ - DiffSynth-Music: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/DiffSynth-Music.html), [Example code](/examples/diffsynth_music/)
328
334
  - MiniMax-Music3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MiniMax-Music3.html), [Example code](/examples/minimax_music3/)
329
335
  - ACE-Step: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/ACE-Step.html), [Example code](/examples/ace_step/)
330
336
  - Evaluation models: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Image-Quality-Metrics.html), [Example code](/examples/image_quality_metric/)
@@ -573,7 +579,13 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
573
579
 
574
580
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
575
581
  |-|-|-|-|-|-|-|-|
582
+ | 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) |
583
+ | 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) |
584
+ | 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) | - | - | - | - |
585
+ | 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) |
586
+ | 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
587
  | 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) | — | — | — | — |
588
+ | DiffSynth-Music | [DiffSynth-Studio/DiffSynth-Music](https://www.modelscope.cn/models/DiffSynth-Studio/DiffSynth-Music) | [code](/examples/diffsynth_music/model_inference/DiffSynth-Music.py) | [code](/examples/diffsynth_music/model_inference_low_vram/DiffSynth-Music.py) | [code](/examples/diffsynth_music/model_training/full/DiffSynth-Music.sh) | [code](/examples/diffsynth_music/model_training/validate_full/DiffSynth-Music.py) | - | - |
577
589
  | 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
590
  | 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) |
579
591
  | MiniMax-H3 | [MiniMax/MiniMax-H3: Retake](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Retake.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Retake.py) | - | - | - | - |
@@ -591,6 +603,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
591
603
  | 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
604
  | 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
605
  | 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) | - | - |
606
+ | 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
607
  | 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
608
  | 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
609
  | 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 +710,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
697
710
  | 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
711
  | 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
712
  | 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) | - | - | - | - |
713
+ | 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
714
  | 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
715
  | 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
716
  | 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")
@@ -1185,11 +1202,24 @@ ace_step_series = [
1185
1202
  "state_dict_converter": "diffsynth.utils.state_dict_converters.ace_step_tokenizer.AceStepTokenizerStateDictConverter",
1186
1203
  },
1187
1204
  {
1188
- # Example: ???
1205
+ # Example: ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music-Tools", origin_file_pattern="track_separator/model.safetensors")
1189
1206
  "model_hash": "ff74b1806e6a0b52e7bbd1d3df2d26d1",
1190
1207
  "model_name": "demucs",
1191
1208
  "model_class": "diffsynth.models.demucs.HTDemucs",
1192
1209
  },
1210
+ {
1211
+ # Example: ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music-Tools", origin_file_pattern="transformer/model.safetensors")
1212
+ "model_hash": "167b8d453605e3d72076f88790528f8e",
1213
+ "model_name": "diffsynth_music_dit",
1214
+ "model_class": "diffsynth.models.diffsynth_music_dit.DiffSynthMusicDiTModel",
1215
+ },
1216
+ {
1217
+ # Example: ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music-Tools", origin_file_pattern="conditioner/model.safetensors")
1218
+ "model_hash": "d6c90aec3f282bde16298e0221413098",
1219
+ "model_name": "ace_step_conditioner",
1220
+ "model_class": "diffsynth.models.ace_step_conditioner.AceStepConditionEncoder",
1221
+ "extra_kwargs": {"placeholder_shape": (1, 15000, 64)},
1222
+ },
1193
1223
  ]
1194
1224
 
1195
1225
  image_metrics_series = [
@@ -1509,6 +1539,14 @@ minimax_h3_series = [
1509
1539
  "quant_config": {"method": "bitsandbytes_nf4", "load_prequantized": True},
1510
1540
  "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_audio_vae.MiniMaxH3AudioVAEStateDictConverter"
1511
1541
  },
1542
+ {
1543
+ # Example: ModelConfig(model_id="PAI/MiniMax-H3-Fun-Controlnet-Union", origin_file_pattern="MiniMax-H3-Fun-Controlnet-Union.safetensors")
1544
+ "model_hash": "91179e6f6150c072cd8e5fa29f58576e",
1545
+ "model_name": "minimax_h3_controlnet",
1546
+ "model_class": "diffsynth.models.minimax_h3_controlnet.MiniMaxH3ControlNet",
1547
+ "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},
1548
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_controlnet.MiniMaxH3ControlNetStateDictConverter"
1549
+ },
1512
1550
  ]
1513
1551
 
1514
1552
  minimax_music3_series = [
@@ -1545,8 +1583,17 @@ minimax_music3_series = [
1545
1583
  },
1546
1584
  ]
1547
1585
 
1586
+ sensenova_u1_series = [
1587
+ {
1588
+ # Example: ModelConfig(model_id="SenseNova/SenseNova-U1.5-8B-MoT", origin_file_pattern="model*.safetensors")
1589
+ "model_hash": "90bb0c235120a99ea78f9912471de82a",
1590
+ "model_name": "sensenova_u1_dit",
1591
+ "model_class": "diffsynth.models.sensenova_u1_dit.SenseNovaU1DiT",
1592
+ },
1593
+ ]
1594
+
1548
1595
  MODEL_CONFIGS = (
1549
- stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + wan_series + flux_series + flux2_series + ernie_image_series
1596
+ stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + qwen_video_edit_series + wan_series + flux_series + flux2_series + ernie_image_series
1550
1597
  + 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
1598
+ + image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series + sensenova_u1_series
1552
1599
  )
@@ -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",
@@ -76,7 +80,7 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
76
80
  "torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
77
81
  "diffsynth.models.qwen_image_vae.QwenImageRMS_norm": "diffsynth.core.vram.layers.AutoWrappedModule",
78
82
  },
79
- "diffsynth.models.qwen_image_controlnet.BlockWiseControlBlock": {
83
+ "diffsynth.models.qwen_image_controlnet.QwenImageBlockWiseControlNet": {
80
84
  "diffsynth.models.qwen_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
81
85
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
82
86
  },
@@ -335,7 +339,7 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
335
339
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
336
340
  "transformers.models.ministral3.modeling_ministral3.Ministral3RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
337
341
  },
338
- "diffsynth.models.joyai_image_dit.Transformer3DModel": {
342
+ "diffsynth.models.joyai_image_dit.JoyAIImageDiT": {
339
343
  "diffsynth.models.joyai_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
340
344
  "diffsynth.models.joyai_image_dit.ModulateWan": "diffsynth.core.vram.layers.AutoWrappedModule",
341
345
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
@@ -496,6 +500,39 @@ 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
+ },
515
+ "diffsynth.models.diffsynth_music_dit.DiffSynthMusicDiTModel": {
516
+ "diffsynth.models.diffsynth_music_dit.DiffSynthMusicDiTLayer": "diffsynth.core.vram.layers.AutoWrappedNonRecurseModule",
517
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
518
+ "torch.nn.Conv1d": "diffsynth.core.vram.layers.AutoWrappedModule",
519
+ "torch.nn.ConvTranspose1d": "diffsynth.core.vram.layers.AutoWrappedModule",
520
+ "torch.nn.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
521
+ "transformers.models.qwen3.modeling_qwen3.Qwen3RotaryEmbedding": "diffsynth.core.vram.layers.AutoWrappedModule",
522
+ },
523
+ "diffsynth.models.demucs.HTDemucs": {
524
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
525
+ "torch.nn.Conv1d": "diffsynth.core.vram.layers.AutoWrappedModule",
526
+ "torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
527
+ "torch.nn.ConvTranspose1d": "diffsynth.core.vram.layers.AutoWrappedModule",
528
+ "torch.nn.ConvTranspose2d": "diffsynth.core.vram.layers.AutoWrappedModule",
529
+ "torch.nn.GroupNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
530
+ "torch.nn.LayerNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
531
+ "torch.nn.TransformerEncoderLayer": "diffsynth.core.vram.layers.AutoWrappedModule",
532
+ "diffsynth.models.demucs.ScaledEmbedding": "diffsynth.core.vram.layers.AutoWrappedModule",
533
+ "diffsynth.models.demucs.LayerScale": "diffsynth.core.vram.layers.AutoWrappedModule",
534
+ "torch.nn.MultiheadAttention": "diffsynth.core.vram.layers.AutoWrappedModule",
535
+ },
499
536
  }
500
537
 
501
538
  def QwenImageTextEncoder_Module_Map_Updater():
@@ -339,3 +339,48 @@ class LoadPureAudioWithTorchaudio(DataProcessingOperator):
339
339
  except Exception as e:
340
340
  print(f"Cannot load audio in {data} due to {e}. The audio will be `None`.")
341
341
  return None
342
+
343
+
344
+ class LoadMultiTrackAudio(DataProcessingOperator):
345
+ def __init__(self, target_sample_rate=48000, max_audio_duration=None, division_factor=1):
346
+ self.target_sample_rate = target_sample_rate
347
+ self.max_audio_duration = max_audio_duration
348
+ self.division_factor = division_factor
349
+ import torchaudio
350
+ self.audio_loader = torchaudio.load
351
+ self.audio_resampler = torchaudio.functional.resample
352
+
353
+ def load_audio(self, path):
354
+ waveform, sample_rate = self.audio_loader(path)
355
+ if len(waveform.shape) == 2 and waveform.shape[0] == 1:
356
+ waveform = repeat(waveform, "c l -> (n c) l", n=2)
357
+ if self.target_sample_rate is not None and sample_rate != self.target_sample_rate:
358
+ waveform = self.audio_resampler(waveform, sample_rate, self.target_sample_rate)
359
+ sample_rate = self.target_sample_rate
360
+ if self.max_audio_duration is not None and waveform.shape[1] > sample_rate * self.max_audio_duration:
361
+ waveform = waveform[:, :int(sample_rate * self.max_audio_duration)]
362
+ return waveform
363
+
364
+ def load_latents(self, path):
365
+ latents = torch.load(path, weights_only=True, map_location="cpu")
366
+ return latents
367
+
368
+ def load_single_data(self, path):
369
+ if path is None:
370
+ return None
371
+ elif path.endswith(".pth"):
372
+ return self.load_latents(path)
373
+ else:
374
+ return self.load_audio(path)
375
+
376
+ def __call__(self, data):
377
+ if isinstance(data, str):
378
+ return self.load_single_data(data)
379
+ else:
380
+ audio = {}
381
+ for name, path in data.items():
382
+ audio[name] = self.load_single_data(path)
383
+ min_length = min([audio[name].shape[1] for name in audio if audio[name] is not None])
384
+ min_length = min_length // self.division_factor * self.division_factor
385
+ audio = {name: audio[name][:, :min_length] for name in audio}
386
+ return audio
@@ -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
@@ -198,6 +208,7 @@ class FlowMatchScheduler():
198
208
  for timestep in target_timesteps:
199
209
  timestep_id = torch.argmin((timesteps - timestep).abs())
200
210
  timesteps[timestep_id] = timestep
211
+ sigmas[timestep_id] = timestep / num_train_timesteps
201
212
  return sigmas, timesteps
202
213
 
203
214
  @staticmethod
@@ -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
 
@@ -30,6 +30,26 @@ def save_training_args(args):
30
30
  print(f"Warning: failed to save training arguments: {e}")
31
31
 
32
32
 
33
+ def exclude_quantized_params_from_ddp_sync(accelerator: Accelerator, model: DiffusionTrainingModule):
34
+ """DDP broadcasts every parameter when it is constructed, but a quantized weight backed by a
35
+ tensor subclass cannot be flattened into a broadcast bucket. Such weights are frozen and every
36
+ rank loads them from the same checkpoint, so let DDP skip them."""
37
+ try:
38
+ from torch.utils._python_dispatch import is_traceable_wrapper_subclass
39
+ quant_configs = [module.quantize_config for module in model.modules() if getattr(module, "quantize_config", None) is not None]
40
+ ignored = [
41
+ f"{name}.weight" for name, module in model.named_modules()
42
+ if any(quantize.is_quantized_linear(module) for quantize in quant_configs)
43
+ and not module.weight.requires_grad and is_traceable_wrapper_subclass(module.weight)
44
+ ]
45
+ if len(ignored) > 0:
46
+ model._ddp_params_and_buffers_to_ignore = ignored
47
+ if accelerator.is_main_process:
48
+ print(f"{len(ignored)} quantized weights are excluded from DDP state synchronization.")
49
+ except Exception as e:
50
+ print(f"Warning: failed to exclude quantized weights from DDP state synchronization: {e}")
51
+
52
+
33
53
  def launch_training_task(
34
54
  accelerator: Accelerator,
35
55
  dataset: torch.utils.data.Dataset,
@@ -72,6 +92,7 @@ def launch_training_task(
72
92
  offload_manager = OffloadTrainingManager(model, accelerator.device, enable_optimizer_cpu_offload, cpu_offload_split_threshold)
73
93
  else:
74
94
  model.to(device=accelerator.device)
95
+ exclude_quantized_params_from_ddp_sync(accelerator, model)
75
96
  model, optimizer, dataloader, scheduler = accelerator.prepare(model, optimizer, dataloader, scheduler)
76
97
 
77
98
  initialize_deepspeed_gradient_checkpointing(accelerator)
@@ -117,6 +138,7 @@ def launch_data_process_task(
117
138
  model.pipe.device = accelerator.device
118
139
  else:
119
140
  model.to(device=accelerator.device)
141
+ exclude_quantized_params_from_ddp_sync(accelerator, model)
120
142
  model, dataloader = accelerator.prepare(model, dataloader)
121
143
 
122
144
  for data_id, data in enumerate(tqdm(dataloader)):
@@ -31,7 +31,7 @@ def check_template_model_format(model):
31
31
  raise NotImplementedError("`**kwargs` is not included in `forward`.")
32
32
 
33
33
 
34
- def load_template_model(path, torch_dtype=torch.bfloat16, device="cuda", verbose=1):
34
+ def load_template_model(path, torch_dtype=torch.bfloat16, device="cuda", verbose=1, state_dict=None):
35
35
  spec = importlib.util.spec_from_file_location("template_model", os.path.join(path, "model.py"))
36
36
  module = importlib.util.module_from_spec(spec)
37
37
  spec.loader.exec_module(module)
@@ -44,6 +44,7 @@ def load_template_model(path, torch_dtype=torch.bfloat16, device="cuda", verbose
44
44
  path=os.path.join(path, getattr(module, 'TEMPLATE_MODEL_PATH')),
45
45
  torch_dtype=torch_dtype,
46
46
  device=device,
47
+ state_dict=state_dict,
47
48
  )
48
49
  else:
49
50
  # Without `TEMPLATE_MODEL_PATH`, a randomly initialized model or a non-model module will be loaded.
@@ -97,7 +98,7 @@ class TemplatePipeline(torch.nn.Module):
97
98
  for model_config in model_configs:
98
99
  TemplatePipeline.check_vram_config(model_config)
99
100
  model_config.download_if_necessary()
100
- model = load_template_model(model_config.path, torch_dtype=torch_dtype, device=device)
101
+ model = load_template_model(model_config.path, torch_dtype=torch_dtype, device=device, state_dict=model_config.state_dict)
101
102
  models.append(model)
102
103
  self.models = torch.nn.ModuleList(models)
103
104
 
@@ -164,7 +165,7 @@ class TemplatePipeline(torch.nn.Module):
164
165
  if self.lazy_loading:
165
166
  model_config = self.model_configs[model_id]
166
167
  model_config.download_if_necessary()
167
- model = load_template_model(model_config.path, torch_dtype=self.torch_dtype, device=self.device)
168
+ model = load_template_model(model_config.path, torch_dtype=self.torch_dtype, device=self.device, state_dict=model_config.state_dict)
168
169
  else:
169
170
  model = self.models[model_id]
170
171
  return model
@@ -585,6 +585,7 @@ class AceStepConditionEncoder(nn.Module):
585
585
  timbre_hidden_dim: int = 64,
586
586
  num_lyric_encoder_hidden_layers: int = 8,
587
587
  num_timbre_encoder_hidden_layers: int = 4,
588
+ placeholder_shape=None,
588
589
  **kwargs,
589
590
  ):
590
591
  super().__init__()
@@ -648,6 +649,8 @@ class AceStepConditionEncoder(nn.Module):
648
649
  timbre_hidden_dim=timbre_hidden_dim,
649
650
  num_timbre_encoder_hidden_layers=num_timbre_encoder_hidden_layers,
650
651
  )
652
+ if placeholder_shape is not None:
653
+ self.placeholder_audio = torch.nn.Parameter(torch.zeros(placeholder_shape))
651
654
 
652
655
  def forward(
653
656
  self,
@@ -658,6 +661,9 @@ class AceStepConditionEncoder(nn.Module):
658
661
  reference_latents: Optional[torch.Tensor] = None,
659
662
  refer_audio_order_mask: Optional[torch.LongTensor] = None,
660
663
  ):
664
+ if reference_latents is None:
665
+ reference_latents = self.placeholder_audio[:, :750, :].to(device=text_hidden_states.device, dtype=text_hidden_states.dtype)
666
+ refer_audio_order_mask = torch.tensor([0], device=text_hidden_states.device, dtype=torch.long)
661
667
  text_hidden_states = self.text_projector(text_hidden_states)
662
668
  lyric_encoder_outputs = self.lyric_encoder(
663
669
  inputs_embeds=lyric_hidden_states,
@@ -196,13 +196,13 @@ class OobleckDiagonalGaussianDistribution(object):
196
196
 
197
197
  def sample(self, generator: torch.Generator | None = None) -> torch.Tensor:
198
198
  # make sure sample is on the same device as the parameters and has same dtype
199
- sample = torch.randn(
200
- self.mean.shape,
201
- generator=generator,
202
- device=self.parameters.device,
203
- dtype=self.parameters.dtype,
204
- )
205
- x = self.mean + self.std * sample
199
+ # sample = torch.randn(
200
+ # self.mean.shape,
201
+ # generator=generator,
202
+ # device=self.parameters.device,
203
+ # dtype=self.parameters.dtype,
204
+ # )
205
+ x = self.mean
206
206
  return x
207
207
 
208
208
  def kl(self, other: "OobleckDiagonalGaussianDistribution" = None) -> torch.Tensor:
@@ -400,7 +400,9 @@ class HTDemucs(nn.Module):
400
400
  out = out * (ref.std() + 1e-8) + ref.mean()
401
401
  out = out / max(1.01 * out.abs().max(), 1)
402
402
  out = out.clamp_(-1, 1).cpu()
403
- out = out[self.sources.index(track)]
403
+ if not isinstance(track, list):
404
+ track = [track]
405
+ out = sum([out[self.sources.index(t)] for t in track], 0)
404
406
  return out
405
407
 
406
408
  def center_trim(tensor, length):