diffsynth-engine 0.3.6.dev5__tar.gz → 0.3.6.dev7__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 (161) hide show
  1. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/PKG-INFO +1 -1
  2. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/lora.py +39 -19
  3. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/transformer_helper.py +0 -11
  4. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/__init__.py +2 -0
  5. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_dit.py +1 -1
  6. diffsynth_engine-0.3.6.dev7/diffsynth_engine/models/flux/flux_dit_fbcache.py +205 -0
  7. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd/sd_controlnet.py +167 -85
  8. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sdxl/__init__.py +1 -1
  9. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sdxl/sdxl_controlnet.py +118 -73
  10. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sdxl/sdxl_unet.py +1 -2
  11. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/text_encoder/t5.py +2 -4
  12. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/base.py +15 -2
  13. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/controlnet_helper.py +4 -2
  14. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/flux_image.py +48 -23
  15. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/sd_image.py +20 -15
  16. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/sdxl_image.py +44 -19
  17. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/fp8_linear.py +39 -0
  18. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine.egg-info/PKG-INFO +1 -1
  19. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine.egg-info/SOURCES.txt +1 -0
  20. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/.gitignore +0 -0
  21. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/.pre-commit-config.yaml +0 -0
  22. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/LICENSE +0 -0
  23. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/MANIFEST.in +0 -0
  24. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/README.md +0 -0
  25. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/assets/dingtalk.png +0 -0
  26. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/assets/showcase.jpeg +0 -0
  27. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/__init__.py +0 -0
  28. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/__init__.py +0 -0
  29. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/__init__.py +0 -0
  30. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/base_scheduler.py +0 -0
  31. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/flow_match/__init__.py +0 -0
  32. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_beta.py +0 -0
  33. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_ddim.py +0 -0
  34. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/flow_match/recifited_flow.py +0 -0
  35. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/__init__.py +0 -0
  36. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/beta.py +0 -0
  37. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/ddim.py +0 -0
  38. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/exponential.py +0 -0
  39. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/karras.py +0 -0
  40. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/linear.py +0 -0
  41. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/sgm_uniform.py +0 -0
  42. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/__init__.py +0 -0
  43. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/flow_match/__init__.py +0 -0
  44. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/flow_match/flow_match_euler.py +0 -0
  45. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/__init__.py +0 -0
  46. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/brownian_tree.py +0 -0
  47. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/ddpm.py +0 -0
  48. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/deis.py +0 -0
  49. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m.py +0 -0
  50. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m_sde.py +0 -0
  51. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_3m_sde.py +0 -0
  52. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/epsilon.py +0 -0
  53. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler.py +0 -0
  54. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler_ancestral.py +0 -0
  55. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/components/vae.json +0 -0
  56. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/flux/flux_dit.json +0 -0
  57. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/flux/flux_text_encoder.json +0 -0
  58. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/flux/flux_vae.json +0 -0
  59. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sd/sd_text_encoder.json +0 -0
  60. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sd/sd_unet.json +0 -0
  61. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sd3/sd3_dit.json +0 -0
  62. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sd3/sd3_text_encoder.json +0 -0
  63. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sdxl/sdxl_text_encoder.json +0 -0
  64. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/sdxl/sdxl_unet.json +0 -0
  65. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/wan/dit/1.3b-t2v.json +0 -0
  66. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/wan/dit/14b-flf2v.json +0 -0
  67. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/wan/dit/14b-i2v.json +0 -0
  68. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/models/wan/dit/14b-t2v.json +0 -0
  69. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/merges.txt +0 -0
  70. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/special_tokens_map.json +0 -0
  71. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/tokenizer_config.json +0 -0
  72. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/vocab.json +0 -0
  73. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/special_tokens_map.json +0 -0
  74. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/spiece.model +0 -0
  75. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer.json +0 -0
  76. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer_config.json +0 -0
  77. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/merges.txt +0 -0
  78. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/special_tokens_map.json +0 -0
  79. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/tokenizer_config.json +0 -0
  80. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/vocab.json +0 -0
  81. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/merges.txt +0 -0
  82. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/special_tokens_map.json +0 -0
  83. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/tokenizer_config.json +0 -0
  84. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/vocab.json +0 -0
  85. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/special_tokens_map.json +0 -0
  86. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/spiece.model +0 -0
  87. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer.json +0 -0
  88. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer_config.json +0 -0
  89. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/kernels/__init__.py +0 -0
  90. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/__init__.py +0 -0
  91. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/base.py +0 -0
  92. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/__init__.py +0 -0
  93. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/attention.py +0 -0
  94. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/relative_position_emb.py +0 -0
  95. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/timestep.py +0 -0
  96. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/basic/unet_helper.py +0 -0
  97. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_controlnet.py +0 -0
  98. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_ipadapter.py +0 -0
  99. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_redux.py +0 -0
  100. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_text_encoder.py +0 -0
  101. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/flux/flux_vae.py +0 -0
  102. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd/__init__.py +0 -0
  103. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd/sd_text_encoder.py +0 -0
  104. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd/sd_unet.py +0 -0
  105. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd/sd_vae.py +0 -0
  106. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd3/__init__.py +0 -0
  107. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd3/sd3_dit.py +0 -0
  108. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd3/sd3_text_encoder.py +0 -0
  109. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sd3/sd3_vae.py +0 -0
  110. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sdxl/sdxl_text_encoder.py +0 -0
  111. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/sdxl/sdxl_vae.py +0 -0
  112. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/text_encoder/__init__.py +0 -0
  113. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/text_encoder/clip.py +0 -0
  114. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/text_encoder/siglip.py +0 -0
  115. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/utils.py +0 -0
  116. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/vae/__init__.py +0 -0
  117. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/vae/vae.py +0 -0
  118. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/wan/__init__.py +0 -0
  119. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/wan/wan_dit.py +0 -0
  120. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/wan/wan_image_encoder.py +0 -0
  121. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/wan/wan_text_encoder.py +0 -0
  122. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/models/wan/wan_vae.py +0 -0
  123. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/__init__.py +0 -0
  124. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/pipelines/wan_video.py +0 -0
  125. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/processor/__init__.py +0 -0
  126. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/processor/canny_processor.py +0 -0
  127. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/processor/depth_processor.py +0 -0
  128. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tokenizers/__init__.py +0 -0
  129. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tokenizers/base.py +0 -0
  130. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tokenizers/clip.py +0 -0
  131. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tokenizers/t5.py +0 -0
  132. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tokenizers/wan.py +0 -0
  133. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tools/__init__.py +0 -0
  134. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tools/flux_inpainting_tool.py +0 -0
  135. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tools/flux_outpainting_tool.py +0 -0
  136. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tools/flux_reference_tool.py +0 -0
  137. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/tools/flux_replace_tool.py +0 -0
  138. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/__init__.py +0 -0
  139. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/constants.py +0 -0
  140. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/download.py +0 -0
  141. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/env.py +0 -0
  142. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/flag.py +0 -0
  143. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/gguf.py +0 -0
  144. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/image.py +0 -0
  145. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/loader.py +0 -0
  146. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/lock.py +0 -0
  147. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/logging.py +0 -0
  148. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/offload.py +0 -0
  149. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/onnx.py +0 -0
  150. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/parallel.py +0 -0
  151. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/platform.py +0 -0
  152. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/prompt.py +0 -0
  153. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine/utils/video.py +0 -0
  154. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine.egg-info/dependency_links.txt +0 -0
  155. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine.egg-info/requires.txt +0 -0
  156. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/diffsynth_engine.egg-info/top_level.txt +0 -0
  157. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/docs/tutorial.md +0 -0
  158. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/docs/tutorial_zh.md +0 -0
  159. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/pyproject.toml +0 -0
  160. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/setup.cfg +0 -0
  161. {diffsynth_engine-0.3.6.dev5 → diffsynth_engine-0.3.6.dev7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth_engine
3
- Version: 0.3.6.dev5
3
+ Version: 0.3.6.dev7
4
4
  Author: MuseAI x ModelScope
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Operating System :: OS Independent
@@ -37,14 +37,23 @@ class LoRA(nn.Module):
37
37
  else:
38
38
  delta_w = self.scale * (self.alpha / self.rank) * (self.up.weight @ self.down.weight)
39
39
  if isinstance(w, (nn.Linear, nn.Conv2d)):
40
- delta_w = delta_w.to(device=w.weight.data.device, dtype=w.weight.data.dtype)
40
+ delta_w = delta_w.to(device=w.weight.data.device, dtype=self.dtype)
41
+ w_dtype = w.weight.data.dtype
42
+ w.weight.data = w.weight.data.to(self.dtype)
41
43
  w.weight.data.add_(delta_w)
44
+ w.weight.data = w.weight.data.to(w_dtype)
42
45
  elif isinstance(w, nn.Parameter):
43
- delta_w = delta_w.to(device=w.data.device, dtype=w.data.dtype)
46
+ delta_w = delta_w.to(device=w.data.device, dtype=self.dtype)
47
+ w_dtype = w.data.dtype
48
+ w.data = w.data.to(self.dtype)
44
49
  w.data.add_(delta_w)
50
+ w.data = w.data.to(w_dtype)
45
51
  elif isinstance(w, torch.Tensor):
46
- delta_w = delta_w.to(device=w.device, dtype=w.dtype)
52
+ delta_w = delta_w.to(device=w.device, dtype=self.dtype)
53
+ w_dtype = w.dtype
54
+ w = w.to(self.dtype)
47
55
  w.add_(delta_w)
56
+ w = w.to(w_dtype)
48
57
 
49
58
 
50
59
  class LoRALinear(nn.Linear):
@@ -60,8 +69,8 @@ class LoRALinear(nn.Linear):
60
69
  # LoRA
61
70
  self._lora_dict = OrderedDict()
62
71
  # Frozen LoRA
63
- self._frozen_lora_list = []
64
- self.register_buffer("_original_weight", None)
72
+ self.patched_frozen_lora = False
73
+ self._original_weight = None
65
74
 
66
75
  @staticmethod
67
76
  def from_linear(linear: nn.Linear):
@@ -118,20 +127,27 @@ class LoRALinear(nn.Linear):
118
127
  save_original_weight: bool = True,
119
128
  ):
