InvokeAI 4.2.3__tar.gz → 4.2.4__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 (402) hide show
  1. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/PKG-INFO +1 -1
  2. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/SOURCES.txt +8 -4
  3. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/requires.txt +7 -7
  4. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/PKG-INFO +1 -1
  5. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/dependencies.py +3 -3
  6. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/model_manager.py +1 -1
  7. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/session_queue.py +1 -0
  8. InvokeAI-4.2.4/invokeai/app/api/sockets.py +125 -0
  9. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api_app.py +2 -98
  10. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/baseinvocation.py +19 -11
  11. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/compel.py +21 -24
  12. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/latent.py +69 -46
  13. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/bulk_download/bulk_download_default.py +5 -12
  14. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/download/download_default.py +10 -20
  15. InvokeAI-4.2.4/invokeai/app/services/events/events_base.py +195 -0
  16. InvokeAI-4.2.4/invokeai/app/services/events/events_common.py +592 -0
  17. InvokeAI-4.2.4/invokeai/app/services/events/events_fastapievents.py +47 -0
  18. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_install/__init__.py +3 -1
  19. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_install/model_install_base.py +5 -230
  20. InvokeAI-4.2.4/invokeai/app/services/model_install/model_install_common.py +233 -0
  21. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_install/model_install_default.py +16 -37
  22. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_load/model_load_base.py +1 -8
  23. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_load/model_load_default.py +9 -50
  24. InvokeAI-4.2.4/invokeai/app/services/session_processor/session_processor_base.py +153 -0
  25. InvokeAI-4.2.4/invokeai/app/services/session_processor/session_processor_default.py +507 -0
  26. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_queue/session_queue_base.py +19 -1
  27. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_queue/session_queue_common.py +17 -2
  28. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_queue/session_queue_sqlite.py +61 -109
  29. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/graph.py +86 -103
  30. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/invocation_context.py +9 -10
  31. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite/sqlite_util.py +2 -0
  32. InvokeAI-4.2.4/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +35 -0
  33. InvokeAI-4.2.4/invokeai/app/util/custom_openapi.py +116 -0
  34. InvokeAI-4.2.4/invokeai/app/util/step_callback.py +97 -0
  35. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +17 -1
  36. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +26 -36
  37. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_cache/model_locker.py +1 -1
  38. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/textual_inversion.py +28 -11
  39. InvokeAI-4.2.4/invokeai/frontend/web/dist/assets/App-IufUCLxZ.js +137 -0
  40. InvokeAI-4.2.4/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CQIRp5vD.js +1 -0
  41. InvokeAI-4.2.4/invokeai/frontend/web/dist/assets/index-CSQTzMJa.js +510 -0
  42. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/index.html +1 -1
  43. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/de.json +2 -1
  44. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/en.json +20 -2
  45. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/es.json +52 -4
  46. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/it.json +64 -30
  47. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/ru.json +76 -14
  48. InvokeAI-4.2.4/invokeai/frontend/web/dist/locales/zh_Hant.json +249 -0
  49. InvokeAI-4.2.4/invokeai/version/invokeai_version.py +1 -0
  50. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/pyproject.toml +7 -7
  51. InvokeAI-4.2.3/invokeai/app/api/events.py +0 -52
  52. InvokeAI-4.2.3/invokeai/app/api/sockets.py +0 -66
  53. InvokeAI-4.2.3/invokeai/app/services/events/events_base.py +0 -490
  54. InvokeAI-4.2.3/invokeai/app/services/session_processor/session_processor_base.py +0 -28
  55. InvokeAI-4.2.3/invokeai/app/services/session_processor/session_processor_default.py +0 -300
  56. InvokeAI-4.2.3/invokeai/app/util/step_callback.py +0 -127
  57. InvokeAI-4.2.3/invokeai/frontend/web/dist/assets/App-vL2OZtc4.js +0 -137
  58. InvokeAI-4.2.3/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B4Q4rD3s.js +0 -1
  59. InvokeAI-4.2.3/invokeai/frontend/web/dist/assets/index-Cilgq8Ke.js +0 -510
  60. InvokeAI-4.2.3/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -27
  61. InvokeAI-4.2.3/invokeai/version/invokeai_version.py +0 -1
  62. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/dependency_links.txt +0 -0
  63. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/entry_points.txt +0 -0
  64. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/InvokeAI.egg-info/top_level.txt +0 -0
  65. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/LICENSE +0 -0
  66. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/LICENSE-SD1+SD2.txt +0 -0
  67. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/LICENSE-SDXL.txt +0 -0
  68. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/README.md +0 -0
  69. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/__init__.py +0 -0
  70. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/no_cache_staticfiles.py +0 -0
  71. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/app_info.py +0 -0
  72. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/board_images.py +0 -0
  73. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/boards.py +0 -0
  74. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/download_queue.py +0 -0
  75. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/images.py +0 -0
  76. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/utilities.py +0 -0
  77. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/api/routers/workflows.py +0 -0
  78. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/assets/images/caution.png +0 -0
  79. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/__init__.py +0 -0
  80. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/collections.py +0 -0
  81. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/constants.py +0 -0
  82. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
  83. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/custom_nodes/README.md +0 -0
  84. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/custom_nodes/init.py +0 -0
  85. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/cv.py +0 -0
  86. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/facetools.py +0 -0
  87. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/fields.py +0 -0
  88. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/image.py +0 -0
  89. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/infill.py +0 -0
  90. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/ip_adapter.py +0 -0
  91. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/mask.py +0 -0
  92. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/math.py +0 -0
  93. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/metadata.py +0 -0
  94. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/model.py +0 -0
  95. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/noise.py +0 -0
  96. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/param_easing.py +0 -0
  97. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/primitives.py +0 -0
  98. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/prompt.py +0 -0
  99. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/sdxl.py +0 -0
  100. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/strings.py +0 -0
  101. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/t2i_adapter.py +0 -0
  102. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/tiles.py +0 -0
  103. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/upscale.py +0 -0
  104. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/invocations/util.py +0 -0
  105. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/run_app.py +0 -0
  106. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/__init__.py +0 -0
  107. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_image_records/__init__.py +0 -0
  108. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
  109. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
  110. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_images/__init__.py +0 -0
  111. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_images/board_images_base.py +0 -0
  112. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_images/board_images_common.py +0 -0
  113. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_images/board_images_default.py +0 -0
  114. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_records/board_records_base.py +0 -0
  115. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_records/board_records_common.py +0 -0
  116. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
  117. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/boards/__init__.py +0 -0
  118. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/boards/boards_base.py +0 -0
  119. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/boards/boards_common.py +0 -0
  120. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/boards/boards_default.py +0 -0
  121. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/bulk_download/__init__.py +0 -0
  122. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
  123. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
  124. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/config/__init__.py +0 -0
  125. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/config/config_common.py +0 -0
  126. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/config/config_default.py +0 -0
  127. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/download/__init__.py +0 -0
  128. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/download/download_base.py +0 -0
  129. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/events/__init__.py +0 -0
  130. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_files/__init__.py +0 -0
  131. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_files/image_files_base.py +0 -0
  132. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_files/image_files_common.py +0 -0
  133. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_files/image_files_disk.py +0 -0
  134. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_records/__init__.py +0 -0
  135. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_records/image_records_base.py +0 -0
  136. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_records/image_records_common.py +0 -0
  137. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
  138. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/images/__init__.py +0 -0
  139. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/images/images_base.py +0 -0
  140. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/images/images_common.py +0 -0
  141. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/images/images_default.py +0 -0
  142. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_cache/__init__.py +0 -0
  143. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
  144. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
  145. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
  146. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_services.py +0 -0
  147. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_stats/__init__.py +0 -0
  148. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
  149. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
  150. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
  151. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/invoker.py +0 -0
  152. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/item_storage/__init__.py +0 -0
  153. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
  154. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
  155. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
  156. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_images/model_images_base.py +0 -0
  157. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_images/model_images_common.py +0 -0
  158. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_images/model_images_default.py +0 -0
  159. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_load/__init__.py +0 -0
  160. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_manager/__init__.py +0 -0
  161. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
  162. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
  163. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
  164. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_records/__init__.py +0 -0
  165. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_records/model_records_base.py +0 -0
  166. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/model_records/model_records_sql.py +0 -0
  167. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/names/__init__.py +0 -0
  168. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/names/names_base.py +0 -0
  169. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/names/names_common.py +0 -0
  170. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/names/names_default.py +0 -0
  171. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
  172. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
  173. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
  174. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
  175. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_processor/__init__.py +0 -0
  176. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
  177. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/session_queue/__init__.py +0 -0
  178. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/__init__.py +0 -0
  179. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/pagination.py +0 -0
  180. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
  181. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
  182. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
  183. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
  184. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
  185. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
  186. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
  187. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
  188. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
  189. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
  190. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
  191. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
  192. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
  193. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
  194. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
  195. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
  196. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/urls/__init__.py +0 -0
  197. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/urls/urls_base.py +0 -0
  198. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/urls/urls_default.py +0 -0
  199. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/__init__.py +0 -0
  200. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
  201. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
  202. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
  203. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
  204. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
  205. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
  206. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
  207. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
  208. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
  209. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
  210. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
  211. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/shared/__init__.py +0 -0
  212. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/shared/models.py +0 -0
  213. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/__init__.py +0 -0
  214. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/controlnet_utils.py +0 -0
  215. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/download_with_progress.py +0 -0
  216. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/metaenum.py +0 -0
  217. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/misc.py +0 -0
  218. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/model_exclude_null.py +0 -0
  219. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/profiler.py +0 -0
  220. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/suppress_output.py +0 -0
  221. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/thumbnails.py +0 -0
  222. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/app/util/ti_utils.py +0 -0
  223. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
  224. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/__init__.py +0 -0
  225. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/__init__.py +0 -0
  226. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
  227. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
  228. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
  229. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/canny.py +0 -0
  230. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/depth_anything/__init__.py +0 -0
  231. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/depth_anything/model/blocks.py +0 -0
  232. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/depth_anything/model/dpt.py +0 -0
  233. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/depth_anything/utilities/util.py +0 -0
  234. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
  235. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
  236. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
  237. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
  238. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
  239. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/hed.py +0 -0
  240. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
  241. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
  242. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
  243. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
  244. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
  245. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/invisible_watermark.py +0 -0
  246. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/lineart.py +0 -0
  247. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/lineart_anime.py +0 -0
  248. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/pngwriter.py +0 -0
  249. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
  250. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
  251. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/safety_checker.py +0 -0
  252. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/image_util/util.py +0 -0
  253. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/ip_adapter/__init__.py +0 -0
  254. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
  255. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
  256. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/ip_adapter/resampler.py +0 -0
  257. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/lora.py +0 -0
  258. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_hash/model_hash.py +0 -0
  259. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/__init__.py +0 -0
  260. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/config.py +0 -0
  261. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/convert_ckpt_to_diffusers.py +0 -0
  262. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/libc_util.py +0 -0
  263. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/__init__.py +0 -0
  264. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/convert_cache/__init__.py +0 -0
  265. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/convert_cache/convert_cache_base.py +0 -0
  266. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/convert_cache/convert_cache_default.py +0 -0
  267. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/load_base.py +0 -0
  268. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/load_default.py +0 -0
  269. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
  270. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
  271. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
  272. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
  273. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
  274. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
  275. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
  276. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
  277. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
  278. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
  279. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
  280. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
  281. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/model_util.py +0 -0
  282. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/load/optimizations.py +0 -0
  283. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/merge.py +0 -0
  284. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
  285. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
  286. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
  287. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
  288. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
  289. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/probe.py +0 -0
  290. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/search.py +0 -0
  291. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/starter_models.py +0 -0
  292. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/util/libc_util.py +0 -0
  293. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/util/model_util.py +0 -0
  294. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
  295. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/model_patcher.py +0 -0
  296. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/onnx/onnx_runtime.py +0 -0
  297. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/raw_model.py +0 -0
  298. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/__init__.py +0 -0
  299. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
  300. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
  301. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
  302. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
  303. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
  304. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
  305. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
  306. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
  307. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
  308. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
  309. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/stable_diffusion/seamless.py +0 -0
  310. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/tiles/__init__.py +0 -0
  311. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/tiles/tiles.py +0 -0
  312. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/tiles/utils.py +0 -0
  313. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/__init__.py +0 -0
  314. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/attention.py +0 -0
  315. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/catch_sigint.py +0 -0
  316. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/db_maintenance.py +0 -0
  317. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/devices.py +0 -0
  318. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/hotfixes.py +0 -0
  319. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/logging.py +0 -0
  320. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/mask.py +0 -0
  321. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/mps_fixes.py +0 -0
  322. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/silence_warnings.py +0 -0
  323. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/test_utils.py +0 -0
  324. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/backend/util/util.py +0 -0
  325. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
  326. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
  327. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
  328. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
  329. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
  330. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
  331. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
  332. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
  333. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
  334. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
  335. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
  336. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
  337. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
  338. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
  339. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
  340. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
  341. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/__init__.py +0 -0
  342. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/cli/__init__.py +0 -0
  343. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/cli/arg_parser.py +0 -0
  344. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/install/__init__.py +0 -0
  345. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/install/import_images.py +0 -0
  346. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/__init__.py +0 -0
  347. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
  348. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css +0 -0
  349. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
  350. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
  351. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
  352. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
  353. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
  354. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
  355. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
  356. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
  357. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
  358. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
  359. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
  360. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
  361. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
  362. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
  363. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
  364. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
  365. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
  366. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
  367. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
  368. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
  369. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
  370. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/images/transparent_bg.png +0 -0
  371. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2 +0 -0
  372. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2 +0 -0
  373. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2 +0 -0
  374. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-DyIDNIyN.woff2 +0 -0
  375. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CN1pIXkb.woff2 +0 -0
  376. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-BgVq2Tq4.woff2 +0 -0
  377. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-_GQuwPVU.woff2 +0 -0
  378. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/ar.json +0 -0
  379. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/az.json +0 -0
  380. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/bg.json +0 -0
  381. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/fi.json +0 -0
  382. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/fr.json +0 -0
  383. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/he.json +0 -0
  384. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/hu.json +0 -0
  385. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/ja.json +0 -0
  386. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/ko.json +0 -0
  387. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/mn.json +0 -0
  388. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/nl.json +0 -0
  389. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/pl.json +0 -0
  390. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/pt.json +0 -0
  391. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
  392. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/ro.json +0 -0
  393. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/sv.json +0 -0
  394. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/tr.json +0 -0
  395. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/uk.json +0 -0
  396. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/vi.json +0 -0
  397. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
  398. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
  399. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
  400. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/invocation_api/__init__.py +0 -0
  401. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/invokeai/version/__init__.py +0 -0
  402. {InvokeAI-4.2.3 → InvokeAI-4.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 4.2.3
3
+ Version: 4.2.4
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
@@ -13,7 +13,6 @@ invokeai/app/__init__.py
13
13
  invokeai/app/api_app.py
14
14
  invokeai/app/run_app.py
15
15
  invokeai/app/api/dependencies.py
16
- invokeai/app/api/events.py
17
16
  invokeai/app/api/no_cache_staticfiles.py
18
17
  invokeai/app/api/sockets.py
19
18
  invokeai/app/api/routers/app_info.py
@@ -84,6 +83,8 @@ invokeai/app/services/download/download_base.py
84
83
  invokeai/app/services/download/download_default.py
85
84
  invokeai/app/services/events/__init__.py
86
85
  invokeai/app/services/events/events_base.py
86
+ invokeai/app/services/events/events_common.py
87
+ invokeai/app/services/events/events_fastapievents.py
87
88
  invokeai/app/services/image_files/__init__.py
88
89
  invokeai/app/services/image_files/image_files_base.py
89
90
  invokeai/app/services/image_files/image_files_common.py
@@ -113,6 +114,7 @@ invokeai/app/services/model_images/model_images_common.py
113
114
  invokeai/app/services/model_images/model_images_default.py
114
115
  invokeai/app/services/model_install/__init__.py
115
116
  invokeai/app/services/model_install/model_install_base.py
117
+ invokeai/app/services/model_install/model_install_common.py
116
118
  invokeai/app/services/model_install/model_install_default.py
117
119
  invokeai/app/services/model_load/__init__.py
118
120
  invokeai/app/services/model_load/model_load_base.py
@@ -153,6 +155,7 @@ invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py
153
155
  invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py
154
156
  invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py
155
157
  invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py
158
+ invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py
156
159
  invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py
157
160
  invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py
158
161
  invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py
@@ -180,6 +183,7 @@ invokeai/app/shared/__init__.py
180
183
  invokeai/app/shared/models.py
181
184
  invokeai/app/util/__init__.py
182
185
  invokeai/app/util/controlnet_utils.py
186
+ invokeai/app/util/custom_openapi.py
183
187
  invokeai/app/util/download_with_progress.py
184
188
  invokeai/app/util/metaenum.py
185
189
  invokeai/app/util/misc.py
@@ -319,10 +323,10 @@ invokeai/frontend/install/import_images.py
319
323
  invokeai/frontend/web/__init__.py
320
324
  invokeai/frontend/web/dist/index.html
321
325
  invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
322
- invokeai/frontend/web/dist/assets/App-vL2OZtc4.js
323
- invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B4Q4rD3s.js
326
+ invokeai/frontend/web/dist/assets/App-IufUCLxZ.js
327
+ invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CQIRp5vD.js
324
328
  invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css
325
- invokeai/frontend/web/dist/assets/index-Cilgq8Ke.js
329
+ invokeai/frontend/web/dist/assets/index-CSQTzMJa.js
326
330
  invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2
327
331
  invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2
328
332
  invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2
@@ -1,5 +1,5 @@
1
- accelerate==0.29.2
2
- clip_anytorch==2.5.2
1
+ accelerate==0.30.1
2
+ clip_anytorch==2.6.0
3
3
  compel==2.0.2
4
4
  controlnet-aux==0.0.7
5
5
  diffusers[torch]==0.27.2
@@ -10,18 +10,18 @@ onnx==1.15.0
10
10
  onnxruntime==1.16.3
11
11
  opencv-python==4.9.0.80
12
12
  pytorch-lightning==2.1.3
13
- safetensors==0.4.2
13
+ safetensors==0.4.3
14
14
  timm==0.6.13
15
15
  torch==2.2.2
16
16
  torchmetrics==0.11.4
17
17
  torchsde==0.2.6
18
18
  torchvision==0.17.2
19
- transformers==4.39.3
19
+ transformers==4.41.1
20
20
  fastapi-events==0.11.0
21
- fastapi==0.110.0
22
- huggingface-hub==0.22.2
21
+ fastapi==0.111.0
22
+ huggingface-hub==0.23.1
23
23
  pydantic-settings==2.2.1
24
- pydantic==2.6.3
24
+ pydantic==2.7.2
25
25
  python-socketio==5.11.1
26
26
  uvicorn[standard]==0.28.0
27
27
  albumentations
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 4.2.3
3
+ Version: 4.2.4
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
@@ -18,6 +18,7 @@ from ..services.boards.boards_default import BoardService
18
18
  from ..services.bulk_download.bulk_download_default import BulkDownloadService
19
19
  from ..services.config import InvokeAIAppConfig
20
20
  from ..services.download import DownloadQueueService
21
+ from ..services.events.events_fastapievents import FastAPIEventService
21
22
  from ..services.image_files.image_files_disk import DiskImageFileStorage
22
23
  from ..services.image_records.image_records_sqlite import SqliteImageRecordStorage
23
24
  from ..services.images.images_default import ImageService
@@ -29,11 +30,10 @@ from ..services.model_images.model_images_default import ModelImageFileStorageDi
29
30
  from ..services.model_manager.model_manager_default import ModelManagerService
30
31
  from ..services.model_records import ModelRecordServiceSQL
31
32
  from ..services.names.names_default import SimpleNameService
32
- from ..services.session_processor.session_processor_default import DefaultSessionProcessor
33
+ from ..services.session_processor.session_processor_default import DefaultSessionProcessor, DefaultSessionRunner
33
34
  from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue
34
35
  from ..services.urls.urls_default import LocalUrlService
35
36
  from ..services.workflow_records.workflow_records_sqlite import SqliteWorkflowRecordsStorage
36
- from .events import FastAPIEventService
37
37
 
38
38
 
39
39
  # TODO: is there a better way to achieve this?
@@ -103,7 +103,7 @@ class ApiDependencies:
103
103
  )
