diffsynth-engine 0.2.7__tar.gz → 0.2.9__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 (157) hide show
  1. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/PKG-INFO +2 -2
  2. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/wan/wan_vae.py +27 -9
  3. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/wan_video.py +17 -2
  4. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/parallel.py +38 -55
  5. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine.egg-info/PKG-INFO +2 -2
  6. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine.egg-info/requires.txt +1 -1
  7. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/pyproject.toml +1 -1
  8. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/.gitignore +0 -0
  9. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/.pre-commit-config.yaml +0 -0
  10. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/LICENSE +0 -0
  11. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/MANIFEST.in +0 -0
  12. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/README.md +0 -0
  13. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/assets/dingtalk.png +0 -0
  14. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/assets/showcase.jpeg +0 -0
  15. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/__init__.py +0 -0
  16. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/__init__.py +0 -0
  17. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/__init__.py +0 -0
  18. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/base_scheduler.py +0 -0
  19. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/flow_match/__init__.py +0 -0
  20. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_beta.py +0 -0
  21. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_ddim.py +0 -0
  22. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/flow_match/recifited_flow.py +0 -0
  23. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/__init__.py +0 -0
  24. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/beta.py +0 -0
  25. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/ddim.py +0 -0
  26. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/exponential.py +0 -0
  27. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/karras.py +0 -0
  28. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/linear.py +0 -0
  29. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/sgm_uniform.py +0 -0
  30. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/__init__.py +0 -0
  31. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/flow_match/__init__.py +0 -0
  32. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/flow_match/flow_match_euler.py +0 -0
  33. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/__init__.py +0 -0
  34. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/brownian_tree.py +0 -0
  35. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/ddpm.py +0 -0
  36. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/deis.py +0 -0
  37. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m.py +0 -0
  38. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m_sde.py +0 -0
  39. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_3m_sde.py +0 -0
  40. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/epsilon.py +0 -0
  41. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler.py +0 -0
  42. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler_ancestral.py +0 -0
  43. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/components/vae.json +0 -0
  44. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/flux/flux_dit.json +0 -0
  45. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/flux/flux_text_encoder.json +0 -0
  46. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/flux/flux_vae.json +0 -0
  47. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sd/sd_text_encoder.json +0 -0
  48. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sd/sd_unet.json +0 -0
  49. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sd3/sd3_dit.json +0 -0
  50. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sd3/sd3_text_encoder.json +0 -0
  51. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sdxl/sdxl_text_encoder.json +0 -0
  52. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/sdxl/sdxl_unet.json +0 -0
  53. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/wan/dit/1.3b-t2v.json +0 -0
  54. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/wan/dit/14b-flf2v.json +0 -0
  55. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/wan/dit/14b-i2v.json +0 -0
  56. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/models/wan/dit/14b-t2v.json +0 -0
  57. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/merges.txt +0 -0
  58. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/special_tokens_map.json +0 -0
  59. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/tokenizer_config.json +0 -0
  60. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/vocab.json +0 -0
  61. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/special_tokens_map.json +0 -0
  62. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/spiece.model +0 -0
  63. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer.json +0 -0
  64. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer_config.json +0 -0
  65. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/merges.txt +0 -0
  66. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/special_tokens_map.json +0 -0
  67. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/tokenizer_config.json +0 -0
  68. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/vocab.json +0 -0
  69. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/merges.txt +0 -0
  70. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/special_tokens_map.json +0 -0
  71. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/tokenizer_config.json +0 -0
  72. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/vocab.json +0 -0
  73. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/special_tokens_map.json +0 -0
  74. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/spiece.model +0 -0
  75. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer.json +0 -0
  76. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer_config.json +0 -0
  77. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/kernels/__init__.py +0 -0
  78. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/__init__.py +0 -0
  79. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/base.py +0 -0
  80. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/__init__.py +0 -0
  81. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/attention.py +0 -0
  82. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/lora.py +0 -0
  83. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/relative_position_emb.py +0 -0
  84. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/timestep.py +0 -0
  85. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/transformer_helper.py +0 -0
  86. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/basic/unet_helper.py +0 -0
  87. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/__init__.py +0 -0
  88. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_controlnet.py +0 -0
  89. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_dit.py +0 -0
  90. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_ipadapter.py +0 -0
  91. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_redux.py +0 -0
  92. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_text_encoder.py +0 -0
  93. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/flux/flux_vae.py +0 -0
  94. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd/__init__.py +0 -0
  95. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd/sd_text_encoder.py +0 -0
  96. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd/sd_unet.py +0 -0
  97. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd/sd_vae.py +0 -0
  98. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd3/__init__.py +0 -0
  99. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd3/sd3_dit.py +0 -0
  100. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd3/sd3_text_encoder.py +0 -0
  101. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sd3/sd3_vae.py +0 -0
  102. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sdxl/__init__.py +0 -0
  103. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sdxl/sdxl_text_encoder.py +0 -0
  104. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sdxl/sdxl_unet.py +0 -0
  105. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/sdxl/sdxl_vae.py +0 -0
  106. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/text_encoder/__init__.py +0 -0
  107. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/text_encoder/clip.py +0 -0
  108. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/text_encoder/siglip.py +0 -0
  109. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/text_encoder/t5.py +0 -0
  110. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/utils.py +0 -0
  111. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/vae/__init__.py +0 -0
  112. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/vae/vae.py +0 -0
  113. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/wan/__init__.py +0 -0
  114. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/wan/wan_dit.py +0 -0
  115. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/wan/wan_image_encoder.py +0 -0
  116. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/models/wan/wan_text_encoder.py +0 -0
  117. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/__init__.py +0 -0
  118. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/base.py +0 -0
  119. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/flux_image.py +2 -2
  120. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/sd_image.py +0 -0
  121. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/pipelines/sdxl_image.py +0 -0
  122. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/processor/__init__.py +0 -0
  123. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/processor/canny_processor.py +0 -0
  124. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/processor/depth_processor.py +0 -0
  125. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tokenizers/__init__.py +0 -0
  126. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tokenizers/base.py +0 -0
  127. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tokenizers/clip.py +0 -0
  128. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tokenizers/t5.py +0 -0
  129. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tokenizers/wan.py +0 -0
  130. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tools/__init__.py +0 -0
  131. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tools/flux_inpainting_tool.py +0 -0
  132. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tools/flux_outpainting_tool.py +0 -0
  133. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tools/flux_reference_tool.py +0 -0
  134. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/tools/flux_replace_tool.py +0 -0
  135. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/__init__.py +0 -0
  136. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/constants.py +0 -0
  137. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/download.py +0 -0
  138. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/env.py +0 -0
  139. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/flag.py +0 -0
  140. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/fp8_linear.py +0 -0
  141. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/gguf.py +0 -0
  142. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/image.py +0 -0
  143. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/loader.py +0 -0
  144. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/lock.py +0 -0
  145. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/logging.py +0 -0
  146. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/offload.py +0 -0
  147. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/onnx.py +0 -0
  148. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/platform.py +0 -0
  149. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/prompt.py +0 -0
  150. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine/utils/video.py +0 -0
  151. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine.egg-info/SOURCES.txt +0 -0
  152. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine.egg-info/dependency_links.txt +0 -0
  153. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/diffsynth_engine.egg-info/top_level.txt +0 -0
  154. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/docs/tutorial.md +0 -0
  155. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/docs/tutorial_zh.md +0 -0
  156. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/setup.cfg +0 -0
  157. {diffsynth_engine-0.2.7 → diffsynth_engine-0.2.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth_engine
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Author: MuseAI x ModelScope
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Operating System :: OS Independent
@@ -8,7 +8,7 @@ Requires-Python: >=3.10
8
8
  License-File: LICENSE
9
9
  Requires-Dist: torch>=2.6
10
10
  Requires-Dist: torchvision
11
- Requires-Dist: xformers; sys_platform == "linux"
11
+ Requires-Dist: numpy
12
12
  Requires-Dist: safetensors
13
13
  Requires-Dist: gguf
14
14
  Requires-Dist: einops
@@ -1,6 +1,7 @@
1
1
  import torch
2
2
  import torch.nn as nn
3
3
  import torch.nn.functional as F
4
+ import torch.distributed as dist
4
5
  from einops import rearrange, repeat
5
6
  from tqdm import tqdm
6
7
 
@@ -514,7 +515,7 @@ class WanVideoVAEStateDictConverter(StateDictConverter):
514
515
  class WanVideoVAE(PreTrainedModel):
515
516
  converter = WanVideoVAEStateDictConverter()
516
517
 
517
- def __init__(self, z_dim=16, device: str = "cuda:0", dtype: torch.dtype = torch.float32):
518
+ def __init__(self, z_dim=16, parallelism: int = 1, device: str = "cuda:0", dtype: torch.dtype = torch.float32):
518
519
  super().__init__()
519
520
 
520
521
  mean = [
@@ -560,11 +561,12 @@ class WanVideoVAE(PreTrainedModel):
560
561
  # init model
561
562
  self.model = VideoVAE(z_dim=z_dim).eval().requires_grad_(False)
562
563
  self.upsampling_factor = 8
564
+ self.parallelism = parallelism
563
565
 
564
566
  @classmethod
565
- def from_state_dict(cls, state_dict, device="cuda:0", dtype=torch.float32) -> "WanVideoVAE":
567
+ def from_state_dict(cls, state_dict, parallelism=1, device="cuda:0", dtype=torch.float32) -> "WanVideoVAE":
566
568
  with no_init_weights():
567
- model = torch.nn.utils.skip_init(cls, device=device, dtype=dtype)
569
+ model = torch.nn.utils.skip_init(cls, parallelism=parallelism, device=device, dtype=dtype)
568
570
  model.load_state_dict(state_dict, assign=True)
569
571
  model.to(device=device, dtype=dtype, non_blocking=True)
570
572
  return model
@@ -605,7 +607,7 @@ class WanVideoVAE(PreTrainedModel):
605
607
  h_, w_ = h + size_h, w + size_w
606
608
  tasks.append((h, h_, w, w_))
607
609
 
608
- data_device = "cpu"
610
+ data_device = device if self.parallelism > 1 else "cpu"
609
611
  computation_device = device
610
612
 
611
613
  out_T = T * 4 - 3
@@ -620,7 +622,10 @@ class WanVideoVAE(PreTrainedModel):
620
622
  device=data_device,
621
623
  )
622
624
 
623
- for i, (h, h_, w, w_) in enumerate(tqdm(tasks, desc="VAE DECODING")):
625
+ hide_progress_bar = self.parallelism > 1 and dist.get_rank() != 0
626
+ for i, (h, h_, w, w_) in enumerate(tqdm(tasks, desc="VAE DECODING", disable=hide_progress_bar)):
627
+ if self.parallelism > 1 and (i % dist.get_world_size() != dist.get_rank()):
628
+ continue
624
629
  hidden_states_batch = hidden_states[:, :, :, h:h_, w:w_].to(computation_device)
625
630
  hidden_states_batch = self.model.decode(hidden_states_batch, self.scale).to(data_device)
626
631
 
@@ -649,8 +654,13 @@ class WanVideoVAE(PreTrainedModel):
649
654
  target_h : target_h + hidden_states_batch.shape[3],
650
655
  target_w : target_w + hidden_states_batch.shape[4],
651
656
  ] += mask
