diffsynth 2.1.9__tar.gz → 2.1.10__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 (309) hide show
  1. {diffsynth-2.1.9 → diffsynth-2.1.10}/PKG-INFO +36 -3
  2. {diffsynth-2.1.9 → diffsynth-2.1.10}/README.md +34 -1
  3. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/configs/model_configs.py +101 -1
  4. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/configs/vram_management_module_maps.py +25 -0
  5. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/data/unified_dataset.py +1 -1
  6. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/gradient/gradient_checkpoint.py +10 -3
  7. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/backends/entropack.py +10 -3
  8. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/vram/layers.py +4 -0
  9. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/flow_match.py +29 -1
  10. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/parsers.py +1 -1
  11. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/training_module.py +21 -0
  12. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux2_dit.py +2 -0
  13. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux2_vae.py +2 -1
  14. diffsynth-2.1.10/diffsynth/models/flux3_dit.py +241 -0
  15. diffsynth-2.1.10/diffsynth/models/minimax_h3_dit_vdn.py +822 -0
  16. diffsynth-2.1.10/diffsynth/models/minimax_h3_dit_vdn_fp8.py +196 -0
  17. diffsynth-2.1.10/diffsynth/models/moss_image_dit.py +234 -0
  18. diffsynth-2.1.10/diffsynth/models/moss_image_text_encoder.py +88 -0
  19. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_21_dit.py +53 -5
  20. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_21_text_encoder.py +13 -9
  21. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_vae.py +54 -2
  22. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_dit.py +0 -1
  23. diffsynth-2.1.10/diffsynth/pipelines/flux3_image.py +376 -0
  24. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/joyai_image.py +3 -3
  25. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/minimax_h3_audio_video.py +13 -2
  26. diffsynth-2.1.10/diffsynth/pipelines/moss_image.py +224 -0
  27. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/qwen_image_21.py +7 -2
  28. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/wan_video.py +3 -2
  29. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/minimax_h3.py +93 -1
  30. diffsynth-2.1.10/diffsynth/utils/state_dict_converters/flux3_dit.py +33 -0
  31. diffsynth-2.1.10/diffsynth/utils/state_dict_converters/minimax_h3_dit_vdn.py +8 -0
  32. diffsynth-2.1.10/diffsynth/utils/state_dict_converters/moss_image_text_encoder.py +7 -0
  33. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/version.py +1 -1
  34. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth.egg-info/PKG-INFO +36 -3
  35. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth.egg-info/SOURCES.txt +10 -0
  36. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth.egg-info/requires.txt +1 -1
  37. {diffsynth-2.1.9 → diffsynth-2.1.10}/pyproject.toml +19 -1
  38. {diffsynth-2.1.9 → diffsynth-2.1.10}/LICENSE +0 -0
  39. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/__init__.py +0 -0
  40. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/configs/__init__.py +0 -0
  41. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/__init__.py +0 -0
  42. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/attention/__init__.py +0 -0
  43. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/attention/attention.py +0 -0
  44. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/data/__init__.py +0 -0
  45. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/data/operators.py +0 -0
  46. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/device/__init__.py +0 -0
  47. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/device/npu_compatible_device.py +0 -0
  48. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/gradient/__init__.py +0 -0
  49. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/loader/__init__.py +0 -0
  50. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/loader/config.py +0 -0
  51. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/loader/file.py +0 -0
  52. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/loader/model.py +0 -0
  53. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/npu_patch/npu_fused_operator.py +0 -0
  54. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/offload_training/__init__.py +0 -0
  55. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/offload_training/manager.py +0 -0
  56. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/offload_training/memory_buffer.py +0 -0
  57. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/offload_training/offloader.py +0 -0
  58. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/__init__.py +0 -0
  59. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/backends/__init__.py +0 -0
  60. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/backends/bitsandbytes.py +0 -0
  61. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/backends/comfy_kitchen.py +0 -0
  62. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/backends/torchao.py +0 -0
  63. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/base.py +0 -0
  64. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/quant/config.py +0 -0
  65. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/vram/__init__.py +0 -0
  66. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/vram/disk_map.py +0 -0
  67. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/core/vram/initialization.py +0 -0
  68. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/__init__.py +0 -0
  69. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/base_pipeline.py +0 -0
  70. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/ddim_scheduler.py +0 -0
  71. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/dmd2.py +0 -0
  72. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/logger.py +0 -0
  73. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/loss.py +0 -0
  74. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/runner.py +0 -0
  75. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/diffusion/template.py +0 -0
  76. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/__init__.py +0 -0
  77. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/aesthetic.py +0 -0
  78. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/base.py +0 -0
  79. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/bioclip.py +0 -0
  80. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/clip.py +0 -0
  81. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/fid.py +0 -0
  82. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/hpsv2.py +0 -0
  83. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/hpsv3.py +0 -0
  84. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/image_reward.py +0 -0
  85. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/lpips.py +0 -0
  86. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/pickscore.py +0 -0
  87. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/qwen_image_bench.py +0 -0
  88. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/unified_reward_2.py +0 -0
  89. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/metrics/unified_reward_edit.py +0 -0
  90. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_conditioner.py +0 -0
  91. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_dit.py +0 -0
  92. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_residual_fsq.py +0 -0
  93. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_text_encoder.py +0 -0
  94. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_tokenizer.py +0 -0
  95. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ace_step_vae.py +0 -0
  96. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/aesthetic.py +0 -0
  97. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/anima_dit.py +0 -0
  98. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/bioclip.py +0 -0
  99. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/boogu_image_dit.py +0 -0
  100. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/clip.py +0 -0
  101. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/demucs.py +0 -0
  102. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/diffsynth_music_dit.py +0 -0
  103. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/dinov3_image_encoder.py +0 -0
  104. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ernie_image_dit.py +0 -0
  105. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ernie_image_text_encoder.py +0 -0
  106. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/fid.py +0 -0
  107. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux2_text_encoder.py +0 -0
  108. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_controlnet.py +0 -0
  109. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_dit.py +0 -0
  110. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_infiniteyou.py +0 -0
  111. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_ipadapter.py +0 -0
  112. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_lora_encoder.py +0 -0
  113. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_lora_patcher.py +0 -0
  114. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_redux.py +0 -0
  115. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_text_encoder_clip.py +0 -0
  116. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_text_encoder_t5.py +0 -0
  117. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_vae.py +0 -0
  118. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/flux_value_control.py +0 -0
  119. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/general_modules.py +0 -0
  120. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/hidream_common.py +0 -0
  121. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/hidream_o1_image_dit.py +0 -0
  122. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/hpsv2.py +0 -0
  123. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/hpsv3.py +0 -0
  124. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ideogram4_dit.py +0 -0
  125. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ideogram4_text_encoder.py +0 -0
  126. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ideogram4_vae.py +0 -0
  127. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/image_reward.py +0 -0
  128. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/joyai_image_dit.py +0 -0
  129. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/krea2_dit.py +0 -0
  130. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/krea2_text_encoder.py +0 -0
  131. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/lingbot_video_dit.py +0 -0
  132. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/longcat_video_dit.py +0 -0
  133. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/lpips.py +0 -0
  134. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx25_diffusion_video_vae.py +0 -0
  135. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx25_duration_head.py +0 -0
  136. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx25_text_encoder.py +0 -0
  137. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_audio_vae.py +0 -0
  138. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_common.py +0 -0
  139. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_dit.py +0 -0
  140. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_text_encoder.py +0 -0
  141. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_upsampler.py +0 -0
  142. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/ltx2_video_vae.py +0 -0
  143. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_audio_vae.py +0 -0
  144. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_controlnet.py +0 -0
  145. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_dit.py +0 -0
  146. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_dit_comfy.py +0 -0
  147. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_text_encoder.py +0 -0
  148. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_h3_video_vae.py +0 -0
  149. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_music3_condition_encoder.py +0 -0
  150. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_music3_dit.py +0 -0
  151. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_music3_rvq_depth_decoder.py +0 -0
  152. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_music3_text_encoder.py +0 -0
  153. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/minimax_music3_vocoder.py +0 -0
  154. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/model_loader.py +0 -0
  155. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/mova_audio_dit.py +0 -0
  156. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/mova_audio_vae.py +0 -0
  157. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/mova_dual_tower_bridge.py +0 -0
  158. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/nexus_gen.py +0 -0
  159. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/nexus_gen_ar_model.py +0 -0
  160. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/nexus_gen_projector.py +0 -0
  161. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/pickscore.py +0 -0
  162. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_21_controlnet.py +0 -0
  163. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_21_vae.py +0 -0
  164. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_bench.py +0 -0
  165. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_controlnet.py +0 -0
  166. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_dit.py +0 -0
  167. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_image2lora.py +0 -0
  168. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_image_text_encoder.py +0 -0
  169. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/qwen_video_edit_dit.py +0 -0
  170. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/sd_text_encoder.py +0 -0
  171. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/sensenova_u1_common.py +0 -0
  172. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/sensenova_u1_dit.py +0 -0
  173. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/siglip2_image_encoder.py +0 -0
  174. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/stable_diffusion_text_encoder.py +0 -0
  175. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/stable_diffusion_unet.py +0 -0
  176. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/stable_diffusion_vae.py +0 -0
  177. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/stable_diffusion_xl_text_encoder.py +0 -0
  178. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/stable_diffusion_xl_unet.py +0 -0
  179. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/step1x_connector.py +0 -0
  180. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/step1x_text_encoder.py +0 -0
  181. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/unified_reward_2.py +0 -0
  182. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/unified_reward_edit.py +0 -0
  183. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_animate_2_dit.py +0 -0
  184. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_animate_adapter.py +0 -0
  185. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_camera_controller.py +0 -0
  186. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_dit_s2v.py +0 -0
  187. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_image_encoder.py +0 -0
  188. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_mot.py +0 -0
  189. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_motion_controller.py +0 -0
  190. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_text_encoder.py +0 -0
  191. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_vace.py +0 -0
  192. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wan_video_vae.py +0 -0
  193. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wantodance.py +0 -0
  194. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/wav2vec.py +0 -0
  195. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/yue2_mot.py +0 -0
  196. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/yue2_tokenizer.py +0 -0
  197. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/yue2_vae.py +0 -0
  198. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/z_image_controlnet.py +0 -0
  199. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/z_image_dit.py +0 -0
  200. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/z_image_image2lora.py +0 -0
  201. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/models/z_image_text_encoder.py +0 -0
  202. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/ace_step.py +0 -0
  203. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/anima_image.py +0 -0
  204. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/boogu_image.py +0 -0
  205. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/diffsynth_music.py +0 -0
  206. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/ernie_image.py +0 -0
  207. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/flux2_image.py +0 -0
  208. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/flux_image.py +0 -0
  209. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/hidream_o1_image.py +0 -0
  210. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/ideogram4.py +0 -0
  211. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/krea2.py +0 -0
  212. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/lingbot_video.py +0 -0
  213. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/ltx2_audio_video.py +0 -0
  214. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/minimax_music3.py +0 -0
  215. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/mova_audio_video.py +0 -0
  216. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/qwen_image.py +0 -0
  217. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/qwen_video_edit.py +0 -0
  218. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/sensenova_u1_image.py +0 -0
  219. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/stable_diffusion.py +0 -0
  220. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/stable_diffusion_xl.py +0 -0
  221. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/yue2.py +0 -0
  222. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/pipelines/z_image.py +0 -0
  223. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/controlnet/__init__.py +0 -0
  224. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/controlnet/annotator.py +0 -0
  225. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/controlnet/controlnet_input.py +0 -0
  226. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/data/__init__.py +0 -0
  227. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/data/audio.py +0 -0
  228. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/data/audio_video.py +0 -0
  229. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/data/media_io_ltx2.py +0 -0
  230. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/data/minimax_h3.py +0 -0
  231. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/demucs/__init__.py +0 -0
  232. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/dequantizer/__init__.py +0 -0
  233. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/__init__.py +0 -0
  234. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/flux.py +0 -0
  235. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/flux_timestep.py +0 -0
  236. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/general.py +0 -0
  237. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/krea2.py +0 -0
  238. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/merge.py +0 -0
  239. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/reset_rank.py +0 -0
  240. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/lora/sdxl.py +0 -0
  241. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/music_tools/__init__.py +0 -0
  242. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/music_tools/click.py +0 -0
  243. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/music_tools/prosody.py +0 -0
  244. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/quant/serialization.py +0 -0
  245. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/ses/__init__.py +0 -0
  246. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/ses/ses.py +0 -0
  247. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/__init__.py +0 -0
  248. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ace_step_conditioner.py +0 -0
  249. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ace_step_dit.py +0 -0
  250. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ace_step_text_encoder.py +0 -0
  251. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ace_step_tokenizer.py +0 -0
  252. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/anima_dit.py +0 -0
  253. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/dino_v3.py +0 -0
  254. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ernie_image_text_encoder.py +0 -0
  255. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux2_text_encoder.py +0 -0
  256. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_controlnet.py +0 -0
  257. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_dit.py +0 -0
  258. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_infiniteyou.py +0 -0
  259. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_ipadapter.py +0 -0
  260. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_text_encoder_clip.py +0 -0
  261. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_text_encoder_t5.py +0 -0
  262. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/flux_vae.py +0 -0
  263. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ideogram4_text_encoder.py +0 -0
  264. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/image_metrics.py +0 -0
  265. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/krea2_dit.py +0 -0
  266. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/krea2_text_encoder.py +0 -0
  267. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/lingbot_video_dit.py +0 -0
  268. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx25_diffusion_video_vae.py +0 -0
  269. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx25_duration_head.py +0 -0
  270. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx25_text_encoder.py +0 -0
  271. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx2_audio_vae.py +0 -0
  272. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx2_dit.py +0 -0
  273. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx2_text_encoder.py +0 -0
  274. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/ltx2_video_vae.py +0 -0
  275. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_h3_audio_vae.py +0 -0
  276. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_h3_controlnet.py +0 -0
  277. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_h3_dit.py +0 -0
  278. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_h3_text_encoder.py +0 -0
  279. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_h3_video_vae.py +0 -0
  280. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/minimax_music3_text_encoder.py +0 -0
  281. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/nexus_gen.py +0 -0
  282. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/nexus_gen_projector.py +0 -0
  283. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/qwen_image_21_text_encoder.py +0 -0
  284. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/qwen_image_text_encoder.py +0 -0
  285. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/qwen_video_edit.py +0 -0
  286. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/sdxl.py +0 -0
  287. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/sdxl_text_encoder.py +0 -0
  288. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py +0 -0
  289. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/sdxl_vae.py +0 -0
  290. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py +0 -0
  291. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py +0 -0
  292. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py +0 -0
  293. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/step1x_connector.py +0 -0
  294. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py +0 -0
  295. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_dit.py +0 -0
  296. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py +0 -0
  297. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_mot.py +0 -0
  298. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_vace.py +0 -0
  299. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wan_video_vae.py +0 -0
  300. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py +0 -0
  301. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/z_image_dit.py +0 -0
  302. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/state_dict_converters/z_image_text_encoder.py +0 -0
  303. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/tile/__init__.py +0 -0
  304. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/tile/tile_worker.py +0 -0
  305. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/xfuser/__init__.py +0 -0
  306. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth/utils/xfuser/xdit_context_parallel.py +0 -0
  307. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth.egg-info/dependency_links.txt +0 -0
  308. {diffsynth-2.1.9 → diffsynth-2.1.10}/diffsynth.egg-info/top_level.txt +0 -0
  309. {diffsynth-2.1.9 → diffsynth-2.1.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth
3
- Version: 2.1.9
3
+ Version: 2.1.10
4
4
  Summary: Enjoy the magic of Diffusion models!
5
5
  Author: ModelScope Team
6
6
  License-Expression: Apache-2.0
@@ -50,7 +50,7 @@ Provides-Extra: infiniteyou
50
50
  Requires-Dist: insightface; extra == "infiniteyou"
51
51
  Requires-Dist: facexlib; extra == "infiniteyou"
52
52
  Provides-Extra: ses
53
- Requires-Dist: pywt; extra == "ses"
53
+ Requires-Dist: PyWavelets; extra == "ses"
54
54
  Provides-Extra: nexusgen
55
55
  Requires-Dist: qwen_vl_utils; extra == "nexusgen"
56
56
  Requires-Dist: transformers==4.49.0; extra == "nexusgen"
@@ -114,6 +114,12 @@ See also:
114
114
 
115
115
  > 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.
116
116
 
117
+ - **October 20, 2026** We now support MOSS-Image, including inference and training for [MOSS-Image-Base](https://modelscope.cn/models/openmoss/MOSS-Image-Base) and [MOSS-Image-SFT](https://modelscope.cn/models/openmoss/MOSS-Image-SFT). In addition, we provide an [EntroPack low-bit quantized model](https://www.modelscope.cn/models/DiffSynth-Studio/MOSS-Image-EntroPack), which can run the 3.5-bit quantized model with as little as 4 GB of VRAM; and an [accelerated model](https://modelscope.cn/models/DiffSynth-Studio/MOSS-Image-SFT-TurboLoRA) distillation-accelerated via [OPD training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Training/Distillation.html), supporting 8-step ultra-fast inference.
118
+
119
+ - **October 16, 2026** flux-3-image-klein open-sourced, welcome a new member to the image model family! Support includes text-to-image generation, multi-reference editing, layout control, low VRAM inference, and Base training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/FLUX.3.md) and [example code](/examples/flux3/). We quantized the model with [EntroPack](https://github.com/modelscope/entropack), providing pre-quantized models in 3-bit, 4-bit, and 6-bit versions at [DiffSynth-Studio/flux-3-image-klein-entropack](https://www.modelscope.cn/models/DiffSynth-Studio/flux-3-image-klein-entropack).
120
+
121
+ - **October 12, 2026** We now support distillation accelerated training based on OPD (On-Policy Distillation), which enables distillation acceleration of models at an extremely low cost. For details, please refer to [Distillation Accelerated Training](/docs/en/Training/Distillation.md).
122
+
117
123
  - **September 29, 2026** We are excited to open-source EntroPack, a general-purpose tensor compression library for PyTorch that provides lossless compression with exact recovery and rate-controlled lossy compression, with GPU encoding and decoding. It is integrated into DiffSynth-Studio as a quantization backend, compressing model weights at arbitrary target bitrates in both inference and LoRA training. For more information, please refer to:
118
124
 
119
125
  * Project Page: https://github.com/modelscope/entropack
@@ -408,6 +414,8 @@ Quick start: experience popular and the latest models:
408
414
  Model overview:
409
415
 
410
416
  - Image generation
417
+ - MOSS-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MOSS-Image.html), [Example code](/examples/moss_image/)
418
+ - FLUX.3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/FLUX.3.html), [Example code](/examples/flux3/)
411
419
  - Qwen-Image-2.1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Qwen-Image-2.1.html), [Example code](/examples/qwen_image_21/)
