InvokeAI 4.2.1__tar.gz → 4.2.2__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.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/PKG-INFO +1 -1
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/SOURCES.txt +3 -3
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/PKG-INFO +1 -1
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/images.py +40 -23
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api_app.py +8 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/controlnet_image_processors.py +2 -3
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/ip_adapter.py +2 -3
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/model.py +173 -10
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/sdxl.py +5 -5
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/t2i_adapter.py +2 -3
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/events/events_base.py +4 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_files/image_files_base.py +9 -6
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_files/image_files_disk.py +20 -13
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_records/image_records_base.py +1 -1
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_records/image_records_sqlite.py +2 -3
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/images/images_base.py +9 -4
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/images/images_default.py +16 -6
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_processor/session_processor_default.py +2 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/invocation_context.py +13 -4
- InvokeAI-4.2.2/invokeai/frontend/web/dist/assets/App-CAjHcDCp.js +137 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js → InvokeAI-4.2.2/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-WgP1oSC3.js +1 -1
- InvokeAI-4.2.2/invokeai/frontend/web/dist/assets/index-MqcuyfH_.js +510 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/index.html +1 -1
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/en.json +9 -3
- InvokeAI-4.2.2/invokeai/version/invokeai_version.py +1 -0
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/App-DB-UBib9.js +0 -137
- InvokeAI-4.2.1/invokeai/frontend/web/dist/assets/index-BhjE-_0E.js +0 -510
- InvokeAI-4.2.1/invokeai/version/invokeai_version.py +0 -1
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/entry_points.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/requires.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/InvokeAI.egg-info/top_level.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/LICENSE +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/LICENSE-SD1+SD2.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/LICENSE-SDXL.txt +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/README.md +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/dependencies.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/events.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/app_info.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/board_images.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/boards.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/download_queue.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/model_manager.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/session_queue.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/utilities.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/routers/workflows.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/api/sockets.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/assets/images/caution.png +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/baseinvocation.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/collections.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/compel.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/constants.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/cv.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/facetools.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/fields.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/image.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/infill.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/latent.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/mask.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/math.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/metadata.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/noise.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/param_easing.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/primitives.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/prompt.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/strings.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/tiles.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/upscale.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/invocations/util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/run_app.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_images/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_records/board_records_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_records/board_records_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/boards/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/boards/boards_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/boards/boards_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/boards/boards_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/config/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/config/config_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/config/config_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/download/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/download/download_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/download/download_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/events/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_files/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_records/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/images/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/images/images_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_services.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/invoker.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/item_storage/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_install/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_load/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_manager/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_records/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_records/model_records_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/names/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/names/names_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/names/names_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/names/names_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_processor/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_queue/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/graph.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/pagination.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/urls/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/urls/urls_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/urls/urls_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/shared/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/shared/models.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/controlnet_utils.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/download_with_progress.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/metaenum.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/misc.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/model_exclude_null.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/profiler.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/step_callback.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/suppress_output.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/thumbnails.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/app/util/ti_utils.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/canny.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/depth_anything/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/depth_anything/model/blocks.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/depth_anything/model/dpt.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/depth_anything/utilities/util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/hed.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/lineart.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/pngwriter.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/safety_checker.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/image_util/util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/ip_adapter/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/lora.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_hash/model_hash.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/config.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/convert_ckpt_to_diffusers.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/libc_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/convert_cache/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/convert_cache/convert_cache_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/convert_cache/convert_cache_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/merge.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/probe.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/search.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/starter_models.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/util/model_util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/model_patcher.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/raw_model.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/stable_diffusion/seamless.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/textual_inversion.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/tiles/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/tiles/tiles.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/tiles/utils.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/attention.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/catch_sigint.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/db_maintenance.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/devices.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/hotfixes.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/logging.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/mask.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/mps_fixes.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/silence_warnings.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/test_utils.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/backend/util/util.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/cli/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/cli/arg_parser.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/install/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/install/import_images.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/images/transparent_bg.png +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-D5AYLNiq.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-DyIDNIyN.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CN1pIXkb.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-BgVq2Tq4.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-_GQuwPVU.woff2 +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/de.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/es.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/fi.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/fr.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/it.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/ja.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/ko.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/nl.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/pl.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/pt.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/ru.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/sv.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/tr.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/uk.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/invocation_api/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/invokeai/version/__init__.py +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/pyproject.toml +0 -0
- {InvokeAI-4.2.1 → InvokeAI-4.2.2}/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.2
|
|
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
|
|
@@ -318,11 +318,11 @@ invokeai/frontend/install/__init__.py
|
|
|
318
318
|
invokeai/frontend/install/import_images.py
|
|
319
319
|
invokeai/frontend/web/__init__.py
|
|
320
320
|
invokeai/frontend/web/dist/index.html
|
|
321
|
-
invokeai/frontend/web/dist/assets/App-
|
|
321
|
+
invokeai/frontend/web/dist/assets/App-CAjHcDCp.js
|
|
322
322
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
323
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DyRqmsy8.js
|
|
324
323
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-DzjsLZSc.css
|
|
325
|
-
invokeai/frontend/web/dist/assets/
|
|
324
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-WgP1oSC3.js
|
|
325
|
+
invokeai/frontend/web/dist/assets/index-MqcuyfH_.js
|
|
326
326
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-DIEz8p5i.woff2
|
|
327
327
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-BmJJXa8e.woff2
|
|
328
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.2
|
|
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
|
|
@@ -6,13 +6,12 @@ from fastapi import BackgroundTasks, Body, HTTPException, Path, Query, Request,
|
|
|
6
6
|
from fastapi.responses import FileResponse
|
|
7
7
|
from fastapi.routing import APIRouter
|
|
8
8
|
from PIL import Image
|
|
9
|
-
from pydantic import BaseModel, Field,
|
|
9
|
+
from pydantic import BaseModel, Field, JsonValue
|
|
10
10
|
|
|
11
|
-
from invokeai.app.invocations.fields import MetadataField
|
|
11
|
+
from invokeai.app.invocations.fields import MetadataField
|
|
12
12
|
from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin
|
|
13
13
|
from invokeai.app.services.images.images_common import ImageDTO, ImageUrlsDTO
|
|
14
14
|
from invokeai.app.services.shared.pagination import OffsetPaginatedResults
|
|
15
|
-
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID, WorkflowWithoutIDValidator
|
|
16
15
|
|
|
17
16
|
from ..dependencies import ApiDependencies
|
|
18
17
|
|
|
@@ -42,13 +41,17 @@ async def upload_image(
|
|
|
42
41
|
board_id: Optional[str] = Query(default=None, description="The board to add this image to, if any"),
|
|
43
42
|
session_id: Optional[str] = Query(default=None, description="The session ID associated with this upload, if any"),
|
|
44
43
|
crop_visible: Optional[bool] = Query(default=False, description="Whether to crop the image"),
|
|
44
|
+
metadata: Optional[JsonValue] = Body(
|
|
45
|
+
default=None, description="The metadata to associate with the image", embed=True
|
|
46
|
+
),
|
|
45
47
|
) -> ImageDTO:
|
|
46
48
|
"""Uploads an image"""
|
|
47
49
|
if not file.content_type or not file.content_type.startswith("image"):
|
|
48
50
|
raise HTTPException(status_code=415, detail="Not an image")
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
_metadata = None
|
|
53
|
+
_workflow = None
|
|
54
|
+
_graph = None
|
|
52
55
|
|
|
53
56
|
contents = await file.read()
|
|
54
57
|
try:
|
|
@@ -62,22 +65,28 @@ async def upload_image(
|
|
|
62
65
|
|
|
63
66
|
# TODO: retain non-invokeai metadata on upload?
|
|
64
67
|
# attempt to parse metadata from image
|
|
65
|
-
metadata_raw = pil_image.info.get("invokeai_metadata", None)
|
|
66
|
-
if metadata_raw:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
pass
|
|
68
|
+
metadata_raw = metadata if isinstance(metadata, str) else pil_image.info.get("invokeai_metadata", None)
|
|
69
|
+
if isinstance(metadata_raw, str):
|
|
70
|
+
_metadata = metadata_raw
|
|
71
|
+
else:
|
|
72
|
+
ApiDependencies.invoker.services.logger.warn("Failed to parse metadata for uploaded image")
|
|
73
|
+
pass
|
|
72
74
|
|
|
73
75
|
# attempt to parse workflow from image
|
|
74
76
|
workflow_raw = pil_image.info.get("invokeai_workflow", None)
|
|
75
|
-
if workflow_raw
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
if isinstance(workflow_raw, str):
|
|
78
|
+
_workflow = workflow_raw
|
|
79
|
+
else:
|
|
80
|
+
ApiDependencies.invoker.services.logger.warn("Failed to parse workflow for uploaded image")
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
# attempt to extract graph from image
|
|
84
|
+
graph_raw = pil_image.info.get("invokeai_graph", None)
|
|
85
|
+
if isinstance(graph_raw, str):
|
|
86
|
+
_graph = graph_raw
|
|
87
|
+
else:
|
|
88
|
+
ApiDependencies.invoker.services.logger.warn("Failed to parse graph for uploaded image")
|
|
89
|
+
pass
|
|
81
90
|
|
|
82
91
|
try:
|
|
83
92
|
image_dto = ApiDependencies.invoker.services.images.create(
|
|
@@ -86,8 +95,9 @@ async def upload_image(
|
|
|
86
95
|
image_category=image_category,
|
|
87
96
|
session_id=session_id,
|
|
88
97
|
board_id=board_id,
|
|
89
|
-
metadata=
|
|
90
|
-
workflow=
|
|
98
|
+
metadata=_metadata,
|
|
99
|
+
workflow=_workflow,
|
|
100
|
+
graph=_graph,
|
|
91
101
|
is_intermediate=is_intermediate,
|
|
92
102
|
)
|
|
93
103
|
|
|
@@ -185,14 +195,21 @@ async def get_image_metadata(
|
|
|
185
195
|
raise HTTPException(status_code=404)
|
|
186
196
|
|
|
187
197
|
|
|
198
|
+
class WorkflowAndGraphResponse(BaseModel):
|
|
199
|
+
workflow: Optional[str] = Field(description="The workflow used to generate the image, as stringified JSON")
|
|
200
|
+
graph: Optional[str] = Field(description="The graph used to generate the image, as stringified JSON")
|
|
201
|
+
|
|
202
|
+
|
|
188
203
|
@images_router.get(
|
|
189
|
-
"/i/{image_name}/workflow", operation_id="get_image_workflow", response_model=
|
|
204
|
+
"/i/{image_name}/workflow", operation_id="get_image_workflow", response_model=WorkflowAndGraphResponse
|
|
190
205
|
)
|
|
191
206
|
async def get_image_workflow(
|
|
192
207
|
image_name: str = Path(description="The name of image whose workflow to get"),
|
|
193
|
-
) ->
|
|
208
|
+
) -> WorkflowAndGraphResponse:
|
|
194
209
|
try:
|
|
195
|
-
|
|
210
|
+
workflow = ApiDependencies.invoker.services.images.get_workflow(image_name)
|
|
211
|
+
graph = ApiDependencies.invoker.services.images.get_graph(image_name)
|
|
212
|
+
return WorkflowAndGraphResponse(workflow=workflow, graph=graph)
|
|
196
213
|
except Exception:
|
|
197
214
|
raise HTTPException(status_code=404)
|
|
198
215
|
|
|
@@ -164,6 +164,12 @@ def custom_openapi() -> dict[str, Any]:
|
|
|
164
164
|
for schema_key, schema_json in additional_schemas[1]["$defs"].items():
|
|
165
165
|
openapi_schema["components"]["schemas"][schema_key] = schema_json
|
|
166
166
|
|
|
167
|
+
openapi_schema["components"]["schemas"]["InvocationOutputMap"] = {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"properties": {},
|
|
170
|
+
"required": [],
|
|
171
|
+
}
|
|
172
|
+
|
|
167
173
|
# Add a reference to the output type to additionalProperties of the invoker schema
|
|
168
174
|
for invoker in all_invocations:
|
|
169
175
|
invoker_name = invoker.__name__ # type: ignore [attr-defined] # this is a valid attribute
|
|
@@ -172,6 +178,8 @@ def custom_openapi() -> dict[str, Any]:
|
|
|
172
178
|
invoker_schema = openapi_schema["components"]["schemas"][f"{invoker_name}"]
|
|
173
179
|
outputs_ref = {"$ref": f"#/components/schemas/{output_type_title}"}
|
|
174
180
|
invoker_schema["output"] = outputs_ref
|
|
181
|
+
openapi_schema["components"]["schemas"]["InvocationOutputMap"]["properties"][invoker.get_type()] = outputs_ref
|
|
182
|
+
openapi_schema["components"]["schemas"]["InvocationOutputMap"]["required"].append(invoker.get_type())
|
|
175
183
|
invoker_schema["class"] = "invocation"
|
|
176
184
|
|
|
177
185
|
# This code no longer seems to be necessary?
|
|
@@ -24,7 +24,6 @@ from pydantic import BaseModel, Field, field_validator, model_validator
|
|
|
24
24
|
from invokeai.app.invocations.fields import (
|
|
25
25
|
FieldDescriptions,
|
|
26
26
|
ImageField,
|
|
27
|
-
Input,
|
|
28
27
|
InputField,
|
|
29
28
|
OutputField,
|
|
30
29
|
UIType,
|
|
@@ -80,13 +79,13 @@ class ControlOutput(BaseInvocationOutput):
|
|
|
80
79
|
control: ControlField = OutputField(description=FieldDescriptions.control)
|
|
81
80
|
|
|
82
81
|
|
|
83
|
-
@invocation("controlnet", title="ControlNet", tags=["controlnet"], category="controlnet", version="1.1.
|
|
82
|
+
@invocation("controlnet", title="ControlNet", tags=["controlnet"], category="controlnet", version="1.1.2")
|
|
84
83
|
class ControlNetInvocation(BaseInvocation):
|
|
85
84
|
"""Collects ControlNet info to pass to other nodes"""
|
|
86
85
|
|
|
87
86
|
image: ImageField = InputField(description="The control image")
|
|
88
87
|
control_model: ModelIdentifierField = InputField(
|
|
89
|
-
description=FieldDescriptions.controlnet_model,
|
|
88
|
+
description=FieldDescriptions.controlnet_model, ui_type=UIType.ControlNetModel
|
|
90
89
|
)
|
|
91
90
|
control_weight: Union[float, List[float]] = InputField(
|
|
92
91
|
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
|
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field, field_validator, model_validator
|
|
|
5
5
|
from typing_extensions import Self
|
|
6
6
|
|
|
7
7
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
|
8
|
-
from invokeai.app.invocations.fields import FieldDescriptions,
|
|
8
|
+
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField, TensorField, UIType
|
|
9
9
|
from invokeai.app.invocations.model import ModelIdentifierField
|
|
10
10
|
from invokeai.app.invocations.primitives import ImageField
|
|
11
11
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
|
@@ -58,7 +58,7 @@ class IPAdapterOutput(BaseInvocationOutput):
|
|
|
58
58
|
CLIP_VISION_MODEL_MAP = {"ViT-H": "ip_adapter_sd_image_encoder", "ViT-G": "ip_adapter_sdxl_image_encoder"}
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
@invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.4.
|
|
61
|
+
@invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.4.1")
|
|
62
62
|
class IPAdapterInvocation(BaseInvocation):
|
|
63
63
|
"""Collects IP-Adapter info to pass to other nodes."""
|
|
64
64
|
|
|
@@ -67,7 +67,6 @@ class IPAdapterInvocation(BaseInvocation):
|
|
|
67
67
|
ip_adapter_model: ModelIdentifierField = InputField(
|
|
68
68
|
description="The IP-Adapter model.",
|
|
69
69
|
title="IP-Adapter Model",
|
|
70
|
-
input=Input.Direct,
|
|
71
70
|
ui_order=-1,
|
|
72
71
|
ui_type=UIType.IPAdapterModel,
|
|
73
72
|
)
|
|
@@ -11,6 +11,7 @@ from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType,
|
|
|
11
11
|
from .baseinvocation import (
|
|
12
12
|
BaseInvocation,
|
|
13
13
|
BaseInvocationOutput,
|
|
14
|
+
Classification,
|
|
14
15
|
invocation,
|
|
15
16
|
invocation_output,
|
|
16
17
|
)
|
|
@@ -93,19 +94,46 @@ class ModelLoaderOutput(UNetOutput, CLIPOutput, VAEOutput):
|
|
|
93
94
|
pass
|
|
94
95
|
|
|
95
96
|
|
|
97
|
+
@invocation_output("model_identifier_output")
|
|
98
|
+
class ModelIdentifierOutput(BaseInvocationOutput):
|
|
99
|
+
"""Model identifier output"""
|
|
100
|
+
|
|
101
|
+
model: ModelIdentifierField = OutputField(description="Model identifier", title="Model")
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@invocation(
|
|
105
|
+
"model_identifier",
|
|
106
|
+
title="Model identifier",
|
|
107
|
+
tags=["model"],
|
|
108
|
+
category="model",
|
|
109
|
+
version="1.0.0",
|
|
110
|
+
classification=Classification.Prototype,
|
|
111
|
+
)
|
|
112
|
+
class ModelIdentifierInvocation(BaseInvocation):
|
|
113
|
+
"""Selects any model, outputting it its identifier. Be careful with this one! The identifier will be accepted as
|
|
114
|
+
input for any model, even if the model types don't match. If you connect this to a mismatched input, you'll get an
|
|
115
|
+
error."""
|
|
116
|
+
|
|
117
|
+
model: ModelIdentifierField = InputField(description="The model to select", title="Model")
|
|
118
|
+
|
|
119
|
+
def invoke(self, context: InvocationContext) -> ModelIdentifierOutput:
|
|
120
|
+
if not context.models.exists(self.model.key):
|
|
121
|
+
raise Exception(f"Unknown model {self.model.key}")
|
|
122
|
+
|
|
123
|
+
return ModelIdentifierOutput(model=self.model)
|
|
124
|
+
|
|
125
|
+
|
|
96
126
|
@invocation(
|
|
97
127
|
"main_model_loader",
|
|
98
128
|
title="Main Model",
|
|
99
129
|
tags=["model"],
|
|
100
130
|
category="model",
|
|
101
|
-
version="1.0.
|
|
131
|
+
version="1.0.3",
|
|
102
132
|
)
|
|
103
133
|
class MainModelLoaderInvocation(BaseInvocation):
|
|
104
134
|
"""Loads a main model, outputting its submodels."""
|
|
105
135
|
|
|
106
|
-
model: ModelIdentifierField = InputField(
|
|
107
|
-
description=FieldDescriptions.main_model, input=Input.Direct, ui_type=UIType.MainModel
|
|
108
|
-
)
|
|
136
|
+
model: ModelIdentifierField = InputField(description=FieldDescriptions.main_model, ui_type=UIType.MainModel)
|
|
109
137
|
# TODO: precision?
|
|
110
138
|
|
|
111
139
|
def invoke(self, context: InvocationContext) -> ModelLoaderOutput:
|
|
@@ -134,12 +162,12 @@ class LoRALoaderOutput(BaseInvocationOutput):
|
|
|
134
162
|
clip: Optional[CLIPField] = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP")
|
|
135
163
|
|
|
136
164
|
|
|
137
|
-
@invocation("lora_loader", title="LoRA", tags=["model"], category="model", version="1.0.
|
|
165
|
+
@invocation("lora_loader", title="LoRA", tags=["model"], category="model", version="1.0.3")
|
|
138
166
|
class LoRALoaderInvocation(BaseInvocation):
|
|
139
167
|
"""Apply selected lora to unet and text_encoder."""
|
|
140
168
|
|
|
141
169
|
lora: ModelIdentifierField = InputField(
|
|
142
|
-
description=FieldDescriptions.lora_model,
|
|
170
|
+
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
|
143
171
|
)
|
|
144
172
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
|
145
173
|
unet: Optional[UNetField] = InputField(
|
|
@@ -190,6 +218,75 @@ class LoRALoaderInvocation(BaseInvocation):
|
|
|
190
218
|
return output
|
|
191
219
|
|
|
192
220
|
|
|
221
|
+
@invocation_output("lora_selector_output")
|
|
222
|
+
class LoRASelectorOutput(BaseInvocationOutput):
|
|
223
|
+
"""Model loader output"""
|
|
224
|
+
|
|
225
|
+
lora: LoRAField = OutputField(description="LoRA model and weight", title="LoRA")
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@invocation("lora_selector", title="LoRA Selector", tags=["model"], category="model", version="1.0.1")
|
|
229
|
+
class LoRASelectorInvocation(BaseInvocation):
|
|
230
|
+
"""Selects a LoRA model and weight."""
|
|
231
|
+
|
|
232
|
+
lora: ModelIdentifierField = InputField(
|
|
233
|
+
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
|
234
|
+
)
|
|
235
|
+
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
|
236
|
+
|
|
237
|
+
def invoke(self, context: InvocationContext) -> LoRASelectorOutput:
|
|
238
|
+
return LoRASelectorOutput(lora=LoRAField(lora=self.lora, weight=self.weight))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
@invocation("lora_collection_loader", title="LoRA Collection Loader", tags=["model"], category="model", version="1.0.0")
|
|
242
|
+
class LoRACollectionLoader(BaseInvocation):
|
|
243
|
+
"""Applies a collection of LoRAs to the provided UNet and CLIP models."""
|
|
244
|
+
|
|
245
|
+
loras: LoRAField | list[LoRAField] = InputField(
|
|
246
|
+
description="LoRA models and weights. May be a single LoRA or collection.", title="LoRAs"
|
|
247
|
+
)
|
|
248
|
+
unet: Optional[UNetField] = InputField(
|
|
249
|
+
default=None,
|
|
250
|
+
description=FieldDescriptions.unet,
|
|
251
|
+
input=Input.Connection,
|
|
252
|
+
title="UNet",
|
|
253
|
+
)
|
|
254
|
+
clip: Optional[CLIPField] = InputField(
|
|
255
|
+
default=None,
|
|
256
|
+
description=FieldDescriptions.clip,
|
|
257
|
+
input=Input.Connection,
|
|
258
|
+
title="CLIP",
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
def invoke(self, context: InvocationContext) -> LoRALoaderOutput:
|
|
262
|
+
output = LoRALoaderOutput()
|
|
263
|
+
loras = self.loras if isinstance(self.loras, list) else [self.loras]
|
|
264
|
+
added_loras: list[str] = []
|
|
265
|
+
|
|
266
|
+
for lora in loras:
|
|
267
|
+
if lora.lora.key in added_loras:
|
|
268
|
+
continue
|
|
269
|
+
|
|
270
|
+
if not context.models.exists(lora.lora.key):
|
|
271
|
+
raise Exception(f"Unknown lora: {lora.lora.key}!")
|
|
272
|
+
|
|
273
|
+
assert lora.lora.base in (BaseModelType.StableDiffusion1, BaseModelType.StableDiffusion2)
|
|
274
|
+
|
|
275
|
+
added_loras.append(lora.lora.key)
|
|
276
|
+
|
|
277
|
+
if self.unet is not None:
|
|
278
|
+
if output.unet is None:
|
|
279
|
+
output.unet = self.unet.model_copy(deep=True)
|
|
280
|
+
output.unet.loras.append(lora)
|
|
281
|
+
|
|
282
|
+
if self.clip is not None:
|
|
283
|
+
if output.clip is None:
|
|
284
|
+
output.clip = self.clip.model_copy(deep=True)
|
|
285
|
+
output.clip.loras.append(lora)
|
|
286
|
+
|
|
287
|
+
return output
|
|
288
|
+
|
|
289
|
+
|
|
193
290
|
@invocation_output("sdxl_lora_loader_output")
|
|
194
291
|
class SDXLLoRALoaderOutput(BaseInvocationOutput):
|
|
195
292
|
"""SDXL LoRA Loader Output"""
|
|
@@ -204,13 +301,13 @@ class SDXLLoRALoaderOutput(BaseInvocationOutput):
|
|
|
204
301
|
title="SDXL LoRA",
|
|
205
302
|
tags=["lora", "model"],
|
|
206
303
|
category="model",
|
|
207
|
-
version="1.0.
|
|
304
|
+
version="1.0.3",
|
|
208
305
|
)
|
|
209
306
|
class SDXLLoRALoaderInvocation(BaseInvocation):
|
|
210
307
|
"""Apply selected lora to unet and text_encoder."""
|
|
211
308
|
|
|
212
309
|
lora: ModelIdentifierField = InputField(
|
|
213
|
-
description=FieldDescriptions.lora_model,
|
|
310
|
+
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
|
214
311
|
)
|
|
215
312
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
|
216
313
|
unet: Optional[UNetField] = InputField(
|
|
@@ -279,12 +376,78 @@ class SDXLLoRALoaderInvocation(BaseInvocation):
|
|
|
279
376
|
return output
|
|
280
377
|
|
|
281
378
|
|
|
282
|
-
@invocation(
|
|
379
|
+
@invocation(
|
|
380
|
+
"sdxl_lora_collection_loader",
|
|
381
|
+
title="SDXL LoRA Collection Loader",
|
|
382
|
+
tags=["model"],
|
|
383
|
+
category="model",
|
|
384
|
+
version="1.0.0",
|
|
385
|
+
)
|
|
386
|
+
class SDXLLoRACollectionLoader(BaseInvocation):
|
|
387
|
+
"""Applies a collection of SDXL LoRAs to the provided UNet and CLIP models."""
|
|
388
|
+
|
|
389
|
+
loras: LoRAField | list[LoRAField] = InputField(
|
|
390
|
+
description="LoRA models and weights. May be a single LoRA or collection.", title="LoRAs"
|
|
391
|
+
)
|
|
392
|
+
unet: Optional[UNetField] = InputField(
|
|
393
|
+
default=None,
|
|
394
|
+
description=FieldDescriptions.unet,
|
|
395
|
+
input=Input.Connection,
|
|
396
|
+
title="UNet",
|
|
397
|
+
)
|
|
398
|
+
clip: Optional[CLIPField] = InputField(
|
|
399
|
+
default=None,
|
|
400
|
+
description=FieldDescriptions.clip,
|
|
401
|
+
input=Input.Connection,
|
|
402
|
+
title="CLIP",
|
|
403
|
+
)
|
|
404
|
+
clip2: Optional[CLIPField] = InputField(
|
|
405
|
+
default=None,
|
|
406
|
+
description=FieldDescriptions.clip,
|
|
407
|
+
input=Input.Connection,
|
|
408
|
+
title="CLIP 2",
|
|
409
|
+
)
|
|
410
|
+
|
|
411
|
+
def invoke(self, context: InvocationContext) -> SDXLLoRALoaderOutput:
|
|
412
|
+
output = SDXLLoRALoaderOutput()
|
|
413
|
+
loras = self.loras if isinstance(self.loras, list) else [self.loras]
|
|
414
|
+
added_loras: list[str] = []
|
|
415
|
+
|
|
416
|
+
for lora in loras:
|
|
417
|
+
if lora.lora.key in added_loras:
|
|
418
|
+
continue
|
|
419
|
+
|
|
420
|
+
if not context.models.exists(lora.lora.key):
|
|
421
|
+
raise Exception(f"Unknown lora: {lora.lora.key}!")
|
|
422
|
+
|
|
423
|
+
assert lora.lora.base is BaseModelType.StableDiffusionXL
|
|
424
|
+
|
|
425
|
+
added_loras.append(lora.lora.key)
|
|
426
|
+
|
|
427
|
+
if self.unet is not None:
|
|
428
|
+
if output.unet is None:
|
|
429
|
+
output.unet = self.unet.model_copy(deep=True)
|
|
430
|
+
output.unet.loras.append(lora)
|
|
431
|
+
|
|
432
|
+
if self.clip is not None:
|
|
433
|
+
if output.clip is None:
|
|
434
|
+
output.clip = self.clip.model_copy(deep=True)
|
|
435
|
+
output.clip.loras.append(lora)
|
|
436
|
+
|
|
437
|
+
if self.clip2 is not None:
|
|
438
|
+
if output.clip2 is None:
|
|
439
|
+
output.clip2 = self.clip2.model_copy(deep=True)
|
|
440
|
+
output.clip2.loras.append(lora)
|
|
441
|
+
|
|
442
|
+
return output
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
@invocation("vae_loader", title="VAE", tags=["vae", "model"], category="model", version="1.0.3")
|
|
283
446
|
class VAELoaderInvocation(BaseInvocation):
|
|
284
447
|
"""Loads a VAE model, outputting a VaeLoaderOutput"""
|
|
285
448
|
|
|
286
449
|
vae_model: ModelIdentifierField = InputField(
|
|
287
|
-
description=FieldDescriptions.vae_model,
|
|
450
|
+
description=FieldDescriptions.vae_model, title="VAE", ui_type=UIType.VAEModel
|
|
288
451
|
)
|
|
289
452
|
|
|
290
453
|
def invoke(self, context: InvocationContext) -> VAEOutput:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from invokeai.app.invocations.fields import FieldDescriptions,
|
|
1
|
+
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField, UIType
|
|
2
2
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
3
3
|
from invokeai.backend.model_manager import SubModelType
|
|
4
4
|
|
|
@@ -30,12 +30,12 @@ class SDXLRefinerModelLoaderOutput(BaseInvocationOutput):
|
|
|
30
30
|
vae: VAEField = OutputField(description=FieldDescriptions.vae, title="VAE")
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
@invocation("sdxl_model_loader", title="SDXL Main Model", tags=["model", "sdxl"], category="model", version="1.0.
|
|
33
|
+
@invocation("sdxl_model_loader", title="SDXL Main Model", tags=["model", "sdxl"], category="model", version="1.0.3")
|
|
34
34
|
class SDXLModelLoaderInvocation(BaseInvocation):
|
|
35
35
|
"""Loads an sdxl base model, outputting its submodels."""
|
|
36
36
|
|
|
37
37
|
model: ModelIdentifierField = InputField(
|
|
38
|
-
description=FieldDescriptions.sdxl_main_model,
|
|
38
|
+
description=FieldDescriptions.sdxl_main_model, ui_type=UIType.SDXLMainModel
|
|
39
39
|
)
|
|
40
40
|
# TODO: precision?
|
|
41
41
|
|
|
@@ -67,13 +67,13 @@ class SDXLModelLoaderInvocation(BaseInvocation):
|
|
|
67
67
|
title="SDXL Refiner Model",
|
|
68
68
|
tags=["model", "sdxl", "refiner"],
|
|
69
69
|
category="model",
|
|
70
|
-
version="1.0.
|
|
70
|
+
version="1.0.3",
|
|
71
71
|
)
|
|
72
72
|
class SDXLRefinerModelLoaderInvocation(BaseInvocation):
|
|
73
73
|
"""Loads an sdxl refiner model, outputting its submodels."""
|
|
74
74
|
|
|
75
75
|
model: ModelIdentifierField = InputField(
|
|
76
|
-
description=FieldDescriptions.sdxl_refiner_model,
|
|
76
|
+
description=FieldDescriptions.sdxl_refiner_model, ui_type=UIType.SDXLRefinerModel
|
|
77
77
|
)
|
|
78
78
|
# TODO: precision?
|
|
79
79
|
|
|
@@ -8,7 +8,7 @@ from invokeai.app.invocations.baseinvocation import (
|
|
|
8
8
|
invocation,
|
|
9
9
|
invocation_output,
|
|
10
10
|
)
|
|
11
|
-
from invokeai.app.invocations.fields import FieldDescriptions, ImageField,
|
|
11
|
+
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField, UIType
|
|
12
12
|
from invokeai.app.invocations.model import ModelIdentifierField
|
|
13
13
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
|
14
14
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
@@ -45,7 +45,7 @@ class T2IAdapterOutput(BaseInvocationOutput):
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
@invocation(
|
|
48
|
-
"t2i_adapter", title="T2I-Adapter", tags=["t2i_adapter", "control"], category="t2i_adapter", version="1.0.
|
|
48
|
+
"t2i_adapter", title="T2I-Adapter", tags=["t2i_adapter", "control"], category="t2i_adapter", version="1.0.3"
|
|
49
49
|
)
|
|
50
50
|
class T2IAdapterInvocation(BaseInvocation):
|
|
51
51
|
"""Collects T2I-Adapter info to pass to other nodes."""
|
|
@@ -55,7 +55,6 @@ class T2IAdapterInvocation(BaseInvocation):
|
|
|
55
55
|
t2i_adapter_model: ModelIdentifierField = InputField(
|
|
56
56
|
description="The T2I-Adapter model.",
|
|
57
57
|
title="T2I-Adapter Model",
|
|
58
|
-
input=Input.Direct,
|
|
59
58
|
ui_order=-1,
|
|
60
59
|
ui_type=UIType.T2IAdapterModel,
|
|
61
60
|
)
|
|
@@ -122,6 +122,8 @@ class EventServiceBase:
|
|
|
122
122
|
source_node_id: str,
|
|
123
123
|
error_type: str,
|
|
124
124
|
error: str,
|
|
125
|
+
user_id: str | None,
|
|
126
|
+
project_id: str | None,
|
|
125
127
|
) -> None:
|
|
126
128
|
"""Emitted when an invocation has completed"""
|
|
127
129
|
self.__emit_queue_event(
|
|
@@ -135,6 +137,8 @@ class EventServiceBase:
|
|
|
135
137
|
"source_node_id": source_node_id,
|
|
136
138
|
"error_type": error_type,
|
|
137
139
|
"error": error,
|
|
140
|
+
"user_id": user_id,
|
|
141
|
+
"project_id": project_id,
|
|
138
142
|
},
|
|
139
143
|
)
|
|
140
144
|
|
|
@@ -4,9 +4,6 @@ from typing import Optional
|
|
|
4
4
|
|
|
5
5
|
from PIL.Image import Image as PILImageType
|
|
6
6
|
|
|
7
|
-
from invokeai.app.invocations.fields import MetadataField
|
|
8
|
-
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID
|
|
9
|
-
|
|
10
7
|
|
|
11
8
|
class ImageFileStorageBase(ABC):
|
|
12
9
|
"""Low-level service responsible for storing and retrieving image files."""
|
|
@@ -33,8 +30,9 @@ class ImageFileStorageBase(ABC):
|
|
|
33
30
|
self,
|
|
34
31
|
image: PILImageType,
|
|
35
32
|
image_name: str,
|
|
36
|
-
metadata: Optional[
|
|
37
|
-
workflow: Optional[
|
|
33
|
+
metadata: Optional[str] = None,
|
|
34
|
+
workflow: Optional[str] = None,
|
|
35
|
+
graph: Optional[str] = None,
|
|
38
36
|
thumbnail_size: int = 256,
|
|
39
37
|
) -> None:
|
|
40
38
|
"""Saves an image and a 256x256 WEBP thumbnail. Returns a tuple of the image name, thumbnail name, and created timestamp."""
|
|
@@ -46,6 +44,11 @@ class ImageFileStorageBase(ABC):
|
|
|
46
44
|
pass
|
|
47
45
|
|
|
48
46
|
@abstractmethod
|
|
49
|
-
def get_workflow(self, image_name: str) -> Optional[
|
|
47
|
+
def get_workflow(self, image_name: str) -> Optional[str]:
|
|
50
48
|
"""Gets the workflow of an image."""
|
|
51
49
|
pass
|
|
50
|
+
|
|
51
|
+
@abstractmethod
|
|
52
|
+
def get_graph(self, image_name: str) -> Optional[str]:
|
|
53
|
+
"""Gets the graph of an image."""
|
|
54
|
+
pass
|
|
@@ -7,9 +7,7 @@ from PIL import Image, PngImagePlugin
|
|
|
7
7
|
from PIL.Image import Image as PILImageType
|
|
8
8
|
from send2trash import send2trash
|
|
9
9
|
|
|
10
|
-
from invokeai.app.invocations.fields import MetadataField
|
|
11
10
|
from invokeai.app.services.invoker import Invoker
|
|
12
|
-
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID
|
|
13
11
|
from invokeai.app.util.thumbnails import get_thumbnail_name, make_thumbnail
|
|
14
12
|
|
|
15
13
|
from .image_files_base import ImageFileStorageBase
|
|
@@ -56,8 +54,9 @@ class DiskImageFileStorage(ImageFileStorageBase):
|
|
|
56
54
|
self,
|
|
57
55
|
image: PILImageType,
|
|
58
56
|
image_name: str,
|
|
59
|
-
metadata: Optional[
|
|
60
|
-
workflow: Optional[
|
|
57
|
+
metadata: Optional[str] = None,
|
|
58
|
+
workflow: Optional[str] = None,
|
|
59
|
+
graph: Optional[str] = None,
|
|
61
60
|
thumbnail_size: int = 256,
|
|
62
61
|
) -> None:
|
|
63
62
|
try:
|
|
@@ -68,13 +67,14 @@ class DiskImageFileStorage(ImageFileStorageBase):
|
|
|
68
67
|
info_dict = {}
|
|
69
68
|
|
|
70
69
|
if metadata is not None:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
pnginfo.add_text("invokeai_metadata", metadata_json)
|
|
70
|
+
info_dict["invokeai_metadata"] = metadata
|
|
71
|
+
pnginfo.add_text("invokeai_metadata", metadata)
|
|
74
72
|
if workflow is not None:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
info_dict["invokeai_workflow"] = workflow
|
|
74
|
+
pnginfo.add_text("invokeai_workflow", workflow)
|
|
75
|
+
if graph is not None:
|
|
76
|
+
info_dict["invokeai_graph"] = graph
|
|
77
|
+
pnginfo.add_text("invokeai_graph", graph)
|
|
78
78
|
|
|
79
79
|
# When saving the image, the image object's info field is not populated. We need to set it
|
|
80
80
|
image.info = info_dict
|
|
@@ -129,11 +129,18 @@ class DiskImageFileStorage(ImageFileStorageBase):
|
|
|
129
129
|
path = path if isinstance(path, Path) else Path(path)
|
|
130
130
|
return path.exists()
|
|
131
131
|
|
|
132
|
-
def get_workflow(self, image_name: str) ->
|
|
132
|
+
def get_workflow(self, image_name: str) -> str | None:
|
|
133
133
|
image = self.get(image_name)
|
|
134
134
|
workflow = image.info.get("invokeai_workflow", None)
|
|
135
|
-
if workflow
|
|
136
|
-
return
|
|
135
|
+
if isinstance(workflow, str):
|
|
136
|
+
return workflow
|
|
137
|
+
return None
|
|
138
|
+
|
|
139
|
+
def get_graph(self, image_name: str) -> str | None:
|
|
140
|
+
image = self.get(image_name)
|
|
141
|
+
graph = image.info.get("invokeai_graph", None)
|
|
142
|
+
if isinstance(graph, str):
|
|
143
|
+
return graph
|
|
137
144
|
return None
|
|
138
145
|
|
|
139
146
|
def __validate_storage_folders(self) -> None:
|
|
@@ -80,7 +80,7 @@ class ImageRecordStorageBase(ABC):
|
|
|
80
80
|
starred: Optional[bool] = False,
|
|
81
81
|
session_id: Optional[str] = None,
|
|
82
82
|
node_id: Optional[str] = None,
|
|
83
|
-
metadata: Optional[
|
|
83
|
+
metadata: Optional[str] = None,
|
|
84
84
|
) -> datetime:
|
|
85
85
|
"""Saves an image record."""
|
|
86
86
|
pass
|