InvokeAI 5.2.0rc2__tar.gz → 5.3.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 (603) hide show
  1. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/PKG-INFO +1 -1
  2. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/SOURCES.txt +11 -3
  3. {invokeai-5.2.0rc2 → invokeai-5.3.0}/PKG-INFO +1 -1
  4. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/model_manager.py +5 -1
  5. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/denoise_latents.py +3 -1
  6. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_denoise.py +252 -13
  7. invokeai-5.3.0/invokeai/app/invocations/flux_ip_adapter.py +89 -0
  8. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/ip_adapter.py +27 -7
  9. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mask.py +53 -0
  10. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/metadata.py +1 -1
  11. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/segment_anything.py +53 -12
  12. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_disk.py +17 -6
  13. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/invocation_context.py +12 -7
  14. invokeai-5.3.0/invokeai/backend/flux/custom_block_processor.py +83 -0
  15. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/denoise.py +43 -6
  16. invokeai-5.3.0/invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py +89 -0
  17. invokeai-5.3.0/invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py +93 -0
  18. invokeai-5.3.0/invokeai/backend/flux/ip_adapter/state_dict_utils.py +50 -0
  19. invokeai-5.3.0/invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py +67 -0
  20. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/model.py +18 -1
  21. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/sampling_utils.py +9 -0
  22. invokeai-5.3.0/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +94 -0
  23. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/config.py +2 -0
  24. invokeai-5.3.0/invokeai/backend/model_manager/load/model_loaders/clip_vision.py +41 -0
  25. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +29 -1
  26. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -1
  27. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/probe.py +19 -4
  28. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/starter_models.py +136 -107
  29. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +5 -0
  30. invokeai-5.3.0/invokeai/frontend/cli/__init__.py +0 -0
  31. invokeai-5.3.0/invokeai/frontend/web/dist/assets/App-DqSd1s3k.js +122 -0
  32. invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-C5eh7bJz.js → invokeai-5.3.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CvgnMQ11.js +1 -1
  33. invokeai-5.3.0/invokeai/frontend/web/dist/assets/index-BQPuxPiy.js +510 -0
  34. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/index.html +1 -1
  35. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/de.json +40 -7
  36. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/en.json +74 -6
  37. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/fr.json +69 -47
  38. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/it.json +27 -6
  39. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ru.json +43 -12
  40. invokeai-5.3.0/invokeai/version/invokeai_version.py +1 -0
  41. invokeai-5.2.0rc2/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -53
  42. invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/App-CeaAHUEz.js +0 -122
  43. invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/index-CcqOCFPb.js +0 -510
  44. invokeai-5.2.0rc2/invokeai/version/invokeai_version.py +0 -1
  45. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
  46. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/entry_points.txt +0 -0
  47. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/requires.txt +0 -0
  48. {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/top_level.txt +0 -0
  49. {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE +0 -0
  50. {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE-SD1+SD2.txt +0 -0
  51. {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE-SDXL.txt +0 -0
  52. {invokeai-5.2.0rc2 → invokeai-5.3.0}/README.md +0 -0
  53. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/__init__.py +0 -0
  54. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/dependencies.py +0 -0
  55. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
  56. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/app_info.py +0 -0
  57. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/board_images.py +0 -0
  58. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/boards.py +0 -0
  59. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/download_queue.py +0 -0
  60. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/images.py +0 -0
  61. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/session_queue.py +0 -0
  62. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/style_presets.py +0 -0
  63. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/utilities.py +0 -0
  64. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/workflows.py +0 -0
  65. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/sockets.py +0 -0
  66. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api_app.py +0 -0
  67. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/assets/images/caution.png +0 -0
  68. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/__init__.py +0 -0
  69. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/baseinvocation.py +0 -0
  70. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/blend_latents.py +0 -0
  71. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/canny.py +0 -0
  72. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/collections.py +0 -0
  73. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/color_map.py +0 -0
  74. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/compel.py +0 -0
  75. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/constants.py +0 -0
  76. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/content_shuffle.py +0 -0
  77. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
  78. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
  79. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
  80. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/crop_latents.py +0 -0
  81. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
  82. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
  83. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/cv.py +0 -0
  84. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/depth_anything.py +0 -0
  85. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/dw_openpose.py +0 -0
  86. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/facetools.py +0 -0
  87. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/fields.py +0 -0
  88. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_controlnet.py +0 -0
  89. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
  90. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
  91. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
  92. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
  93. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/grounding_dino.py +0 -0
  94. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/hed.py +0 -0
  95. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/ideal_size.py +0 -0
  96. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/image.py +0 -0
  97. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/image_to_latents.py +0 -0
  98. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/infill.py +0 -0
  99. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/latents_to_image.py +0 -0
  100. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/lineart.py +0 -0
  101. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/lineart_anime.py +0 -0
  102. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/math.py +0 -0
  103. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
  104. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mlsd.py +0 -0
  105. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/model.py +0 -0
  106. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/noise.py +0 -0
  107. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/normal_bae.py +0 -0
  108. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/param_easing.py +0 -0
  109. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/pidi.py +0 -0
  110. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/primitives.py +0 -0
  111. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/prompt.py +0 -0
  112. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/resize_latents.py +0 -0
  113. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/scheduler.py +0 -0
  114. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/sdxl.py +0 -0
  115. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
  116. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/strings.py +0 -0
  117. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
  118. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
  119. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/tiles.py +0 -0
  120. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/upscale.py +0 -0
  121. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/util.py +0 -0
  122. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/run_app.py +0 -0
  123. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/__init__.py +0 -0
  124. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
  125. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
  126. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
  127. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/__init__.py +0 -0
  128. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
  129. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
  130. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
  131. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_base.py +0 -0
  132. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_common.py +0 -0
  133. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
  134. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/__init__.py +0 -0
  135. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_base.py +0 -0
  136. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_common.py +0 -0
  137. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_default.py +0 -0
  138. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
  139. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
  140. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
  141. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
  142. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/__init__.py +0 -0
  143. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/config_common.py +0 -0
  144. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/config_default.py +0 -0
  145. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/__init__.py +0 -0
  146. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/download_base.py +0 -0
  147. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/download_default.py +0 -0
  148. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/__init__.py +0 -0
  149. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_base.py +0 -0
  150. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_common.py +0 -0
  151. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
  152. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/__init__.py +0 -0
  153. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
  154. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
  155. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/__init__.py +0 -0
  156. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
  157. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
  158. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
  159. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/__init__.py +0 -0
  160. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_base.py +0 -0
  161. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_common.py +0 -0
  162. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_default.py +0 -0
  163. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
  164. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
  165. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
  166. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
  167. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_services.py +0 -0
  168. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
  169. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
  170. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
  171. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
  172. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invoker.py +0 -0
  173. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/__init__.py +0 -0
  174. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
  175. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
  176. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
  177. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
  178. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
  179. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
  180. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/__init__.py +0 -0
  181. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
  182. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
  183. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
  184. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/__init__.py +0 -0
  185. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
  186. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
  187. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/__init__.py +0 -0
  188. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
  189. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
  190. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
  191. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/__init__.py +0 -0
  192. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/model_records_base.py +0 -0
  193. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
  194. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/__init__.py +0 -0
  195. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_base.py +0 -0
  196. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_common.py +0 -0
  197. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_default.py +0 -0
  198. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
  199. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
  200. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
  201. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
  202. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/__init__.py +0 -0
  203. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
  204. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
  205. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
  206. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/__init__.py +0 -0
  207. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
  208. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
  209. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
  210. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/__init__.py +0 -0
  211. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/graph.py +0 -0
  212. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/pagination.py +0 -0
  213. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
  214. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
  215. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
  216. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
  217. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
  218. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
  219. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
  220. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
  221. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
  222. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
  223. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
  224. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
  225. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
  226. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
  227. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
  228. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
  229. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
  230. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
  231. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
  232. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
  233. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
  234. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
  235. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
  236. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
  237. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
  238. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
  239. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
  240. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
  241. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
  242. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
  243. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
  244. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
  245. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
  246. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
  247. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
  248. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
  249. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
  250. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
  251. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
  252. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
  253. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
  254. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
  255. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
  256. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
  257. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
  258. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
  259. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
  260. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
  261. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
  262. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
  263. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/__init__.py +0 -0
  264. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/urls_base.py +0 -0
  265. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/urls_default.py +0 -0
  266. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
  267. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
  268. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
  269. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
  270. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
  271. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
  272. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
  273. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
  274. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
  275. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
  276. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
  277. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
  278. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
  279. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
  280. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
  281. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
  282. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/shared/__init__.py +0 -0
  283. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/shared/models.py +0 -0
  284. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/__init__.py +0 -0
  285. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/controlnet_utils.py +0 -0
  286. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/custom_openapi.py +0 -0
  287. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/metaenum.py +0 -0
  288. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/misc.py +0 -0
  289. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/model_exclude_null.py +0 -0
  290. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/profiler.py +0 -0
  291. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/step_callback.py +0 -0
  292. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/suppress_output.py +0 -0
  293. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/thumbnails.py +0 -0
  294. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/ti_utils.py +0 -0
  295. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
  296. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/__init__.py +0 -0
  297. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/__init__.py +0 -0
  298. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/controlnet_flux_output.py +0 -0
  299. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +0 -0
  300. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/state_dict_utils.py +0 -0
  301. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +0 -0
  302. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/zero_module.py +0 -0
  303. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/__init__.py +0 -0
  304. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/base_controlnet_extension.py +0 -0
  305. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/inpaint_extension.py +0 -0
  306. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +0 -0
  307. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +0 -0
  308. {invokeai-5.2.0rc2/invokeai/backend/image_util/grounding_dino → invokeai-5.3.0/invokeai/backend/flux/ip_adapter}/__init__.py +0 -0
  309. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/math.py +0 -0
  310. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
  311. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
  312. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/layers.py +0 -0
  313. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/util.py +0 -0
  314. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/__init__.py +0 -0
  315. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
  316. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
  317. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
  318. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/canny.py +0 -0
  319. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
  320. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
  321. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
  322. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
  323. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
  324. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
  325. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
  326. {invokeai-5.2.0rc2/invokeai/backend/image_util/mlsd/models → invokeai-5.3.0/invokeai/backend/image_util/grounding_dino}/__init__.py +0 -0
  327. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
  328. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
  329. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/hed.py +0 -0
  330. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
  331. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
  332. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
  333. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
  334. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
  335. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
  336. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/lineart.py +0 -0
  337. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
  338. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
  339. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
  340. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
  341. {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets → invokeai-5.3.0/invokeai/backend/image_util/mlsd/models}/__init__.py +0 -0
  342. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
  343. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
  344. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
  345. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
  346. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
  347. {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets/submodules → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets}/__init__.py +0 -0
  348. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
  349. {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets/submodules}/__init__.py +0 -0
  350. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
  351. {invokeai-5.2.0rc2/invokeai/backend/image_util/realesrgan → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo}/__init__.py +0 -0
  352. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
  353. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
  354. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
  355. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
  356. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
  357. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
  358. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
  359. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
  360. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
  361. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
  362. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
  363. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
  364. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
  365. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
  366. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
  367. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
  368. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
  369. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
  370. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
  371. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
  372. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
  373. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
  374. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
  375. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
  376. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
  377. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
  378. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pidi/model.py +0 -0
  379. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pngwriter.py +0 -0
  380. {invokeai-5.2.0rc2/invokeai/backend/image_util/segment_anything → invokeai-5.3.0/invokeai/backend/image_util/realesrgan}/__init__.py +0 -0
  381. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
  382. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/safety_checker.py +0 -0
  383. {invokeai-5.2.0rc2/invokeai/backend/ip_adapter → invokeai-5.3.0/invokeai/backend/image_util/segment_anything}/__init__.py +0 -0
  384. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
  385. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/util.py +0 -0
  386. {invokeai-5.2.0rc2/invokeai/backend/lora → invokeai-5.3.0/invokeai/backend/ip_adapter}/__init__.py +0 -0
  387. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
  388. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
  389. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
  390. {invokeai-5.2.0rc2/invokeai/backend/lora/conversions → invokeai-5.3.0/invokeai/backend/lora}/__init__.py +0 -0
  391. {invokeai-5.2.0rc2/invokeai/backend/lora/layers → invokeai-5.3.0/invokeai/backend/lora/conversions}/__init__.py +0 -0
  392. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
  393. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
  394. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
  395. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
  396. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
  397. {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers → invokeai-5.3.0/invokeai/backend/lora/layers}/__init__.py +0 -0
  398. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
  399. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
  400. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
  401. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
  402. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
  403. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
  404. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
  405. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
  406. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
  407. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/utils.py +0 -0
  408. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
  409. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/lora_patcher.py +0 -0
  410. {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers/concatenated_lora → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers}/__init__.py +0 -0
  411. {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers/lora → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers/concatenated_lora}/__init__.py +0 -0
  412. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
  413. {invokeai-5.2.0rc2/invokeai/backend/quantization → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers/lora}/__init__.py +0 -0
  414. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
  415. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
  416. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
  417. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
  418. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_hash/model_hash.py +0 -0
  419. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/__init__.py +0 -0
  420. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
  421. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
  422. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
  423. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
  424. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
  425. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
  426. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
  427. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
  428. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
  429. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
  430. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
  431. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
  432. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
  433. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
  434. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
  435. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
  436. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
  437. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
  438. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
  439. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
  440. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/merge.py +0 -0
  441. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
  442. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
  443. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
  444. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
  445. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
  446. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/search.py +0 -0
  447. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
  448. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/model_util.py +0 -0
  449. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
  450. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_patcher.py +0 -0
  451. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
  452. {invokeai-5.2.0rc2/invokeai/backend/tiles → invokeai-5.3.0/invokeai/backend/quantization}/__init__.py +0 -0
  453. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
  454. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
  455. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
  456. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
  457. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
  458. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
  459. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
  460. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/raw_model.py +0 -0
  461. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
  462. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
  463. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
  464. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
  465. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
  466. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
  467. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
  468. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
  469. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
  470. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
  471. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
  472. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
  473. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
  474. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
  475. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
  476. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
  477. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
  478. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
  479. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
  480. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
  481. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
  482. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
  483. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
  484. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
  485. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
  486. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
  487. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
  488. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
  489. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/textual_inversion.py +0 -0
  490. {invokeai-5.2.0rc2/invokeai/frontend/cli → invokeai-5.3.0/invokeai/backend/tiles}/__init__.py +0 -0
  491. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/tiles/tiles.py +0 -0
  492. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/tiles/utils.py +0 -0
  493. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/__init__.py +0 -0
  494. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/attention.py +0 -0
  495. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/build_line.py +0 -0
  496. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
  497. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/catch_sigint.py +0 -0
  498. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/db_maintenance.py +0 -0
  499. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/devices.py +0 -0
  500. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/hotfixes.py +0 -0
  501. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/logging.py +0 -0
  502. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/mask.py +0 -0
  503. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/mps_fixes.py +0 -0
  504. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/original_weights_storage.py +0 -0
  505. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/silence_warnings.py +0 -0
  506. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/test_utils.py +0 -0
  507. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/util.py +0 -0
  508. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
  509. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
  510. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
  511. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
  512. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
  513. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
  514. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
  515. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
  516. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
  517. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
  518. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
  519. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
  520. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
  521. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
  522. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
  523. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
  524. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/__init__.py +0 -0
  525. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/cli/arg_parser.py +0 -0
  526. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/install/__init__.py +0 -0
  527. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/install/import_images.py +0 -0
  528. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/__init__.py +0 -0
  529. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
  530. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
  531. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
  532. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
  533. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
  534. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
  535. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
  536. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
  537. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
  538. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
  539. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
  540. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
  541. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
  542. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
  543. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
  544. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
  545. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
  546. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
  547. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
  548. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
  549. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
  550. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
  551. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
  552. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
  553. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
  554. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
  555. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
  556. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
  557. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
  558. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
  559. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
  560. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  561. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
  562. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
  563. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
  564. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
  565. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/es.json +0 -0
  566. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
  567. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
  568. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
  569. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
  570. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
  571. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
  572. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
  573. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
  574. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
  575. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
  576. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
  577. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
  578. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
  579. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
  580. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
  581. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
  582. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
  583. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
  584. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
  585. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/invocation_api/__init__.py +0 -0
  586. {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/version/__init__.py +0 -0
  587. {invokeai-5.2.0rc2 → invokeai-5.3.0}/pyproject.toml +0 -0
  588. {invokeai-5.2.0rc2 → invokeai-5.3.0}/setup.cfg +0 -0
  589. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_config.py +0 -0
  590. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_docs.py +0 -0
  591. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_graph_execution_state.py +0 -0
  592. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_invocation_cache_memory.py +0 -0
  593. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_item_storage_memory.py +0 -0
  594. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_hash.py +0 -0
  595. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_probe.py +0 -0
  596. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_search.py +0 -0
  597. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_node_graph.py +0 -0
  598. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_nodes.py +0 -0
  599. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_object_serializer_disk.py +0 -0
  600. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_path.py +0 -0
  601. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_profiler.py +0 -0
  602. {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_session_queue.py +0 -0
  603. {invokeai-5.2.0rc2 → invokeai-5.3.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.2.0rc2
3
+ Version: 5.3.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
@@ -47,6 +47,7 @@ invokeai/app/invocations/facetools.py
47
47
  invokeai/app/invocations/fields.py
48
48
  invokeai/app/invocations/flux_controlnet.py
49
49
  invokeai/app/invocations/flux_denoise.py
50
+ invokeai/app/invocations/flux_ip_adapter.py
50
51
  invokeai/app/invocations/flux_lora_loader.py
51
52
  invokeai/app/invocations/flux_text_encoder.py
52
53
  invokeai/app/invocations/flux_vae_decode.py
@@ -266,6 +267,7 @@ invokeai/backend/model_patcher.py
266
267
  invokeai/backend/raw_model.py
267
268
  invokeai/backend/spandrel_image_to_image_model.py
268
269
  invokeai/backend/textual_inversion.py
270
+ invokeai/backend/flux/custom_block_processor.py
269
271
  invokeai/backend/flux/denoise.py
270
272
  invokeai/backend/flux/math.py
271
273
  invokeai/backend/flux/model.py
@@ -282,6 +284,11 @@ invokeai/backend/flux/extensions/base_controlnet_extension.py
282
284
  invokeai/backend/flux/extensions/inpaint_extension.py
283
285
  invokeai/backend/flux/extensions/instantx_controlnet_extension.py
284
286
  invokeai/backend/flux/extensions/xlabs_controlnet_extension.py
287
+ invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py
288
+ invokeai/backend/flux/ip_adapter/__init__.py
289
+ invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py
290
+ invokeai/backend/flux/ip_adapter/state_dict_utils.py
291
+ invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py
285
292
  invokeai/backend/flux/modules/autoencoder.py
286
293
  invokeai/backend/flux/modules/conditioner.py
287
294
  invokeai/backend/flux/modules/layers.py
@@ -409,6 +416,7 @@ invokeai/backend/model_manager/load/model_cache/model_cache_base.py
409
416
  invokeai/backend/model_manager/load/model_cache/model_cache_default.py
410
417
  invokeai/backend/model_manager/load/model_cache/model_locker.py
411
418
  invokeai/backend/model_manager/load/model_loaders/__init__.py
419
+ invokeai/backend/model_manager/load/model_loaders/clip_vision.py
412
420
  invokeai/backend/model_manager/load/model_loaders/controlnet.py
413
421
  invokeai/backend/model_manager/load/model_loaders/flux.py
414
422
  invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py
@@ -505,12 +513,12 @@ invokeai/frontend/install/__init__.py
505
513
  invokeai/frontend/install/import_images.py
506
514
  invokeai/frontend/web/__init__.py
507
515
  invokeai/frontend/web/dist/index.html
508
- invokeai/frontend/web/dist/assets/App-CeaAHUEz.js
509
516
  invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
517
+ invokeai/frontend/web/dist/assets/App-DqSd1s3k.js
510
518
  invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
511
- invokeai/frontend/web/dist/assets/ThemeLocaleProvider-C5eh7bJz.js
519
+ invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CvgnMQ11.js
512
520
  invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
513
- invokeai/frontend/web/dist/assets/index-CcqOCFPb.js
521
+ invokeai/frontend/web/dist/assets/index-BQPuxPiy.js
514
522
  invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
515
523
  invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
516
524
  invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 5.2.0rc2
3
+ Version: 5.3.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
@@ -808,7 +808,11 @@ def get_is_installed(
808
808
  for model in installed_models:
809
809
  if model.source == starter_model.source:
810
810
  return True
811
- if model.name == starter_model.name and model.base == starter_model.base and model.type == starter_model.type:
811
+ if (
812
+ (model.name == starter_model.name or model.name in starter_model.previous_names)
813
+ and model.base == starter_model.base
814
+ and model.type == starter_model.type
815
+ ):
812
816
  return True
813
817
  return False
814
818
 
@@ -547,7 +547,9 @@ class DenoiseLatentsInvocation(BaseInvocation):
547
547
  if not isinstance(single_ipa_image_fields, list):
548
548
  single_ipa_image_fields = [single_ipa_image_fields]
549
549
 
550
- single_ipa_images = [context.images.get_pil(image.image_name) for image in single_ipa_image_fields]
550
+ single_ipa_images = [
551
+ context.images.get_pil(image.image_name, mode="RGB") for image in single_ipa_image_fields
552
+ ]
551
553
  with image_encoder_model_info as image_encoder_model:
552
554
  assert isinstance(image_encoder_model, CLIPVisionModelWithProjection)
553
555
  # Get image embeddings from CLIP and ImageProjModel.
@@ -1,15 +1,19 @@
1
1
  from contextlib import ExitStack
2
2
  from typing import Callable, Iterator, Optional, Tuple
3
3
 
4
+ import numpy as np
5
+ import numpy.typing as npt
4
6
  import torch
5
7
  import torchvision.transforms as tv_transforms
6
8
  from torchvision.transforms.functional import resize as tv_resize
9
+ from transformers import CLIPImageProcessor, CLIPVisionModelWithProjection
7
10
 
8
11
  from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
9
12
  from invokeai.app.invocations.fields import (
10
13
  DenoiseMaskField,
11
14
  FieldDescriptions,
12
15
  FluxConditioningField,
16
+ ImageField,
13
17
  Input,
14
18
  InputField,
15
19
  LatentsField,
@@ -17,6 +21,7 @@ from invokeai.app.invocations.fields import (
17
21
  WithMetadata,
18
22
  )
19
23
  from invokeai.app.invocations.flux_controlnet import FluxControlNetField
24
+ from invokeai.app.invocations.ip_adapter import IPAdapterField
20
25
  from invokeai.app.invocations.model import TransformerField, VAEField
21
26
  from invokeai.app.invocations.primitives import LatentsOutput
22
27
  from invokeai.app.services.shared.invocation_context import InvocationContext
@@ -26,6 +31,8 @@ from invokeai.backend.flux.denoise import denoise
26
31
  from invokeai.backend.flux.extensions.inpaint_extension import InpaintExtension
27
32
  from invokeai.backend.flux.extensions.instantx_controlnet_extension import InstantXControlNetExtension
28
33
  from invokeai.backend.flux.extensions.xlabs_controlnet_extension import XLabsControlNetExtension
34
+ from invokeai.backend.flux.extensions.xlabs_ip_adapter_extension import XLabsIPAdapterExtension
35
+ from invokeai.backend.flux.ip_adapter.xlabs_ip_adapter_flux import XlabsIpAdapterFlux
29
36
  from invokeai.backend.flux.model import Flux
30
37
  from invokeai.backend.flux.sampling_utils import (
31
38
  clip_timestep_schedule_fractional,
@@ -49,7 +56,7 @@ from invokeai.backend.util.devices import TorchDevice
49
56
  title="FLUX Denoise",
50
57
  tags=["image", "flux"],
51
58
  category="image",
52
- version="3.1.0",
59
+ version="3.2.0",
53
60
  classification=Classification.Prototype,
54
61
  )
55
62
  class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
@@ -82,6 +89,24 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
82
89
  positive_text_conditioning: FluxConditioningField = InputField(
83
90
  description=FieldDescriptions.positive_cond, input=Input.Connection
84
91
  )
92
+ negative_text_conditioning: FluxConditioningField | None = InputField(
93
+ default=None,
94
+ description="Negative conditioning tensor. Can be None if cfg_scale is 1.0.",
95
+ input=Input.Connection,
96
+ )
97
+ cfg_scale: float | list[float] = InputField(default=1.0, description=FieldDescriptions.cfg_scale, title="CFG Scale")
98
+ cfg_scale_start_step: int = InputField(
99
+ default=0,
100
+ title="CFG Scale Start Step",
101
+ description="Index of the first step to apply cfg_scale. Negative indices count backwards from the "
102
+ + "the last step (e.g. a value of -1 refers to the final step).",
103
+ )
104
+ cfg_scale_end_step: int = InputField(
105
+ default=-1,
106
+ title="CFG Scale End Step",
107
+ description="Index of the last step to apply cfg_scale. Negative indices count backwards from the "
108
+ + "last step (e.g. a value of -1 refers to the final step).",
109
+ )
85
110
  width: int = InputField(default=1024, multiple_of=16, description="Width of the generated image.")
86
111
  height: int = InputField(default=1024, multiple_of=16, description="Height of the generated image.")
87
112
  num_steps: int = InputField(
@@ -96,10 +121,15 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
96
121
  default=None, input=Input.Connection, description="ControlNet models."
97
122
  )
98
123
  controlnet_vae: VAEField | None = InputField(
124
+ default=None,
99
125
  description=FieldDescriptions.vae,
100
126
  input=Input.Connection,
101
127
  )
102
128
 
129
+ ip_adapter: IPAdapterField | list[IPAdapterField] | None = InputField(
130
+ description=FieldDescriptions.ip_adapter, title="IP-Adapter", default=None, input=Input.Connection
131
+ )
132
+
103
133
  @torch.no_grad()
104
134
  def invoke(self, context: InvocationContext) -> LatentsOutput:
105
135
  latents = self._run_diffusion(context)
@@ -108,6 +138,19 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
108
138
  name = context.tensors.save(tensor=latents)
109
139
  return LatentsOutput.build(latents_name=name, latents=latents, seed=None)
110
140
 
141
+ def _load_text_conditioning(
142
+ self, context: InvocationContext, conditioning_name: str, dtype: torch.dtype
143
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
144
+ # Load the conditioning data.
145
+ cond_data = context.conditioning.load(conditioning_name)
146
+ assert len(cond_data.conditionings) == 1
147
+ flux_conditioning = cond_data.conditionings[0]
148
+ assert isinstance(flux_conditioning, FLUXConditioningInfo)
149
+ flux_conditioning = flux_conditioning.to(dtype=dtype)
150
+ t5_embeddings = flux_conditioning.t5_embeds
151
+ clip_embeddings = flux_conditioning.clip_embeds
152
+ return t5_embeddings, clip_embeddings
153
+
111
154
  def _run_diffusion(
112
155
  self,
113
156
  context: InvocationContext,
@@ -115,13 +158,15 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
115
158
  inference_dtype = torch.bfloat16
116
159
 
117
160
  # Load the conditioning data.
118
- cond_data = context.conditioning.load(self.positive_text_conditioning.conditioning_name)
119
- assert len(cond_data.conditionings) == 1
120
- flux_conditioning = cond_data.conditionings[0]
121
- assert isinstance(flux_conditioning, FLUXConditioningInfo)
122
- flux_conditioning = flux_conditioning.to(dtype=inference_dtype)
123
- t5_embeddings = flux_conditioning.t5_embeds
124
- clip_embeddings = flux_conditioning.clip_embeds
161
+ pos_t5_embeddings, pos_clip_embeddings = self._load_text_conditioning(
162
+ context, self.positive_text_conditioning.conditioning_name, inference_dtype
163
+ )
164
+ neg_t5_embeddings: torch.Tensor | None = None
165
+ neg_clip_embeddings: torch.Tensor | None = None
166
+ if self.negative_text_conditioning is not None:
167
+ neg_t5_embeddings, neg_clip_embeddings = self._load_text_conditioning(
168
+ context, self.negative_text_conditioning.conditioning_name, inference_dtype
169
+ )
125
170
 
126
171
  # Load the input latents, if provided.
127
172
  init_latents = context.tensors.load(self.latents.latents_name) if self.latents else None
@@ -182,8 +227,16 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
182
227
  b, _c, latent_h, latent_w = x.shape
183
228
  img_ids = generate_img_ids(h=latent_h, w=latent_w, batch_size=b, device=x.device, dtype=x.dtype)
184
229
 
185
- bs, t5_seq_len, _ = t5_embeddings.shape
186
- txt_ids = torch.zeros(bs, t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device())
230
+ pos_bs, pos_t5_seq_len, _ = pos_t5_embeddings.shape
231
+ pos_txt_ids = torch.zeros(
232
+ pos_bs, pos_t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device()
233
+ )
234
+ neg_txt_ids: torch.Tensor | None = None
235
+ if neg_t5_embeddings is not None:
236
+ neg_bs, neg_t5_seq_len, _ = neg_t5_embeddings.shape
237
+ neg_txt_ids = torch.zeros(
238
+ neg_bs, neg_t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device()
239
+ )
187
240
 
188
241
  # Pack all latent tensors.
189
242
  init_latents = pack(init_latents) if init_latents is not None else None
@@ -204,6 +257,21 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
204
257
  noise=noise,
205
258
  )
206
259
 
260
+ # Compute the IP-Adapter image prompt clip embeddings.
261
+ # We do this before loading other models to minimize peak memory.
262
+ # TODO(ryand): We should really do this in a separate invocation to benefit from caching.
263
+ ip_adapter_fields = self._normalize_ip_adapter_fields()
264
+ pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds = self._prep_ip_adapter_image_prompt_clip_embeds(
265
+ ip_adapter_fields, context
266
+ )
267
+
268
+ cfg_scale = self.prep_cfg_scale(
269
+ cfg_scale=self.cfg_scale,
270
+ timesteps=timesteps,
271
+ cfg_scale_start_step=self.cfg_scale_start_step,
272
+ cfg_scale_end_step=self.cfg_scale_end_step,
273
+ )
274
+
207
275
  with ExitStack() as exit_stack:
208
276
  # Prepare ControlNet extensions.
209
277
  # Note: We do this before loading the transformer model to minimize peak memory (see implementation).
@@ -252,23 +320,88 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
252
320
  else:
253
321
  raise ValueError(f"Unsupported model format: {config.format}")
254
322
 
323
+ # Prepare IP-Adapter extensions.
324
+ pos_ip_adapter_extensions, neg_ip_adapter_extensions = self._prep_ip_adapter_extensions(
325
+ pos_image_prompt_clip_embeds=pos_image_prompt_clip_embeds,
326
+ neg_image_prompt_clip_embeds=neg_image_prompt_clip_embeds,
327
+ ip_adapter_fields=ip_adapter_fields,
328
+ context=context,
329
+ exit_stack=exit_stack,
330
+ dtype=inference_dtype,
331
+ )
332
+
255
333
  x = denoise(
256
334
  model=transformer,
257
335
  img=x,
258
336
  img_ids=img_ids,
259
- txt=t5_embeddings,
260
- txt_ids=txt_ids,
261
- vec=clip_embeddings,
337
+ txt=pos_t5_embeddings,
338
+ txt_ids=pos_txt_ids,
339
+ vec=pos_clip_embeddings,
340
+ neg_txt=neg_t5_embeddings,
341
+ neg_txt_ids=neg_txt_ids,
342
+ neg_vec=neg_clip_embeddings,
262
343
  timesteps=timesteps,
263
344
  step_callback=self._build_step_callback(context),
264
345
  guidance=self.guidance,
346
+ cfg_scale=cfg_scale,
265
347
  inpaint_extension=inpaint_extension,
266
348
  controlnet_extensions=controlnet_extensions,
349
+ pos_ip_adapter_extensions=pos_ip_adapter_extensions,
350
+ neg_ip_adapter_extensions=neg_ip_adapter_extensions,
267
351
  )
268
352
 
269
353
  x = unpack(x.float(), self.height, self.width)
270
354
  return x
271
355
 
356
+ @classmethod
357
+ def prep_cfg_scale(
358
+ cls, cfg_scale: float | list[float], timesteps: list[float], cfg_scale_start_step: int, cfg_scale_end_step: int
359
+ ) -> list[float]:
360
+ """Prepare the cfg_scale schedule.
361
+
362
+ - Clips the cfg_scale schedule based on cfg_scale_start_step and cfg_scale_end_step.
363
+ - If cfg_scale is a list, then it is assumed to be a schedule and is returned as-is.
364
+ - If cfg_scale is a scalar, then a linear schedule is created from cfg_scale_start_step to cfg_scale_end_step.
365
+ """
366
+ # num_steps is the number of denoising steps, which is one less than the number of timesteps.
367
+ num_steps = len(timesteps) - 1
368
+
369
+ # Normalize cfg_scale to a list if it is a scalar.
370
+ cfg_scale_list: list[float]
371
+ if isinstance(cfg_scale, float):
372
+ cfg_scale_list = [cfg_scale] * num_steps
373
+ elif isinstance(cfg_scale, list):
374
+ cfg_scale_list = cfg_scale
375
+ else:
376
+ raise ValueError(f"Unsupported cfg_scale type: {type(cfg_scale)}")
377
+ assert len(cfg_scale_list) == num_steps
378
+
379
+ # Handle negative indices for cfg_scale_start_step and cfg_scale_end_step.
380
+ start_step_index = cfg_scale_start_step
381
+ if start_step_index < 0:
382
+ start_step_index = num_steps + start_step_index
383
+ end_step_index = cfg_scale_end_step
384
+ if end_step_index < 0:
385
+ end_step_index = num_steps + end_step_index
386
+
387
+ # Validate the start and end step indices.
388
+ if not (0 <= start_step_index < num_steps):
389
+ raise ValueError(f"Invalid cfg_scale_start_step. Out of range: {cfg_scale_start_step}.")
390
+ if not (0 <= end_step_index < num_steps):
391
+ raise ValueError(f"Invalid cfg_scale_end_step. Out of range: {cfg_scale_end_step}.")
392
+ if start_step_index > end_step_index:
393
+ raise ValueError(
394
+ f"cfg_scale_start_step ({cfg_scale_start_step}) must be before cfg_scale_end_step "
395
+ + f"({cfg_scale_end_step})."
396
+ )
397
+
398
+ # Set values outside the start and end step indices to 1.0. This is equivalent to disabling cfg_scale for those
399
+ # steps.
400
+ clipped_cfg_scale = [1.0] * num_steps
401
+ clipped_cfg_scale[start_step_index : end_step_index + 1] = cfg_scale_list[start_step_index : end_step_index + 1]
402
+
403
+ return clipped_cfg_scale
404
+
272
405
  def _prep_inpaint_mask(self, context: InvocationContext, latents: torch.Tensor) -> torch.Tensor | None:
273
406
  """Prepare the inpaint mask.
274
407
 
@@ -408,6 +541,112 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
408
541
 
409
542
  return controlnet_extensions
410
543
 
544
+ def _normalize_ip_adapter_fields(self) -> list[IPAdapterField]:
545
+ if self.ip_adapter is None:
546
+ return []
547
+ elif isinstance(self.ip_adapter, IPAdapterField):
548
+ return [self.ip_adapter]
549
+ elif isinstance(self.ip_adapter, list):
550
+ return self.ip_adapter
551
+ else:
552
+ raise ValueError(f"Unsupported IP-Adapter type: {type(self.ip_adapter)}")
553
+
554
+ def _prep_ip_adapter_image_prompt_clip_embeds(
555
+ self,
556
+ ip_adapter_fields: list[IPAdapterField],
557
+ context: InvocationContext,
558
+ ) -> tuple[list[torch.Tensor], list[torch.Tensor]]:
559
+ """Run the IPAdapter CLIPVisionModel, returning image prompt embeddings."""
560
+ clip_image_processor = CLIPImageProcessor()
561
+
562
+ pos_image_prompt_clip_embeds: list[torch.Tensor] = []
563
+ neg_image_prompt_clip_embeds: list[torch.Tensor] = []
564
+ for ip_adapter_field in ip_adapter_fields:
565
+ # `ip_adapter_field.image` could be a list or a single ImageField. Normalize to a list here.
566
+ ipa_image_fields: list[ImageField]
567
+ if isinstance(ip_adapter_field.image, ImageField):
568
+ ipa_image_fields = [ip_adapter_field.image]
569
+ elif isinstance(ip_adapter_field.image, list):
570
+ ipa_image_fields = ip_adapter_field.image
571
+ else:
572
+ raise ValueError(f"Unsupported IP-Adapter image type: {type(ip_adapter_field.image)}")
573
+
574
+ if len(ipa_image_fields) != 1:
575
+ raise ValueError(
576
+ f"FLUX IP-Adapter only supports a single image prompt (received {len(ipa_image_fields)})."
577
+ )
578
+
579
+ ipa_images = [context.images.get_pil(image.image_name, mode="RGB") for image in ipa_image_fields]
580
+
581
+ pos_images: list[npt.NDArray[np.uint8]] = []
582
+ neg_images: list[npt.NDArray[np.uint8]] = []
583
+ for ipa_image in ipa_images:
584
+ assert ipa_image.mode == "RGB"
585
+ pos_image = np.array(ipa_image)
586
+ # We use a black image as the negative image prompt for parity with
587
+ # https://github.com/XLabs-AI/x-flux-comfyui/blob/45c834727dd2141aebc505ae4b01f193a8414e38/nodes.py#L592-L593
588
+ # An alternative scheme would be to apply zeros_like() after calling the clip_image_processor.
589
+ neg_image = np.zeros_like(pos_image)
590
+ pos_images.append(pos_image)
591
+ neg_images.append(neg_image)
592
+
593
+ with context.models.load(ip_adapter_field.image_encoder_model) as image_encoder_model:
594
+ assert isinstance(image_encoder_model, CLIPVisionModelWithProjection)
595
+
596
+ clip_image: torch.Tensor = clip_image_processor(images=pos_images, return_tensors="pt").pixel_values
597
+ clip_image = clip_image.to(device=image_encoder_model.device, dtype=image_encoder_model.dtype)
598
+ pos_clip_image_embeds = image_encoder_model(clip_image).image_embeds
599
+
600
+ clip_image = clip_image_processor(images=neg_images, return_tensors="pt").pixel_values
601
+ clip_image = clip_image.to(device=image_encoder_model.device, dtype=image_encoder_model.dtype)
602
+ neg_clip_image_embeds = image_encoder_model(clip_image).image_embeds
603
+
604
+ pos_image_prompt_clip_embeds.append(pos_clip_image_embeds)
605
+ neg_image_prompt_clip_embeds.append(neg_clip_image_embeds)
606
+
607
+ return pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds
608
+
609
+ def _prep_ip_adapter_extensions(
610
+ self,
611
+ ip_adapter_fields: list[IPAdapterField],
612
+ pos_image_prompt_clip_embeds: list[torch.Tensor],
613
+ neg_image_prompt_clip_embeds: list[torch.Tensor],
614
+ context: InvocationContext,
615
+ exit_stack: ExitStack,
616
+ dtype: torch.dtype,
617
+ ) -> tuple[list[XLabsIPAdapterExtension], list[XLabsIPAdapterExtension]]:
618
+ pos_ip_adapter_extensions: list[XLabsIPAdapterExtension] = []
619
+ neg_ip_adapter_extensions: list[XLabsIPAdapterExtension] = []
620
+ for ip_adapter_field, pos_image_prompt_clip_embed, neg_image_prompt_clip_embed in zip(
621
+ ip_adapter_fields, pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds, strict=True
622
+ ):
623
+ ip_adapter_model = exit_stack.enter_context(context.models.load(ip_adapter_field.ip_adapter_model))
624
+ assert isinstance(ip_adapter_model, XlabsIpAdapterFlux)
625
+ ip_adapter_model = ip_adapter_model.to(dtype=dtype)
626
+ if ip_adapter_field.mask is not None:
627
+ raise ValueError("IP-Adapter masks are not yet supported in Flux.")
628
+ ip_adapter_extension = XLabsIPAdapterExtension(
629
+ model=ip_adapter_model,
630
+ image_prompt_clip_embed=pos_image_prompt_clip_embed,
631
+ weight=ip_adapter_field.weight,
632
+ begin_step_percent=ip_adapter_field.begin_step_percent,
633
+ end_step_percent=ip_adapter_field.end_step_percent,
634
+ )
635
+ ip_adapter_extension.run_image_proj(dtype=dtype)
636
+ pos_ip_adapter_extensions.append(ip_adapter_extension)
637
+
638
+ ip_adapter_extension = XLabsIPAdapterExtension(
639
+ model=ip_adapter_model,
640
+ image_prompt_clip_embed=neg_image_prompt_clip_embed,
641
+ weight=ip_adapter_field.weight,
642
+ begin_step_percent=ip_adapter_field.begin_step_percent,
643
+ end_step_percent=ip_adapter_field.end_step_percent,
644
+ )
645
+ ip_adapter_extension.run_image_proj(dtype=dtype)
646
+ neg_ip_adapter_extensions.append(ip_adapter_extension)
647
+
648
+ return pos_ip_adapter_extensions, neg_ip_adapter_extensions
649
+
411
650
  def _lora_iterator(self, context: InvocationContext) -> Iterator[Tuple[LoRAModelRaw, float]]:
412
651
  for lora in self.transformer.loras:
413
652
  lora_info = context.models.load(lora.lora)
@@ -0,0 +1,89 @@
1
+ from builtins import float
2
+ from typing import List, Literal, Union
3
+
4
+ from pydantic import field_validator, model_validator
5
+ from typing_extensions import Self
6
+
7
+ from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
8
+ from invokeai.app.invocations.fields import InputField, UIType
9
+ from invokeai.app.invocations.ip_adapter import (
10
+ CLIP_VISION_MODEL_MAP,
11
+ IPAdapterField,
12
+ IPAdapterInvocation,
13
+ IPAdapterOutput,
14
+ )
15
+ from invokeai.app.invocations.model import ModelIdentifierField
16
+ from invokeai.app.invocations.primitives import ImageField
17
+ from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
18
+ from invokeai.app.services.shared.invocation_context import InvocationContext
19
+ from invokeai.backend.model_manager.config import (
20
+ IPAdapterCheckpointConfig,
21
+ IPAdapterInvokeAIConfig,
22
+ )
23
+
24
+
25
+ @invocation(
26
+ "flux_ip_adapter",
27
+ title="FLUX IP-Adapter",
28
+ tags=["ip_adapter", "control"],
29
+ category="ip_adapter",
30
+ version="1.0.0",
31
+ classification=Classification.Prototype,
32
+ )
33
+ class FluxIPAdapterInvocation(BaseInvocation):
34
+ """Collects FLUX IP-Adapter info to pass to other nodes."""
35
+
36
+ # FLUXIPAdapterInvocation is based closely on IPAdapterInvocation, but with some unsupported features removed.
37
+
38
+ image: ImageField = InputField(description="The IP-Adapter image prompt(s).")
39
+ ip_adapter_model: ModelIdentifierField = InputField(
40
+ description="The IP-Adapter model.", title="IP-Adapter Model", ui_type=UIType.IPAdapterModel
41
+ )
42
+ # Currently, the only known ViT model used by FLUX IP-Adapters is ViT-L.
43
+ clip_vision_model: Literal["ViT-L"] = InputField(description="CLIP Vision model to use.", default="ViT-L")
44
+ weight: Union[float, List[float]] = InputField(
45
+ default=1, description="The weight given to the IP-Adapter", title="Weight"
46
+ )
47
+ begin_step_percent: float = InputField(
48
+ default=0, ge=0, le=1, description="When the IP-Adapter is first applied (% of total steps)"
49
+ )
50
+ end_step_percent: float = InputField(
51
+ default=1, ge=0, le=1, description="When the IP-Adapter is last applied (% of total steps)"
52
+ )
53
+
54
+ @field_validator("weight")
55
+ @classmethod
56
+ def validate_ip_adapter_weight(cls, v: float) -> float:
57
+ validate_weights(v)
58
+ return v
59
+
60
+ @model_validator(mode="after")
61
+ def validate_begin_end_step_percent(self) -> Self:
62
+ validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
63
+ return self
64
+
65
+ def invoke(self, context: InvocationContext) -> IPAdapterOutput:
66
+ # Lookup the CLIP Vision encoder that is intended to be used with the IP-Adapter model.
67
+ ip_adapter_info = context.models.get_config(self.ip_adapter_model.key)
68
+ assert isinstance(ip_adapter_info, (IPAdapterInvokeAIConfig, IPAdapterCheckpointConfig))
69
+
70
+ # Note: There is a IPAdapterInvokeAIConfig.image_encoder_model_id field, but it isn't trustworthy.
71
+ image_encoder_starter_model = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
72
+ image_encoder_model_id = image_encoder_starter_model.source
73
+ image_encoder_model_name = image_encoder_starter_model.name
74
+ image_encoder_model = IPAdapterInvocation.get_clip_image_encoder(
75
+ context, image_encoder_model_id, image_encoder_model_name
76
+ )
77
+
78
+ return IPAdapterOutput(
79
+ ip_adapter=IPAdapterField(
80
+ image=self.image,
81
+ ip_adapter_model=self.ip_adapter_model,
82
+ image_encoder_model=ModelIdentifierField.from_config(image_encoder_model),
83
+ weight=self.weight,
84
+ target_blocks=[], # target_blocks is currently unused for FLUX IP-Adapters.
85
+ begin_step_percent=self.begin_step_percent,
86
+ end_step_percent=self.end_step_percent,
87
+ mask=None, # mask is currently unused for FLUX IP-Adapters.
88
+ ),
89
+ )
@@ -9,6 +9,7 @@ from invokeai.app.invocations.fields import FieldDescriptions, InputField, Outpu
9
9
  from invokeai.app.invocations.model import ModelIdentifierField
10
10
  from invokeai.app.invocations.primitives import ImageField
11
11
  from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
12
+ from invokeai.app.services.model_records.model_records_base import ModelRecordChanges
12
13
  from invokeai.app.services.shared.invocation_context import InvocationContext
13
14
  from invokeai.backend.model_manager.config import (
14
15
  AnyModelConfig,
@@ -17,6 +18,12 @@ from invokeai.backend.model_manager.config import (
17
18
  IPAdapterInvokeAIConfig,
18
19
  ModelType,
19
20
  )
21
+ from invokeai.backend.model_manager.starter_models import (
22
+ StarterModel,
23
+ clip_vit_l_image_encoder,
24
+ ip_adapter_sd_image_encoder,
25
+ ip_adapter_sdxl_image_encoder,
26
+ )
20
27
 
21
28
 
22
29
  class IPAdapterField(BaseModel):
@@ -55,10 +62,14 @@ class IPAdapterOutput(BaseInvocationOutput):
55
62
  ip_adapter: IPAdapterField = OutputField(description=FieldDescriptions.ip_adapter, title="IP-Adapter")
56
63
 
57
64
 
58
- CLIP_VISION_MODEL_MAP = {"ViT-H": "ip_adapter_sd_image_encoder", "ViT-G": "ip_adapter_sdxl_image_encoder"}
65
+ CLIP_VISION_MODEL_MAP: dict[Literal["ViT-L", "ViT-H", "ViT-G"], StarterModel] = {
66
+ "ViT-L": clip_vit_l_image_encoder,
67
+ "ViT-H": ip_adapter_sd_image_encoder,
68
+ "ViT-G": ip_adapter_sdxl_image_encoder,
69
+ }
59
70
 
60
71
 
61
- @invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.4.1")
72
+ @invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.5.0")
62
73
  class IPAdapterInvocation(BaseInvocation):
63
74
  """Collects IP-Adapter info to pass to other nodes."""
64
75
 
@@ -70,7 +81,7 @@ class IPAdapterInvocation(BaseInvocation):
70
81
  ui_order=-1,
71
82
  ui_type=UIType.IPAdapterModel,
72
83
  )
73
- clip_vision_model: Literal["ViT-H", "ViT-G"] = InputField(
84
+ clip_vision_model: Literal["ViT-H", "ViT-G", "ViT-L"] = InputField(
74
85
  description="CLIP Vision model to use. Overrides model settings. Mandatory for checkpoint models.",
75
86
  default="ViT-H",
76
87
  ui_order=2,
@@ -111,9 +122,11 @@ class IPAdapterInvocation(BaseInvocation):
111
122
  image_encoder_model_id = ip_adapter_info.image_encoder_model_id
112
123
  image_encoder_model_name = image_encoder_model_id.split("/")[-1].strip()
113
124
  else:
114
- image_encoder_model_name = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
125
+ image_encoder_starter_model = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
126
+ image_encoder_model_id = image_encoder_starter_model.source
127
+ image_encoder_model_name = image_encoder_starter_model.name
115
128
 
116
- image_encoder_model = self._get_image_encoder(context, image_encoder_model_name)
129
+ image_encoder_model = self.get_clip_image_encoder(context, image_encoder_model_id, image_encoder_model_name)
117
130
 
118
131
  if self.method == "style":
119
132
  if ip_adapter_info.base == "sd-1":
@@ -147,7 +160,10 @@ class IPAdapterInvocation(BaseInvocation):
147
160
  ),
148
161
  )
149
162
 
150
- def _get_image_encoder(self, context: InvocationContext, image_encoder_model_name: str) -> AnyModelConfig:
163
+ @classmethod
164
+ def get_clip_image_encoder(
165
+ cls, context: InvocationContext, image_encoder_model_id: str, image_encoder_model_name: str
166
+ ) -> AnyModelConfig:
151
167
  image_encoder_models = context.models.search_by_attrs(
152
168
  name=image_encoder_model_name, base=BaseModelType.Any, type=ModelType.CLIPVision
153
169
  )
@@ -159,7 +175,11 @@ class IPAdapterInvocation(BaseInvocation):
159
175
  )
160
176
 
161
177
  installer = context._services.model_manager.install
162
- job = installer.heuristic_import(f"InvokeAI/{image_encoder_model_name}")
178
+ # Note: We hard-code the type to CLIPVision here because if the model contains both a CLIPVision and a
179
+ # CLIPText model, the probe may treat it as a CLIPText model.
180
+ job = installer.heuristic_import(
181
+ image_encoder_model_id, ModelRecordChanges(name=image_encoder_model_name, type=ModelType.CLIPVision)
182
+ )
163
183
  installer.wait_for_job(job, timeout=600) # Wait for up to 10 minutes
164
184
  image_encoder_models = context.models.search_by_attrs(
165
185
  name=image_encoder_model_name, base=BaseModelType.Any, type=ModelType.CLIPVision