412
420
  - SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
413
421
  - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
@@ -441,6 +449,21 @@ Model overview:
441
449
 
442
450
  We believe that a well-developed open-source code framework can lower the threshold for technical exploration. We have achieved many interesting technologies based on this codebase. Perhaps you also have many wild ideas, and with DiffSynth-Studio, you can quickly realize these ideas.
443
451
 
452
+ <details>
453
+
454
+ <summary>EntroPack: A General-Purpose Tensor Compression Library for PyTorch</summary>
455
+
456
+ > Compress model weights at arbitrary target bitrates with GPU encoding and decoding, and run the compressed weights directly in inference and LoRA training.
457
+
458
+ * Project Page: [GitHub](https://github.com/modelscope/entropack)
459
+ * Technical Report: https://arxiv.org/abs/2609.34185
460
+ * Pre-quantized Models: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/EntroPackPreQuants)
461
+ * Documentation: [English Version](/docs/en/Pipeline_Usage/Quantization.md) | [Chinese Version](/docs/zh/Pipeline_Usage/Quantization.md)
462
+ * Example Code: [Z-Image-Turbo](/examples/z_image/model_inference_low_vram/Z-Image-Turbo-EntroPack.py), [Qwen-Image-2.1](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-EntroPack.py), [MiniMax-H3](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-EntroPack.py), [LoRA Training Example](/examples/z_image/model_training/special/quant_training/Z-Image-Turbo-entropack_lossy_quant.sh)
463
+
464
+ </details>
465
+
466
+
444
467
  <details>