120
129
  if save_original_weight and self._original_weight is None:
121
- self._original_weight = self.weight.clone()
130
+ if self.weight.dtype == torch.float8_e4m3fn:
131
+ self._original_weight = self.weight.to(dtype=torch.bfloat16, device="cpu", copy=True).pin_memory()
132
+ else:
133
+ self._original_weight = self.weight.to(device="cpu", copy=True).pin_memory()
122
134
  lora = LoRA(scale, rank, alpha, up, down, device, dtype)
123
135
  lora.apply_to(self)
124
- self._frozen_lora_list.append(lora)
136
+ self.patched_frozen_lora = True
125
137
 
126
- def clear(self):
127
- if self._original_weight is None and len(self._frozen_lora_list) > 0:
138
+ def clear(self, release_all_cpu_memory: bool = False):
139
+ if self.patched_frozen_lora and self._original_weight is None:
128
140
  raise RuntimeError(
129
141
  "Current LoRALinear has patched by frozen LoRA, but original weight is not saved, so you cannot clear LoRA."
130
142
  )
131
143
  self._lora_dict.clear()
132
- self._frozen_lora_list = []
133
144
  if self._original_weight is not None:
134
- self.weight.data.copy_(self._original_weight)
145
+ self.weight.data.copy_(
146
+ self._original_weight.to(device=self.weight.data.device, dtype=self.weight.data.dtype)
147
+ )
148
+ if release_all_cpu_memory:
149
+ del self._original_weight
150
+ self.patched_frozen_lora = False
135
151
 
