InvokeAI 5.3.1__tar.gz → 5.4.0__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 (608) hide show
  1. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/PKG-INFO +3 -3
  2. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/SOURCES.txt +9 -3
  3. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/requires.txt +2 -2
  4. {invokeai-5.3.1 → invokeai-5.4.0}/PKG-INFO +3 -3
  5. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/fields.py +12 -0
  6. invokeai-5.4.0/invokeai/app/invocations/flux_model_loader.py +89 -0
  7. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/model.py +1 -75
  8. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/primitives.py +12 -0
  9. invokeai-5.4.0/invokeai/app/invocations/sd3_denoise.py +260 -0
  10. invokeai-5.4.0/invokeai/app/invocations/sd3_latents_to_image.py +73 -0
  11. invokeai-5.4.0/invokeai/app/invocations/sd3_model_loader.py +108 -0
  12. invokeai-5.4.0/invokeai/app/invocations/sd3_text_encoder.py +199 -0
  13. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/segment_anything.py +4 -9
  14. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/model_records_base.py +2 -1
  15. invokeai-5.4.0/invokeai/app/services/workflow_records/default_workflows/SD3.5 Text to Image.json +382 -0
  16. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/step_callback.py +22 -0
  17. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/config.py +46 -1
  18. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +4 -4
  19. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +1 -7
  20. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/probe.py +67 -15
  21. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/starter_models.py +18 -0
  22. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/model_util.py +18 -0
  23. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/select_hf_files.py +16 -5
  24. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +24 -1
  25. invokeai-5.4.0/invokeai/frontend/web/dist/assets/App-Cgdz1lBg.js +122 -0
  26. invokeai-5.3.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-UZ5hK60i.js → invokeai-5.4.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-QXscVpCV.js +1 -1
  27. invokeai-5.4.0/invokeai/frontend/web/dist/assets/index-DT5PJ9-6.js +510 -0
  28. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/index.html +1 -1
  29. invokeai-5.4.0/invokeai/version/invokeai_version.py +1 -0
  30. {invokeai-5.3.1 → invokeai-5.4.0}/pyproject.toml +2 -2
  31. invokeai-5.3.1/invokeai/frontend/web/dist/assets/App-CX6bWf7A.js +0 -122
  32. invokeai-5.3.1/invokeai/frontend/web/dist/assets/index-ClIla1IK.js +0 -510
  33. invokeai-5.3.1/invokeai/version/invokeai_version.py +0 -1
  34. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
  35. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/entry_points.txt +0 -0
  36. {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/top_level.txt +0 -0
  37. {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE +0 -0
  38. {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE-SD1+SD2.txt +0 -0
  39. {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE-SDXL.txt +0 -0
  40. {invokeai-5.3.1 → invokeai-5.4.0}/README.md +0 -0
  41. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/__init__.py +0 -0
  42. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/dependencies.py +0 -0
  43. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
  44. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/app_info.py +0 -0
  45. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/board_images.py +0 -0
  46. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/boards.py +0 -0
  47. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/download_queue.py +0 -0
  48. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/images.py +0 -0
  49. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/model_manager.py +0 -0
  50. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/session_queue.py +0 -0
  51. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/style_presets.py +0 -0
  52. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/utilities.py +0 -0
  53. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/workflows.py +0 -0
  54. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/sockets.py +0 -0
  55. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api_app.py +0 -0
  56. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/assets/images/caution.png +0 -0
  57. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/__init__.py +0 -0
  58. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/baseinvocation.py +0 -0
  59. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/blend_latents.py +0 -0
  60. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/canny.py +0 -0
  61. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/collections.py +0 -0
  62. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/color_map.py +0 -0
  63. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/compel.py +0 -0
  64. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/constants.py +0 -0
  65. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/content_shuffle.py +0 -0
  66. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
  67. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
  68. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
  69. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/crop_latents.py +0 -0
  70. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
  71. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
  72. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/cv.py +0 -0
  73. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/denoise_latents.py +0 -0
  74. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/depth_anything.py +0 -0
  75. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/dw_openpose.py +0 -0
  76. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/facetools.py +0 -0
  77. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_controlnet.py +0 -0
  78. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_denoise.py +0 -0
  79. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_ip_adapter.py +0 -0
  80. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
  81. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
  82. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
  83. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
  84. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/grounding_dino.py +0 -0
  85. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/hed.py +0 -0
  86. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/ideal_size.py +0 -0
  87. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/image.py +0 -0
  88. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/image_to_latents.py +0 -0
  89. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/infill.py +0 -0
  90. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/ip_adapter.py +0 -0
  91. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/latents_to_image.py +0 -0
  92. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/lineart.py +0 -0
  93. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/lineart_anime.py +0 -0
  94. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mask.py +0 -0
  95. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/math.py +0 -0
  96. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
  97. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/metadata.py +0 -0
  98. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mlsd.py +0 -0
  99. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/noise.py +0 -0
  100. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/normal_bae.py +0 -0
  101. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/param_easing.py +0 -0
  102. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/pidi.py +0 -0
  103. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/prompt.py +0 -0
  104. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/resize_latents.py +0 -0
  105. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/scheduler.py +0 -0
  106. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/sdxl.py +0 -0
  107. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
  108. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/strings.py +0 -0
  109. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
  110. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
  111. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/tiles.py +0 -0
  112. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/upscale.py +0 -0
  113. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/util.py +0 -0
  114. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/run_app.py +0 -0
  115. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/__init__.py +0 -0
  116. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
  117. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
  118. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
  119. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/__init__.py +0 -0
  120. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
  121. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
  122. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
  123. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_base.py +0 -0
  124. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_common.py +0 -0
  125. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
  126. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/__init__.py +0 -0
  127. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_base.py +0 -0
  128. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_common.py +0 -0
  129. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_default.py +0 -0
  130. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
  131. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
  132. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
  133. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
  134. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/__init__.py +0 -0
  135. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/config_common.py +0 -0
  136. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/config_default.py +0 -0
  137. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/__init__.py +0 -0
  138. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/download_base.py +0 -0
  139. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/download_default.py +0 -0
  140. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/__init__.py +0 -0
  141. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_base.py +0 -0
  142. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_common.py +0 -0
  143. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
  144. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/__init__.py +0 -0
  145. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
  146. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
  147. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_disk.py +0 -0
  148. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/__init__.py +0 -0
  149. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
  150. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
  151. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
  152. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/__init__.py +0 -0
  153. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_base.py +0 -0
  154. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_common.py +0 -0
  155. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_default.py +0 -0
  156. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
  157. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
  158. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
  159. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
  160. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_services.py +0 -0
  161. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
  162. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
  163. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
  164. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
  165. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invoker.py +0 -0
  166. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/__init__.py +0 -0
  167. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
  168. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
  169. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
  170. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
  171. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
  172. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
  173. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/__init__.py +0 -0
  174. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
  175. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
  176. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
  177. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/__init__.py +0 -0
  178. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
  179. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
  180. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/__init__.py +0 -0
  181. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
  182. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
  183. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
  184. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/__init__.py +0 -0
  185. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
  186. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/__init__.py +0 -0
  187. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_base.py +0 -0
  188. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_common.py +0 -0
  189. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_default.py +0 -0
  190. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
  191. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
  192. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
  193. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
  194. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/__init__.py +0 -0
  195. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
  196. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
  197. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
  198. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/__init__.py +0 -0
  199. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
  200. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
  201. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
  202. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/__init__.py +0 -0
  203. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/graph.py +0 -0
  204. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/invocation_context.py +0 -0
  205. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/pagination.py +0 -0
  206. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
  207. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
  208. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
  209. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
  210. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
  211. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
  212. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
  213. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
  214. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
  215. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
  216. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
  217. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
  218. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
  219. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
  220. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
  221. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
  222. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
  223. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
  224. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
  225. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
  226. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
  227. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
  228. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
  229. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
  230. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
  231. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
  232. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
  233. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
  234. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
  235. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
  236. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
  237. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
  238. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
  239. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
  240. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
  241. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
  242. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
  243. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
  244. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
  245. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
  246. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
  247. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
  248. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
  249. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
  250. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
  251. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
  252. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
  253. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
  254. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
  255. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
  256. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/__init__.py +0 -0
  257. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/urls_base.py +0 -0
  258. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/urls_default.py +0 -0
  259. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
  260. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
  261. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
  262. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
  263. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
  264. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
  265. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
  266. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
  267. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
  268. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
  269. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
  270. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
  271. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
  272. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
  273. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
  274. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
  275. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/shared/__init__.py +0 -0
  276. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/shared/models.py +0 -0
  277. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/__init__.py +0 -0
  278. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/controlnet_utils.py +0 -0
  279. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/custom_openapi.py +0 -0
  280. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/metaenum.py +0 -0
  281. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/misc.py +0 -0
  282. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/model_exclude_null.py +0 -0
  283. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/profiler.py +0 -0
  284. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/suppress_output.py +0 -0
  285. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/thumbnails.py +0 -0
  286. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/ti_utils.py +0 -0
  287. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
  288. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/__init__.py +0 -0
  289. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/__init__.py +0 -0
  290. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/controlnet_flux_output.py +0 -0
  291. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +0 -0
  292. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/state_dict_utils.py +0 -0
  293. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +0 -0
  294. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/zero_module.py +0 -0
  295. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/custom_block_processor.py +0 -0
  296. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/denoise.py +0 -0
  297. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/__init__.py +0 -0
  298. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/base_controlnet_extension.py +0 -0
  299. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/inpaint_extension.py +0 -0
  300. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +0 -0
  301. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +0 -0
  302. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py +0 -0
  303. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/__init__.py +0 -0
  304. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py +0 -0
  305. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/state_dict_utils.py +0 -0
  306. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py +0 -0
  307. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/math.py +0 -0
  308. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/model.py +0 -0
  309. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
  310. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
  311. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/layers.py +0 -0
  312. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/sampling_utils.py +0 -0
  313. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/util.py +0 -0
  314. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/__init__.py +0 -0
  315. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
  316. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
  317. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
  318. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/canny.py +0 -0
  319. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
  320. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
  321. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
  322. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
  323. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
  324. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
  325. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
  326. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/__init__.py +0 -0
  327. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
  328. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
  329. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/hed.py +0 -0
  330. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
  331. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
  332. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
  333. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
  334. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
  335. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
  336. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/lineart.py +0 -0
  337. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
  338. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
  339. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
  340. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
  341. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/__init__.py +0 -0
  342. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
  343. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
  344. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
  345. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
  346. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
  347. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/__init__.py +0 -0
  348. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
  349. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/__init__.py +0 -0
  350. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
  351. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/__init__.py +0 -0
  352. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
  353. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
  354. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
  355. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
  356. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
  357. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
  358. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
  359. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
  360. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
  361. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
  362. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
  363. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
  364. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
  365. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
  366. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
  367. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
  368. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
  369. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
  370. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
  371. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
  372. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
  373. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
  374. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
  375. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
  376. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
  377. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
  378. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pidi/model.py +0 -0
  379. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pngwriter.py +0 -0
  380. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
  381. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
  382. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/safety_checker.py +0 -0
  383. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/__init__.py +0 -0
  384. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
  385. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -0
  386. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/util.py +0 -0
  387. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/__init__.py +0 -0
  388. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
  389. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
  390. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
  391. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/__init__.py +0 -0
  392. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/__init__.py +0 -0
  393. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
  394. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
  395. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
  396. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
  397. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
  398. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/__init__.py +0 -0
  399. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
  400. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
  401. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
  402. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
  403. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
  404. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
  405. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
  406. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
  407. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
  408. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/utils.py +0 -0
  409. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
  410. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/lora_patcher.py +0 -0
  411. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/__init__.py +0 -0
  412. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/__init__.py +0 -0
  413. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
  414. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora/__init__.py +0 -0
  415. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
  416. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
  417. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
  418. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
  419. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_hash/model_hash.py +0 -0
  420. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/__init__.py +0 -0
  421. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
  422. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
  423. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
  424. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
  425. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
  426. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
  427. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
  428. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
  429. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
  430. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
  431. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/clip_vision.py +0 -0
  432. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
  433. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
  434. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
  435. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
  436. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
  437. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
  438. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
  439. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
  440. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
  441. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
  442. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/merge.py +0 -0
  443. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
  444. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
  445. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
  446. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
  447. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
  448. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/search.py +0 -0
  449. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
  450. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_patcher.py +0 -0
  451. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
  452. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/__init__.py +0 -0
  453. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
  454. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
  455. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +0 -0
  456. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
  457. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
  458. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
  459. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
  460. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
  461. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/raw_model.py +0 -0
  462. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
  463. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
  464. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
  465. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
  466. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
  467. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
  468. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
  469. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
  470. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
  471. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
  472. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
  473. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
  474. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
  475. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
  476. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
  477. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
  478. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
  479. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
  480. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
  481. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
  482. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
  483. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
  484. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
  485. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
  486. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
  487. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
  488. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
  489. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/textual_inversion.py +0 -0
  490. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/__init__.py +0 -0
  491. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/tiles.py +0 -0
  492. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/utils.py +0 -0
  493. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/__init__.py +0 -0
  494. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/attention.py +0 -0
  495. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/build_line.py +0 -0
  496. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
  497. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/catch_sigint.py +0 -0
  498. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/db_maintenance.py +0 -0
  499. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/devices.py +0 -0
  500. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/hotfixes.py +0 -0
  501. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/logging.py +0 -0
  502. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/mask.py +0 -0
  503. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/mps_fixes.py +0 -0
  504. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/original_weights_storage.py +0 -0
  505. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/silence_warnings.py +0 -0
  506. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/test_utils.py +0 -0
  507. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/util.py +0 -0
  508. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
  509. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
  510. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
  511. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
  512. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
  513. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
  514. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
  515. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
  516. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
  517. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
  518. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
  519. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
  520. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
  521. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
  522. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
  523. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
  524. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/__init__.py +0 -0
  525. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/cli/__init__.py +0 -0
  526. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/cli/arg_parser.py +0 -0
  527. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/install/__init__.py +0 -0
  528. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/install/import_images.py +0 -0
  529. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/__init__.py +0 -0
  530. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
  531. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
  532. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
  533. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
  534. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
  535. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
  536. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
  537. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
  538. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
  539. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
  540. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
  541. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
  542. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
  543. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
  544. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
  545. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
  546. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
  547. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
  548. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
  549. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
  550. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
  551. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
  552. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
  553. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
  554. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
  555. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
  556. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
  557. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
  558. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
  559. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
  560. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
  561. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  562. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
  563. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
  564. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
  565. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
  566. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/de.json +0 -0
  567. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/en.json +0 -0
  568. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/es.json +0 -0
  569. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
  570. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/fr.json +0 -0
  571. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
  572. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
  573. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/it.json +0 -0
  574. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
  575. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
  576. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
  577. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
  578. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
  579. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
  580. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
  581. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
  582. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ru.json +0 -0
  583. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
  584. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
  585. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
  586. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
  587. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
  588. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
  589. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
  590. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
  591. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/invocation_api/__init__.py +0 -0
  592. {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/version/__init__.py +0 -0
  593. {invokeai-5.3.1 → invokeai-5.4.0}/setup.cfg +0 -0
  594. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_config.py +0 -0
  595. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_docs.py +0 -0
  596. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_graph_execution_state.py +0 -0
  597. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_invocation_cache_memory.py +0 -0
  598. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_item_storage_memory.py +0 -0
  599. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_hash.py +0 -0
  600. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_probe.py +0 -0
  601. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_search.py +0 -0
  602. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_node_graph.py +0 -0
  603. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_nodes.py +0 -0
  604. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_object_serializer_disk.py +0 -0
  605. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_path.py +0 -0
  606. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_profiler.py +0 -0
  607. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_session_queue.py +0 -0
  608. {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_sqlite_migrator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 5.3.1
3
+ Version: 5.4.0
4
4
  Summary: An implementation of Stable Diffusion which provides various new features and options to aid the image generation process
5
5
  Author-email: The InvokeAI Project <lincoln.stein@gmail.com>
6
6
  License: Apache License
@@ -217,7 +217,7 @@ Requires-Dist: controlnet-aux==0.0.7
217
217
  Requires-Dist: diffusers[torch]==0.31.0
218
218
  Requires-Dist: gguf==0.10.0
219
219
  Requires-Dist: invisible-watermark==0.2.0
220
- Requires-Dist: mediapipe>=0.10.7
220
+ Requires-Dist: mediapipe==0.10.14
221
221
  Requires-Dist: numpy<2.0.0
222
222
  Requires-Dist: onnx==1.16.1
223
223
  Requires-Dist: onnxruntime==1.19.2
@@ -227,7 +227,7 @@ Requires-Dist: safetensors==0.4.3
227
227
  Requires-Dist: sentencepiece==0.2.0
228
228
  Requires-Dist: spandrel==0.3.4
229
229
  Requires-Dist: timm==0.6.13
230
- Requires-Dist: torch
230
+ Requires-Dist: torch<2.5.0
231
231
  Requires-Dist: torchmetrics
232
232
  Requires-Dist: torchsde
233
233
  Requires-Dist: torchvision
@@ -49,6 +49,7 @@ invokeai/app/invocations/flux_controlnet.py
49
49
  invokeai/app/invocations/flux_denoise.py
50
50
  invokeai/app/invocations/flux_ip_adapter.py
51
51
  invokeai/app/invocations/flux_lora_loader.py
52
+ invokeai/app/invocations/flux_model_loader.py
52
53
  invokeai/app/invocations/flux_text_encoder.py
53
54
  invokeai/app/invocations/flux_vae_decode.py
54
55
  invokeai/app/invocations/flux_vae_encode.py
@@ -76,6 +77,10 @@ invokeai/app/invocations/primitives.py
76
77
  invokeai/app/invocations/prompt.py
77
78
  invokeai/app/invocations/resize_latents.py
78
79
  invokeai/app/invocations/scheduler.py
80
+ invokeai/app/invocations/sd3_denoise.py
81
+ invokeai/app/invocations/sd3_latents_to_image.py
82
+ invokeai/app/invocations/sd3_model_loader.py
83
+ invokeai/app/invocations/sd3_text_encoder.py
79
84
  invokeai/app/invocations/sdxl.py
80
85
  invokeai/app/invocations/segment_anything.py
81
86
  invokeai/app/invocations/spandrel_image_to_image.py
@@ -244,6 +249,7 @@ invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny
244
249
  invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json
245
250
  invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json
246
251
  invokeai/app/services/workflow_records/default_workflows/Prompt from File.json
252
+ invokeai/app/services/workflow_records/default_workflows/SD3.5 Text to Image.json
247
253
  invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json
248
254
  invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json
249
255
  invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json
@@ -513,12 +519,12 @@ invokeai/frontend/install/__init__.py
513
519
  invokeai/frontend/install/import_images.py
514
520
  invokeai/frontend/web/__init__.py
515
521
  invokeai/frontend/web/dist/index.html
516
- invokeai/frontend/web/dist/assets/App-CX6bWf7A.js
522
+ invokeai/frontend/web/dist/assets/App-Cgdz1lBg.js
517
523
  invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
518
524
  invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
519
- invokeai/frontend/web/dist/assets/ThemeLocaleProvider-UZ5hK60i.js
525
+ invokeai/frontend/web/dist/assets/ThemeLocaleProvider-QXscVpCV.js
520
526
  invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
521
- invokeai/frontend/web/dist/assets/index-ClIla1IK.js
527
+ invokeai/frontend/web/dist/assets/index-DT5PJ9-6.js
522
528
  invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
523
529
  invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
524
530
  invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
@@ -5,7 +5,7 @@ controlnet-aux==0.0.7
5
5
  diffusers[torch]==0.31.0
6
6
  gguf==0.10.0
7
7
  invisible-watermark==0.2.0
8
- mediapipe>=0.10.7
8
+ mediapipe==0.10.14
9
9
  numpy<2.0.0
10
10
  onnx==1.16.1
11
11
  onnxruntime==1.19.2
@@ -15,7 +15,7 @@ safetensors==0.4.3
15
15
  sentencepiece==0.2.0
16
16
  spandrel==0.3.4
17
17
  timm==0.6.13
18
- torch
18
+ torch<2.5.0
19
19
  torchmetrics
20
20
  torchsde
21
21
  torchvision
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 5.3.1
3
+ Version: 5.4.0
4
4
  Summary: An implementation of Stable Diffusion which provides various new features and options to aid the image generation process
5
5
  Author-email: The InvokeAI Project <lincoln.stein@gmail.com>
6
6
  License: Apache License
@@ -217,7 +217,7 @@ Requires-Dist: controlnet-aux==0.0.7
217
217
  Requires-Dist: diffusers[torch]==0.31.0
218
218
  Requires-Dist: gguf==0.10.0
219
219
  Requires-Dist: invisible-watermark==0.2.0
220
- Requires-Dist: mediapipe>=0.10.7
220
+ Requires-Dist: mediapipe==0.10.14
221
221
  Requires-Dist: numpy<2.0.0
222
222
  Requires-Dist: onnx==1.16.1
223
223
  Requires-Dist: onnxruntime==1.19.2
@@ -227,7 +227,7 @@ Requires-Dist: safetensors==0.4.3
227
227
  Requires-Dist: sentencepiece==0.2.0
228
228
  Requires-Dist: spandrel==0.3.4
229
229
  Requires-Dist: timm==0.6.13
230
- Requires-Dist: torch
230
+ Requires-Dist: torch<2.5.0
231
231
  Requires-Dist: torchmetrics
232
232
  Requires-Dist: torchsde
233
233
  Requires-Dist: torchvision
@@ -41,6 +41,7 @@ class UIType(str, Enum, metaclass=MetaEnum):
41
41
  # region Model Field Types
42
42
  MainModel = "MainModelField"
43
43
  FluxMainModel = "FluxMainModelField"
44
+ SD3MainModel = "SD3MainModelField"
44
45
  SDXLMainModel = "SDXLMainModelField"
45
46
  SDXLRefinerModel = "SDXLRefinerModelField"
46
47
  ONNXModel = "ONNXModelField"
@@ -52,6 +53,8 @@ class UIType(str, Enum, metaclass=MetaEnum):
52
53
  T2IAdapterModel = "T2IAdapterModelField"
53
54
  T5EncoderModel = "T5EncoderModelField"
54
55
  CLIPEmbedModel = "CLIPEmbedModelField"
56
+ CLIPLEmbedModel = "CLIPLEmbedModelField"
57
+ CLIPGEmbedModel = "CLIPGEmbedModelField"
55
58
  SpandrelImageToImageModel = "SpandrelImageToImageModelField"
56
59
  # endregion
57
60
 
@@ -131,8 +134,10 @@ class FieldDescriptions:
131
134
  clip = "CLIP (tokenizer, text encoder, LoRAs) and skipped layer count"
132
135
  t5_encoder = "T5 tokenizer and text encoder"
133
136
  clip_embed_model = "CLIP Embed loader"
137
+ clip_g_model = "CLIP-G Embed loader"
134
138
  unet = "UNet (scheduler, LoRAs)"
135
139
  transformer = "Transformer"
140
+ mmditx = "MMDiTX"
136
141
  vae = "VAE"
137
142
  cond = "Conditioning tensor"
138
143
  controlnet_model = "ControlNet model to load"
@@ -140,6 +145,7 @@ class FieldDescriptions:
140
145
  lora_model = "LoRA model to load"
141
146
  main_model = "Main model (UNet, VAE, CLIP) to load"
142
147
  flux_model = "Flux model (Transformer) to load"
148
+ sd3_model = "SD3 model (MMDiTX) to load"
143
149
  sdxl_main_model = "SDXL Main model (UNet, VAE, CLIP1, CLIP2) to load"
144
150
  sdxl_refiner_model = "SDXL Refiner Main Modde (UNet, VAE, CLIP2) to load"
145
151
  onnx_main_model = "ONNX Main model (UNet, VAE, CLIP) to load"
@@ -246,6 +252,12 @@ class FluxConditioningField(BaseModel):
246
252
  conditioning_name: str = Field(description="The name of conditioning tensor")
247
253
 
248
254
 
255
+ class SD3ConditioningField(BaseModel):
256
+ """A conditioning tensor primitive value"""
257
+
258
+ conditioning_name: str = Field(description="The name of conditioning tensor")
259
+
260
+
249
261
  class ConditioningField(BaseModel):
250
262
  """A conditioning tensor primitive value"""
251
263
 
@@ -0,0 +1,89 @@
1
+ from typing import Literal
2
+
3
+ from invokeai.app.invocations.baseinvocation import (
4
+ BaseInvocation,
5
+ BaseInvocationOutput,
6
+ Classification,
7
+ invocation,
8
+ invocation_output,
9
+ )
10
+ from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
11
+ from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
12
+ from invokeai.app.services.shared.invocation_context import InvocationContext
13
+ from invokeai.backend.flux.util import max_seq_lengths
14
+ from invokeai.backend.model_manager.config import (
15
+ CheckpointConfigBase,
16
+ SubModelType,
17
+ )
18
+
19
+
20
+ @invocation_output("flux_model_loader_output")
21
+ class FluxModelLoaderOutput(BaseInvocationOutput):
22
+ """Flux base model loader output"""
23
+
24
+ transformer: TransformerField = OutputField(description=FieldDescriptions.transformer, title="Transformer")
25
+ clip: CLIPField = OutputField(description=FieldDescriptions.clip, title="CLIP")
26
+ t5_encoder: T5EncoderField = OutputField(description=FieldDescriptions.t5_encoder, title="T5 Encoder")
27
+ vae: VAEField = OutputField(description=FieldDescriptions.vae, title="VAE")
28
+ max_seq_len: Literal[256, 512] = OutputField(
29
+ description="The max sequence length to used for the T5 encoder. (256 for schnell transformer, 512 for dev transformer)",
30
+ title="Max Seq Length",
31
+ )
32
+
33
+
34
+ @invocation(
35
+ "flux_model_loader",
36
+ title="Flux Main Model",
37
+ tags=["model", "flux"],
38
+ category="model",
39
+ version="1.0.4",
40
+ classification=Classification.Prototype,
41
+ )
42
+ class FluxModelLoaderInvocation(BaseInvocation):
43
+ """Loads a flux base model, outputting its submodels."""
44
+
45
+ model: ModelIdentifierField = InputField(
46
+ description=FieldDescriptions.flux_model,
47
+ ui_type=UIType.FluxMainModel,
48
+ input=Input.Direct,
49
+ )
50
+
51
+ t5_encoder_model: ModelIdentifierField = InputField(
52
+ description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
53
+ )
54
+
55
+ clip_embed_model: ModelIdentifierField = InputField(
56
+ description=FieldDescriptions.clip_embed_model,
57
+ ui_type=UIType.CLIPEmbedModel,
58
+ input=Input.Direct,
59
+ title="CLIP Embed",
60
+ )
61
+
62
+ vae_model: ModelIdentifierField = InputField(
63
+ description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
64
+ )
65
+
66
+ def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
67
+ for key in [self.model.key, self.t5_encoder_model.key, self.clip_embed_model.key, self.vae_model.key]:
68
+ if not context.models.exists(key):
69
+ raise ValueError(f"Unknown model: {key}")
70
+
71
+ transformer = self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
72
+ vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
73
+
74
+ tokenizer = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
75
+ clip_encoder = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
76
+
77
+ tokenizer2 = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer2})
78
+ t5_encoder = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder2})
79
+
80
+ transformer_config = context.models.get_config(transformer)
81
+ assert isinstance(transformer_config, CheckpointConfigBase)
82
+
83
+ return FluxModelLoaderOutput(
84
+ transformer=TransformerField(transformer=transformer, loras=[]),
85
+ clip=CLIPField(tokenizer=tokenizer, text_encoder=clip_encoder, loras=[], skipped_layers=0),
86
+ t5_encoder=T5EncoderField(tokenizer=tokenizer2, text_encoder=t5_encoder),
87
+ vae=VAEField(vae=vae),
88
+ max_seq_len=max_seq_lengths[transformer_config.config_path],
89
+ )
@@ -1,5 +1,5 @@
1
1
  import copy
2
- from typing import List, Literal, Optional
2
+ from typing import List, Optional
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -13,11 +13,9 @@ from invokeai.app.invocations.baseinvocation import (
13
13
  from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
14
14
  from invokeai.app.services.shared.invocation_context import InvocationContext
15
15
  from invokeai.app.shared.models import FreeUConfig
16
- from invokeai.backend.flux.util import max_seq_lengths
17
16
  from invokeai.backend.model_manager.config import (
18
17
  AnyModelConfig,
19
18
  BaseModelType,
20
- CheckpointConfigBase,
21
19
  ModelType,
22
20
  SubModelType,
23
21
  )
@@ -139,78 +137,6 @@ class ModelIdentifierInvocation(BaseInvocation):
139
137
  return ModelIdentifierOutput(model=self.model)
140
138
 
141
139
 
142
- @invocation_output("flux_model_loader_output")
143
- class FluxModelLoaderOutput(BaseInvocationOutput):
144
- """Flux base model loader output"""
145
-
146
- transformer: TransformerField = OutputField(description=FieldDescriptions.transformer, title="Transformer")
147
- clip: CLIPField = OutputField(description=FieldDescriptions.clip, title="CLIP")
148
- t5_encoder: T5EncoderField = OutputField(description=FieldDescriptions.t5_encoder, title="T5 Encoder")
149
- vae: VAEField = OutputField(description=FieldDescriptions.vae, title="VAE")
150
- max_seq_len: Literal[256, 512] = OutputField(
151
- description="The max sequence length to used for the T5 encoder. (256 for schnell transformer, 512 for dev transformer)",
152
- title="Max Seq Length",
153
- )
154
-
155
-
156
- @invocation(
157
- "flux_model_loader",
158
- title="Flux Main Model",
159
- tags=["model", "flux"],
160
- category="model",
161
- version="1.0.4",
162
- classification=Classification.Prototype,
163
- )
164
- class FluxModelLoaderInvocation(BaseInvocation):
165
- """Loads a flux base model, outputting its submodels."""
166
-
167
- model: ModelIdentifierField = InputField(
168
- description=FieldDescriptions.flux_model,
169
- ui_type=UIType.FluxMainModel,
170
- input=Input.Direct,
171
- )
172
-
173
- t5_encoder_model: ModelIdentifierField = InputField(
174
- description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
175
- )
176
-
177
- clip_embed_model: ModelIdentifierField = InputField(
178
- description=FieldDescriptions.clip_embed_model,
179
- ui_type=UIType.CLIPEmbedModel,
180
- input=Input.Direct,
181
- title="CLIP Embed",
182
- )
183
-
184
- vae_model: ModelIdentifierField = InputField(
185
- description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
186
- )
187
-
188
- def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
189
- for key in [self.model.key, self.t5_encoder_model.key, self.clip_embed_model.key, self.vae_model.key]:
190
- if not context.models.exists(key):
191
- raise ValueError(f"Unknown model: {key}")
192
-
193
- transformer = self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
194
- vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
195
-
196
- tokenizer = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
197
- clip_encoder = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
198
-
199
- tokenizer2 = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer2})
200
- t5_encoder = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder2})
201
-
202
- transformer_config = context.models.get_config(transformer)
203
- assert isinstance(transformer_config, CheckpointConfigBase)
204
-
205
- return FluxModelLoaderOutput(
206
- transformer=TransformerField(transformer=transformer, loras=[]),
207
- clip=CLIPField(tokenizer=tokenizer, text_encoder=clip_encoder, loras=[], skipped_layers=0),
208
- t5_encoder=T5EncoderField(tokenizer=tokenizer2, text_encoder=t5_encoder),
209
- vae=VAEField(vae=vae),
210
- max_seq_len=max_seq_lengths[transformer_config.config_path],
211
- )
212
-
213
-
214
140
  @invocation(
215
141
  "main_model_loader",
216
142
  title="Main Model",
@@ -18,6 +18,7 @@ from invokeai.app.invocations.fields import (
18
18
  InputField,
19
19
  LatentsField,
20
20
  OutputField,
21
+ SD3ConditioningField,
21
22
  TensorField,
22
23
  UIComponent,
23
24
  )
@@ -426,6 +427,17 @@ class FluxConditioningOutput(BaseInvocationOutput):
426
427
  return cls(conditioning=FluxConditioningField(conditioning_name=conditioning_name))
427
428
 
428
429
 
430
+ @invocation_output("sd3_conditioning_output")
431
+ class SD3ConditioningOutput(BaseInvocationOutput):
432
+ """Base class for nodes that output a single SD3 conditioning tensor"""
433
+
434
+ conditioning: SD3ConditioningField = OutputField(description=FieldDescriptions.cond)
435
+
436
+ @classmethod
437
+ def build(cls, conditioning_name: str) -> "SD3ConditioningOutput":
438
+ return cls(conditioning=SD3ConditioningField(conditioning_name=conditioning_name))
439
+
440
+
429
441
  @invocation_output("conditioning_output")
430
442
  class ConditioningOutput(BaseInvocationOutput):
431
443
  """Base class for nodes that output a single conditioning tensor"""
@@ -0,0 +1,260 @@
1
+ from typing import Callable, Tuple
2
+
3
+ import torch
4
+ from diffusers.models.transformers.transformer_sd3 import SD3Transformer2DModel
5
+ from diffusers.schedulers.scheduling_flow_match_euler_discrete import FlowMatchEulerDiscreteScheduler
6
+ from tqdm import tqdm
7
+
8
+ from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
9
+ from invokeai.app.invocations.constants import LATENT_SCALE_FACTOR
10
+ from invokeai.app.invocations.fields import (
11
+ FieldDescriptions,
12
+ Input,
13
+ InputField,
14
+ SD3ConditioningField,
15
+ WithBoard,
16
+ WithMetadata,
17
+ )
18
+ from invokeai.app.invocations.model import TransformerField
19
+ from invokeai.app.invocations.primitives import LatentsOutput
20
+ from invokeai.app.invocations.sd3_text_encoder import SD3_T5_MAX_SEQ_LEN
21
+ from invokeai.app.services.shared.invocation_context import InvocationContext
22
+ from invokeai.backend.model_manager.config import BaseModelType
23
+ from invokeai.backend.stable_diffusion.diffusers_pipeline import PipelineIntermediateState
24
+ from invokeai.backend.stable_diffusion.diffusion.conditioning_data import SD3ConditioningInfo
25
+ from invokeai.backend.util.devices import TorchDevice
26
+
27
+
28
+ @invocation(
29
+ "sd3_denoise",
30
+ title="SD3 Denoise",
31
+ tags=["image", "sd3"],
32
+ category="image",
33
+ version="1.0.0",
34
+ classification=Classification.Prototype,
35
+ )
36
+ class SD3DenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
37
+ """Run denoising process with a SD3 model."""
38
+
39
+ transformer: TransformerField = InputField(
40
+ description=FieldDescriptions.sd3_model,
41
+ input=Input.Connection,
42
+ title="Transformer",
43
+ )
44
+ positive_conditioning: SD3ConditioningField = InputField(
45
+ description=FieldDescriptions.positive_cond, input=Input.Connection
46
+ )
47
+ negative_conditioning: SD3ConditioningField = InputField(
48
+ description=FieldDescriptions.negative_cond, input=Input.Connection
49
+ )
50
+ cfg_scale: float | list[float] = InputField(default=3.5, description=FieldDescriptions.cfg_scale, title="CFG Scale")
51
+ width: int = InputField(default=1024, multiple_of=16, description="Width of the generated image.")
52
+ height: int = InputField(default=1024, multiple_of=16, description="Height of the generated image.")
53
+ steps: int = InputField(default=10, gt=0, description=FieldDescriptions.steps)
54
+ seed: int = InputField(default=0, description="Randomness seed for reproducibility.")
55
+
56
+ @torch.no_grad()
57
+ def invoke(self, context: InvocationContext) -> LatentsOutput:
58
+ latents = self._run_diffusion(context)
59
+ latents = latents.detach().to("cpu")
60
+
61
+ name = context.tensors.save(tensor=latents)
62
+ return LatentsOutput.build(latents_name=name, latents=latents, seed=None)
63
+
64
+ def _load_text_conditioning(
65
+ self,
66
+ context: InvocationContext,
67
+ conditioning_name: str,
68
+ joint_attention_dim: int,
69
+ dtype: torch.dtype,
70
+ device: torch.device,
71
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
72
+ # Load the conditioning data.
73
+ cond_data = context.conditioning.load(conditioning_name)
74
+ assert len(cond_data.conditionings) == 1
75
+ sd3_conditioning = cond_data.conditionings[0]
76
+ assert isinstance(sd3_conditioning, SD3ConditioningInfo)
77
+ sd3_conditioning = sd3_conditioning.to(dtype=dtype, device=device)
78
+
79
+ t5_embeds = sd3_conditioning.t5_embeds
80
+ if t5_embeds is None:
81
+ t5_embeds = torch.zeros(
82
+ (1, SD3_T5_MAX_SEQ_LEN, joint_attention_dim),
83
+ device=device,
84
+ dtype=dtype,
85
+ )
86
+
87
+ clip_prompt_embeds = torch.cat([sd3_conditioning.clip_l_embeds, sd3_conditioning.clip_g_embeds], dim=-1)
88
+ clip_prompt_embeds = torch.nn.functional.pad(
89
+ clip_prompt_embeds, (0, t5_embeds.shape[-1] - clip_prompt_embeds.shape[-1])
90
+ )
91
+
92
+ prompt_embeds = torch.cat([clip_prompt_embeds, t5_embeds], dim=-2)
93
+ pooled_prompt_embeds = torch.cat(
94
+ [sd3_conditioning.clip_l_pooled_embeds, sd3_conditioning.clip_g_pooled_embeds], dim=-1
95
+ )
96
+
97
+ return prompt_embeds, pooled_prompt_embeds
98
+
99
+ def _get_noise(
100
+ self,
101
+ num_samples: int,
102
+ num_channels_latents: int,
103
+ height: int,
104
+ width: int,
105
+ dtype: torch.dtype,
106
+ device: torch.device,
107
+ seed: int,
108
+ ) -> torch.Tensor:
109
+ # We always generate noise on the same device and dtype then cast to ensure consistency across devices/dtypes.
110
+ rand_device = "cpu"
111
+ rand_dtype = torch.float16
112
+
113
+ return torch.randn(
114
+ num_samples,
115
+ num_channels_latents,
116
+ int(height) // LATENT_SCALE_FACTOR,
117
+ int(width) // LATENT_SCALE_FACTOR,
118
+ device=rand_device,
119
+ dtype=rand_dtype,
120
+ generator=torch.Generator(device=rand_device).manual_seed(seed),
121
+ ).to(device=device, dtype=dtype)
122
+
123
+ def _prepare_cfg_scale(self, num_timesteps: int) -> list[float]:
124
+ """Prepare the CFG scale list.
125
+
126
+ Args:
127
+ num_timesteps (int): The number of timesteps in the scheduler. Could be different from num_steps depending
128
+ on the scheduler used (e.g. higher order schedulers).
129
+
130
+ Returns:
131
+ list[float]: _description_
132
+ """
133
+ if isinstance(self.cfg_scale, float):
134
+ cfg_scale = [self.cfg_scale] * num_timesteps
135
+ elif isinstance(self.cfg_scale, list):
136
+ assert len(self.cfg_scale) == num_timesteps
137
+ cfg_scale = self.cfg_scale
138
+ else:
139
+ raise ValueError(f"Invalid CFG scale type: {type(self.cfg_scale)}")
140
+
141
+ return cfg_scale
142
+
143
+ def _run_diffusion(
144
+ self,
145
+ context: InvocationContext,
146
+ ):
147
+ inference_dtype = TorchDevice.choose_torch_dtype()
148
+ device = TorchDevice.choose_torch_device()
149
+
150
+ transformer_info = context.models.load(self.transformer.transformer)
151
+
152
+ # Load/process the conditioning data.
153
+ # TODO(ryand): Make CFG optional.
154
+ do_classifier_free_guidance = True
155
+ pos_prompt_embeds, pos_pooled_prompt_embeds = self._load_text_conditioning(
156
+ context=context,
157
+ conditioning_name=self.positive_conditioning.conditioning_name,
158
+ joint_attention_dim=transformer_info.model.config.joint_attention_dim,
159
+ dtype=inference_dtype,
160
+ device=device,
161
+ )
162
+ neg_prompt_embeds, neg_pooled_prompt_embeds = self._load_text_conditioning(
163
+ context=context,
164
+ conditioning_name=self.negative_conditioning.conditioning_name,
165
+ joint_attention_dim=transformer_info.model.config.joint_attention_dim,
166
+ dtype=inference_dtype,
167
+ device=device,
168
+ )
169
+ # TODO(ryand): Support both sequential and batched CFG inference.
170
+ prompt_embeds = torch.cat([neg_prompt_embeds, pos_prompt_embeds], dim=0)
171
+ pooled_prompt_embeds = torch.cat([neg_pooled_prompt_embeds, pos_pooled_prompt_embeds], dim=0)
172
+
173
+ # Prepare the scheduler.
174
+ scheduler = FlowMatchEulerDiscreteScheduler()
175
+ scheduler.set_timesteps(num_inference_steps=self.steps, device=device)
176
+ timesteps = scheduler.timesteps
177
+ assert isinstance(timesteps, torch.Tensor)
178
+
179
+ # Prepare the CFG scale list.
180
+ cfg_scale = self._prepare_cfg_scale(len(timesteps))
181
+
182
+ # Generate initial latent noise.
183
+ num_channels_latents = transformer_info.model.config.in_channels
184
+ assert isinstance(num_channels_latents, int)
185
+ noise = self._get_noise(
186
+ num_samples=1,
187
+ num_channels_latents=num_channels_latents,
188
+ height=self.height,
189
+ width=self.width,
190
+ dtype=inference_dtype,
191
+ device=device,
192
+ seed=self.seed,
193
+ )
194
+ latents: torch.Tensor = noise
195
+
196
+ total_steps = len(timesteps)
197
+ step_callback = self._build_step_callback(context)
198
+
199
+ step_callback(
200
+ PipelineIntermediateState(
201
+ step=0,
202
+ order=1,
203
+ total_steps=total_steps,
204
+ timestep=int(timesteps[0]),
205
+ latents=latents,
206
+ ),
207
+ )
208
+
209
+ with transformer_info.model_on_device() as (cached_weights, transformer):
210
+ assert isinstance(transformer, SD3Transformer2DModel)
211
+
212
+ # 6. Denoising loop
213
+ for step_idx, t in tqdm(list(enumerate(timesteps))):
214
+ # Expand the latents if we are doing CFG.
215
+ latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents
216
+ # Expand the timestep to match the latent model input.
217
+ timestep = t.expand(latent_model_input.shape[0])
218
+
219
+ noise_pred = transformer(
220
+ hidden_states=latent_model_input,
221
+ timestep=timestep,
222
+ encoder_hidden_states=prompt_embeds,
223
+ pooled_projections=pooled_prompt_embeds,
224
+ joint_attention_kwargs=None,
225
+ return_dict=False,
226
+ )[0]
227
+
228
+ # Apply CFG.
229
+ if do_classifier_free_guidance:
230
+ noise_pred_uncond, noise_pred_cond = noise_pred.chunk(2)
231
+ noise_pred = noise_pred_uncond + cfg_scale[step_idx] * (noise_pred_cond - noise_pred_uncond)
232
+
233
+ # Compute the previous noisy sample x_t -> x_t-1.
234
+ latents_dtype = latents.dtype
235
+ latents = scheduler.step(model_output=noise_pred, timestep=t, sample=latents, return_dict=False)[0]
236
+
237
+ # TODO(ryand): This MPS dtype handling was copied from diffusers, I haven't tested to see if it's
238
+ # needed.
239
+ if latents.dtype != latents_dtype:
240
+ if torch.backends.mps.is_available():
241
+ # some platforms (eg. apple mps) misbehave due to a pytorch bug: https://github.com/pytorch/pytorch/pull/99272
242
+ latents = latents.to(latents_dtype)
243
+
244
+ step_callback(
245
+ PipelineIntermediateState(
246
+ step=step_idx + 1,
247
+ order=1,
248
+ total_steps=total_steps,
249
+ timestep=int(t),
250
+ latents=latents,
251
+ ),
252
+ )
253
+
254
+ return latents
255
+
256
+ def _build_step_callback(self, context: InvocationContext) -> Callable[[PipelineIntermediateState], None]:
257
+ def step_callback(state: PipelineIntermediateState) -> None:
258
+ context.util.sd_step_callback(state, BaseModelType.StableDiffusion3)
259
+
260
+ return step_callback