InvokeAI 4.2.0b1__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.
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/PKG-INFO +2 -2
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/SOURCES.txt +5 -6
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/PKG-INFO +2 -2
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/README.md +1 -1
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/app_info.py +1 -4
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/model_manager.py +25 -11
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/image.py +2 -14
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/latent.py +0 -7
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/__init__.py +0 -1
- InvokeAI-4.2.1/invokeai/backend/image_util/safety_checker.py +84 -0
- InvokeAI-4.2.1/invokeai/backend/stable_diffusion/seamless.py +51 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/App-DB-UBib9.js +137 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +1 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js +1 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css +9 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/index-BhjE-_0E.js +510 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/index.html +1 -1
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/de.json +17 -5
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/en.json +36 -20
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/es.json +88 -2
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/it.json +100 -20
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ja.json +0 -1
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ko.json +0 -1
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/nl.json +0 -3
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ru.json +107 -15
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/zh_CN.json +1 -3
- InvokeAI-4.2.1/invokeai/version/invokeai_version.py +1 -0
- InvokeAI-4.2.0b1/invokeai/backend/image_util/safety_checker.py +0 -62
- InvokeAI-4.2.0b1/invokeai/backend/image_util/seamless.py +0 -52
- InvokeAI-4.2.0b1/invokeai/backend/stable_diffusion/seamless.py +0 -89
- InvokeAI-4.2.0b1/invokeai/frontend/web/dist/assets/App-CXjdHCUy.js +0 -128
- InvokeAI-4.2.0b1/invokeai/frontend/web/dist/assets/App-DI6oCUg0.css +0 -1
- InvokeAI-4.2.0b1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-Bsx7ESc2.css +0 -9
- InvokeAI-4.2.0b1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-y7NPssZq.js +0 -1
- InvokeAI-4.2.0b1/invokeai/frontend/web/dist/assets/index-BDpxz4Tm.js +0 -515
- InvokeAI-4.2.0b1/invokeai/version/invokeai_version.py +0 -1
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/entry_points.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/requires.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/InvokeAI.egg-info/top_level.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/LICENSE +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/LICENSE-SD1+SD2.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/LICENSE-SDXL.txt +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/dependencies.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/events.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/board_images.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/boards.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/download_queue.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/images.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/session_queue.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/utilities.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/routers/workflows.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api/sockets.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/api_app.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/assets/images/caution.png +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/baseinvocation.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/collections.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/compel.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/constants.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/cv.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/facetools.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/fields.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/infill.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/ip_adapter.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/mask.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/math.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/metadata.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/model.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/noise.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/param_easing.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/primitives.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/prompt.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/sdxl.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/strings.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/t2i_adapter.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/tiles.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/upscale.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/invocations/util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/run_app.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_images/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/boards/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/boards/boards_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/config/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/config/config_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/config/config_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/download/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/download/download_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/download/download_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/events/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/events/events_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_files/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_files/image_files_disk.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_records/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/images/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/images/images_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/images/images_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/images/images_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_services.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/invoker.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_install/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_load/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_records/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_records/model_records_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/names/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/names/names_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/names/names_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/names/names_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/graph.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/invocation_context.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/pagination.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/urls/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/urls/urls_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/urls/urls_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/shared/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/shared/models.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/controlnet_utils.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/download_with_progress.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/metaenum.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/misc.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/model_exclude_null.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/profiler.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/step_callback.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/suppress_output.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/thumbnails.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/app/util/ti_utils.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/canny.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/model/blocks.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/model/dpt.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/depth_anything/utilities/util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/hed.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/lineart.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/pngwriter.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/image_util/util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/lora.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_hash/model_hash.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/config.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/convert_ckpt_to_diffusers.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/libc_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/convert_cache_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/convert_cache/convert_cache_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/merge.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/probe.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/search.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/starter_models.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/model_util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/model_patcher.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/raw_model.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/textual_inversion.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/tiles/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/tiles/tiles.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/tiles/utils.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/attention.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/catch_sigint.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/db_maintenance.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/devices.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/hotfixes.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/logging.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/mask.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/mps_fixes.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/silence_warnings.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/test_utils.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/backend/util/util.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/cli/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/cli/arg_parser.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/install/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/install/import_images.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/images/transparent_bg.png +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-DyIDNIyN.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CN1pIXkb.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-BgVq2Tq4.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-_GQuwPVU.woff2 +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/fi.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/fr.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pl.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pt.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/sv.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/tr.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/uk.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/invocation_api/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/invokeai/version/__init__.py +0 -0
- {InvokeAI-4.2.0b1 → InvokeAI-4.2.1}/pyproject.toml +0 -0
- {InvokeAI-4.2.0b1 → 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.
|
|
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
|
|
@@ -232,7 +232,7 @@ License-File: LICENSE-SDXL.txt
|
|
|
232
232
|
|
|
233
233
|
Invoke is a leading creative engine built to empower professionals and enthusiasts alike. Generate and create stunning visual media using the latest AI-driven technologies. Invoke offers an industry leading web-based UI, and serves as the foundation for multiple commercial products.
|
|
234
234
|
|
|
235
|
-
[Installation][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
235
|
+
[Installation and Updates][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
236
236
|
|
|
237
237
|
<div align="center">
|
|
238
238
|
|
|
@@ -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-
|
|
323
|
-
invokeai/frontend/web/dist/assets/App-
|
|
324
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
325
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
326
|
-
invokeai/frontend/web/dist/assets/index-
|
|
321
|
+
invokeai/frontend/web/dist/assets/App-DB-UBib9.js
|
|
322
|
+
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
323
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js
|
|
324
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css
|
|
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.
|
|
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
|
|
@@ -232,7 +232,7 @@ License-File: LICENSE-SDXL.txt
|
|
|
232
232
|
|
|
233
233
|
Invoke is a leading creative engine built to empower professionals and enthusiasts alike. Generate and create stunning visual media using the latest AI-driven technologies. Invoke offers an industry leading web-based UI, and serves as the foundation for multiple commercial products.
|
|
234
234
|
|
|
235
|
-
[Installation][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
235
|
+
[Installation and Updates][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
236
236
|
|
|
237
237
|
<div align="center">
|
|
238
238
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
Invoke is a leading creative engine built to empower professionals and enthusiasts alike. Generate and create stunning visual media using the latest AI-driven technologies. Invoke offers an industry leading web-based UI, and serves as the foundation for multiple commercial products.
|
|
14
14
|
|
|
15
|
-
[Installation][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
15
|
+
[Installation and Updates][installation docs] - [Documentation and Tutorials][docs home] - [Bug Reports][github issues] - [Contributing][contributing docs]
|
|
16
16
|
|
|
17
17
|
<div align="center">
|
|
18
18
|
|
|
@@ -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
|
-
|
|
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
|
|
166
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|