652
- if progress_callback is not None:
657
+ if progress_callback is not None and not hide_progress_bar:
653
658
  progress_callback(i + 1, len(tasks), "VAE DECODING")
659
+ if progress_callback is not None and not hide_progress_bar:
660
+ progress_callback(len(tasks), len(tasks), "VAE DECODING")
661
+ if self.parallelism > 1:
662
+ dist.all_reduce(values)
663
+ dist.all_reduce(weight)
654
664
  values = values / weight
655
665
  values = values.float().clamp_(-1, 1)
656
666
  return values
@@ -671,7 +681,7 @@ class WanVideoVAE(PreTrainedModel):
671
681
  h_, w_ = h + size_h, w + size_w
672
682
  tasks.append((h, h_, w, w_))
673
683
 
674
- data_device = "cpu"
684
+ data_device = device if self.parallelism > 1 else "cpu"
675
685
  computation_device = device
676
686
 
677
687
  out_T = (T + 3) // 4
@@ -686,7 +696,10 @@ class WanVideoVAE(PreTrainedModel):
686
696
  device=data_device,
687
697
  )
688
698
 
689
- for i, (h, h_, w, w_) in enumerate(tqdm(tasks, desc="VAE ENCODING")):
699
+ hide_progress_bar = self.parallelism > 1 and dist.get_rank() != 0
700
+ for i, (h, h_, w, w_) in enumerate(tqdm(tasks, desc="VAE ENCODING", disable=hide_progress_bar)):
701
+ if self.parallelism > 1 and (i % dist.get_world_size() != dist.get_rank()):
702
+ continue
690
703
  hidden_states_batch = video[:, :, :, h:h_, w:w_].to(computation_device)