136
152
  def forward(self, x):
137
153
  w_x = super().forward(x)
@@ -161,8 +177,8 @@ class LoRAConv2d(nn.Conv2d):
161
177
  # LoRA
162
178
  self._lora_dict = OrderedDict()
163
179
  # Frozen LoRA
164
- self._frozen_lora_list = []
165
180
  self._original_weight = None
181
+ self.patched_frozen_lora = False
166
182
 
167
183
  @staticmethod
168
184
  def from_conv2d(conv2d: nn.Conv2d):
@@ -257,21 +273,25 @@ class LoRAConv2d(nn.Conv2d):
257
273
  save_original_weight: bool = True,
258
274
  ):
259
275
  if save_original_weight and self._original_weight is None:
260
- self._original_weight = self.weight.clone()
276
+ if self.weight.dtype == torch.float8_e4m3fn:
277
+ self._original_weight = self.weight.to(dtype=torch.bfloat16, device="cpu", copy=True).pin_memory()
278
+ else:
279
+ self._original_weight = self.weight.to(device="cpu", copy=True).pin_memory()
261
280
  lora = self._construct_lora(name, scale, rank, alpha, up, down, device, dtype)
262
281
  lora.apply_to(self)
263
- self._frozen_lora_list.append(lora)
282
+ self.patched_frozen_lora = True
264
283
 
