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