445
468
 
446
469
  <summary>TreeAdapter: A Model System Built from Structured LoRAs</summary>
@@ -679,6 +702,12 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
679
702
 
680
703
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
681
704
  |-|-|-|-|-|-|-|-|
705
+ | MOSS-Image | [openmoss/MOSS-Image-Base](https://www.modelscope.cn/models/openmoss/MOSS-Image-Base) | [code](/examples/moss_image/model_inference/MOSS-Image-Base.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-Base.py) | [code](/examples/moss_image/model_training/full/MOSS-Image-Base.sh) | [code](/examples/moss_image/model_training/validate_full/MOSS-Image-Base.py) | [code](/examples/moss_image/model_training/lora/MOSS-Image-Base.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-Base.py) |
706
+ | MOSS-Image | [openmoss/MOSS-Image-SFT](https://www.modelscope.cn/models/openmoss/MOSS-Image-SFT) | [code](/examples/moss_image/model_inference/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_training/full/MOSS-Image-SFT.sh) | [code](/examples/moss_image/model_training/validate_full/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_training/lora/MOSS-Image-SFT.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-SFT.py) |
707
+ | MOSS-Image | [DiffSynth-Studio/MOSS-Image-EntroPack](https://www.modelscope.cn/models/DiffSynth-Studio/MOSS-Image-EntroPack) | [code](/examples/moss_image/model_inference/MOSS-Image-EntroPack.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-EntroPack.py) | - | - | [code](/examples/moss_image/model_training/lora/MOSS-Image-entropack.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-entropack.py) |
708
+ | FLUX.3 | [black-forest-labs/flux-3-image-klein](https://www.modelscope.cn/models/black-forest-labs/flux-3-image-klein) | [code](/examples/flux3/model_inference/flux-3-image-klein.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein.py) | [code](/examples/flux3/model_training/full/flux-3-image-klein.sh) | [code](/examples/flux3/model_training/validate_full/flux-3-image-klein.py) | [code](/examples/flux3/model_training/lora/flux-3-image-klein.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein.py) |
709
+ | FLUX.3 | [black-forest-labs/flux-3-image-klein-base](https://www.modelscope.cn/models/black-forest-labs/flux-3-image-klein-base) | [code](/examples/flux3/model_inference/flux-3-image-klein-base.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein-base.py) | [code](/examples/flux3/model_training/full/flux-3-image-klein-base.sh) | [code](/examples/flux3/model_training/validate_full/flux-3-image-klein-base.py) | [code](/examples/flux3/model_training/lora/flux-3-image-klein-base.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein-base.py) |
710
+ | FLUX.3 | [DiffSynth-Studio/flux-3-image-klein-entropack](https://www.modelscope.cn/models/DiffSynth-Studio/flux-3-image-klein-entropack) | [code](/examples/flux3/model_inference/flux-3-image-klein-EntroPack.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein-EntroPack.py) | - | - | [code](/examples/flux3/model_training/lora/flux-3-image-klein-entropack.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein-entropack.py) |
682
711
  | Qwen-Image-2.1 | [Qwen/Qwen-Image-2.1](https://www.modelscope.cn/models/Qwen/Qwen-Image-2.1) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1.py) |
683
712
  | Qwen-Image-2.1 | [Qwen/Qwen-Image-2.1-Turbo](https://www.modelscope.cn/models/Qwen/Qwen-Image-2.1-Turbo) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1-Turbo.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1-Turbo.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1-Turbo.py) |
684
713
  | Qwen-Image-2.1 | [PAI/Qwen-Image-2.1-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/Qwen-Image-2.1-Fun-Controlnet-Union) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1-Fun-Controlnet-Union.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1-Fun-Controlnet-Union.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1-Fun-Controlnet-Union.py) |
@@ -708,6 +737,10 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
708
737
  | 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) | - | - | - | - |
709
738
  | 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) | - | - |
710
739
  | 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) |
740
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 50 steps](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-VDN-FL2VA.py) | - | - | - | - |
741
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 8 steps](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-Turbo-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-VDN-Turbo-FL2VA.py) | - | - | - | - |
742
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 FP8](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-FP8-FL2VA.py) | - | - | - | - | - |
743
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 8 steps FP8](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-Turbo-FP8-FL2VA.py) | - | - | - | - | - |
711
744
  | 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) |
