InvokeAI 5.1.1__tar.gz → 5.2.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 (595) hide show
  1. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/PKG-INFO +3 -3
  2. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/SOURCES.txt +15 -4
  3. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/requires.txt +2 -2
  4. {invokeai-5.1.1 → invokeai-5.2.0}/PKG-INFO +3 -3
  5. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/boards.py +6 -3
  6. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/model_manager.py +39 -8
  7. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/workflows.py +1 -1
  8. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/fields.py +1 -0
  9. invokeai-5.2.0/invokeai/app/invocations/flux_controlnet.py +99 -0
  10. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_denoise.py +130 -10
  11. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_base.py +11 -3
  12. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_common.py +9 -0
  13. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_sqlite.py +34 -19
  14. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_base.py +11 -3
  15. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_default.py +15 -5
  16. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_base.py +1 -1
  17. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +8 -17
  18. invokeai-5.2.0/invokeai/backend/flux/controlnet/controlnet_flux_output.py +58 -0
  19. invokeai-5.2.0/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +180 -0
  20. invokeai-5.2.0/invokeai/backend/flux/controlnet/state_dict_utils.py +295 -0
  21. invokeai-5.2.0/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +130 -0
  22. invokeai-5.2.0/invokeai/backend/flux/controlnet/zero_module.py +12 -0
  23. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/denoise.py +31 -1
  24. invokeai-5.2.0/invokeai/backend/flux/extensions/base_controlnet_extension.py +45 -0
  25. invokeai-5.2.0/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +194 -0
  26. invokeai-5.2.0/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +150 -0
  27. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/model.py +20 -3
  28. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +22 -3
  29. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +59 -0
  30. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/probe.py +37 -16
  31. invokeai-5.2.0/invokeai/backend/model_manager/starter_models.py +653 -0
  32. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +26 -11
  33. invokeai-5.2.0/invokeai/backend/tiles/__init__.py +0 -0
  34. invokeai-5.2.0/invokeai/frontend/cli/__init__.py +0 -0
  35. invokeai-5.2.0/invokeai/frontend/web/dist/assets/App-B7TWqqSi.js +122 -0
  36. invokeai-5.1.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-Djtn-j09.js → invokeai-5.2.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-BHgh8vF3.js +1 -1
  37. invokeai-5.2.0/invokeai/frontend/web/dist/assets/index-pJtvKw6b.js +510 -0
  38. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/index.html +1 -1
  39. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/de.json +115 -8
  40. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/en.json +41 -8
  41. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/es.json +17 -2
  42. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/fr.json +960 -46
  43. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/it.json +25 -9
  44. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ru.json +14 -6
  45. invokeai-5.2.0/invokeai/version/invokeai_version.py +1 -0
  46. {invokeai-5.1.1 → invokeai-5.2.0}/pyproject.toml +2 -2
  47. invokeai-5.1.1/invokeai/backend/model_manager/starter_models.py +0 -528
  48. invokeai-5.1.1/invokeai/frontend/web/dist/assets/App-8bkD1zLK.js +0 -124
  49. invokeai-5.1.1/invokeai/frontend/web/dist/assets/index-BCfBeBaM.js +0 -509
  50. invokeai-5.1.1/invokeai/version/invokeai_version.py +0 -1
  51. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
  52. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/entry_points.txt +0 -0
  53. {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/top_level.txt +0 -0
  54. {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE +0 -0
  55. {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE-SD1+SD2.txt +0 -0
  56. {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE-SDXL.txt +0 -0
  57. {invokeai-5.1.1 → invokeai-5.2.0}/README.md +0 -0
  58. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/__init__.py +0 -0
  59. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/dependencies.py +0 -0
  60. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
  61. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/app_info.py +0 -0
  62. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/board_images.py +0 -0
  63. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/download_queue.py +0 -0
  64. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/images.py +0 -0
  65. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/session_queue.py +0 -0
  66. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/style_presets.py +0 -0
  67. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/utilities.py +0 -0
  68. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/sockets.py +0 -0
  69. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api_app.py +0 -0
  70. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/assets/images/caution.png +0 -0
  71. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/__init__.py +0 -0
  72. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/baseinvocation.py +0 -0
  73. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/blend_latents.py +0 -0
  74. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/canny.py +0 -0
  75. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/collections.py +0 -0
  76. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/color_map.py +0 -0
  77. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/compel.py +0 -0
  78. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/constants.py +0 -0
  79. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/content_shuffle.py +0 -0
  80. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
  81. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
  82. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
  83. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/crop_latents.py +0 -0
  84. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
  85. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
  86. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/cv.py +0 -0
  87. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/denoise_latents.py +0 -0
  88. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/depth_anything.py +0 -0
  89. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/dw_openpose.py +0 -0
  90. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/facetools.py +0 -0
  91. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
  92. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
  93. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
  94. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
  95. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/grounding_dino.py +0 -0
  96. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/hed.py +0 -0
  97. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/ideal_size.py +0 -0
  98. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/image.py +0 -0
  99. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/image_to_latents.py +0 -0
  100. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/infill.py +0 -0
  101. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/ip_adapter.py +0 -0
  102. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/latents_to_image.py +0 -0
  103. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/lineart.py +0 -0
  104. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/lineart_anime.py +0 -0
  105. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mask.py +0 -0
  106. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/math.py +0 -0
  107. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
  108. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/metadata.py +0 -0
  109. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mlsd.py +0 -0
  110. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/model.py +0 -0
  111. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/noise.py +0 -0
  112. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/normal_bae.py +0 -0
  113. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/param_easing.py +0 -0
  114. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/pidi.py +0 -0
  115. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/primitives.py +0 -0
  116. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/prompt.py +0 -0
  117. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/resize_latents.py +0 -0
  118. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/scheduler.py +0 -0
  119. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/sdxl.py +0 -0
  120. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/segment_anything.py +0 -0
  121. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
  122. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/strings.py +0 -0
  123. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
  124. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
  125. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/tiles.py +0 -0
  126. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/upscale.py +0 -0
  127. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/util.py +0 -0
  128. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/run_app.py +0 -0
  129. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/__init__.py +0 -0
  130. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
  131. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
  132. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
  133. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/__init__.py +0 -0
  134. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
  135. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
  136. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
  137. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/__init__.py +0 -0
  138. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_common.py +0 -0
  139. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
  140. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
  141. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
  142. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
  143. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/__init__.py +0 -0
  144. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/config_common.py +0 -0
  145. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/config_default.py +0 -0
  146. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/__init__.py +0 -0
  147. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/download_base.py +0 -0
  148. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/download_default.py +0 -0
  149. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/__init__.py +0 -0
  150. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_base.py +0 -0
  151. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_common.py +0 -0
  152. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
  153. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/__init__.py +0 -0
  154. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
  155. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
  156. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_disk.py +0 -0
  157. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/__init__.py +0 -0
  158. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
  159. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
  160. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
  161. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/__init__.py +0 -0
  162. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_base.py +0 -0
  163. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_common.py +0 -0
  164. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_default.py +0 -0
  165. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
  166. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
  167. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
  168. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
  169. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_services.py +0 -0
  170. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
  171. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
  172. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
  173. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
  174. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invoker.py +0 -0
  175. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/__init__.py +0 -0
  176. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
  177. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
  178. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
  179. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
  180. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
  181. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
  182. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/__init__.py +0 -0
  183. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
  184. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
  185. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
  186. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/__init__.py +0 -0
  187. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
  188. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
  189. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/__init__.py +0 -0
  190. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
  191. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
  192. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
  193. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/__init__.py +0 -0
  194. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/model_records_base.py +0 -0
  195. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
  196. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/__init__.py +0 -0
  197. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_base.py +0 -0
  198. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_common.py +0 -0
  199. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_default.py +0 -0
  200. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
  201. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
  202. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
  203. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
  204. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/__init__.py +0 -0
  205. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
  206. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
  207. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
  208. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/__init__.py +0 -0
  209. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
  210. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
  211. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
  212. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/__init__.py +0 -0
  213. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/graph.py +0 -0
  214. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/invocation_context.py +0 -0
  215. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/pagination.py +0 -0
  216. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
  217. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
  218. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
  219. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
  220. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
  221. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
  222. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
  223. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
  224. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
  225. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
  226. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
  227. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
  228. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
  229. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
  230. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
  231. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
  232. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
  233. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
  234. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
  235. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
  236. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
  237. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
  238. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
  239. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
  240. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
  241. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
  242. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
  243. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
  244. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
  245. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
  246. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
  247. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
  248. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
  249. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
  250. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
  251. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
  252. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
  253. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
  254. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
  255. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
  256. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
  257. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
  258. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
  259. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
  260. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
  261. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
  262. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
  263. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
  264. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
  265. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
  266. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/__init__.py +0 -0
  267. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/urls_base.py +0 -0
  268. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/urls_default.py +0 -0
  269. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
  270. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
  271. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
  272. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
  273. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
  274. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
  275. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
  276. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
  277. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
  278. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
  279. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
  280. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
  281. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
  282. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
  283. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/shared/__init__.py +0 -0
  284. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/shared/models.py +0 -0
  285. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/__init__.py +0 -0
  286. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/controlnet_utils.py +0 -0
  287. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/custom_openapi.py +0 -0
  288. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/metaenum.py +0 -0
  289. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/misc.py +0 -0
  290. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/model_exclude_null.py +0 -0
  291. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/profiler.py +0 -0
  292. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/step_callback.py +0 -0
  293. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/suppress_output.py +0 -0
  294. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/thumbnails.py +0 -0
  295. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/ti_utils.py +0 -0
  296. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
  297. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/__init__.py +0 -0
  298. {invokeai-5.1.1/invokeai/backend/image_util/grounding_dino → invokeai-5.2.0/invokeai/backend/flux/controlnet}/__init__.py +0 -0
  299. {invokeai-5.1.1/invokeai/backend/image_util/mlsd/models → invokeai-5.2.0/invokeai/backend/flux/extensions}/__init__.py +0 -0
  300. {invokeai-5.1.1/invokeai/backend/flux → invokeai-5.2.0/invokeai/backend/flux/extensions}/inpaint_extension.py +0 -0
  301. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/math.py +0 -0
  302. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
  303. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
  304. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/layers.py +0 -0
  305. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/sampling_utils.py +0 -0
  306. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/util.py +0 -0
  307. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/__init__.py +0 -0
  308. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
  309. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
  310. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
  311. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/canny.py +0 -0
  312. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
  313. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
  314. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
  315. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
  316. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
  317. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
  318. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
  319. {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets → invokeai-5.2.0/invokeai/backend/image_util/grounding_dino}/__init__.py +0 -0
  320. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
  321. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
  322. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/hed.py +0 -0
  323. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
  324. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
  325. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
  326. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
  327. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
  328. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
  329. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/lineart.py +0 -0
  330. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
  331. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
  332. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
  333. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
  334. {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets/submodules → invokeai-5.2.0/invokeai/backend/image_util/mlsd/models}/__init__.py +0 -0
  335. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
  336. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
  337. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
  338. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
  339. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
  340. {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets}/__init__.py +0 -0
  341. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
  342. {invokeai-5.1.1/invokeai/backend/image_util/realesrgan → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets/submodules}/__init__.py +0 -0
  343. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
  344. {invokeai-5.1.1/invokeai/backend/image_util/segment_anything → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo}/__init__.py +0 -0
  345. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
  346. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
  347. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
  348. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
  349. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
  350. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
  351. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
  352. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
  353. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
  354. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
  355. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
  356. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
  357. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
  358. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
  359. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
  360. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
  361. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
  362. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
  363. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
  364. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
  365. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
  366. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
  367. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
  368. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
  369. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
  370. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
  371. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pidi/model.py +0 -0
  372. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pngwriter.py +0 -0
  373. {invokeai-5.1.1/invokeai/backend/ip_adapter → invokeai-5.2.0/invokeai/backend/image_util/realesrgan}/__init__.py +0 -0
  374. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
  375. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/safety_checker.py +0 -0
  376. {invokeai-5.1.1/invokeai/backend/lora → invokeai-5.2.0/invokeai/backend/image_util/segment_anything}/__init__.py +0 -0
  377. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
  378. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -0
  379. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/util.py +0 -0
  380. {invokeai-5.1.1/invokeai/backend/lora/conversions → invokeai-5.2.0/invokeai/backend/ip_adapter}/__init__.py +0 -0
  381. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
  382. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
  383. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
  384. {invokeai-5.1.1/invokeai/backend/lora/layers → invokeai-5.2.0/invokeai/backend/lora}/__init__.py +0 -0
  385. {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers → invokeai-5.2.0/invokeai/backend/lora/conversions}/__init__.py +0 -0
  386. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
  387. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
  388. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
  389. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
  390. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
  391. {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers/concatenated_lora → invokeai-5.2.0/invokeai/backend/lora/layers}/__init__.py +0 -0
  392. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
  393. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
  394. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
  395. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
  396. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
  397. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
  398. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
  399. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
  400. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
  401. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/utils.py +0 -0
  402. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
  403. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/lora_patcher.py +0 -0
  404. {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers/lora → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers}/__init__.py +0 -0
  405. {invokeai-5.1.1/invokeai/backend/quantization → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers/concatenated_lora}/__init__.py +0 -0
  406. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
  407. {invokeai-5.1.1/invokeai/backend/tiles → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers/lora}/__init__.py +0 -0
  408. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
  409. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
  410. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
  411. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
  412. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_hash/model_hash.py +0 -0
  413. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/__init__.py +0 -0
  414. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/config.py +0 -0
  415. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
  416. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
  417. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
  418. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
  419. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
  420. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
  421. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
  422. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
  423. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
  424. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
  425. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
  426. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
  427. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
  428. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
  429. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
  430. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
  431. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
  432. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
  433. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
  434. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
  435. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/merge.py +0 -0
  436. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
  437. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
  438. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
  439. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
  440. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
  441. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/search.py +0 -0
  442. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
  443. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/model_util.py +0 -0
  444. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
  445. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_patcher.py +0 -0
  446. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
  447. {invokeai-5.1.1/invokeai/frontend/cli → invokeai-5.2.0/invokeai/backend/quantization}/__init__.py +0 -0
  448. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
  449. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
  450. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +0 -0
  451. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
  452. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
  453. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
  454. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
  455. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
  456. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/raw_model.py +0 -0
  457. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
  458. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
  459. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
  460. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
  461. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
  462. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
  463. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
  464. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
  465. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
  466. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
  467. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
  468. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
  469. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
  470. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
  471. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
  472. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
  473. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
  474. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
  475. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
  476. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
  477. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
  478. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
  479. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
  480. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
  481. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
  482. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
  483. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
  484. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/textual_inversion.py +0 -0
  485. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/tiles/tiles.py +0 -0
  486. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/tiles/utils.py +0 -0
  487. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/__init__.py +0 -0
  488. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/attention.py +0 -0
  489. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/build_line.py +0 -0
  490. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
  491. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/catch_sigint.py +0 -0
  492. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/db_maintenance.py +0 -0
  493. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/devices.py +0 -0
  494. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/hotfixes.py +0 -0
  495. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/logging.py +0 -0
  496. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/mask.py +0 -0
  497. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/mps_fixes.py +0 -0
  498. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/original_weights_storage.py +0 -0
  499. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/silence_warnings.py +0 -0
  500. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/test_utils.py +0 -0
  501. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/util.py +0 -0
  502. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
  503. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
  504. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
  505. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
  506. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
  507. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
  508. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
  509. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
  510. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
  511. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
  512. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
  513. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
  514. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
  515. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
  516. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
  517. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
  518. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/__init__.py +0 -0
  519. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/cli/arg_parser.py +0 -0
  520. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/install/__init__.py +0 -0
  521. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/install/import_images.py +0 -0
  522. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/__init__.py +0 -0
  523. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
  524. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
  525. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
  526. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
  527. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
  528. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
  529. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
  530. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
  531. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
  532. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
  533. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
  534. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
  535. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
  536. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
  537. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
  538. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
  539. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
  540. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
  541. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
  542. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
  543. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
  544. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
  545. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
  546. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
  547. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
  548. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
  549. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
  550. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
  551. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
  552. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
  553. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
  554. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  555. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
  556. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
  557. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
  558. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
  559. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
  560. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
  561. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
  562. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
  563. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
  564. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
  565. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
  566. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
  567. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
  568. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
  569. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
  570. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
  571. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
  572. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
  573. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
  574. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
  575. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
  576. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
  577. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
  578. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/invocation_api/__init__.py +0 -0
  579. {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/version/__init__.py +0 -0
  580. {invokeai-5.1.1 → invokeai-5.2.0}/setup.cfg +0 -0
  581. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_config.py +0 -0
  582. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_docs.py +0 -0
  583. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_graph_execution_state.py +0 -0
  584. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_invocation_cache_memory.py +0 -0
  585. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_item_storage_memory.py +0 -0
  586. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_hash.py +0 -0
  587. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_probe.py +0 -0
  588. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_search.py +0 -0
  589. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_node_graph.py +0 -0
  590. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_nodes.py +0 -0
  591. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_object_serializer_disk.py +0 -0
  592. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_path.py +0 -0
  593. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_profiler.py +0 -0
  594. {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_session_queue.py +0 -0
  595. {invokeai-5.1.1 → invokeai-5.2.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.1.1
3
+ Version: 5.2.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
@@ -219,8 +219,8 @@ Requires-Dist: gguf==0.10.0
219
219
  Requires-Dist: invisible-watermark==0.2.0
220
220
  Requires-Dist: mediapipe>=0.10.7
221
221
  Requires-Dist: numpy==1.26.4
222
- Requires-Dist: onnx>=1.15.0
223
- Requires-Dist: onnxruntime>=1.16.3
222
+ Requires-Dist: onnx==1.16.1
223
+ Requires-Dist: onnxruntime==1.19.2
224
224
  Requires-Dist: opencv-python==4.9.0.80
225
225
  Requires-Dist: pytorch-lightning==2.1.3
226
226
  Requires-Dist: safetensors==0.4.3
@@ -45,6 +45,7 @@ invokeai/app/invocations/depth_anything.py
45
45
  invokeai/app/invocations/dw_openpose.py
46
46
  invokeai/app/invocations/facetools.py
47
47
  invokeai/app/invocations/fields.py
48
+ invokeai/app/invocations/flux_controlnet.py
48
49
  invokeai/app/invocations/flux_denoise.py
49
50
  invokeai/app/invocations/flux_lora_loader.py
50
51
  invokeai/app/invocations/flux_text_encoder.py
@@ -266,11 +267,21 @@ invokeai/backend/raw_model.py
266
267
  invokeai/backend/spandrel_image_to_image_model.py
267
268
  invokeai/backend/textual_inversion.py
268
269
  invokeai/backend/flux/denoise.py
269
- invokeai/backend/flux/inpaint_extension.py
270
270
  invokeai/backend/flux/math.py
271
271
  invokeai/backend/flux/model.py
272
272
  invokeai/backend/flux/sampling_utils.py
273
273
  invokeai/backend/flux/util.py
274
+ invokeai/backend/flux/controlnet/__init__.py
275
+ invokeai/backend/flux/controlnet/controlnet_flux_output.py
276
+ invokeai/backend/flux/controlnet/instantx_controlnet_flux.py
277
+ invokeai/backend/flux/controlnet/state_dict_utils.py
278
+ invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py
279
+ invokeai/backend/flux/controlnet/zero_module.py
280
+ invokeai/backend/flux/extensions/__init__.py
281
+ invokeai/backend/flux/extensions/base_controlnet_extension.py
282
+ invokeai/backend/flux/extensions/inpaint_extension.py
283
+ invokeai/backend/flux/extensions/instantx_controlnet_extension.py
284
+ invokeai/backend/flux/extensions/xlabs_controlnet_extension.py
274
285
  invokeai/backend/flux/modules/autoencoder.py
275
286
  invokeai/backend/flux/modules/conditioner.py
276
287
  invokeai/backend/flux/modules/layers.py
@@ -494,12 +505,12 @@ invokeai/frontend/install/__init__.py
494
505
  invokeai/frontend/install/import_images.py
495
506
  invokeai/frontend/web/__init__.py
496
507
  invokeai/frontend/web/dist/index.html
497
- invokeai/frontend/web/dist/assets/App-8bkD1zLK.js
508
+ invokeai/frontend/web/dist/assets/App-B7TWqqSi.js
498
509
  invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
499
510
  invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
500
- invokeai/frontend/web/dist/assets/ThemeLocaleProvider-Djtn-j09.js
511
+ invokeai/frontend/web/dist/assets/ThemeLocaleProvider-BHgh8vF3.js
501
512
  invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
502
- invokeai/frontend/web/dist/assets/index-BCfBeBaM.js
513
+ invokeai/frontend/web/dist/assets/index-pJtvKw6b.js
503
514
  invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
504
515
  invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
505
516
  invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
@@ -7,8 +7,8 @@ gguf==0.10.0
7
7
  invisible-watermark==0.2.0
8
8
  mediapipe>=0.10.7
9
9
  numpy==1.26.4
10
- onnx>=1.15.0
11
- onnxruntime>=1.16.3
10
+ onnx==1.16.1
11
+ onnxruntime==1.19.2
12
12
  opencv-python==4.9.0.80
13
13
  pytorch-lightning==2.1.3
14
14
  safetensors==0.4.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 5.1.1
3
+ Version: 5.2.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
@@ -219,8 +219,8 @@ Requires-Dist: gguf==0.10.0
219
219
  Requires-Dist: invisible-watermark==0.2.0
220
220
  Requires-Dist: mediapipe>=0.10.7
221
221
  Requires-Dist: numpy==1.26.4
222
- Requires-Dist: onnx>=1.15.0
223
- Requires-Dist: onnxruntime>=1.16.3
222
+ Requires-Dist: onnx==1.16.1
223
+ Requires-Dist: onnxruntime==1.19.2
224
224
  Requires-Dist: opencv-python==4.9.0.80
225
225
  Requires-Dist: pytorch-lightning==2.1.3
226
226
  Requires-Dist: safetensors==0.4.3
@@ -5,9 +5,10 @@ from fastapi.routing import APIRouter
5
5
  from pydantic import BaseModel, Field
6
6
 
7
7
  from invokeai.app.api.dependencies import ApiDependencies
8
- from invokeai.app.services.board_records.board_records_common import BoardChanges
8
+ from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecordOrderBy
9
9
  from invokeai.app.services.boards.boards_common import BoardDTO
10
10
  from invokeai.app.services.shared.pagination import OffsetPaginatedResults
11
+ from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
11
12
 
12
13
  boards_router = APIRouter(prefix="/v1/boards", tags=["boards"])
13
14
 
@@ -115,6 +116,8 @@ async def delete_board(
115
116
  response_model=Union[OffsetPaginatedResults[BoardDTO], list[BoardDTO]],
116
117
  )
117
118
  async def list_boards(
119
+ order_by: BoardRecordOrderBy = Query(default=BoardRecordOrderBy.CreatedAt, description="The attribute to order by"),
120
+ direction: SQLiteDirection = Query(default=SQLiteDirection.Descending, description="The direction to order by"),
118
121
  all: Optional[bool] = Query(default=None, description="Whether to list all boards"),
119
122
  offset: Optional[int] = Query(default=None, description="The page offset"),
120
123
  limit: Optional[int] = Query(default=None, description="The number of boards per page"),
@@ -122,9 +125,9 @@ async def list_boards(
122
125
  ) -> Union[OffsetPaginatedResults[BoardDTO], list[BoardDTO]]:
123
126
  """Gets a list of boards"""
124
127
  if all:
125
- return ApiDependencies.invoker.services.boards.get_all(include_archived)
128
+ return ApiDependencies.invoker.services.boards.get_all(order_by, direction, include_archived)
126
129
  elif offset is not None and limit is not None:
127
- return ApiDependencies.invoker.services.boards.get_many(offset, limit, include_archived)
130
+ return ApiDependencies.invoker.services.boards.get_many(order_by, direction, offset, limit, include_archived)
128
131
  else:
129
132
  raise HTTPException(
130
133
  status_code=400,
@@ -38,7 +38,12 @@ from invokeai.backend.model_manager.load.model_cache.model_cache_base import Cac
38
38
  from invokeai.backend.model_manager.metadata.fetch.huggingface import HuggingFaceMetadataFetch
39
39
  from invokeai.backend.model_manager.metadata.metadata_base import ModelMetadataWithFiles, UnknownMetadataException
40
40
  from invokeai.backend.model_manager.search import ModelSearch
41
- from invokeai.backend.model_manager.starter_models import STARTER_MODELS, StarterModel, StarterModelWithoutDependencies
41
+ from invokeai.backend.model_manager.starter_models import (
42
+ STARTER_BUNDLES,
43
+ STARTER_MODELS,
44
+ StarterModel,
45
+ StarterModelWithoutDependencies,
46
+ )
42
47
 
43
48
  model_manager_router = APIRouter(prefix="/v2/models", tags=["model_manager"])
44
49
 
@@ -792,22 +797,48 @@ async def convert_model(
792
797
  return new_config
793
798
 
794
799
 
795
- @model_manager_router.get("/starter_models", operation_id="get_starter_models", response_model=list[StarterModel])
796
- async def get_starter_models() -> list[StarterModel]:
800
+ class StarterModelResponse(BaseModel):
801
+ starter_models: list[StarterModel]
802
+ starter_bundles: dict[str, list[StarterModel]]
803
+
804
+
805
+ def get_is_installed(
806
+ starter_model: StarterModel | StarterModelWithoutDependencies, installed_models: list[AnyModelConfig]
807
+ ) -> bool:
808
+ for model in installed_models:
809
+ if model.source == starter_model.source:
810
+ return True
811
+ if model.name == starter_model.name and model.base == starter_model.base and model.type == starter_model.type:
812
+ return True
813
+ return False
814
+
815
+
816
+ @model_manager_router.get("/starter_models", operation_id="get_starter_models", response_model=StarterModelResponse)
817
+ async def get_starter_models() -> StarterModelResponse:
797
818
  installed_models = ApiDependencies.invoker.services.model_manager.store.search_by_attr()
798
- installed_model_sources = {m.source for m in installed_models}
799
819
  starter_models = deepcopy(STARTER_MODELS)
820
+ starter_bundles = deepcopy(STARTER_BUNDLES)
800
821
  for model in starter_models:
801
- if model.source in installed_model_sources:
802
- model.is_installed = True
822
+ model.is_installed = get_is_installed(model, installed_models)
803
823
  # Remove already-installed dependencies
804
824
  missing_deps: list[StarterModelWithoutDependencies] = []
825
+
805
826
  for dep in model.dependencies or []:
806
- if dep.source not in installed_model_sources:
827
+ if not get_is_installed(dep, installed_models):
807
828
  missing_deps.append(dep)
808
829
  model.dependencies = missing_deps
809
830
 
810
- return starter_models
831
+ for bundle in starter_bundles.values():
832
+ for model in bundle:
833
+ model.is_installed = get_is_installed(model, installed_models)
834
+ # Remove already-installed dependencies
835
+ missing_deps: list[StarterModelWithoutDependencies] = []
836
+ for dep in model.dependencies or []:
837
+ if not get_is_installed(dep, installed_models):
838
+ missing_deps.append(dep)
839
+ model.dependencies = missing_deps
840
+
841
+ return StarterModelResponse(starter_models=starter_models, starter_bundles=starter_bundles)
811
842
 
812
843
 
813
844
  @model_manager_router.get(
@@ -88,7 +88,7 @@ async def list_workflows(
88
88
  default=WorkflowRecordOrderBy.Name, description="The attribute to order by"
89
89
  ),
90
90
  direction: SQLiteDirection = Query(default=SQLiteDirection.Ascending, description="The direction to order by"),
91
- category: Optional[WorkflowCategory] = Query(default=None, description="The category of workflow to get"),
91
+ category: WorkflowCategory = Query(default=WorkflowCategory.User, description="The category of workflow to get"),
92
92
  query: Optional[str] = Query(default=None, description="The text to query by (matches name and description)"),
93
93
  ) -> PaginatedResults[WorkflowRecordListItemDTO]:
94
94
  """Gets a page of workflows"""
@@ -192,6 +192,7 @@ class FieldDescriptions:
192
192
  freeu_s2 = 'Scaling factor for stage 2 to attenuate the contributions of the skip features. This is done to mitigate the "oversmoothing effect" in the enhanced denoising process.'
193
193
  freeu_b1 = "Scaling factor for stage 1 to amplify the contributions of backbone features."
194
194
  freeu_b2 = "Scaling factor for stage 2 to amplify the contributions of backbone features."
195
+ instantx_control_mode = "The control mode for InstantX ControlNet union models. Ignored for other ControlNet models. The standard mapping is: canny (0), tile (1), depth (2), blur (3), pose (4), gray (5), low quality (6). Negative values will be treated as 'None'."
195
196
 
196
197
 
197
198
  class ImageField(BaseModel):
@@ -0,0 +1,99 @@
1
+ from pydantic import BaseModel, Field, field_validator, model_validator
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, ImageField, InputField, OutputField, UIType
11
+ from invokeai.app.invocations.model import ModelIdentifierField
12
+ from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
13
+ from invokeai.app.services.shared.invocation_context import InvocationContext
14
+ from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
15
+
16
+
17
+ class FluxControlNetField(BaseModel):
18
+ image: ImageField = Field(description="The control image")
19
+ control_model: ModelIdentifierField = Field(description="The ControlNet model to use")
20
+ control_weight: float | list[float] = Field(default=1, description="The weight given to the ControlNet")
21
+ begin_step_percent: float = Field(
22
+ default=0, ge=0, le=1, description="When the ControlNet is first applied (% of total steps)"
23
+ )
24
+ end_step_percent: float = Field(
25
+ default=1, ge=0, le=1, description="When the ControlNet is last applied (% of total steps)"
26
+ )
27
+ resize_mode: CONTROLNET_RESIZE_VALUES = Field(default="just_resize", description="The resize mode to use")
28
+ instantx_control_mode: int | None = Field(default=-1, description=FieldDescriptions.instantx_control_mode)
29
+
30
+ @field_validator("control_weight")
31
+ @classmethod
32
+ def validate_control_weight(cls, v: float | list[float]) -> float | list[float]:
33
+ validate_weights(v)
34
+ return v
35
+
36
+ @model_validator(mode="after")
37
+ def validate_begin_end_step_percent(self):
38
+ validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
39
+ return self
40
+
41
+
42
+ @invocation_output("flux_controlnet_output")
43
+ class FluxControlNetOutput(BaseInvocationOutput):
44
+ """FLUX ControlNet info"""
45
+
46
+ control: FluxControlNetField = OutputField(description=FieldDescriptions.control)
47
+
48
+
49
+ @invocation(
50
+ "flux_controlnet",
51
+ title="FLUX ControlNet",
52
+ tags=["controlnet", "flux"],
53
+ category="controlnet",
54
+ version="1.0.0",
55
+ classification=Classification.Prototype,
56
+ )
57
+ class FluxControlNetInvocation(BaseInvocation):
58
+ """Collect FLUX ControlNet info to pass to other nodes."""
59
+
60
+ image: ImageField = InputField(description="The control image")
61
+ control_model: ModelIdentifierField = InputField(
62
+ description=FieldDescriptions.controlnet_model, ui_type=UIType.ControlNetModel
63
+ )
64
+ control_weight: float | list[float] = InputField(
65
+ default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
66
+ )
67
+ begin_step_percent: float = InputField(
68
+ default=0, ge=0, le=1, description="When the ControlNet is first applied (% of total steps)"
69
+ )
70
+ end_step_percent: float = InputField(
71
+ default=1, ge=0, le=1, description="When the ControlNet is last applied (% of total steps)"
72
+ )
73
+ resize_mode: CONTROLNET_RESIZE_VALUES = InputField(default="just_resize", description="The resize mode used")
74
+ # Note: We default to -1 instead of None, because in the workflow editor UI None is not currently supported.
75
+ instantx_control_mode: int | None = InputField(default=-1, description=FieldDescriptions.instantx_control_mode)
76
+
77
+ @field_validator("control_weight")
78
+ @classmethod
79
+ def validate_control_weight(cls, v: float | list[float]) -> float | list[float]:
80
+ validate_weights(v)
81
+ return v
82
+
83
+ @model_validator(mode="after")
84
+ def validate_begin_end_step_percent(self):
85
+ validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
86
+ return self
87
+
88
+ def invoke(self, context: InvocationContext) -> FluxControlNetOutput:
89
+ return FluxControlNetOutput(
90
+ control=FluxControlNetField(
91
+ image=self.image,
92
+ control_model=self.control_model,
93
+ control_weight=self.control_weight,
94
+ begin_step_percent=self.begin_step_percent,
95
+ end_step_percent=self.end_step_percent,
96
+ resize_mode=self.resize_mode,
97
+ instantx_control_mode=self.instantx_control_mode,
98
+ ),
99
+ )
@@ -16,11 +16,16 @@ from invokeai.app.invocations.fields import (
16
16
  WithBoard,
17
17
  WithMetadata,
18
18
  )
19
- from invokeai.app.invocations.model import TransformerField
19
+ from invokeai.app.invocations.flux_controlnet import FluxControlNetField
20
+ from invokeai.app.invocations.model import TransformerField, VAEField
20
21
  from invokeai.app.invocations.primitives import LatentsOutput
21
22
  from invokeai.app.services.shared.invocation_context import InvocationContext
23
+ from invokeai.backend.flux.controlnet.instantx_controlnet_flux import InstantXControlNetFlux
24
+ from invokeai.backend.flux.controlnet.xlabs_controlnet_flux import XLabsControlNetFlux
22
25
  from invokeai.backend.flux.denoise import denoise
23
- from invokeai.backend.flux.inpaint_extension import InpaintExtension
26
+ from invokeai.backend.flux.extensions.inpaint_extension import InpaintExtension
27
+ from invokeai.backend.flux.extensions.instantx_controlnet_extension import InstantXControlNetExtension
28
+ from invokeai.backend.flux.extensions.xlabs_controlnet_extension import XLabsControlNetExtension
24
29
  from invokeai.backend.flux.model import Flux
25
30
  from invokeai.backend.flux.sampling_utils import (
26
31
  clip_timestep_schedule_fractional,
@@ -44,7 +49,7 @@ from invokeai.backend.util.devices import TorchDevice
44
49
  title="FLUX Denoise",
45
50
  tags=["image", "flux"],
46
51
  category="image",
47
- version="3.0.0",
52
+ version="3.1.0",
48
53
  classification=Classification.Prototype,
49
54
  )
50
55
  class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
@@ -87,6 +92,13 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
87
92
  description="The guidance strength. Higher values adhere more strictly to the prompt, and will produce less diverse images. FLUX dev only, ignored for schnell.",
88
93
  )
89
94
  seed: int = InputField(default=0, description="Randomness seed for reproducibility.")
95
+ control: FluxControlNetField | list[FluxControlNetField] | None = InputField(
96
+ default=None, input=Input.Connection, description="ControlNet models."
97
+ )
98
+ controlnet_vae: VAEField | None = InputField(
99
+ description=FieldDescriptions.vae,
100
+ input=Input.Connection,
101
+ )
90
102
 
91
103
  @torch.no_grad()
92
104
  def invoke(self, context: InvocationContext) -> LatentsOutput:
@@ -167,8 +179,8 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
167
179
 
168
180
  inpaint_mask = self._prep_inpaint_mask(context, x)
169
181
 
170
- b, _c, h, w = x.shape
171
- img_ids = generate_img_ids(h=h, w=w, batch_size=b, device=x.device, dtype=x.dtype)
182
+ b, _c, latent_h, latent_w = x.shape
183
+ img_ids = generate_img_ids(h=latent_h, w=latent_w, batch_size=b, device=x.device, dtype=x.dtype)
172
184
 
173
185
  bs, t5_seq_len, _ = t5_embeddings.shape
174
186
  txt_ids = torch.zeros(bs, t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device())
@@ -192,12 +204,21 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
192
204
  noise=noise,
193
205
  )
194
206
 
195
- with (
196
- transformer_info.model_on_device() as (cached_weights, transformer),
197
- ExitStack() as exit_stack,
198
- ):
199
- assert isinstance(transformer, Flux)
207
+ with ExitStack() as exit_stack:
208
+ # Prepare ControlNet extensions.
209
+ # Note: We do this before loading the transformer model to minimize peak memory (see implementation).
210
+ controlnet_extensions = self._prep_controlnet_extensions(
211
+ context=context,
212
+ exit_stack=exit_stack,
213
+ latent_height=latent_h,
214
+ latent_width=latent_w,
215
+ dtype=inference_dtype,
216
+ device=x.device,
217
+ )
200
218
 
219
+ # Load the transformer model.
220
+ (cached_weights, transformer) = exit_stack.enter_context(transformer_info.model_on_device())
221
+ assert isinstance(transformer, Flux)
201
222
  config = transformer_info.config
202
223
  assert config is not None
203
224
 
@@ -242,6 +263,7 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
242
263
  step_callback=self._build_step_callback(context),
243
264
  guidance=self.guidance,
244
265
  inpaint_extension=inpaint_extension,
266
+ controlnet_extensions=controlnet_extensions,
245
267
  )
246
268
 
247
269
  x = unpack(x.float(), self.height, self.width)
@@ -288,6 +310,104 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
288
310
  # `latents`.
289
311
  return mask.expand_as(latents)
290
312
 
313
+ def _prep_controlnet_extensions(
314
+ self,
315
+ context: InvocationContext,
316
+ exit_stack: ExitStack,
317
+ latent_height: int,
318
+ latent_width: int,
319
+ dtype: torch.dtype,
320
+ device: torch.device,
321
+ ) -> list[XLabsControlNetExtension | InstantXControlNetExtension]:
322
+ # Normalize the controlnet input to list[ControlField].
323
+ controlnets: list[FluxControlNetField]
324
+ if self.control is None:
325
+ controlnets = []
326
+ elif isinstance(self.control, FluxControlNetField):
327
+ controlnets = [self.control]
328
+ elif isinstance(self.control, list):
329
+ controlnets = self.control
330
+ else:
331
+ raise ValueError(f"Unsupported controlnet type: {type(self.control)}")
332
+
333
+ # TODO(ryand): Add a field to the model config so that we can distinguish between XLabs and InstantX ControlNets
334
+ # before loading the models. Then make sure that all VAE encoding is done before loading the ControlNets to
335
+ # minimize peak memory.
336
+
337
+ # First, load the ControlNet models so that we can determine the ControlNet types.
338
+ controlnet_models = [context.models.load(controlnet.control_model) for controlnet in controlnets]
339
+
340
+ # Calculate the controlnet conditioning tensors.
341
+ # We do this before loading the ControlNet models because it may require running the VAE, and we are trying to
342
+ # keep peak memory down.
343
+ controlnet_conds: list[torch.Tensor] = []
344
+ for controlnet, controlnet_model in zip(controlnets, controlnet_models, strict=True):
345
+ image = context.images.get_pil(controlnet.image.image_name)
346
+ if isinstance(controlnet_model.model, InstantXControlNetFlux):
347
+ if self.controlnet_vae is None:
348
+ raise ValueError("A ControlNet VAE is required when using an InstantX FLUX ControlNet.")
349
+ vae_info = context.models.load(self.controlnet_vae.vae)
350
+ controlnet_conds.append(
351
+ InstantXControlNetExtension.prepare_controlnet_cond(
352
+ controlnet_image=image,
353
+ vae_info=vae_info,
354
+ latent_height=latent_height,
355
+ latent_width=latent_width,
356
+ dtype=dtype,
357
+ device=device,
358
+ resize_mode=controlnet.resize_mode,
359
+ )
360
+ )
361
+ elif isinstance(controlnet_model.model, XLabsControlNetFlux):
362
+ controlnet_conds.append(
363
+ XLabsControlNetExtension.prepare_controlnet_cond(
364
+ controlnet_image=image,
365
+ latent_height=latent_height,
366
+ latent_width=latent_width,
367
+ dtype=dtype,
368
+ device=device,
369
+ resize_mode=controlnet.resize_mode,
370
+ )
371
+ )
372
+
373
+ # Finally, load the ControlNet models and initialize the ControlNet extensions.
374
+ controlnet_extensions: list[XLabsControlNetExtension | InstantXControlNetExtension] = []
375
+ for controlnet, controlnet_cond, controlnet_model in zip(
376
+ controlnets, controlnet_conds, controlnet_models, strict=True
377
+ ):
378
+ model = exit_stack.enter_context(controlnet_model)
379
+
380
+ if isinstance(model, XLabsControlNetFlux):
381
+ controlnet_extensions.append(
382
+ XLabsControlNetExtension(
383
+ model=model,
384
+ controlnet_cond=controlnet_cond,
385
+ weight=controlnet.control_weight,
386
+ begin_step_percent=controlnet.begin_step_percent,
387
+ end_step_percent=controlnet.end_step_percent,
388
+ )
389
+ )
390
+ elif isinstance(model, InstantXControlNetFlux):
391
+ instantx_control_mode: torch.Tensor | None = None
392
+ if controlnet.instantx_control_mode is not None and controlnet.instantx_control_mode >= 0:
393
+ instantx_control_mode = torch.tensor(controlnet.instantx_control_mode, dtype=torch.long)
394
+ instantx_control_mode = instantx_control_mode.reshape([-1, 1])
395
+
396
+ controlnet_extensions.append(
397
+ InstantXControlNetExtension(
398
+ model=model,
399
+ controlnet_cond=controlnet_cond,
400
+ instantx_control_mode=instantx_control_mode,
401
+ weight=controlnet.control_weight,
402
+ begin_step_percent=controlnet.begin_step_percent,
403
+ end_step_percent=controlnet.end_step_percent,
404
+ )
405
+ )
406
+ else:
407
+ raise ValueError(f"Unsupported ControlNet model type: {type(model)}")
408
+
409
+ return controlnet_extensions
410
+
291
411
  def _lora_iterator(self, context: InvocationContext) -> Iterator[Tuple[LoRAModelRaw, float]]:
292
412
  for lora in self.transformer.loras:
293
413
  lora_info = context.models.load(lora.lora)
@@ -1,7 +1,8 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
- from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecord
3
+ from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecord, BoardRecordOrderBy
4
4
  from invokeai.app.services.shared.pagination import OffsetPaginatedResults
5
+ from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
5
6
 
6
7
 
7
8
  class BoardRecordStorageBase(ABC):
@@ -39,12 +40,19 @@ class BoardRecordStorageBase(ABC):
39
40
 
40
41
  @abstractmethod
41
42
  def get_many(
42
- self, offset: int = 0, limit: int = 10, include_archived: bool = False
43
+ self,
44
+ order_by: BoardRecordOrderBy,
45
+ direction: SQLiteDirection,
46
+ offset: int = 0,
47
+ limit: int = 10,
48
+ include_archived: bool = False,
43
49
  ) -> OffsetPaginatedResults[BoardRecord]:
44
50
  """Gets many board records."""
45
51
  pass
46
52
 
47
53
  @abstractmethod
48
- def get_all(self, include_archived: bool = False) -> list[BoardRecord]:
54
+ def get_all(
55
+ self, order_by: BoardRecordOrderBy, direction: SQLiteDirection, include_archived: bool = False
56
+ ) -> list[BoardRecord]:
49
57
  """Gets all board records."""
50
58
  pass
@@ -1,8 +1,10 @@
1
1
  from datetime import datetime
2
+ from enum import Enum
2
3
  from typing import Optional, Union
3
4
 
4
5
  from pydantic import BaseModel, Field
5
6
 
7
+ from invokeai.app.util.metaenum import MetaEnum
6
8
  from invokeai.app.util.misc import get_iso_timestamp
7
9
  from invokeai.app.util.model_exclude_null import BaseModelExcludeNull
8
10
 
@@ -60,6 +62,13 @@ class BoardChanges(BaseModel, extra="forbid"):
60
62
  archived: Optional[bool] = Field(default=None, description="Whether or not the board is archived")
61
63
 
62
64
 
65
+ class BoardRecordOrderBy(str, Enum, metaclass=MetaEnum):
66
+ """The order by options for board records"""
67
+
68
+ CreatedAt = "created_at"
69
+ Name = "board_name"
70
+
71
+
63
72
  class BoardRecordNotFoundException(Exception):
64
73
  """Raised when an board record is not found."""
65
74
 
@@ -8,10 +8,12 @@ from invokeai.app.services.board_records.board_records_common import (
8
8
  BoardRecord,
9
9
  BoardRecordDeleteException,
10
10
  BoardRecordNotFoundException,
11
+ BoardRecordOrderBy,
11
12
  BoardRecordSaveException,
12
13
  deserialize_board_record,
13
14
  )
14
15
  from invokeai.app.services.shared.pagination import OffsetPaginatedResults
16
+ from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
15
17
  from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase
16
18
  from invokeai.app.util.misc import uuid_string
17
19
 
@@ -144,7 +146,12 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
144
146
  return self.get(board_id)
145
147
 
146
148
  def get_many(
147
- self, offset: int = 0, limit: int = 10, include_archived: bool = False
149
+ self,
150
+ order_by: BoardRecordOrderBy,
151
+ direction: SQLiteDirection,
152
+ offset: int = 0,
153
+ limit: int = 10,
154
+ include_archived: bool = False,
148
155
  ) -> OffsetPaginatedResults[BoardRecord]:
149
156
  try:
150
157
  self._lock.acquire()
@@ -154,17 +161,16 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
154
161
  SELECT *
155
162
  FROM boards
156
163
  {archived_filter}
157
- ORDER BY created_at DESC
164
+ ORDER BY {order_by} {direction}
158
165
  LIMIT ? OFFSET ?;
159
166
  """
160
167
 
161
168
  # Determine archived filter condition
162
- if include_archived:
163
- archived_filter = ""
164
- else:
165
- archived_filter = "WHERE archived = 0"
169
+ archived_filter = "" if include_archived else "WHERE archived = 0"
166
170
 
167
- final_query = base_query.format(archived_filter=archived_filter)
171
+ final_query = base_query.format(
172
+ archived_filter=archived_filter, order_by=order_by.value, direction=direction.value
173
+ )
168
174
 
169
175
  # Execute query to fetch boards
170
176
  self._cursor.execute(final_query, (limit, offset))
@@ -198,23 +204,32 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
198
204
  finally:
199
205
  self._lock.release()
200
206
 
201
- def get_all(self, include_archived: bool = False) -> list[BoardRecord]:
207
+ def get_all(
208
+ self, order_by: BoardRecordOrderBy, direction: SQLiteDirection, include_archived: bool = False
209
+ ) -> list[BoardRecord]:
202
210
  try:
203
211
  self._lock.acquire()
204
212
 
205
- base_query = """
206
- SELECT *
207
- FROM boards
208
- {archived_filter}
209
- ORDER BY created_at DESC
210
- """
211
-
212
- if include_archived:
213
- archived_filter = ""
213
+ if order_by == BoardRecordOrderBy.Name:
214
+ base_query = """
215
+ SELECT *
216
+ FROM boards
217
+ {archived_filter}
218
+ ORDER BY LOWER(board_name) {direction}
219
+ """
214
220
  else:
215
- archived_filter = "WHERE archived = 0"
221
+ base_query = """
222
+ SELECT *
223
+ FROM boards
224
+ {archived_filter}
225
+ ORDER BY {order_by} {direction}
226
+ """
216
227
 
217
- final_query = base_query.format(archived_filter=archived_filter)
228
+ archived_filter = "" if include_archived else "WHERE archived = 0"
229
+
230
+ final_query = base_query.format(
231
+ archived_filter=archived_filter, order_by=order_by.value, direction=direction.value
232
+ )
218
233
 
219
234
  self._cursor.execute(final_query)
220
235