265
- def clear(self):
266
- if self._original_weight is None and len(self._frozen_lora_list) > 0:
284
+ def clear(self, release_all_cpu_memory: bool = False):
285
+ if self.patched_frozen_lora and self._original_weight is None:
267
286
  raise RuntimeError(
268
287
  "Current LoRALinear has patched by frozen LoRA, but original weight is not saved, so you cannot clear LoRA."
269
288
  )
270
289
  self._lora_dict.clear()
271
- self._frozen_lora_list = []
272
290
  if self._original_weight is not None:
273
- self.weight.copy_(self._original_weight)
274
- self._original_weight = None
291
+ self.weight.copy_(self._original_weight.to(device=self.weight.device, dtype=self.weight.dtype))
292
+ if release_all_cpu_memory:
293
+ del self._original_weight
294
+ self.patched_frozen_lora = False
275
295
 
276
296
  def forward(self, x):
277
297
  w_x = super().forward(x)
@@ -1,6 +1,5 @@
1
1
  import torch
2
2
  import torch.nn as nn
3
- import math
4
3
 
5
4
 
6
5
  def modulate(x: torch.Tensor, shift: torch.Tensor, scale: torch.Tensor):
@@ -83,13 +82,3 @@ class RMSNorm(nn.Module):
83
82
  if self.elementwise_affine:
84
83
  return norm_result * self.weight
85
84
  return norm_result
86
-
87
-
88
- class NewGELUActivation(nn.Module):
89
- """
90
- Implementation of the GELU activation function currently in Google BERT repo (identical to OpenAI GPT). Also see
91
- the Gaussian Error Linear Units paper: https://arxiv.org/abs/1606.08415
92
- """
93
-
94
- def forward(self, input: "torch.Tensor") -> "torch.Tensor":
95
- return 0.5 * input * (1.0 + torch.tanh(math.sqrt(2.0 / math.pi) * (input + 0.044715 * torch.pow(input, 3.0))))
@@ -4,6 +4,7 @@ from .flux_vae import FluxVAEDecoder, FluxVAEEncoder, config as flux_vae_config
4
4
  from .flux_controlnet import FluxControlNet
5
5
  from .flux_ipadapter import FluxIPAdapter
6
6
  from .flux_redux import FluxRedux
7
+ from .flux_dit_fbcache import FluxDiTFBCache
7
8
 
