InvokeAI 4.2.0b2__tar.gz → 4.2.1__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 (394) hide show
  1. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/PKG-INFO +1 -1
  2. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/SOURCES.txt +3 -4
  3. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/PKG-INFO +1 -1
  4. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/app_info.py +1 -4
  5. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/model_manager.py +25 -11
  6. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/image.py +2 -14
  7. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/latent.py +0 -7
  8. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/__init__.py +0 -1
  9. InvokeAI-4.2.1/invokeai/backend/image_util/safety_checker.py +84 -0
  10. InvokeAI-4.2.1/invokeai/backend/stable_diffusion/seamless.py +51 -0
  11. InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/App-DB-UBib9.js +137 -0
  12. InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js +1 -0
  13. InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/index-BhjE-_0E.js +510 -0
  14. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/index.html +1 -1
  15. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/de.json +17 -5
  16. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/en.json +31 -14
  17. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/es.json +88 -2
  18. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/it.json +100 -20
  19. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ja.json +0 -1
  20. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ko.json +0 -1
  21. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/nl.json +0 -3
  22. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ru.json +107 -15
  23. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/zh_CN.json +1 -3
  24. InvokeAI-4.2.1/invokeai/version/invokeai_version.py +1 -0
  25. InvokeAI-4.2.0b2/invokeai/backend/image_util/safety_checker.py +0 -62
  26. InvokeAI-4.2.0b2/invokeai/backend/image_util/seamless.py +0 -52
  27. InvokeAI-4.2.0b2/invokeai/backend/stable_diffusion/seamless.py +0 -89
  28. InvokeAI-4.2.0b2/invokeai/frontend/web/dist/assets/App-BT6UTYoU.js +0 -128
  29. InvokeAI-4.2.0b2/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-y0e1yIvz.js +0 -1
  30. InvokeAI-4.2.0b2/invokeai/frontend/web/dist/assets/index-CVUfG-GO.js +0 -510
  31. InvokeAI-4.2.0b2/invokeai/version/invokeai_version.py +0 -1
  32. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/dependency_links.txt +0 -0
  33. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/entry_points.txt +0 -0
  34. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/requires.txt +0 -0
  35. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/InvokeAI.egg-info/top_level.txt +0 -0
  36. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/LICENSE +0 -0
  37. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/LICENSE-SD1+SD2.txt +0 -0
  38. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/LICENSE-SDXL.txt +0 -0
  39. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/README.md +0 -0
  40. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/__init__.py +0 -0
  41. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/dependencies.py +0 -0
  42. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/events.py +0 -0
  43. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/no_cache_staticfiles.py +0 -0
  44. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/board_images.py +0 -0
  45. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/boards.py +0 -0
  46. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/download_queue.py +0 -0
  47. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/images.py +0 -0
  48. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/session_queue.py +0 -0
  49. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/utilities.py +0 -0
  50. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/routers/workflows.py +0 -0
  51. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api/sockets.py +0 -0
  52. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/api_app.py +0 -0
  53. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/assets/images/caution.png +0 -0
  54. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/__init__.py +0 -0
  55. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/baseinvocation.py +0 -0
  56. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/collections.py +0 -0
  57. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/compel.py +0 -0
  58. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/constants.py +0 -0
  59. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
  60. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/custom_nodes/README.md +0 -0
  61. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/custom_nodes/init.py +0 -0
  62. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/cv.py +0 -0
  63. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/facetools.py +0 -0
  64. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/fields.py +0 -0
  65. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/infill.py +0 -0
  66. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/ip_adapter.py +0 -0
  67. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/mask.py +0 -0
  68. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/math.py +0 -0
  69. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/metadata.py +0 -0
  70. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/model.py +0 -0
  71. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/noise.py +0 -0
  72. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/param_easing.py +0 -0
  73. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/primitives.py +0 -0
  74. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/prompt.py +0 -0
  75. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/sdxl.py +0 -0
  76. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/strings.py +0 -0
  77. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/t2i_adapter.py +0 -0
  78. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/tiles.py +0 -0
  79. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/upscale.py +0 -0
  80. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/invocations/util.py +0 -0
  81. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/run_app.py +0 -0
  82. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/__init__.py +0 -0
  83. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/__init__.py +0 -0
  84. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
  85. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
  86. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_images/__init__.py +0 -0
  87. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_base.py +0 -0
  88. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_common.py +0 -0
  89. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_default.py +0 -0
  90. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_base.py +0 -0
  91. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_common.py +0 -0
  92. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
  93. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/boards/__init__.py +0 -0
  94. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_base.py +0 -0
  95. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_common.py +0 -0
  96. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_default.py +0 -0
  97. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/__init__.py +0 -0
  98. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
  99. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
  100. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
  101. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/config/__init__.py +0 -0
  102. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/config/config_common.py +0 -0
  103. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/config/config_default.py +0 -0
  104. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/download/__init__.py +0 -0
  105. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/download/download_base.py +0 -0
  106. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/download/download_default.py +0 -0
  107. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/events/__init__.py +0 -0
  108. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/events/events_base.py +0 -0
  109. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_files/__init__.py +0 -0
  110. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_base.py +0 -0
  111. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_common.py +0 -0
  112. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_disk.py +0 -0
  113. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_records/__init__.py +0 -0
  114. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_base.py +0 -0
  115. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_common.py +0 -0
  116. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
  117. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/images/__init__.py +0 -0
  118. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/images/images_base.py +0 -0
  119. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/images/images_common.py +0 -0
  120. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/images/images_default.py +0 -0
  121. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/__init__.py +0 -0
  122. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
  123. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
  124. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
  125. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_services.py +0 -0
  126. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/__init__.py +0 -0
  127. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
  128. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
  129. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
  130. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/invoker.py +0 -0
  131. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/__init__.py +0 -0
  132. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
  133. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
  134. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
  135. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_base.py +0 -0
  136. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_common.py +0 -0
  137. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_default.py +0 -0
  138. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_install/__init__.py +0 -0
  139. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_install/model_install_base.py +0 -0
  140. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_install/model_install_default.py +0 -0
  141. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_load/__init__.py +0 -0
  142. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_load/model_load_base.py +0 -0
  143. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_load/model_load_default.py +0 -0
  144. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/__init__.py +0 -0
  145. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
  146. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
  147. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
  148. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_records/__init__.py +0 -0
  149. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_records/model_records_base.py +0 -0
  150. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/model_records/model_records_sql.py +0 -0
  151. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/names/__init__.py +0 -0
  152. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/names/names_base.py +0 -0
  153. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/names/names_common.py +0 -0
  154. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/names/names_default.py +0 -0
  155. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
  156. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
  157. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
  158. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
  159. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/__init__.py +0 -0
  160. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
  161. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
  162. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
  163. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/__init__.py +0 -0
  164. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
  165. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
  166. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
  167. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/__init__.py +0 -0
  168. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/graph.py +0 -0
  169. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/invocation_context.py +0 -0
  170. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/pagination.py +0 -0
  171. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
  172. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
  173. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
  174. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
  175. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
  176. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
  177. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
  178. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
  179. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
  180. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
  181. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
  182. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
  183. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
  184. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
  185. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
  186. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
  187. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
  188. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/urls/__init__.py +0 -0
  189. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/urls/urls_base.py +0 -0
  190. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/urls/urls_default.py +0 -0
  191. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/__init__.py +0 -0
  192. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
  193. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
  194. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
  195. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
  196. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
  197. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
  198. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
  199. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
  200. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
  201. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
  202. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
  203. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/shared/__init__.py +0 -0
  204. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/shared/models.py +0 -0
  205. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/__init__.py +0 -0
  206. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/controlnet_utils.py +0 -0
  207. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/download_with_progress.py +0 -0
  208. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/metaenum.py +0 -0
  209. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/misc.py +0 -0
  210. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/model_exclude_null.py +0 -0
  211. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/profiler.py +0 -0
  212. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/step_callback.py +0 -0
  213. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/suppress_output.py +0 -0
  214. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/thumbnails.py +0 -0
  215. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/app/util/ti_utils.py +0 -0
  216. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
  217. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/__init__.py +0 -0
  218. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
  219. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
  220. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
  221. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/canny.py +0 -0
  222. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/__init__.py +0 -0
  223. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/model/blocks.py +0 -0
  224. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/model/dpt.py +0 -0
  225. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/utilities/util.py +0 -0
  226. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
  227. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
  228. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
  229. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
  230. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
  231. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/hed.py +0 -0
  232. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
  233. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
  234. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
  235. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
  236. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
  237. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/invisible_watermark.py +0 -0
  238. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/lineart.py +0 -0
  239. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/lineart_anime.py +0 -0
  240. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/pngwriter.py +0 -0
  241. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
  242. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
  243. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/image_util/util.py +0 -0
  244. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/__init__.py +0 -0
  245. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
  246. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
  247. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/resampler.py +0 -0
  248. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/lora.py +0 -0
  249. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_hash/model_hash.py +0 -0
  250. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/__init__.py +0 -0
  251. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/config.py +0 -0
  252. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/convert_ckpt_to_diffusers.py +0 -0
  253. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/libc_util.py +0 -0
  254. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/__init__.py +0 -0
  255. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/__init__.py +0 -0
  256. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/convert_cache_base.py +0 -0
  257. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/convert_cache_default.py +0 -0
  258. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/load_base.py +0 -0
  259. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/load_default.py +0 -0
  260. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
  261. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
  262. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
  263. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
  264. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
  265. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
  266. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
  267. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
  268. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
  269. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
  270. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
  271. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
  272. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
  273. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
  274. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
  275. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_util.py +0 -0
  276. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/optimizations.py +0 -0
  277. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/merge.py +0 -0
  278. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
  279. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
  280. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
  281. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
  282. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
  283. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/probe.py +0 -0
  284. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/search.py +0 -0
  285. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/starter_models.py +0 -0
  286. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/libc_util.py +0 -0
  287. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/model_util.py +0 -0
  288. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
  289. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/model_patcher.py +0 -0
  290. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/onnx/onnx_runtime.py +0 -0
  291. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/raw_model.py +0 -0
  292. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/__init__.py +0 -0
  293. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
  294. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
  295. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
  296. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
  297. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
  298. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
  299. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
  300. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
  301. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
  302. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
  303. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/textual_inversion.py +0 -0
  304. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/tiles/__init__.py +0 -0
  305. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/tiles/tiles.py +0 -0
  306. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/tiles/utils.py +0 -0
  307. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/__init__.py +0 -0
  308. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/attention.py +0 -0
  309. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/catch_sigint.py +0 -0
  310. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/db_maintenance.py +0 -0
  311. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/devices.py +0 -0
  312. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/hotfixes.py +0 -0
  313. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/logging.py +0 -0
  314. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/mask.py +0 -0
  315. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/mps_fixes.py +0 -0
  316. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/silence_warnings.py +0 -0
  317. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/test_utils.py +0 -0
  318. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/backend/util/util.py +0 -0
  319. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
  320. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
  321. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
  322. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
  323. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
  324. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
  325. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
  326. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
  327. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
  328. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
  329. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
  330. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
  331. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
  332. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
  333. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
  334. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
  335. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/__init__.py +0 -0
  336. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/cli/__init__.py +0 -0
  337. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/cli/arg_parser.py +0 -0
  338. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/install/__init__.py +0 -0
  339. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/install/import_images.py +0 -0
  340. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/__init__.py +0 -0
  341. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
  342. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css +0 -0
  343. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
  344. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
  345. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
  346. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
  347. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
  348. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
  349. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
  350. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
  351. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
  352. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
  353. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
  354. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
  355. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
  356. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
  357. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
  358. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
  359. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
  360. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
  361. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
  362. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
  363. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
  364. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/transparent_bg.png +0 -0
  365. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2 +0 -0
  366. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2 +0 -0
  367. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2 +0 -0
  368. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-DyIDNIyN.woff2 +0 -0
  369. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CN1pIXkb.woff2 +0 -0
  370. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-BgVq2Tq4.woff2 +0 -0
  371. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-_GQuwPVU.woff2 +0 -0
  372. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ar.json +0 -0
  373. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/az.json +0 -0
  374. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/bg.json +0 -0
  375. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/fi.json +0 -0
  376. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/fr.json +0 -0
  377. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/he.json +0 -0
  378. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/hu.json +0 -0
  379. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/mn.json +0 -0
  380. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pl.json +0 -0
  381. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pt.json +0 -0
  382. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
  383. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ro.json +0 -0
  384. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/sv.json +0 -0
  385. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/tr.json +0 -0
  386. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/uk.json +0 -0
  387. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/vi.json +0 -0
  388. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
  389. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
  390. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
  391. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/invocation_api/__init__.py +0 -0
  392. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/invokeai/version/__init__.py +0 -0
  393. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/pyproject.toml +0 -0
  394. {InvokeAI-4.2.0b2 → InvokeAI-4.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 4.2.0b2
3
+ Version: 4.2.1
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
@@ -203,7 +203,6 @@ invokeai/backend/image_util/lineart.py
203
203
  invokeai/backend/image_util/lineart_anime.py
204
204
  invokeai/backend/image_util/pngwriter.py
205
205
  invokeai/backend/image_util/safety_checker.py
206
- invokeai/backend/image_util/seamless.py
207
206
  invokeai/backend/image_util/util.py
208
207
  invokeai/backend/image_util/basicsr/__init__.py
209
208
  invokeai/backend/image_util/basicsr/arch_util.py
@@ -319,11 +318,11 @@ invokeai/frontend/install/__init__.py
319
318
  invokeai/frontend/install/import_images.py
320
319
  invokeai/frontend/web/__init__.py
321
320
  invokeai/frontend/web/dist/index.html
322
- invokeai/frontend/web/dist/assets/App-BT6UTYoU.js
321
+ invokeai/frontend/web/dist/assets/App-DB-UBib9.js
323
322
  invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
323
+ invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js
324
324
  invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css
325
- invokeai/frontend/web/dist/assets/ThemeLocaleProvider-y0e1yIvz.js
326
- invokeai/frontend/web/dist/assets/index-CVUfG-GO.js
325
+ invokeai/frontend/web/dist/assets/index-BhjE-_0E.js
327
326
  invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2
328
327
  invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2
329
328
  invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: InvokeAI
3
- Version: 4.2.0b2
3
+ Version: 4.2.1
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 @@ from pydantic import BaseModel, Field
13
13
  from invokeai.app.invocations.upscale import ESRGAN_MODELS
14
14
  from invokeai.app.services.invocation_cache.invocation_cache_common import InvocationCacheStatus
15
15
  from invokeai.backend.image_util.infill_methods.patchmatch import PatchMatch
16
- from invokeai.backend.image_util.safety_checker import SafetyChecker
17
16
  from invokeai.backend.util.logging import logging
18
17
  from invokeai.version import __version__
19
18
 
@@ -109,9 +108,7 @@ async def get_config() -> AppConfig:
109
108
  upscaling_models.append(str(Path(model).stem))
110
109
  upscaler = Upscaler(upscaling_method="esrgan", upscaling_models=upscaling_models)
111
110
 
112
- nsfw_methods = []
113
- if SafetyChecker.safety_checker_available():
114
- nsfw_methods.append("nsfw_checker")
111
+ nsfw_methods = ["nsfw_checker"]
115
112
 
116
113
  watermarking_methods = ["invisible_watermark"]
117
114
 
@@ -6,7 +6,7 @@ import pathlib
6
6
  import shutil
7
7
  import traceback
8
8
  from copy import deepcopy
9
- from typing import Any, Dict, List, Optional
9
+ from typing import Any, Dict, List, Optional, Type
10
10
 
11
11
  from fastapi import Body, Path, Query, Response, UploadFile
12
12
  from fastapi.responses import FileResponse
@@ -16,6 +16,7 @@ from pydantic import AnyHttpUrl, BaseModel, ConfigDict, Field
16
16
  from starlette.exceptions import HTTPException
17
17
  from typing_extensions import Annotated
18
18
 
19
+ from invokeai.app.services.model_images.model_images_common import ModelImageFileNotFoundException
19
20
  from invokeai.app.services.model_install import ModelInstallJob
20
21
  from invokeai.app.services.model_records import (
21
22
  DuplicateModelException,
@@ -52,6 +53,13 @@ class ModelsList(BaseModel):
52
53
  model_config = ConfigDict(use_enum_values=True)
53
54
 
54
55
 
56
+ def add_cover_image_to_model_config(config: AnyModelConfig, dependencies: Type[ApiDependencies]) -> AnyModelConfig:
57
+ """Add a cover image URL to a model configuration."""
58
+ cover_image = dependencies.invoker.services.model_images.get_url(config.key)
59
+ config.cover_image = cover_image
60
+ return config
61
+
62
+
55
63
  ##############################################################################
56
64
  # These are example inputs and outputs that are used in places where Swagger
57
65
  # is unable to generate a correct example.
@@ -118,8 +126,7 @@ async def list_model_records(
118
126
  record_store.search_by_attr(model_type=model_type, model_name=model_name, model_format=model_format)
119
127
  )
120
128
  for model in found_models:
121
- cover_image = ApiDependencies.invoker.services.model_images.get_url(model.key)
122
- model.cover_image = cover_image
129
+ model = add_cover_image_to_model_config(model, ApiDependencies)
123
130
  return ModelsList(models=found_models)
124
131
 
125
132
 
@@ -160,12 +167,9 @@ async def get_model_record(
160
167
  key: str = Path(description="Key of the model record to fetch."),
161
168
  ) -> AnyModelConfig:
162
169
  """Get a model record"""
163
- record_store = ApiDependencies.invoker.services.model_manager.store
164
170
  try:
165
- config: AnyModelConfig = record_store.get_model(key)
166
- cover_image = ApiDependencies.invoker.services.model_images.get_url(key)
167
- config.cover_image = cover_image
168
- return config
171
+ config = ApiDependencies.invoker.services.model_manager.store.get_model(key)
172
+ return add_cover_image_to_model_config(config, ApiDependencies)
169
173
  except UnknownModelException as e:
170
174
  raise HTTPException(status_code=404, detail=str(e))
171
175
 
@@ -294,14 +298,15 @@ async def update_model_record(
294
298
  installer = ApiDependencies.invoker.services.model_manager.install
295
299
  try:
296
300
  record_store.update_model(key, changes=changes)
297
- model_response: AnyModelConfig = installer.sync_model_path(key)
301
+ config = installer.sync_model_path(key)
302
+ config = add_cover_image_to_model_config(config, ApiDependencies)
298
303
  logger.info(f"Updated model: {key}")
299
304
  except UnknownModelException as e:
300
305
  raise HTTPException(status_code=404, detail=str(e))
301
306
  except ValueError as e:
302
307
  logger.error(str(e))
303
308
  raise HTTPException(status_code=409, detail=str(e))
304
- return model_response
309
+ return config
305
310
 
306
311
 
307
312
  @model_manager_router.get(
@@ -648,6 +653,14 @@ async def convert_model(
648
653
  logger.error(str(e))
649
654
  raise HTTPException(status_code=409, detail=str(e))
650
655
 
656
+ # Update the model image if the model had one
657
+ try:
658
+ model_image = ApiDependencies.invoker.services.model_images.get(key)
659
+ ApiDependencies.invoker.services.model_images.save(model_image, new_key)
660
+ ApiDependencies.invoker.services.model_images.delete(key)
661
+ except ModelImageFileNotFoundException:
662
+ pass
663
+
651
664
  # delete the original safetensors file
652
665
  installer.delete(key)
653
666
 
@@ -655,7 +668,8 @@ async def convert_model(
655
668
  shutil.rmtree(cache_path)
656
669
 
657
670
  # return the config record for the new diffusers directory
658
- new_config: AnyModelConfig = store.get_model(new_key)
671
+ new_config = store.get_model(new_key)
672
+ new_config = add_cover_image_to_model_config(new_config, ApiDependencies)
659
673
  return new_config
660
674
 
661
675
 
@@ -1,6 +1,5 @@
1
1
  # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654)
2
2
 
3
- from pathlib import Path
4
3
  from typing import Literal, Optional
5
4
 
6
5
  import cv2
@@ -504,7 +503,7 @@ class ImageInverseLerpInvocation(BaseInvocation, WithMetadata, WithBoard):
504
503
  title="Blur NSFW Image",
505
504
  tags=["image", "nsfw"],
506
505
  category="image",
507
- version="1.2.2",
506
+ version="1.2.3",
508
507
  )
509
508
  class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata, WithBoard):
510
509
  """Add blur to NSFW-flagged images"""
@@ -516,23 +515,12 @@ class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata, WithBoard):
516
515
 
517
516
  logger = context.logger
518
517
  logger.debug("Running NSFW checker")
519
- if SafetyChecker.has_nsfw_concept(image):
520
- logger.info("A potentially NSFW image has been detected. Image will be blurred.")
521
- blurry_image = image.filter(filter=ImageFilter.GaussianBlur(radius=32))
522
- caution = self._get_caution_img()
523
- blurry_image.paste(caution, (0, 0), caution)
524
- image = blurry_image
518
+ image = SafetyChecker.blur_if_nsfw(image)
525
519
 
526
520
  image_dto = context.images.save(image=image)
527
521
 
528
522
  return ImageOutput.build(image_dto)
529
523
 
530
- def _get_caution_img(self) -> Image.Image:
531
- import invokeai.app.assets.images as image_assets
532
-
533
- caution = Image.open(Path(image_assets.__path__[0]) / "caution.png")
534
- return caution.resize((caution.width // 2, caution.height // 2))
535
-
536
524
 
537
525
  @invocation(
538
526
  "img_watermark",
@@ -586,13 +586,6 @@ class DenoiseLatentsInvocation(BaseInvocation):
586
586
  unet: UNet2DConditionModel,
587
587
  scheduler: Scheduler,
588
588
  ) -> StableDiffusionGeneratorPipeline:
589
- # TODO:
590
- # configure_model_padding(
591
- # unet,
592
- # self.seamless,
593
- # self.seamless_axes,
594
- # )
595
-
596
589
  class FakeVae:
597
590
  class FakeVaeConfig:
598
591
  def __init__(self) -> None:
@@ -4,5 +4,4 @@ Initialization file for invokeai.backend.image_util methods.
4
4
 
5
5
  from .infill_methods.patchmatch import PatchMatch # noqa: F401
6
6
  from .pngwriter import PngWriter, PromptFormatter, retrieve_metadata, write_metadata # noqa: F401
7
- from .seamless import configure_model_padding # noqa: F401
8
7
  from .util import InitImageResizer, make_grid # noqa: F401
@@ -0,0 +1,84 @@
1
+ """
2
+ This module defines a singleton object, "safety_checker" that
3
+ wraps the safety_checker model. It respects the global "nsfw_checker"
4
+ configuration variable, that allows the checker to be supressed.
5
+ """
6
+
7
+ from pathlib import Path
8
+
9
+ import numpy as np
10
+ from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
11
+ from PIL import Image, ImageFilter
12
+ from transformers import AutoFeatureExtractor
13
+
14
+ import invokeai.backend.util.logging as logger
15
+ from invokeai.app.services.config.config_default import get_config
16
+ from invokeai.backend.util.devices import TorchDevice
17
+ from invokeai.backend.util.silence_warnings import SilenceWarnings
18
+
19
+ repo_id = "CompVis/stable-diffusion-safety-checker"
20
+ CHECKER_PATH = "core/convert/stable-diffusion-safety-checker"
21
+
22
+
23
+ class SafetyChecker:
24
+ """
25
+ Wrapper around SafetyChecker model.
26
+ """
27
+
28
+ feature_extractor = None
29
+ safety_checker = None
30
+
31
+ @classmethod
32
+ def _load_safety_checker(cls):
33
+ if cls.safety_checker is not None and cls.feature_extractor is not None:
34
+ return
35
+
36
+ try:
37
+ model_path = get_config().models_path / CHECKER_PATH
38
+ if model_path.exists():
39
+ cls.feature_extractor = AutoFeatureExtractor.from_pretrained(model_path)
40
+ cls.safety_checker = StableDiffusionSafetyChecker.from_pretrained(model_path)
41
+ else:
42
+ model_path.mkdir(parents=True, exist_ok=True)
43
+ cls.feature_extractor = AutoFeatureExtractor.from_pretrained(repo_id)
44
+ cls.feature_extractor.save_pretrained(model_path, safe_serialization=True)
45
+ cls.safety_checker = StableDiffusionSafetyChecker.from_pretrained(repo_id)
46
+ cls.safety_checker.save_pretrained(model_path, safe_serialization=True)
47
+ except Exception as e:
48
+ logger.warning(f"Could not load NSFW checker: {str(e)}")
49
+
50
+ @classmethod
51
+ def has_nsfw_concept(cls, image: Image.Image) -> bool:
52
+ cls._load_safety_checker()
53
+ if cls.safety_checker is None or cls.feature_extractor is None:
54
+ return False
55
+ device = TorchDevice.choose_torch_device()
56
+ features = cls.feature_extractor([image], return_tensors="pt")
57
+ features.to(device)
58
+ cls.safety_checker.to(device)
59
+ x_image = np.array(image).astype(np.float32) / 255.0
60
+ x_image = x_image[None].transpose(0, 3, 1, 2)
61
+ with SilenceWarnings():
62
+ checked_image, has_nsfw_concept = cls.safety_checker(images=x_image, clip_input=features.pixel_values)
63
+ return has_nsfw_concept[0]
64
+
65
+ @classmethod
66
+ def blur_if_nsfw(cls, image: Image.Image) -> Image.Image:
67
+ if cls.has_nsfw_concept(image):
68
+ logger.warning("A potentially NSFW image has been detected. Image will be blurred.")
69
+ blurry_image = image.filter(filter=ImageFilter.GaussianBlur(radius=32))
70
+ caution = cls._get_caution_img()
71
+ # Center the caution image on the blurred image
72
+ x = (blurry_image.width - caution.width) // 2
73
+ y = (blurry_image.height - caution.height) // 2
74
+ blurry_image.paste(caution, (x, y), caution)
75
+ image = blurry_image
76
+
77
+ return image
78
+
79
+ @classmethod
80
+ def _get_caution_img(cls) -> Image.Image:
81
+ import invokeai.app.assets.images as image_assets
82
+
83
+ caution = Image.open(Path(image_assets.__path__[0]) / "caution.png")
84
+ return caution.resize((caution.width // 2, caution.height // 2))
@@ -0,0 +1,51 @@
1
+ from contextlib import contextmanager
2
+ from typing import Callable, List, Optional, Tuple, Union
3
+
4
+ import torch
5
+ import torch.nn as nn
6
+ from diffusers.models.autoencoders.autoencoder_kl import AutoencoderKL
7
+ from diffusers.models.autoencoders.autoencoder_tiny import AutoencoderTiny
8
+ from diffusers.models.lora import LoRACompatibleConv
9
+ from diffusers.models.unets.unet_2d_condition import UNet2DConditionModel
10
+
11
+
12
+ @contextmanager
13
+ def set_seamless(model: Union[UNet2DConditionModel, AutoencoderKL, AutoencoderTiny], seamless_axes: List[str]):
14
+ if not seamless_axes:
15
+ yield
16
+ return
17
+
18
+ # override conv_forward
19
+ # https://github.com/huggingface/diffusers/issues/556#issuecomment-1993287019
20
+ def _conv_forward_asymmetric(self, input: torch.Tensor, weight: torch.Tensor, bias: Optional[torch.Tensor] = None):
21
+ self.paddingX = (self._reversed_padding_repeated_twice[0], self._reversed_padding_repeated_twice[1], 0, 0)
22
+ self.paddingY = (0, 0, self._reversed_padding_repeated_twice[2], self._reversed_padding_repeated_twice[3])
23
+ working = torch.nn.functional.pad(input, self.paddingX, mode=x_mode)
24
+ working = torch.nn.functional.pad(working, self.paddingY, mode=y_mode)
25
+ return torch.nn.functional.conv2d(
26
+ working, weight, bias, self.stride, torch.nn.modules.utils._pair(0), self.dilation, self.groups
27
+ )
28
+
29
+ original_layers: List[Tuple[nn.Conv2d, Callable]] = []
30
+
31
+ try:
32
+ x_mode = "circular" if "x" in seamless_axes else "constant"
33
+ y_mode = "circular" if "y" in seamless_axes else "constant"
34
+
35
+ conv_layers: List[torch.nn.Conv2d] = []
36
+
37
+ for module in model.modules():
38
+ if isinstance(module, torch.nn.Conv2d):
39
+ conv_layers.append(module)
40
+
41
+ for layer in conv_layers:
42
+ if isinstance(layer, LoRACompatibleConv) and layer.lora_layer is None:
43
+ layer.lora_layer = lambda *x: 0
44
+ original_layers.append((layer, layer._conv_forward))
45
+ layer._conv_forward = _conv_forward_asymmetric.__get__(layer, torch.nn.Conv2d)
46
+
47
+ yield
48
+
49
+ finally:
50
+ for layer, orig_conv_forward in original_layers:
51
+ layer._conv_forward = orig_conv_forward