712
745
  | 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) |
713
746
  | 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) | - | - | - | - |
@@ -750,7 +783,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
750
783
  | LTX-2.5 | [Lightricks/LTX-2.5: T2A](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2A.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2A.py) | - | - | - | - |
751
784
  | LTX-2.5 | [Lightricks/LTX-2.5: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-DistilledPipeline.py) | - | - | - | - |
752
785
  | LTX-2.5 | [Lightricks/LTX-2.5-22b-IC-LoRA-Pixel-Spatial-Upscaler](https://www.modelscope.cn/models/Lightricks/LTX-2.5-22b-IC-LoRA-Pixel-Spatial-Upscaler) | [code](/examples/ltx2/model_inference/LTX-2.5-IC-LoRA-Pixel-Spatial-Upscaler.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-IC-LoRA-Pixel-Spatial-Upscaler.py) | - | - | - | - |
753
- | LTX-2.5 | [Lightricks/LTX-2.5: INT8-ConvRot](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-INT8-ConvRot.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-INT8-ConvRot.py) | - | - | - | - |
786
+ | LTX-2.5 | [Lightricks/LTX-2.5: INT8-ConvRot](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-INT8-ConvRot.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-INT8-ConvRot.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2.5-Int8-ConvRot-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.5-Int8-ConvRot.py) |
754
787
  | LTX-2 | [jd-opensource/JoyAI-Echo](https://modelscope.cn/models/jd-opensource/JoyAI-Echo) | [code](/examples/ltx2/model_inference/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_inference_low_vram/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/full/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/lora/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/JoyAI-Echo-T2AV.py) |
755
788
  | LTX-2 | [Lightricks/LTX-2.3: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_training/full/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/LTX-2.3-I2AV.py) | [code](/examples/ltx2/model_training/lora/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-I2AV.py) |
756
789
  | LTX-2 | [Lightricks/LTX-2.3: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-TwoStage.py) | - | - | - | - |
@@ -41,6 +41,12 @@ See also:
41
41
 
42
42
  > 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.
43
43
 
44
+ - **October 20, 2026** We now support MOSS-Image, including inference and training for [MOSS-Image-Base](https://modelscope.cn/models/openmoss/MOSS-Image-Base) and [MOSS-Image-SFT](https://modelscope.cn/models/openmoss/MOSS-Image-SFT). In addition, we provide an [EntroPack low-bit quantized model](https://www.modelscope.cn/models/DiffSynth-Studio/MOSS-Image-EntroPack), which can run the 3.5-bit quantized model with as little as 4 GB of VRAM; and an [accelerated model](https://modelscope.cn/models/DiffSynth-Studio/MOSS-Image-SFT-TurboLoRA) distillation-accelerated via [OPD training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Training/Distillation.html), supporting 8-step ultra-fast inference.
45
+
46
+ - **October 16, 2026** flux-3-image-klein open-sourced, welcome a new member to the image model family! Support includes text-to-image generation, multi-reference editing, layout control, low VRAM inference, and Base training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/FLUX.3.md) and [example code](/examples/flux3/). We quantized the model with [EntroPack](https://github.com/modelscope/entropack), providing pre-quantized models in 3-bit, 4-bit, and 6-bit versions at [DiffSynth-Studio/flux-3-image-klein-entropack](https://www.modelscope.cn/models/DiffSynth-Studio/flux-3-image-klein-entropack).
47
+
48
+ - **October 12, 2026** We now support distillation accelerated training based on OPD (On-Policy Distillation), which enables distillation acceleration of models at an extremely low cost. For details, please refer to [Distillation Accelerated Training](/docs/en/Training/Distillation.md).
49
+
44
50
  - **September 29, 2026** We are excited to open-source EntroPack, a general-purpose tensor compression library for PyTorch that provides lossless compression with exact recovery and rate-controlled lossy compression, with GPU encoding and decoding. It is integrated into DiffSynth-Studio as a quantization backend, compressing model weights at arbitrary target bitrates in both inference and LoRA training. For more information, please refer to:
45
51
 
46
52
  * Project Page: https://github.com/modelscope/entropack
@@ -335,6 +341,8 @@ Quick start: experience popular and the latest models:
335
341
  Model overview:
336
342
 
337
343
  - Image generation
344
+ - MOSS-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MOSS-Image.html), [Example code](/examples/moss_image/)
345
+ - FLUX.3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/FLUX.3.html), [Example code](/examples/flux3/)
338
346
  - Qwen-Image-2.1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Qwen-Image-2.1.html), [Example code](/examples/qwen_image_21/)
339
347
  - SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
340
348
  - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
@@ -368,6 +376,21 @@ Model overview:
368
376
 
369
377
  We believe that a well-developed open-source code framework can lower the threshold for technical exploration. We have achieved many interesting technologies based on this codebase. Perhaps you also have many wild ideas, and with DiffSynth-Studio, you can quickly realize these ideas.
370
378
 
379
+ <details>
380
+
381
+ <summary>EntroPack: A General-Purpose Tensor Compression Library for PyTorch</summary>
382
+
383
+ > Compress model weights at arbitrary target bitrates with GPU encoding and decoding, and run the compressed weights directly in inference and LoRA training.
384
+
385
+ * Project Page: [GitHub](https://github.com/modelscope/entropack)
386
+ * Technical Report: https://arxiv.org/abs/2609.34185
387
+ * Pre-quantized Models: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/EntroPackPreQuants)
388
+ * Documentation: [English Version](/docs/en/Pipeline_Usage/Quantization.md) | [Chinese Version](/docs/zh/Pipeline_Usage/Quantization.md)
389
+ * Example Code: [Z-Image-Turbo](/examples/z_image/model_inference_low_vram/Z-Image-Turbo-EntroPack.py), [Qwen-Image-2.1](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-EntroPack.py), [MiniMax-H3](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-EntroPack.py), [LoRA Training Example](/examples/z_image/model_training/special/quant_training/Z-Image-Turbo-entropack_lossy_quant.sh)
390
+
391
+ </details>
392
+
393
+
371
394
  <details>
372
395
 
373
396
  <summary>TreeAdapter: A Model System Built from Structured LoRAs</summary>
@@ -606,6 +629,12 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
606
629
 
607
630
  | Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
608
631
  |-|-|-|-|-|-|-|-|