8
9
  __all__ = [
9
10
  "FluxRedux",
@@ -14,6 +15,7 @@ __all__ = [
14
15
  "FluxTextEncoder2",
15
16
  "FluxVAEDecoder",
16
17
  "FluxVAEEncoder",
18
+ "FluxDiTFBCache",
17
19
  "flux_dit_config",
18
20
  "flux_text_encoder_config",
19
21
  "flux_vae_config",
@@ -435,7 +435,7 @@ class FluxDiT(PreTrainedModel):
435
435
  # addition of floating point numbers does not meet commutative law
436
436
  conditioning = self.time_embedder(timestep, hidden_states.dtype)
437
437
  if self.guidance_embedder is not None:
438
- guidance = guidance * 1000
438
+ guidance = (guidance.to(torch.float32) * 1000).to(hidden_states.dtype)
439
439
  conditioning += self.guidance_embedder(guidance, hidden_states.dtype)
440
440
  conditioning += self.pooled_text_embedder(pooled_prompt_emb)
441
441
  rope_emb = self.pos_embedder(torch.cat((text_ids, image_ids), dim=1))
@@ -0,0 +1,205 @@
1
+ import torch
2
+ import numpy as np
3
+ from typing import Dict, Optional
4
+
5
+ from diffsynth_engine.models.utils import no_init_weights
6
+ from diffsynth_engine.utils.gguf import gguf_inference
7
+ from diffsynth_engine.utils.fp8_linear import fp8_inference
8
+ from diffsynth_engine.utils.parallel import (
9
+ cfg_parallel,
10
+ cfg_parallel_unshard,
11
+ sequence_parallel,
12
+ sequence_parallel_unshard,
13
+ )
14
+ from diffsynth_engine.utils import logging
15
+ from diffsynth_engine.models.flux.flux_dit import FluxDiT
16
+
17
+ logger = logging.get_logger(__name__)
18
+
19
+
20
+ class FluxDiTFBCache(FluxDiT):
21
+ def __init__(
22
+ self,
23
+ in_channel: int = 64,
24
+ attn_impl: Optional[str] = None,
25
+ device: str = "cuda:0",
26
+ dtype: torch.dtype = torch.bfloat16,
27
+ relative_l1_threshold: float = 0.05,
28
+ ):
29
+ super().__init__(in_channel=in_channel, attn_impl=attn_impl, device=device, dtype=dtype)
30
+ self.relative_l1_threshold = relative_l1_threshold
31
+ self.step_count = 0
32
+ self.num_inference_steps = 0
33
+
34
+ def is_relative_l1_below_threshold(self, prev_residual, residual, threshold):
35
+ if threshold <= 0.0:
36
+ return False
37
+
38
+ if prev_residual.shape != residual.shape:
39
+ return False
40
+
41
+ mean_diff = (prev_residual - residual).abs().mean()
42
+ mean_prev_residual = prev_residual.abs().mean()
43
+ diff = mean_diff / mean_prev_residual
44
+ return diff.item() < threshold
45
+
46
+ def refresh_cache_status(self, num_inference_steps):
47
+ self.step_count = 0
48
+ self.num_inference_steps = num_inference_steps
49
+
50
+ def forward(
51
+ self,
52
+ hidden_states,
53
+ timestep,
54
+ prompt_emb,
55
+ pooled_prompt_emb,
56
+ image_emb,
57
+ guidance,
58
+ text_ids,
59
+ image_ids=None,
60
+ controlnet_double_block_output=None,
61
+ controlnet_single_block_output=None,
62
+ **kwargs,
63
+ ):
64
+ h, w = hidden_states.shape[-2:]
65
+ if image_ids is None:
66
+ image_ids = self.prepare_image_ids(hidden_states)
67
+ controlnet_double_block_output = (
68
+ controlnet_double_block_output if controlnet_double_block_output is not None else ()
69
+ )
70
+ controlnet_single_block_output = (
71
+ controlnet_single_block_output if controlnet_single_block_output is not None else ()
72
+ )
73
+
74
+ fp8_linear_enabled = getattr(self, "fp8_linear_enabled", False)
75
+ use_cfg = hidden_states.shape[0] > 1
76
+ with (
77
+ fp8_inference(fp8_linear_enabled),
78
+ gguf_inference(),
79
+ cfg_parallel(
80
+ (
81
+ hidden_states,
82
+ timestep,
83
+ prompt_emb,
84
+ pooled_prompt_emb,
85
+ image_emb,
86
+ guidance,
87
+ text_ids,
88
+ image_ids,
89
+ *controlnet_double_block_output,
90
+ *controlnet_single_block_output,
91
+ ),
92
+ use_cfg=use_cfg,
93
+ ),
94
+ ):
95
+ # warning: keep the order of time_embedding + guidance_embedding + pooled_text_embedding
96
+ # addition of floating point numbers does not meet commutative law
97
+ conditioning = self.time_embedder(timestep, hidden_states.dtype)
98
+ if self.guidance_embedder is not None:
99
+ guidance = guidance * 1000
100
+ conditioning += self.guidance_embedder(guidance, hidden_states.dtype)
101
+ conditioning += self.pooled_text_embedder(pooled_prompt_emb)
102
+ rope_emb = self.pos_embedder(torch.cat((text_ids, image_ids), dim=1))
103
+ text_rope_emb = rope_emb[:, :, : text_ids.size(1)]
104
+ image_rope_emb = rope_emb[:, :, text_ids.size(1) :]
105
+ hidden_states = self.patchify(hidden_states)
106
+
107
+ with sequence_parallel(
108
+ (
109
+ hidden_states,
110
+ prompt_emb,
111
+ text_rope_emb,
112
+ image_rope_emb,
113
+ *controlnet_double_block_output,
114
+ *controlnet_single_block_output,
115
+ ),
116
+ seq_dims=(
117
+ 1,
118
+ 1,
119
+ 2,
120
+ 2,
121
+ *(1 for _ in controlnet_double_block_output),
122
+ *(1 for _ in controlnet_single_block_output),
123
+ ),
124
+ ):
125
+ hidden_states = self.x_embedder(hidden_states)
126
+ prompt_emb = self.context_embedder(prompt_emb)
127
+ rope_emb = torch.cat((text_rope_emb, image_rope_emb), dim=2)
128
+
129
+ # first block
130
+ original_hidden_states = hidden_states
131
+ hidden_states, prompt_emb = self.blocks[0](hidden_states, prompt_emb, conditioning, rope_emb, image_emb)
132
+ first_hidden_states_residual = hidden_states - original_hidden_states
133
+
134
+ (first_hidden_states_residual,) = sequence_parallel_unshard(
135
+ (first_hidden_states_residual,), seq_dims=(1,), seq_lens=(h * w // 4,)
136
+ )
137
+
138
+ if self.step_count == 0 or self.step_count == (self.num_inference_steps - 1):
139
+ should_calc = True
140
+ else:
141
+ skip = self.is_relative_l1_below_threshold(
142
+ first_hidden_states_residual,
143
+ self.prev_first_hidden_states_residual,
144
+ threshold=self.relative_l1_threshold,
145
+ )
146
+ should_calc = not skip
147
+ self.step_count += 1
148
+
149
+ if not should_calc:
150
+ hidden_states += self.previous_residual
151
+ else:
152
+ self.prev_first_hidden_states_residual = first_hidden_states_residual
153
+
154
+ first_hidden_states = hidden_states.clone()
155
+ for i, block in enumerate(self.blocks[1:]):
156
+ hidden_states, prompt_emb = block(hidden_states, prompt_emb, conditioning, rope_emb, image_emb)
157
+ if len(controlnet_double_block_output) > 0:
158
+ interval_control = len(self.blocks) / len(controlnet_double_block_output)
159
+ interval_control = int(np.ceil(interval_control))
160
+ hidden_states = hidden_states + controlnet_double_block_output[i // interval_control]
161
+ hidden_states = torch.cat([prompt_emb, hidden_states], dim=1)
162
+ for i, block in enumerate(self.single_blocks):
163
+ hidden_states = block(hidden_states, conditioning, rope_emb, image_emb)
164
+ if len(controlnet_single_block_output) > 0:
165
+ interval_control = len(self.single_blocks) / len(controlnet_double_block_output)
166
+ interval_control = int(np.ceil(interval_control))
167
+ hidden_states = hidden_states + controlnet_single_block_output[i // interval_control]
168
+
169
+ hidden_states = hidden_states[:, prompt_emb.shape[1] :]
170
+
171
+ previous_residual = hidden_states - first_hidden_states
172
+ self.previous_residual = previous_residual
173
+
174
+ hidden_states = self.final_norm_out(hidden_states, conditioning)
175
+ hidden_states = self.final_proj_out(hidden_states)
176
+ (hidden_states,) = sequence_parallel_unshard((hidden_states,), seq_dims=(1,), seq_lens=(h * w // 4,))
177
+
178
+ hidden_states = self.unpatchify(hidden_states, h, w)
179
+ (hidden_states,) = cfg_parallel_unshard((hidden_states,), use_cfg=use_cfg)
180
+
181
+ return hidden_states
182
+
183
+ @classmethod
184
+ def from_state_dict(
185
+ cls,
186
+ state_dict: Dict[str, torch.Tensor],
187
+ device: str,
188
+ dtype: torch.dtype,
189
+ in_channel: int = 64,
190
+ attn_impl: Optional[str] = None,
191
+ fb_cache_relative_l1_threshold: float = 0.05,
192
+ ):
193
+ with no_init_weights():
194
+ model = torch.nn.utils.skip_init(
195
+ cls,
196
+ device=device,
197
+ dtype=dtype,
198
+ in_channel=in_channel,
199
+ attn_impl=attn_impl,
200
+ fb_cache_relative_l1_threshold=fb_cache_relative_l1_threshold,
201
+ )
202
+ model = model.requires_grad_(False) # for loading gguf
203
+ model.load_state_dict(state_dict, assign=True)
204
+ model.to(device=device, dtype=dtype, non_blocking=True)
205
+ return model