691
704
  hidden_states_batch = self.model.encode(hidden_states_batch, self.scale).to(data_device)
692
705
 
@@ -715,8 +728,13 @@ class WanVideoVAE(PreTrainedModel):
715
728
  target_h : target_h + hidden_states_batch.shape[3],
716
729
  target_w : target_w + hidden_states_batch.shape[4],
717
730
  ] += mask
718
- if progress_callback is not None:
731
+ if progress_callback is not None and not hide_progress_bar:
719
732
  progress_callback(i + 1, len(tasks), "VAE ENCODING")
733
+ if progress_callback is not None and not hide_progress_bar:
734
+ progress_callback(len(tasks), len(tasks), "VAE ENCODING")
735
+ if self.parallelism > 1:
736
+ dist.all_reduce(values)
737
+ dist.all_reduce(weight)
720
738
  values = values / weight
721
739
  values = values.float()
722
740
  return values
@@ -442,8 +442,6 @@ class WanVideoPipeline(BasePipeline):
442
442
  tokenizer = WanT5Tokenizer(WAN_TOKENIZER_CONF_PATH, seq_len=512, clean="whitespace")
443
443
  text_encoder = WanTextEncoder.from_state_dict(t5_state_dict, device=init_device, dtype=model_config.t5_dtype)