632
+ | MOSS-Image | [openmoss/MOSS-Image-Base](https://www.modelscope.cn/models/openmoss/MOSS-Image-Base) | [code](/examples/moss_image/model_inference/MOSS-Image-Base.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-Base.py) | [code](/examples/moss_image/model_training/full/MOSS-Image-Base.sh) | [code](/examples/moss_image/model_training/validate_full/MOSS-Image-Base.py) | [code](/examples/moss_image/model_training/lora/MOSS-Image-Base.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-Base.py) |
633
+ | MOSS-Image | [openmoss/MOSS-Image-SFT](https://www.modelscope.cn/models/openmoss/MOSS-Image-SFT) | [code](/examples/moss_image/model_inference/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_training/full/MOSS-Image-SFT.sh) | [code](/examples/moss_image/model_training/validate_full/MOSS-Image-SFT.py) | [code](/examples/moss_image/model_training/lora/MOSS-Image-SFT.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-SFT.py) |
634
+ | MOSS-Image | [DiffSynth-Studio/MOSS-Image-EntroPack](https://www.modelscope.cn/models/DiffSynth-Studio/MOSS-Image-EntroPack) | [code](/examples/moss_image/model_inference/MOSS-Image-EntroPack.py) | [code](/examples/moss_image/model_inference_low_vram/MOSS-Image-EntroPack.py) | - | - | [code](/examples/moss_image/model_training/lora/MOSS-Image-entropack.sh) | [code](/examples/moss_image/model_training/validate_lora/MOSS-Image-entropack.py) |
635
+ | FLUX.3 | [black-forest-labs/flux-3-image-klein](https://www.modelscope.cn/models/black-forest-labs/flux-3-image-klein) | [code](/examples/flux3/model_inference/flux-3-image-klein.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein.py) | [code](/examples/flux3/model_training/full/flux-3-image-klein.sh) | [code](/examples/flux3/model_training/validate_full/flux-3-image-klein.py) | [code](/examples/flux3/model_training/lora/flux-3-image-klein.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein.py) |
636
+ | FLUX.3 | [black-forest-labs/flux-3-image-klein-base](https://www.modelscope.cn/models/black-forest-labs/flux-3-image-klein-base) | [code](/examples/flux3/model_inference/flux-3-image-klein-base.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein-base.py) | [code](/examples/flux3/model_training/full/flux-3-image-klein-base.sh) | [code](/examples/flux3/model_training/validate_full/flux-3-image-klein-base.py) | [code](/examples/flux3/model_training/lora/flux-3-image-klein-base.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein-base.py) |
637
+ | FLUX.3 | [DiffSynth-Studio/flux-3-image-klein-entropack](https://www.modelscope.cn/models/DiffSynth-Studio/flux-3-image-klein-entropack) | [code](/examples/flux3/model_inference/flux-3-image-klein-EntroPack.py) | [code](/examples/flux3/model_inference_low_vram/flux-3-image-klein-EntroPack.py) | - | - | [code](/examples/flux3/model_training/lora/flux-3-image-klein-entropack.sh) | [code](/examples/flux3/model_training/validate_lora/flux-3-image-klein-entropack.py) |
609
638
  | Qwen-Image-2.1 | [Qwen/Qwen-Image-2.1](https://www.modelscope.cn/models/Qwen/Qwen-Image-2.1) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1.py) |
610
639
  | Qwen-Image-2.1 | [Qwen/Qwen-Image-2.1-Turbo](https://www.modelscope.cn/models/Qwen/Qwen-Image-2.1-Turbo) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1-Turbo.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1-Turbo.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1-Turbo.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1-Turbo.py) |
611
640
  | Qwen-Image-2.1 | [PAI/Qwen-Image-2.1-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/Qwen-Image-2.1-Fun-Controlnet-Union) | [code](/examples/qwen_image_21/model_inference/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_inference_low_vram/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_training/full/Qwen-Image-2.1-Fun-Controlnet-Union.sh) | [code](/examples/qwen_image_21/model_training/validate_full/Qwen-Image-2.1-Fun-Controlnet-Union.py) | [code](/examples/qwen_image_21/model_training/lora/Qwen-Image-2.1-Fun-Controlnet-Union.sh) | [code](/examples/qwen_image_21/model_training/validate_lora/Qwen-Image-2.1-Fun-Controlnet-Union.py) |
@@ -635,6 +664,10 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
635
664
  | 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) | - | - | - | - |
636
665
  | 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) | - | - |
637
666
  | 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) |
667
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 50 steps](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-VDN-FL2VA.py) | - | - | - | - |
668
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 8 steps](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-Turbo-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-VDN-Turbo-FL2VA.py) | - | - | - | - |
669
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 FP8](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-FP8-FL2VA.py) | - | - | - | - | - |
670
+ | MiniMax-H3 | [OpenVDN/vdn-minimax-h3: VDN-H3 8 steps FP8](https://www.modelscope.cn/models/OpenVDN/vdn-minimax-h3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-VDN-Turbo-FP8-FL2VA.py) | - | - | - | - | - |
638
671
  | 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) |
639
672
  | 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) |
640
673
  | 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) | - | - | - | - |
@@ -677,7 +710,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
677
710
  | LTX-2.5 | [Lightricks/LTX-2.5: T2A](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2A.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2A.py) | - | - | - | - |
678
711
  | LTX-2.5 | [Lightricks/LTX-2.5: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-DistilledPipeline.py) | - | - | - | - |