104
104
  names = SimpleNameService()
105
105
  performance_statistics = InvocationStatsService()
106
- session_processor = DefaultSessionProcessor()
106
+ session_processor = DefaultSessionProcessor(session_runner=DefaultSessionRunner())
107
107
  session_queue = SqliteSessionQueue(db=db)
108
108
  urls = LocalUrlService()
109
109
  workflow_records = SqliteWorkflowRecordsStorage(db=db)
@@ -17,7 +17,7 @@ from starlette.exceptions import HTTPException
17
17
  from typing_extensions import Annotated
18
18
 
19
19
  from invokeai.app.services.model_images.model_images_common import ModelImageFileNotFoundException
20
- from invokeai.app.services.model_install import ModelInstallJob
20
+ from invokeai.app.services.model_install.model_install_common import ModelInstallJob
21
21
  from invokeai.app.services.model_records import (
22
22
  DuplicateModelException,
23
23
  InvalidModelException,
@@ -203,6 +203,7 @@ async def get_batch_status(
203
203
  responses={
204
204
  200: {"model": SessionQueueItem},
205
205
  },
206
+ response_model_exclude_none=True,
206
207
  )
207
208
  async def get_queue_item(
208
209
  queue_id: str = Path(description="The queue id to perform this operation on"),
@@ -0,0 +1,125 @@
1
+ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654)
2
+
3
+ from typing import Any
4
+
5
+ from fastapi import FastAPI
6
+ from pydantic import BaseModel
7
+ from socketio import ASGIApp, AsyncServer
8
+
9
+ from invokeai.app.services.events.events_common import (
10
+ BatchEnqueuedEvent,
11
+ BulkDownloadCompleteEvent,
12
+ BulkDownloadErrorEvent,
13
+ BulkDownloadEventBase,
14
+ BulkDownloadStartedEvent,
15
+ DownloadCancelledEvent,
16
+ DownloadCompleteEvent,
17
+ DownloadErrorEvent,
18
+ DownloadEventBase,
19
+ DownloadProgressEvent,
20
+ DownloadStartedEvent,
21
+ FastAPIEvent,
22
+ InvocationCompleteEvent,
23
+ InvocationDenoiseProgressEvent,
24
+ InvocationErrorEvent,
25
+ InvocationStartedEvent,
26
+ ModelEventBase,
27
+ ModelInstallCancelledEvent,
28
+ ModelInstallCompleteEvent,
29
+ ModelInstallDownloadProgressEvent,
30
+ ModelInstallDownloadsCompleteEvent,
31
+ ModelInstallErrorEvent,
32
+ ModelInstallStartedEvent,
33
+ ModelLoadCompleteEvent,
34
+ ModelLoadStartedEvent,
35
+ QueueClearedEvent,
36
+ QueueEventBase,
37
+ QueueItemStatusChangedEvent,
38
+ register_events,
39
+ )
40
+
41
+
42
+ class QueueSubscriptionEvent(BaseModel):
43
+ """Event data for subscribing to the socket.io queue room.
44
+ This is a pydantic model to ensure the data is in the correct format."""
45
+
46
+ queue_id: str
47
+
48
+
49
+ class BulkDownloadSubscriptionEvent(BaseModel):
50
+ """Event data for subscribing to the socket.io bulk downloads room.
51
+ This is a pydantic model to ensure the data is in the correct format."""
52
+
53
+ bulk_download_id: str
54
+
55
+
56
+ QUEUE_EVENTS = {
57
+ InvocationStartedEvent,
58
+ InvocationDenoiseProgressEvent,
59
+ InvocationCompleteEvent,
60
+ InvocationErrorEvent,
61
+ QueueItemStatusChangedEvent,
62
+ BatchEnqueuedEvent,
63
+ QueueClearedEvent,
64
+ }
65
+
66
+ MODEL_EVENTS = {
67
+ DownloadCancelledEvent,
68
+ DownloadCompleteEvent,
69
+ DownloadErrorEvent,
70
+ DownloadProgressEvent,
71
+ DownloadStartedEvent,
72
+ ModelLoadStartedEvent,
73
+ ModelLoadCompleteEvent,
74
+ ModelInstallDownloadProgressEvent,
75
+ ModelInstallDownloadsCompleteEvent,
76
+ ModelInstallStartedEvent,
77
+ ModelInstallCompleteEvent,
78
+ ModelInstallCancelledEvent,
79
+ ModelInstallErrorEvent,
80
+ }
81
+
82
+ BULK_DOWNLOAD_EVENTS = {BulkDownloadStartedEvent, BulkDownloadCompleteEvent, BulkDownloadErrorEvent}
83
+
84
+
85
+ class SocketIO:
86
+ _sub_queue = "subscribe_queue"
87
+ _unsub_queue = "unsubscribe_queue"
88
+
89
+ _sub_bulk_download = "subscribe_bulk_download"
90
+ _unsub_bulk_download = "unsubscribe_bulk_download"
91
+
92
+ def __init__(self, app: FastAPI):
93
+ self._sio = AsyncServer(async_mode="asgi", cors_allowed_origins="*")
94
+ self._app = ASGIApp(socketio_server=self._sio, socketio_path="/ws/socket.io")
95
+ app.mount("/ws", self._app)
96
+
97
+ self._sio.on(self._sub_queue, handler=self._handle_sub_queue)
98
+ self._sio.on(self._unsub_queue, handler=self._handle_unsub_queue)
99
+ self._sio.on(self._sub_bulk_download, handler=self._handle_sub_bulk_download)
100
+ self._sio.on(self._unsub_bulk_download, handler=self._handle_unsub_bulk_download)
101
+
102
+ register_events(QUEUE_EVENTS, self._handle_queue_event)
103
+ register_events(MODEL_EVENTS, self._handle_model_event)
104
+ register_events(BULK_DOWNLOAD_EVENTS, self._handle_bulk_image_download_event)
105
+
106
+ async def _handle_sub_queue(self, sid: str, data: Any) -> None:
107
+ await self._sio.enter_room(sid, QueueSubscriptionEvent(**data).queue_id)
108
+
109
+ async def _handle_unsub_queue(self, sid: str, data: Any) -> None:
110
+ await self._sio.leave_room(sid, QueueSubscriptionEvent(**data).queue_id)
111
+
112
+ async def _handle_sub_bulk_download(self, sid: str, data: Any) -> None:
113
+ await self._sio.enter_room(sid, BulkDownloadSubscriptionEvent(**data).bulk_download_id)
114
+
115
+ async def _handle_unsub_bulk_download(self, sid: str, data: Any) -> None:
116
+ await self._sio.leave_room(sid, BulkDownloadSubscriptionEvent(**data).bulk_download_id)
117
+
118
+ async def _handle_queue_event(self, event: FastAPIEvent[QueueEventBase]):
119
+ await self._sio.emit(event=event[0], data=event[1].model_dump(mode="json"), room=event[1].queue_id)
120
+
121
+ async def _handle_model_event(self, event: FastAPIEvent[ModelEventBase | DownloadEventBase]) -> None:
122
+ await self._sio.emit(event=event[0], data=event[1].model_dump(mode="json"))
123
+
124
+ async def _handle_bulk_image_download_event(self, event: FastAPIEvent[BulkDownloadEventBase]) -> None:
125
+ await self._sio.emit(event=event[0], data=event[1].model_dump(mode="json"), room=event[1].bulk_download_id)
@@ -3,9 +3,7 @@ import logging
3
3
  import mimetypes
4
4
  import socket
5
5
  from contextlib import asynccontextmanager
6
- from inspect import signature
7
6
  from pathlib import Path
8
- from typing import Any
9
7
 
10
8
  import torch
11
9
  import uvicorn
@@ -13,11 +11,9 @@ from fastapi import FastAPI
13
11
  from fastapi.middleware.cors import CORSMiddleware
14
12
  from fastapi.middleware.gzip import GZipMiddleware
15
13
  from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html
16
- from fastapi.openapi.utils import get_openapi
17
14
  from fastapi.responses import HTMLResponse
18
15
  from fastapi_events.handlers.local import local_handler
19
16
  from fastapi_events.middleware import EventHandlerASGIMiddleware
20
- from pydantic.json_schema import models_json_schema
21
17
  from torch.backends.mps import is_available as is_mps_available
22
18
 
23
19
  # for PyCharm:
@@ -25,9 +21,8 @@ from torch.backends.mps import is_available as is_mps_available
25
21
  import invokeai.backend.util.hotfixes # noqa: F401 (monkeypatching on import)
26
22
  import invokeai.frontend.web as web_dir
27
23
  from invokeai.app.api.no_cache_staticfiles import NoCacheStaticFiles
28
- from invokeai.app.invocations.model import ModelIdentifierField
29
24
  from invokeai.app.services.config.config_default import get_config
30
- from invokeai.app.services.session_processor.session_processor_common import ProgressImage
25
+ from invokeai.app.util.custom_openapi import get_openapi_func
31
26
  from invokeai.backend.util.devices import TorchDevice
32
27
 
33
28
  from ..backend.util.logging import InvokeAILogger
@@ -44,11 +39,6 @@ from .api.routers import (
44
39
  workflows,
45
40
  )
46
41
  from .api.sockets import SocketIO
47
- from .invocations.baseinvocation import (
48
- BaseInvocation,
49
- UIConfigBase,
50
- )
51
- from .invocations.fields import InputFieldJSONSchemaExtra, OutputFieldJSONSchemaExtra
52
42
 
53
43
  app_config = get_config()
54
44
 
@@ -118,93 +108,7 @@ app.include_router(app_info.app_router, prefix="/api")
118
108
  app.include_router(session_queue.session_queue_router, prefix="/api")
119
109
  app.include_router(workflows.workflows_router, prefix="/api")
120
110
 
121
-
122
- # Build a custom OpenAPI to include all outputs
123
- # TODO: can outputs be included on metadata of invocation schemas somehow?
124
- def custom_openapi() -> dict[str, Any]:
125
- if app.openapi_schema:
126
- return app.openapi_schema
127
- openapi_schema = get_openapi(
128
- title=app.title,
129
- description="An API for invoking AI image operations",
130
- version="1.0.0",
131
- routes=app.routes,
132
- separate_input_output_schemas=False, # https://fastapi.tiangolo.com/how-to/separate-openapi-schemas/
133
- )
134
-
135
- # Add all outputs
136
- all_invocations = BaseInvocation.get_invocations()
137
- output_types = set()
138
- output_type_titles = {}
139
- for invoker in all_invocations:
140
- output_type = signature(invoker.invoke).return_annotation
141
- output_types.add(output_type)
142
-
143
- output_schemas = models_json_schema(
144
- models=[(o, "serialization") for o in output_types], ref_template="#/components/schemas/{model}"
145
- )
146
- for schema_key, output_schema in output_schemas[1]["$defs"].items():
147
- # TODO: note that we assume the schema_key here is the TYPE.__name__
148
- # This could break in some cases, figure out a better way to do it
149
- output_type_titles[schema_key] = output_schema["title"]
150
- openapi_schema["components"]["schemas"][schema_key] = output_schema
151
- openapi_schema["components"]["schemas"][schema_key]["class"] = "output"
152
-
153
- # Some models don't end up in the schemas as standalone definitions
154
- additional_schemas = models_json_schema(
155
- [
156
- (UIConfigBase, "serialization"),
157
- (InputFieldJSONSchemaExtra, "serialization"),
158
- (OutputFieldJSONSchemaExtra, "serialization"),
159
- (ModelIdentifierField, "serialization"),
160
- (ProgressImage, "serialization"),
161
- ],
162
- ref_template="#/components/schemas/{model}",
163
- )
164
- for schema_key, schema_json in additional_schemas[1]["$defs"].items():
165
- openapi_schema["components"]["schemas"][schema_key] = schema_json
166
-
167
- openapi_schema["components"]["schemas"]["InvocationOutputMap"] = {
168
- "type": "object",
169
- "properties": {},
170
- "required": [],
171
- }
172
-
173
- # Add a reference to the output type to additionalProperties of the invoker schema
174
- for invoker in all_invocations:
175
- invoker_name = invoker.__name__ # type: ignore [attr-defined] # this is a valid attribute
176
- output_type = signature(obj=invoker.invoke).return_annotation
177
- output_type_title = output_type_titles[output_type.__name__]
178
- invoker_schema = openapi_schema["components"]["schemas"][f"{invoker_name}"]
179
- outputs_ref = {"$ref": f"#/components/schemas/{output_type_title}"}
180
- invoker_schema["output"] = outputs_ref
181
- openapi_schema["components"]["schemas"]["InvocationOutputMap"]["properties"][invoker.get_type()] = outputs_ref
182
- openapi_schema["components"]["schemas"]["InvocationOutputMap"]["required"].append(invoker.get_type())
183
- invoker_schema["class"] = "invocation"
184
-
185
- # This code no longer seems to be necessary?
186
- # Leave it here just in case
187
- #
188
- # from invokeai.backend.model_manager import get_model_config_formats
189
- # formats = get_model_config_formats()
190
- # for model_config_name, enum_set in formats.items():
191
-
192
- # if model_config_name in openapi_schema["components"]["schemas"]:
193
- # # print(f"Config with name {name} already defined")
194
- # continue
195
-
196
- # openapi_schema["components"]["schemas"][model_config_name] = {
197
- # "title": model_config_name,
198
- # "description": "An enumeration.",
199
- # "type": "string",
200
- # "enum": [v.value for v in enum_set],
201
- # }
202
-
203
- app.openapi_schema = openapi_schema
204
- return app.openapi_schema
205
-
206
-
207
- app.openapi = custom_openapi # type: ignore [method-assign] # this is a valid assignment
111
+ app.openapi = get_openapi_func(app)
208
112
 
209
113
 
210
114
  @app.get("/docs", include_in_schema=False)
@@ -98,11 +98,13 @@ class BaseInvocationOutput(BaseModel):
98
98
 
99
99
  _output_classes: ClassVar[set[BaseInvocationOutput]] = set()
100
100
  _typeadapter: ClassVar[Optional[TypeAdapter[Any]]] = None
101
+ _typeadapter_needs_update: ClassVar[bool] = False
101
102
 
102
103
  @classmethod
103
104
  def register_output(cls, output: BaseInvocationOutput) -> None:
104
105
  """Registers an invocation output."""
105
106
  cls._output_classes.add(output)
107
+ cls._typeadapter_needs_update = True
106
108
 
107
109
  @classmethod
108
110
  def get_outputs(cls) -> Iterable[BaseInvocationOutput]:
@@ -112,11 +114,12 @@ class BaseInvocationOutput(BaseModel):
112
114
  @classmethod
113
115
  def get_typeadapter(cls) -> TypeAdapter[Any]:
114
116
  """Gets a pydantc TypeAdapter for the union of all invocation output types."""
115
- if not cls._typeadapter:
116
- InvocationOutputsUnion = TypeAliasType(
117
- "InvocationOutputsUnion", Annotated[Union[tuple(cls._output_classes)], Field(discriminator="type")]
117
+ if not cls._typeadapter or cls._typeadapter_needs_update:
118
+ AnyInvocationOutput = TypeAliasType(
119
+ "AnyInvocationOutput", Annotated[Union[tuple(cls._output_classes)], Field(discriminator="type")]
118
120
  )
119
- cls._typeadapter = TypeAdapter(InvocationOutputsUnion)
121
+ cls._typeadapter = TypeAdapter(AnyInvocationOutput)
122
+ cls._typeadapter_needs_update = False
120
123
  return cls._typeadapter
121
124
 
122
125
  @classmethod
@@ -125,12 +128,13 @@ class BaseInvocationOutput(BaseModel):
125
128
  return (i.get_type() for i in BaseInvocationOutput.get_outputs())
126
129
 
127
130
  @staticmethod
128
- def json_schema_extra(schema: dict[str, Any], model_class: Type[BaseModel]) -> None:
131
+ def json_schema_extra(schema: dict[str, Any], model_class: Type[BaseInvocationOutput]) -> None:
129
132
  """Adds various UI-facing attributes to the invocation output's OpenAPI schema."""
130
133
  # Because we use a pydantic Literal field with default value for the invocation type,
131
134
  # it will be typed as optional in the OpenAPI schema. Make it required manually.
132
135
  if "required" not in schema or not isinstance(schema["required"], list):
133
136
  schema["required"] = []
137
+ schema["class"] = "output"
134
138
  schema["required"].extend(["type"])
135
139
 
136
140
  @classmethod
@@ -167,6 +171,7 @@ class BaseInvocation(ABC, BaseModel):
167
171
 
168
172
  _invocation_classes: ClassVar[set[BaseInvocation]] = set()
169
173
  _typeadapter: ClassVar[Optional[TypeAdapter[Any]]] = None
174
+ _typeadapter_needs_update: ClassVar[bool] = False
170
175
 
171
176
  @classmethod
172
177
  def get_type(cls) -> str:
@@ -177,15 +182,17 @@ class BaseInvocation(ABC, BaseModel):
177
182
  def register_invocation(cls, invocation: BaseInvocation) -> None:
178
183
  """Registers an invocation."""
179
184
  cls._invocation_classes.add(invocation)
185
+ cls._typeadapter_needs_update = True
180
186
 
181
187
  @classmethod
182
188
  def get_typeadapter(cls) -> TypeAdapter[Any]:
183
189
  """Gets a pydantc TypeAdapter for the union of all invocation types."""
184
- if not cls._typeadapter:
185
- InvocationsUnion = TypeAliasType(
186
- "InvocationsUnion", Annotated[Union[tuple(cls._invocation_classes)], Field(discriminator="type")]
190
+ if not cls._typeadapter or cls._typeadapter_needs_update:
191
+ AnyInvocation = TypeAliasType(
192
+ "AnyInvocation", Annotated[Union[tuple(cls._invocation_classes)], Field(discriminator="type")]
187
193
  )
188
- cls._typeadapter = TypeAdapter(InvocationsUnion)
194
+ cls._typeadapter = TypeAdapter(AnyInvocation)
195
+ cls._typeadapter_needs_update = False
189
196
  return cls._typeadapter
190
197
 
191
198
  @classmethod
@@ -221,7 +228,7 @@ class BaseInvocation(ABC, BaseModel):
221
228
  return signature(cls.invoke).return_annotation
222
229
 
223
230
  @staticmethod
224
- def json_schema_extra(schema: dict[str, Any], model_class: Type[BaseModel], *args, **kwargs) -> None:
231
+ def json_schema_extra(schema: dict[str, Any], model_class: Type[BaseInvocation]) -> None:
225
232
  """Adds various UI-facing attributes to the invocation's OpenAPI schema."""
226
233
  uiconfig = cast(UIConfigBase | None, getattr(model_class, "UIConfig", None))
227
234
  if uiconfig is not None:
@@ -237,6 +244,7 @@ class BaseInvocation(ABC, BaseModel):
237
244
  schema["version"] = uiconfig.version
238
245
  if "required" not in schema or not isinstance(schema["required"], list):
239
246
  schema["required"] = []
247
+ schema["class"] = "invocation"
240
248
  schema["required"].extend(["type", "id"])
241
249
 
242
250
  @abstractmethod
@@ -310,7 +318,7 @@ class BaseInvocation(ABC, BaseModel):
310
318
  protected_namespaces=(),
311
319
  validate_assignment=True,
312
320
  json_schema_extra=json_schema_extra,
313
- json_schema_serialization_defaults_required=True,
321
+ json_schema_serialization_defaults_required=False,
314
322
  coerce_numbers_to_str=True,
315
323
  )
316
324
 
@@ -65,11 +65,7 @@ class CompelInvocation(BaseInvocation):
65
65
  @torch.no_grad()
66
66
  def invoke(self, context: InvocationContext) -> ConditioningOutput:
67
67
  tokenizer_info = context.models.load(self.clip.tokenizer)
68
- tokenizer_model = tokenizer_info.model
69
- assert isinstance(tokenizer_model, CLIPTokenizer)
70
68
  text_encoder_info = context.models.load(self.clip.text_encoder)
71
- text_encoder_model = text_encoder_info.model
72
- assert isinstance(text_encoder_model, CLIPTextModel)
73
69
 
74
70
  def _lora_loader() -> Iterator[Tuple[LoRAModelRaw, float]]:
75
71
  for lora in self.clip.loras:
@@ -84,19 +80,21 @@ class CompelInvocation(BaseInvocation):
84
80
  ti_list = generate_ti_list(self.prompt, text_encoder_info.config.base, context)
85
81
 
86
82
  with (
87
- ModelPatcher.apply_ti(tokenizer_model, text_encoder_model, ti_list) as (
88
- tokenizer,
89
- ti_manager,
90
- ),
83
+ # apply all patches while the model is on the target device
91
84
  text_encoder_info as text_encoder,
92
- # Apply the LoRA after text_encoder has been moved to its target device for faster patching.
85
+ tokenizer_info as tokenizer,
93
86
  ModelPatcher.apply_lora_text_encoder(text_encoder, _lora_loader()),
94
87
  # Apply CLIP Skip after LoRA to prevent LoRA application from failing on skipped layers.
95
- ModelPatcher.apply_clip_skip(text_encoder_model, self.clip.skipped_layers),
88
+ ModelPatcher.apply_clip_skip(text_encoder, self.clip.skipped_layers),
89
+ ModelPatcher.apply_ti(tokenizer, text_encoder, ti_list) as (
90
+ patched_tokenizer,
91
+ ti_manager,
92
+ ),
96
93
  ):
97
94
  assert isinstance(text_encoder, CLIPTextModel)
95
+ assert isinstance(tokenizer, CLIPTokenizer)
98
96
  compel = Compel(
99
- tokenizer=tokenizer,
97
+ tokenizer=patched_tokenizer,
100
98
  text_encoder=text_encoder,
101
99
  textual_inversion_manager=ti_manager,
102
100
  dtype_for_device_getter=TorchDevice.choose_torch_dtype,
@@ -106,7 +104,7 @@ class CompelInvocation(BaseInvocation):
106
104
  conjunction = Compel.parse_prompt_string(self.prompt)
107
105
 
108
106
  if context.config.get().log_tokenization:
109
- log_tokenization_for_conjunction(conjunction, tokenizer)
107
+ log_tokenization_for_conjunction(conjunction, patched_tokenizer)
110
108
 
111
109
  c, _options = compel.build_conditioning_tensor_for_conjunction(conjunction)
112
110
 
@@ -136,11 +134,7 @@ class SDXLPromptInvocationBase:
136
134
  zero_on_empty: bool,
137
135
  ) -> Tuple[torch.Tensor, Optional[torch.Tensor]]:
138
136
  tokenizer_info = context.models.load(clip_field.tokenizer)
139
- tokenizer_model = tokenizer_info.model
140
- assert isinstance(tokenizer_model, CLIPTokenizer)
141
137
  text_encoder_info = context.models.load(clip_field.text_encoder)
142
- text_encoder_model = text_encoder_info.model
143
- assert isinstance(text_encoder_model, (CLIPTextModel, CLIPTextModelWithProjection))
144
138
 
145
139
  # return zero on empty
146
140
  if prompt == "" and zero_on_empty:
@@ -177,20 +171,23 @@ class SDXLPromptInvocationBase:
177
171
  ti_list = generate_ti_list(prompt, text_encoder_info.config.base, context)
178
172
 
179
173
  with (
180
- ModelPatcher.apply_ti(tokenizer_model, text_encoder_model, ti_list) as (
181
- tokenizer,
182
- ti_manager,
183
- ),
174
+ # apply all patches while the model is on the target device
184
175
  text_encoder_info as text_encoder,
185
- # Apply the LoRA after text_encoder has been moved to its target device for faster patching.
176
+ tokenizer_info as tokenizer,
186
177
  ModelPatcher.apply_lora(text_encoder, _lora_loader(), lora_prefix),
187
178
  # Apply CLIP Skip after LoRA to prevent LoRA application from failing on skipped layers.
188
- ModelPatcher.apply_clip_skip(text_encoder_model, clip_field.skipped_layers),
179
+ ModelPatcher.apply_clip_skip(text_encoder, clip_field.skipped_layers),
180
+ ModelPatcher.apply_ti(tokenizer, text_encoder, ti_list) as (
181
+ patched_tokenizer,
182
+ ti_manager,
183
+ ),
189
184
  ):
190
185
  assert isinstance(text_encoder, (CLIPTextModel, CLIPTextModelWithProjection))
186
+ assert isinstance(tokenizer, CLIPTokenizer)
187
+
191
188
  text_encoder = cast(CLIPTextModel, text_encoder)
192
189
  compel = Compel(
193
- tokenizer=tokenizer,
190
+ tokenizer=patched_tokenizer,
194
191
  text_encoder=text_encoder,
195
192
  textual_inversion_manager=ti_manager,
196
193
  dtype_for_device_getter=TorchDevice.choose_torch_dtype,
@@ -203,7 +200,7 @@ class SDXLPromptInvocationBase:
203
200
 
204
201
  if context.config.get().log_tokenization:
205
202
  # TODO: better logging for and syntax
206
- log_tokenization_for_conjunction(conjunction, tokenizer)
203
+ log_tokenization_for_conjunction(conjunction, patched_tokenizer)
207
204
 
208
205
  # TODO: ask for optimizations? to not run text_encoder twice
209
206
  c, _options = compel.build_conditioning_tensor_for_conjunction(conjunction)