444
444
 
445
- vae = WanVideoVAE.from_state_dict(vae_state_dict, device=init_device, dtype=model_config.vae_dtype)
446
-
447
445
  image_encoder = None
448
446
  if model_config.image_encoder_path is not None:
449
447
  logger.info(f"loading state dict from {model_config.image_encoder_path} ...")
@@ -480,6 +478,20 @@ class WanVideoPipeline(BasePipeline):
480
478
  tp_degree = parallel_config["tp_degree"]
481
479
  use_fsdp = parallel_config["use_fsdp"]
482
480
  batch_cfg = True if use_cfg_parallel else batch_cfg
481
+
482
+ vae = WanVideoVAE.from_state_dict(
483
+ vae_state_dict, parallelism=parallelism, device="cpu", dtype=model_config.vae_dtype
484
+ )
485
+ vae = ParallelModel(
486
+ vae,
487
+ cfg_degree=1,
488
+ sp_ulysses_degree=parallelism, # not real sequence parallel
489
+ sp_ring_degree=1,
490
+ tp_degree=1,
491
+ master_port=29501,
492
+ device="cuda",
493
+ )
494
+
483
495
  with LoRAContext():
484
496
  dit = WanDiT.from_state_dict(
485
497
  dit_state_dict,
@@ -499,6 +511,8 @@ class WanVideoPipeline(BasePipeline):
499
511
  device="cuda",
500
512
  )
501
513
  else:
514
+ vae = WanVideoVAE.from_state_dict(vae_state_dict, device=init_device, dtype=model_config.vae_dtype)
515
+
502
516
  with LoRAContext():