679
712
  | LTX-2.5 | [Lightricks/LTX-2.5-22b-IC-LoRA-Pixel-Spatial-Upscaler](https://www.modelscope.cn/models/Lightricks/LTX-2.5-22b-IC-LoRA-Pixel-Spatial-Upscaler) | [code](/examples/ltx2/model_inference/LTX-2.5-IC-LoRA-Pixel-Spatial-Upscaler.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-IC-LoRA-Pixel-Spatial-Upscaler.py) | - | - | - | - |
680
- | LTX-2.5 | [Lightricks/LTX-2.5: INT8-ConvRot](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-INT8-ConvRot.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-INT8-ConvRot.py) | - | - | - | - |
713
+ | LTX-2.5 | [Lightricks/LTX-2.5: INT8-ConvRot](https://www.modelscope.cn/models/Lightricks/LTX-2.5) | [code](/examples/ltx2/model_inference/LTX-2.5-T2AV-INT8-ConvRot.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.5-T2AV-INT8-ConvRot.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2.5-Int8-ConvRot-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.5-Int8-ConvRot.py) |
681
714
  | LTX-2 | [jd-opensource/JoyAI-Echo](https://modelscope.cn/models/jd-opensource/JoyAI-Echo) | [code](/examples/ltx2/model_inference/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_inference_low_vram/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/full/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/lora/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/JoyAI-Echo-T2AV.py) |
682
715
  | LTX-2 | [Lightricks/LTX-2.3: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_training/full/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/LTX-2.3-I2AV.py) | [code](/examples/ltx2/model_training/lora/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-I2AV.py) |
683
716
  | LTX-2 | [Lightricks/LTX-2.3: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-TwoStage.py) | - | - | - | - |
@@ -605,6 +605,53 @@ ernie_image_series = [
605
605
  },
606
606
  ]
607
607
 
608
+ moss_image_series = [
609
+ {
610
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-Base", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors")
611
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-SFT", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors")
612
+ "model_hash": "b2e1de16b1415bb811bcfc428d7991a7",
613
+ "model_name": "moss_image_dit",
614
+ "model_class": "diffsynth.models.moss_image_dit.MOSSImageDiT",
615
+ },
616
+ {
617
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-Base", origin_file_pattern="text_encoder/model*.safetensors")
618
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-SFT", origin_file_pattern="text_encoder/model*.safetensors")
619
+ "model_hash": "a7140be40b65f94f31942d5b5225f781",
620
+ "model_name": "moss_image_text_encoder",
621
+ "model_class": "diffsynth.models.moss_image_text_encoder.MOSSImageTextEncoder",
622
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.moss_image_text_encoder.MOSSImageTextEncoderStateDictConverter",
623
+ },
624
+ {
625
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-Base", origin_file_pattern="vae/diffusion_pytorch_model.safetensors")
626
+ # Example: ModelConfig(model_id="openmoss/MOSS-Image-SFT", origin_file_pattern="vae/diffusion_pytorch_model.safetensors")
627
+ "model_hash": "dc89b5bac72b57182f384e21632db90d",
628
+ "model_name": "flux2_vae",
629
+ "model_class": "diffsynth.models.flux2_vae.Flux2VAE",
630
+ "extra_kwargs": {"decoder_block_out_channels": [96, 192, 384, 384]}
631
+ },
632
+ {
633
+ # Example: ModelConfig(model_id="DiffSynth-Studio/MOSS-Image-EntroPack", origin_file_pattern="models/MOSS-Image-Base/dit_6bit.safetensors")
634
+ "model_hash": "b895b1ad67dd7a9f225dc4ad7dcec3f2",
635
+ "model_name": "moss_image_dit",
636
+ "model_class": "diffsynth.models.moss_image_dit.MOSSImageDiT",
637
+ "quant_config": {"method": "entropack_lossy_quant", "load_prequantized": True, "backend_config_kwargs": {"target_bpp": 6.0, "row_rdo_iterations": 2, "row_rdo_candidates": 20}},
638
+ },
639
+ {
640
+ # Example: ModelConfig(model_id="DiffSynth-Studio/MOSS-Image-EntroPack", origin_file_pattern="models/MOSS-Image-SFT/dit_6bit.safetensors")
641
+ "model_hash": "6f2e6e215ce1ad45e42ef84632165fbd",
642
+ "model_name": "moss_image_dit",
643
+ "model_class": "diffsynth.models.moss_image_dit.MOSSImageDiT",
644
+ "quant_config": {"method": "entropack_lossy_quant", "load_prequantized": True, "backend_config_kwargs": {"target_bpp": 6.0, "row_rdo_iterations": 2, "row_rdo_candidates": 20}},
645
+ },
646
+ {
647
+ # Example: ModelConfig(model_id="DiffSynth-Studio/MOSS-Image-EntroPack", origin_file_pattern="models/text_encoder_6bit.safetensors")
648
+ "model_hash": "c857c646d678fc7f40fe8465524efeeb",
649
+ "model_name": "moss_image_text_encoder",
650
+ "model_class": "diffsynth.models.moss_image_text_encoder.MOSSImageTextEncoder",
651
+ "quant_config": {"method": "entropack_lossy_quant", "load_prequantized": True, "backend_config_kwargs": {"target_bpp": 6.0, "row_rdo_iterations": 2, "row_rdo_candidates": 20}},
652
+ },
653
+ ]
654
+
608
655
  z_image_series = [
609
656
  {
610
657
  # Example: ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="transformer/*.safetensors")
@@ -1653,6 +1700,13 @@ minimax_h3_series = [
1653
1700
  "quant_config": {"method": "comfy_kitchen_int8_w8a8", "load_prequantized": True, "exclude_modules": ["video_patch_proj", "audio_patch_proj", "condition_proj", "time_embedder.proj_in", "time_embedder.proj_out", "final_layer.adaln_proj.linear", "final_layer.video_out", "final_layer.audio_out", "token_refiner.blocks.0.attn.qkv_proj", "token_refiner.blocks.0.attn.out_proj", "token_refiner.blocks.0.mlp.fc1", "token_refiner.blocks.0.mlp.fc2", "token_refiner.blocks.1.attn.qkv_proj", "token_refiner.blocks.1.attn.out_proj", "token_refiner.blocks.1.mlp.fc1", "token_refiner.blocks.1.mlp.fc2"]},
1654
1701
  "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_dit.MiniMaxH3DiTSingularityStateDictConverter",
1655
1702
  },
1703
+ {
1704
+ # Example: ModelConfig(model_id="OpenVDN/vdn-minimax-h3", origin_file_pattern="stage-dmd-step-250/linear_branch/model.safetensors")
1705
+ "model_hash": "6b8d2b6ae09fc45cbe3e5a9a57e4512a",
1706
+ "model_name": "minimax_h3_vdn_linear_branch",
1707
+ "model_class": "diffsynth.models.minimax_h3_dit_vdn.MiniMaxH3VDNBranch",
1708
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_dit_vdn.MiniMaxH3VDNBranchStateDictConverter",
1709
+ },
1656
1710
  ]
1657
1711
 
1658
1712
  minimax_music3_series = [
@@ -1743,9 +1797,55 @@ qwen_image_21_series = [
1743
1797
  },
1744
1798
  ]
1745
1799
 
1800
+ flux3_series = [
1801
+ {
1802
+ # Example: ModelConfig(model_id="black-forest-labs/flux-3-image-klein", origin_file_pattern="model.safetensors")
1803
+ "model_hash": "cb8e9c6df08faa5cf99c11be4d34d26b",
1804
+ "model_name": "flux3_dit",
1805
+ "model_class": "diffsynth.models.flux3_dit.Flux3DiT",
1806
+ "extra_kwargs": {"flow_map": True},
1807
+ },
1808
+ {
1809
+ # Example: ModelConfig(model_id="black-forest-labs/flux-3-image-klein", origin_file_pattern="transformer/*.safetensors")
1810
+ "model_hash": "d98fcf51c088ad9910399b0d7fdfe692",
1811
+ "model_name": "flux3_dit",
1812
+ "model_class": "diffsynth.models.flux3_dit.Flux3DiTDiffusers",
1813
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.flux3_dit.Flux3DiTFromDiffusers",
1814
+ "extra_kwargs": {"flow_map": True},
1815
+ },
1816
+ {
1817
+ # Example: ModelConfig(model_id="black-forest-labs/flux-3-image-klein-base", origin_file_pattern="model.safetensors")
1818
+ "model_hash": "3a12023223002ebc2f30c85d3d1257ea",
1819
+ "model_name": "flux3_dit",
1820
+ "model_class": "diffsynth.models.flux3_dit.Flux3DiT",
1821
+ },
1822
+ {
1823
+ # Example: ModelConfig(model_id="black-forest-labs/flux-3-image-klein-base", origin_file_pattern="transformer/*.safetensors")
1824
+ "model_hash": "fb4609249d89aeb716222378f92005ce",
1825
+ "model_name": "flux3_dit",
1826
+ "model_class": "diffsynth.models.flux3_dit.Flux3DiTDiffusers",
1827
+ "state_dict_converter": "diffsynth.utils.state_dict_converters.flux3_dit.Flux3DiTFromDiffusers",
1828
+ },
1829
+ {
1830
+ # Example: ModelConfig(model_id="DiffSynth-Studio/flux-3-image-klein-entropack", origin_file_pattern="models/dit_4bit.safetensors")
1831
+ "model_hash": "3899702d86c8f8249bdb1535359c424b",
1832
+ "model_name": "flux3_dit",
1833
+ "model_class": "diffsynth.models.flux3_dit.Flux3DiT",
1834
+ "extra_kwargs": {"flow_map": True},
1835
+ "quant_config": {"method": "entropack_lossy_quant", "load_prequantized": True, "backend_config_kwargs": {"target_bpp": 4.0, "row_rdo_iterations": 2, "row_rdo_candidates": 20}},
1836
+ },
1837
+ {
1838
+ # Example: ModelConfig(model_id="DiffSynth-Studio/flux-3-image-klein-entropack", origin_file_pattern="models/text_encoder_4bit.safetensors")
1839
+ "model_hash": "05233849ee3764c2665a2165b5d4adff",
1840
+ "model_name": "krea2_text_encoder",
1841
+ "model_class": "diffsynth.models.krea2_text_encoder.Krea2TextEncoder",
1842
+ "quant_config": {"method": "entropack_lossy_quant", "load_prequantized": True, "backend_config_kwargs": {"target_bpp": 4.0, "row_rdo_iterations": 2, "row_rdo_candidates": 20}},
1843
+ },
1844
+ ]
1845
+
1746
1846
  MODEL_CONFIGS = (
1747
1847
  stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + qwen_video_edit_series + wan_series + flux_series + flux2_series + ernie_image_series
1748
1848
  + z_image_series + ltx2_series + anima_series + mova_series + joyai_image_series + boogu_image_series + ace_step_series + hidream_o1_image_series
1749
1849
  + image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series + sensenova_u1_series
1750
- + yue2_series + qwen_image_21_series
1850
+ + yue2_series + qwen_image_21_series + flux3_series + moss_image_series
1751
1851
  )
@@ -22,6 +22,13 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
22
22
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
23
23
  "torch.nn.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
24
24
  },