503
517
  dit = WanDiT.from_state_dict(
504
518
  dit_state_dict,
@@ -526,4 +540,5 @@ class WanVideoPipeline(BasePipeline):
526
540
  return pipe
527
541
 
528
542
  def __del__(self):
543
+ del self.vae
529
544
  del self.dit
@@ -228,7 +228,6 @@ def parallelize_module(
228
228
 
229
229
  NCCL_TIMEOUT_SEC = int(os.environ.get("NCCL_TIMEOUT_SEC", 600))
230
230
  PARALLEL_FWD_TIMEOUT_SEC = int(os.environ.get("PARALLEL_FWD_TIMEOUT_SEC", 300))
231
- PARALLEL_LORA_TIMEOUT_SEC = int(os.environ.get("PARALLEL_LORA_TIMEOUT_SEC ", 60))
232
231
 
233
232
 
234
233
  def _worker_loop(
@@ -285,28 +284,26 @@ def _worker_loop(
285
284
 
286
285
  while True:
287
286
  if rank == 0:
288
- kwargs = queue_in.get()
289
- data = [kwargs]
287
+ data = queue_in.get()
290
288
  else:
291
- data = [None]
289
+ data = [None, None, None]
292
290
  dist.broadcast_object_list(data, src=0)
293
- kwargs = clone(data[0])
291
+ name, args, kwargs = clone(data)
294
292
  del data
295
293
 
296
- y = None
297
- if kwargs.get("method", None) == "load_loras":
298
- module.load_loras(lora_args=kwargs["lora_args"], fused=kwargs["fused"])
299
- elif kwargs.get("method", None) == "unload_loras":
300
- module.unload_loras()
301
- else:
302
- kwargs = to_device(kwargs, device)
303
- kwargs = split_and_get(kwargs, get_cfg_world_size(), 0, get_cfg_rank())
304
- with torch.no_grad():
305
- y = module(**kwargs)
306
- if get_sp_rank() == 0 and get_tp_rank() == 0:
307
- gathered = torch.zeros((get_cfg_world_size(), *y.shape[1:]), dtype=y.dtype, device=y.device)
308
- dist.all_gather_into_tensor(gathered, y, group=get_cfg_group())
309
- y = gathered
294
+ if not hasattr(module, name):
295
+ raise AttributeError(f'{module.__class__.__name__} has no attribute "{name}"')
296
+ if name != "load_loras":
297
+ args = split_and_get(to_device(args, device), get_cfg_world_size(), 0, get_cfg_rank())
298
+ kwargs = split_and_get(to_device(kwargs, device), get_cfg_world_size(), 0, get_cfg_rank())
299
+ with torch.no_grad():
300
+ y = getattr(module, name)(*args, **kwargs)
301
+
302
+ is_rank_zero_in_cfg_group = get_cfg_world_size() > 1 and get_sp_rank() == 0 and get_tp_rank() == 0
303
+ if y is not None and is_rank_zero_in_cfg_group:
304
+ gathered = torch.zeros((get_cfg_world_size(), *y.shape[1:]), dtype=y.dtype, device=y.device)
305
+ dist.all_gather_into_tensor(gathered, y, group=get_cfg_group())
306
+ y = gathered
310
307
 
311
308
  if rank == 0:
312
309
  queue_out.put(y)
@@ -359,42 +356,9 @@ class ParallelModel(nn.Module):
359
356
  join=False,
360
357
  )
361
358
 
362
- def load_loras(self, lora_args: List[Dict[str, any]], fused: bool = True):
363
- self.queue_in.put(
364
- {
365
- "method": "load_loras",
366
- "lora_args": lora_args,
367
- "fused": fused,
368
- }
369
- )
370
- try:
371
- res = self.queue_out.get(timeout=PARALLEL_LORA_TIMEOUT_SEC)
372
- if isinstance(res, Exception):
373
- raise res
374
- except Empty:
375
- logger.error("ParallelModel load LoRA timeout")
376
- raise RuntimeError("ParallelModel load LoRA timeout")
377
- except Exception as e:
378
- logger.error(f"ParallelModel load LoRA error: {e}")
379
- raise RuntimeError(f"ParallelModel load LoRA error: {e}")
380
- logger.info("ParallelModel load LoRA done")
381
-
382
- def unload_loras(self):
383
- self.queue_in.put({"method": "unload_loras"})
384
- try:
385
- res = self.queue_out.get(timeout=PARALLEL_LORA_TIMEOUT_SEC)
386
- if isinstance(res, Exception):
387
- raise res
388
- except Empty:
389
- logger.error("ParallelModel unload LoRA timeout")
390
- raise RuntimeError("ParallelModel unload LoRA timeout")
391
- except Exception as e:
392
- logger.error(f"ParallelModel unload LoRA error: {e}")
393
- raise RuntimeError(f"ParallelModel unload LoRA error: {e}")
394
- logger.info("ParallelModel unload LoRA done")
395
-
396
- def forward(self, **kwargs):
397
- self.queue_in.put(kwargs)
359
+ def forward(self, *args, **kwargs):
360
+ data = ["forward", args, kwargs]
361
+ self.queue_in.put(data)
398
362
  try:
399
363
  res = self.queue_out.get(timeout=PARALLEL_FWD_TIMEOUT_SEC)
400
364
  if isinstance(res, Exception):
@@ -407,6 +371,25 @@ class ParallelModel(nn.Module):
407
371
  raise RuntimeError(f"ParallelModel forward error: {e}")
408
372
  return res
409
373
 
374
+ def __getattr__(self, name):
375
+ def wrapped_func(*args, **kwargs):
376
+ data = [name, args, kwargs]
377
+ self.queue_in.put(data)
378
+ try:
379
+ res = self.queue_out.get(timeout=PARALLEL_FWD_TIMEOUT_SEC)
380
+ if isinstance(res, Exception):
381
+ raise res
382
+ except Empty:
383
+ logger.error(f"ParallelModel {name} timeout")
384
+ raise RuntimeError(f"ParallelModel {name} timeout")
385
+ except Exception as e:
386
+ logger.error(f"ParallelModel {name} error: {e}")
387
+ raise RuntimeError(f"ParallelModel {name} error: {e}")
388
+ logger.info(f"ParallelModel {name} done")
389
+ return res
390
+
391
+ return wrapped_func
392
+
410
393
  def __del__(self):
411
394
  # Send terminate signal to all workers
412
395
  for p in self.ctx.processes:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth_engine
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Author: MuseAI x ModelScope
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Operating System :: OS Independent
@@ -8,7 +8,7 @@ Requires-Python: >=3.10
8
8
  License-File: LICENSE
9
9
  Requires-Dist: torch>=2.6
10
10
  Requires-Dist: torchvision
11
- Requires-Dist: xformers; sys_platform == "linux"
11
+ Requires-Dist: numpy
12
12
  Requires-Dist: safetensors
13
13
  Requires-Dist: gguf
14
14
  Requires-Dist: einops
@@ -1,5 +1,6 @@
1
1
  torch>=2.6
2
2
  torchvision
3
+ numpy
3
4
  safetensors
4
5
  gguf
5
6
  einops
@@ -16,7 +17,6 @@ imageio[ffmpeg]
16
17
  onnxruntime
17
18
 
18
19
  [:sys_platform == "linux"]
19
- xformers
20
20
  yunchang
21
21
 
22
22
  [dev]
@@ -15,7 +15,7 @@ requires-python = ">=3.10"
15
15
  dependencies = [
16
16
  "torch >= 2.6",
17
17
  "torchvision",
18
- "xformers ; sys_platform == 'linux'",
18
+ "numpy",
19
19
  "safetensors",
20
20
  "gguf",
21
21
  "einops",
@@ -801,13 +801,13 @@ class FluxImagePipeline(BasePipeline):
801
801
  controlnet_params: List[ControlNetParams] | ControlNetParams = [],
802
802
  progress_callback: Optional[Callable] = None, # def progress_callback(current, total, status)
803
803
  ):
804
+ if not isinstance(controlnet_params, list):
805
+ controlnet_params = [controlnet_params]
804
806
  if self.control_type != ControlType.normal:
805
807
  assert controlnet_params and len(controlnet_params) == 1, "bfl_controlnet must have one controlnet"
806
808
 
807
809
  if input_image is not None:
808
810
  width, height = input_image.size
809
- if not isinstance(controlnet_params, list):
810
- controlnet_params = [controlnet_params]
811
811
  self.validate_image_size(height, width, minimum=64, multiple_of=16)
812
812
 
813
813
  noise = self.generate_noise((1, 16, height // 8, width // 8), seed=seed, device="cpu", dtype=self.dtype).to(