25
+ "diffsynth.models.minimax_h3_dit_vdn.MiniMaxH3VDNBranch": {
26
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
27
+ "torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
28
+ "diffsynth.models.minimax_h3_dit_vdn.MiniMaxH3VDNTemporalConv": "diffsynth.core.vram.layers.AutoWrappedModule",
29
+ "diffsynth.models.minimax_h3_dit_vdn.MiniMaxH3VDNRMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
30
+ "diffsynth.models.minimax_h3_dit_vdn.MiniMaxH3VDNAlpha": "diffsynth.core.vram.layers.AutoWrappedModule",
31
+ },
25
32
  "diffsynth.models.minimax_h3_text_encoder.MiniMaxH3TextEncoder": {
26
33
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
27
34
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
@@ -234,6 +241,11 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
234
241
  "torch.nn.LayerNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
235
242
  "torch.nn.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
236
243
  },
244
+ "diffsynth.models.flux3_dit.Flux3DiT": {
245
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
246
+ "diffsynth.models.flux3_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
247
+ "diffsynth.models.flux3_dit.QKNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
248
+ },
237
249
  "diffsynth.models.flux2_text_encoder.Flux2TextEncoder": {
238
250
  "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
239
251
  "torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
@@ -355,6 +367,19 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
355
367
  "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
356
368
  "transformers.models.ministral3.modeling_ministral3.Ministral3RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
357
369
  },
370
+ "diffsynth.models.moss_image_dit.MOSSImageDiT": {
371
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
372
+ "diffsynth.models.general_modules.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
373
+ },
374
+ "diffsynth.models.moss_image_text_encoder.MOSSImageTextEncoder": {
375
+ "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
376
+ "torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
377
+ "torch.nn.Conv1d": "diffsynth.core.vram.layers.AutoWrappedModule",
378
+ "transformers.models.qwen3_5.modeling_qwen3_5.Qwen3_5RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
379
+ "transformers.models.qwen3_5.modeling_qwen3_5.Qwen3_5RMSNormGated": "diffsynth.core.vram.layers.AutoWrappedModule",
380
+ "transformers.models.qwen3_5.modeling_qwen3_5.Qwen3_5TextRotaryEmbedding": "diffsynth.core.vram.layers.AutoWrappedModule",
381
+ "transformers.models.qwen3_5.modeling_qwen3_5.Qwen3_5GatedDeltaNet": "diffsynth.core.vram.layers.AutoWrappedNonRecurseModule",
382
+ },
358
383
  "diffsynth.models.joyai_image_dit.JoyAIImageDiT": {
359
384
  "diffsynth.models.joyai_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
360
385
  "diffsynth.models.joyai_image_dit.ModulateWan": "diffsynth.core.vram.layers.AutoWrappedModule",
@@ -61,7 +61,7 @@ class UnifiedDataset(torch.utils.data.Dataset):
61
61
  ])
62
62
 
63
63
  def search_for_cached_data_files(self, path):
64
- for file_name in os.listdir(path):
64
+ for file_name in sorted(os.listdir(path)):
65
65
  subpath = os.path.join(path, file_name)
66
66
  if os.path.isdir(subpath):
67
67
  self.search_for_cached_data_files(subpath)
@@ -14,9 +14,11 @@ def create_custom_forward(module):
14
14
  return custom_forward
15
15
 
16
16
 
17
- def create_custom_forward_use_reentrant(module):
17
+ def create_custom_forward_use_reentrant(module, num_positional_args, kwarg_keys):
18
18
  def custom_forward(*inputs):
19
- return module(*inputs)
19
+ positional_args = inputs[:num_positional_args]
20
+ keyword_args = dict(zip(kwarg_keys, inputs[num_positional_args:]))
21
+ return module(*positional_args, **keyword_args)
20
22
  return custom_forward
21
23
 
22
24
 
@@ -35,13 +37,18 @@ def gradient_checkpoint_forward(
35
37
  **kwargs,
36
38
  ):
37
39
  if use_gradient_checkpointing and _HAS_DEEPSPEED and deepspeed.checkpointing.is_configured():
40
+ kwarg_keys = tuple(kwargs)
38
41
  all_args = args + tuple(kwargs.values())
39
42
  if not judge_args_requires_grad(*all_args):
40
43
  # get the first grad_enabled tensor from un_checkpointed forward
41
44
  model_output = model(*args, **kwargs)
42
45
  else:
43
46
  model_output = deepspeed.checkpointing.checkpoint(
44
- create_custom_forward_use_reentrant(model),
47
+ create_custom_forward_use_reentrant(
48
+ model,
49
+ len(args),
50
+ kwarg_keys,
51
+ ),
45
52
  *all_args,
46
53
  )
47
54
  return model_output
@@ -51,6 +51,11 @@ if ENTROPACK_AVAILABLE:
51
51
  linear_cls = ep.CompressedINT8Linear
52
52
 
53
53
 
54
+ def _graph_break_quantized_linear(module):
55
+ module.forward = torch._dynamo.disable(module.forward)
56
+ return module
57
+
58
+
54
59
  @register_quant_backend("entropack")
55
60
  class EntroPackQuantBackend(QuantBackend):
56
61
  """Adapter over entropack's `CompressedLinear` family; a method's config is the config its layers get."""
@@ -70,7 +75,7 @@ class EntroPackQuantBackend(QuantBackend):
70
75
  return {
71
76
  "is_serializable": True,
72
77
  "is_differentiable": True,
73
- "is_compileable": False,
78
+ "is_compileable": True,
74
79
  "requires_calibration": False,
75
80
  }
76
81
 
@@ -85,13 +90,15 @@ class EntroPackQuantBackend(QuantBackend):
85
90
  if compute_device is not None:
86
91
  linear = linear.to(device=compute_device)
87
92
  quantized = self.config.linear_cls.from_linear(linear, config=self.config)
88
- return quantized if model_device is None else quantized.to(device=model_device)
93
+ quantized = quantized if model_device is None else quantized.to(device=model_device)
94
+ return _graph_break_quantized_linear(quantized)
89
95
 
90
96
  def create_quantized_linear_shell(self, linear, compute_dtype):
91
- return self.config.linear_cls(
97
+ shell = self.config.linear_cls(
92
98
  linear.in_features, linear.out_features, bias=linear.bias is not None,
93
99
  dtype=compute_dtype, config=self.config,
94
100
  )
101
+ return _graph_break_quantized_linear(shell)
95
102
 
96
103
  def dequantize_to_linear(self, module, compute_dtype, compute_device=None, model_device=None):
97
104
  if compute_device is not None:
@@ -128,6 +128,7 @@ class AutoWrappedModule(AutoTorchModule):
128
128
  else:
129
129
  self.disk_offload = False
130
130
 
131
+ @torch._dynamo.disable
131
132
  def load_from_disk(self, torch_dtype, device, copy_module=False):
132
133
  if copy_module:
133
134
  module = copy.deepcopy(self.module)
@@ -245,6 +246,7 @@ class AutoWrappedNonRecurseModule(AutoWrappedModule):
245
246
  if self.disk_offload:
246
247
  self.required_params = [name for name, _ in self.module.named_parameters(recurse=False)]
247
248
 
249
+ @torch._dynamo.disable
248
250
  def load_from_disk(self, torch_dtype, device, copy_module=False):
249
251
  if copy_module:
250
252
  module = copy.deepcopy(self.module)
@@ -374,6 +376,7 @@ class AutoWrappedLinear(torch.nn.Linear, AutoTorchModule, LoRAHotLoadMixin):
374
376
  result = result.reshape(new_shape)
375
377
  return result
376
378
 
379
+ @torch._dynamo.disable
377
380
  def load_from_disk(self, torch_dtype, device, assign=True):
378
381
  weight = self.disk_map[self.name + ".weight"].to(dtype=torch_dtype, device=device)
379
382
  bias = None if self.bias is None else self.disk_map[self.name + ".bias"].to(dtype=torch_dtype, device=device)
@@ -495,6 +498,7 @@ class AutoWrappedQuantizedModule(torch.nn.Linear, AutoTorchModule, LoRAHotLoadMi
495
498
  self._required_keys = [key for key in self.disk_map if key.startswith(self.name + ".")]
496
499
  return self._required_keys
497
500
 
501
+ @torch._dynamo.disable
498
502
  def _load_from_disk(self, device, target=None):
499
503
  module = self.module if target is None else target
500
504
  prefix = self.name + "."
@@ -5,16 +5,18 @@ 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", "SenseNova-U1", "YuE2"] = "FLUX.1"):
8
+ def __init__(self, template: Literal["FLUX.1", "Wan", "Qwen-Image", "FLUX.2", "FLUX.3", "Z-Image", "LTX-2", "Qwen-Image-Lightning", "ERNIE-Image", "MOSS-Image", "ACE-Step", "Ideogram4", "Krea-2", "Boogu", "MiniMax-H3", "MiniMax-Music3", "LingBot-Video", "SenseNova-U1", "YuE2"] = "FLUX.1"):
9
9
  self.set_timesteps_fn = {
10
10
  "FLUX.1": FlowMatchScheduler.set_timesteps_flux,
11
11
  "Wan": FlowMatchScheduler.set_timesteps_wan,
12
12
  "Qwen-Image": FlowMatchScheduler.set_timesteps_qwen_image,
13
13
  "FLUX.2": FlowMatchScheduler.set_timesteps_flux2,
14
+ "FLUX.3": FlowMatchScheduler.set_timesteps_flux3,
14
15
  "Z-Image": FlowMatchScheduler.set_timesteps_z_image,
15
16
  "LTX-2": FlowMatchScheduler.set_timesteps_ltx2,
16
17
  "Qwen-Image-Lightning": FlowMatchScheduler.set_timesteps_qwen_image_lightning,
17
18
  "ERNIE-Image": FlowMatchScheduler.set_timesteps_ernie_image,
19
+ "MOSS-Image": FlowMatchScheduler.set_timesteps_moss_image,
18
20
  "ACE-Step": FlowMatchScheduler.set_timesteps_ace_step,
19
21
  "HiDream-O1-Image": FlowMatchScheduler.set_timesteps_hidream_o1_image,
20
22
  "Ideogram4": FlowMatchScheduler.set_timesteps_ideogram4,
@@ -166,6 +168,13 @@ class FlowMatchScheduler():
166
168
  timesteps = sigmas * num_train_timesteps
167
169
  return sigmas, timesteps
168
170
 
171
+ @staticmethod
172
+ def set_timesteps_flux3(num_inference_steps=16, denoising_strength=1.0, alpha=6.93, **kwargs):
173
+ u = torch.linspace(denoising_strength, 0.0, num_inference_steps + 1)[:-1]
174
+ sigmas = alpha * u / (1.0 + (alpha - 1.0) * u)
175
+ timesteps = sigmas * 1000
176
+ return sigmas, timesteps
177
+
169
178
  @staticmethod
170
179
  def set_timesteps_ernie_image(num_inference_steps=50, denoising_strength=1.0, shift=3.0):
171
180
  sigma_min = 0.0
@@ -178,6 +187,25 @@ class FlowMatchScheduler():
178
187
  timesteps = sigmas * num_train_timesteps
179
188
  return sigmas, timesteps
180
189
 
190
+ @staticmethod
191
+ def set_timesteps_moss_image(num_inference_steps=50, denoising_strength=1.0, shift=5.0, training_shift=1.0):
192
+ num_train_timesteps = 1000
193
+
194
+ def grid(count, shift, start=1.0):
195
+ lower = shift / (num_train_timesteps + shift - 1)
196
+ values = torch.linspace(start, lower, count)
197
+ return shift * values / (1 + (shift - 1) * values)
198
+
199
+ sigmas = grid(num_inference_steps, shift, denoising_strength)
200
+ training = grid(num_train_timesteps, training_shift).flip(0)
201
+ upper = torch.searchsorted(training, sigmas).clamp(max=num_train_timesteps - 1)
202
+ lower = (upper - 1).clamp(min=0)
203
+ nearest = torch.where((sigmas - training[lower]).abs() <= (training[upper] - sigmas).abs(), lower, upper)
204
+
205
+ sigmas = torch.unique_consecutive(training[nearest])
206
+ timesteps = sigmas * num_train_timesteps
207
+ return sigmas, timesteps
208
+
181
209
  @staticmethod
182
210
  def set_timesteps_sensenova_u1(num_inference_steps=50, denoising_strength=1.0, shift=3.0):
183
211
  num_train_timesteps = 1000
@@ -32,7 +32,7 @@ def add_model_config(parser: argparse.ArgumentParser):
32
32
  return parser
33
33
 
34
34
  def add_quant_config(parser: argparse.ArgumentParser):
35
- parser.add_argument("--quant_options", type=str, default=None, help="Dynamically quantize loaded models. Semicolon-separated entries, each `<model_string>:<method>[/<exclude_modules>]`, where `<model_string>` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. bitsandbytes_nf4), and `exclude_modules` optionally lists layers kept in full precision.")
35
+ parser.add_argument("--quant_options", type=str, default=None, help="Dynamically quantize loaded models. Semicolon-separated entries, each `<model_string>:<method>[/<exclude_modules>]`, where `<model_string>` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. bitsandbytes_nf4), and `exclude_modules` optionally lists layers kept in full precision. Alternatively, pass a JSON object mapping the same model strings to configs: `method`, optional `backend_config_kwargs` (method-specific parameters), and `target_modules`/`exclude_modules` (JSON lists of layer names). For example: --quant_options '{\"org/model:transformer/*.safetensors\": {\"method\": \"bitsandbytes_nf4\", \"backend_config_kwargs\": {\"blocksize\": 64}, \"exclude_modules\": [\"to_q\"]}}'. For mixed quantization, use a `configs` list of these configs instead of `method`, with `target_modules`/`exclude_modules` selecting non-overlapping layer sets.")
36
36
  return parser
37
37
 
38
38
  def add_training_config(parser: argparse.ArgumentParser):
@@ -1,5 +1,6 @@
1
1
  import torch, json, os, inspect
2
2
  from ..core import ModelConfig, load_state_dict, QuantizeConfig
3
+ from ..core.quant import MixedQuantizeConfig
3
4
  from ..utils.controlnet import ControlNetInput
4
5
  from .base_pipeline import PipelineUnit
5
6
 
@@ -180,6 +181,26 @@ class DiffusionTrainingModule(torch.nn.Module):
180
181
  quant_map = {}
181
182
  if quant_options is None:
182
183
  return quant_map
184
+
185
+ # JSON format
186
+ if quant_options.lstrip().startswith("{"):
187
+ json_options = json.loads(quant_options)
188
+ for model_string, value in json_options.items():
189
+ if not isinstance(value, dict):
190
+ raise ValueError(f"Failed to parse quant option JSON: the config for `{model_string}` must be an object, got {type(value).__name__}.")
191
+ child_configs = value.pop("configs", None)
192
+ for config_dict in [value] + (child_configs if isinstance(child_configs, list) else []):
193
+ if isinstance(config_dict, dict) and not isinstance(config_dict.get("load_prequantized", False), bool):
194
+ raise ValueError(f"Failed to parse quant option JSON: `load_prequantized` for `{model_string}` must be a boolean, got {type(config_dict['load_prequantized']).__name__}.")
195
+ configs = [QuantizeConfig(**child) for child in (child_configs if child_configs is not None else [value])]
196
+ quant_config = configs[0] if child_configs is None else MixedQuantizeConfig(configs=configs, **value)
197
+ methods = [config.method for config in configs if not config.backend.capabilities().get("is_differentiable", True)]
198
+ if methods:
199
+ raise ValueError(f"Quantization method(s) {methods} are not differentiable, so they cannot be used for training.")
200
+ quant_map[self.normalize_quant_key(model_string)] = quant_config
201
+ return quant_map
202
+
203
+ # Semicolon-separated format
183
204
  for entry in quant_options.split(";"):
184
205
  if entry == "":
185
206
  continue