InvokeAI 5.2.0rc2__tar.gz → 5.3.0__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-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/PKG-INFO +1 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/SOURCES.txt +11 -3
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/PKG-INFO +1 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/model_manager.py +5 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/denoise_latents.py +3 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_denoise.py +252 -13
- invokeai-5.3.0/invokeai/app/invocations/flux_ip_adapter.py +89 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/ip_adapter.py +27 -7
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mask.py +53 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/metadata.py +1 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/segment_anything.py +53 -12
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_disk.py +17 -6
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/invocation_context.py +12 -7
- invokeai-5.3.0/invokeai/backend/flux/custom_block_processor.py +83 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/denoise.py +43 -6
- invokeai-5.3.0/invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py +89 -0
- invokeai-5.3.0/invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py +93 -0
- invokeai-5.3.0/invokeai/backend/flux/ip_adapter/state_dict_utils.py +50 -0
- invokeai-5.3.0/invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py +67 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/model.py +18 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/sampling_utils.py +9 -0
- invokeai-5.3.0/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +94 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/config.py +2 -0
- invokeai-5.3.0/invokeai/backend/model_manager/load/model_loaders/clip_vision.py +41 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +29 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/probe.py +19 -4
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/starter_models.py +136 -107
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +5 -0
- invokeai-5.3.0/invokeai/frontend/cli/__init__.py +0 -0
- invokeai-5.3.0/invokeai/frontend/web/dist/assets/App-DqSd1s3k.js +122 -0
- invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-C5eh7bJz.js → invokeai-5.3.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CvgnMQ11.js +1 -1
- invokeai-5.3.0/invokeai/frontend/web/dist/assets/index-BQPuxPiy.js +510 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/index.html +1 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/de.json +40 -7
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/en.json +74 -6
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/fr.json +69 -47
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/it.json +27 -6
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ru.json +43 -12
- invokeai-5.3.0/invokeai/version/invokeai_version.py +1 -0
- invokeai-5.2.0rc2/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -53
- invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/App-CeaAHUEz.js +0 -122
- invokeai-5.2.0rc2/invokeai/frontend/web/dist/assets/index-CcqOCFPb.js +0 -510
- invokeai-5.2.0rc2/invokeai/version/invokeai_version.py +0 -1
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/entry_points.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/requires.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/InvokeAI.egg-info/top_level.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE-SD1+SD2.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/LICENSE-SDXL.txt +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/README.md +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/dependencies.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/app_info.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/board_images.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/boards.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/download_queue.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/images.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/session_queue.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/style_presets.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/utilities.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/routers/workflows.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api/sockets.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/api_app.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/assets/images/caution.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/baseinvocation.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/blend_latents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/canny.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/collections.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/color_map.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/compel.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/constants.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/content_shuffle.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/crop_latents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/cv.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/depth_anything.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/dw_openpose.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/facetools.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/fields.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_controlnet.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/grounding_dino.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/hed.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/ideal_size.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/image.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/image_to_latents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/infill.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/latents_to_image.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/lineart.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/lineart_anime.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/math.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/mlsd.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/model.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/noise.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/normal_bae.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/param_easing.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/pidi.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/primitives.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/prompt.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/resize_latents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/scheduler.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/sdxl.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/strings.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/tiles.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/upscale.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/invocations/util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/run_app.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/boards/boards_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/config_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/config/config_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/download_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/download/download_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/images/images_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_services.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/invoker.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/model_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/names/names_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/graph.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/pagination.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/urls_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/urls/urls_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/shared/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/shared/models.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/controlnet_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/custom_openapi.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/metaenum.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/misc.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/model_exclude_null.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/profiler.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/step_callback.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/suppress_output.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/thumbnails.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/app/util/ti_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/controlnet_flux_output.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/state_dict_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/controlnet/zero_module.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/base_controlnet_extension.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/inpaint_extension.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/grounding_dino → invokeai-5.3.0/invokeai/backend/flux/ip_adapter}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/math.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/modules/layers.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/flux/util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/canny.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/mlsd/models → invokeai-5.3.0/invokeai/backend/image_util/grounding_dino}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/hed.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/lineart.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets → invokeai-5.3.0/invokeai/backend/image_util/mlsd/models}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets/submodules → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets/submodules}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/realesrgan → invokeai-5.3.0/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pidi/model.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/pngwriter.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/image_util/segment_anything → invokeai-5.3.0/invokeai/backend/image_util/realesrgan}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/safety_checker.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/ip_adapter → invokeai-5.3.0/invokeai/backend/image_util/segment_anything}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/image_util/util.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora → invokeai-5.3.0/invokeai/backend/ip_adapter}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora/conversions → invokeai-5.3.0/invokeai/backend/lora}/__init__.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora/layers → invokeai-5.3.0/invokeai/backend/lora/conversions}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers → invokeai-5.3.0/invokeai/backend/lora/layers}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/layers/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/lora_patcher.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers/concatenated_lora → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers}/__init__.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/lora/sidecar_layers/lora → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers/concatenated_lora}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/quantization → invokeai-5.3.0/invokeai/backend/lora/sidecar_layers/lora}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_hash/model_hash.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/merge.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/search.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/model_util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/model_patcher.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {invokeai-5.2.0rc2/invokeai/backend/tiles → invokeai-5.3.0/invokeai/backend/quantization}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/raw_model.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/textual_inversion.py +0 -0
- {invokeai-5.2.0rc2/invokeai/frontend/cli → invokeai-5.3.0/invokeai/backend/tiles}/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/tiles/tiles.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/tiles/utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/attention.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/build_line.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/catch_sigint.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/db_maintenance.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/devices.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/hotfixes.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/logging.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/mask.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/mps_fixes.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/original_weights_storage.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/silence_warnings.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/test_utils.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/backend/util/util.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/cli/arg_parser.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/install/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/install/import_images.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/es.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/invocation_api/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/invokeai/version/__init__.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/pyproject.toml +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/setup.cfg +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_config.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_docs.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_graph_execution_state.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_invocation_cache_memory.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_item_storage_memory.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_hash.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_probe.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_model_search.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_node_graph.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_nodes.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_object_serializer_disk.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_path.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_profiler.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_session_queue.py +0 -0
- {invokeai-5.2.0rc2 → invokeai-5.3.0}/tests/test_sqlite_migrator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
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
|
|
@@ -47,6 +47,7 @@ invokeai/app/invocations/facetools.py
|
|
|
47
47
|
invokeai/app/invocations/fields.py
|
|
48
48
|
invokeai/app/invocations/flux_controlnet.py
|
|
49
49
|
invokeai/app/invocations/flux_denoise.py
|
|
50
|
+
invokeai/app/invocations/flux_ip_adapter.py
|
|
50
51
|
invokeai/app/invocations/flux_lora_loader.py
|
|
51
52
|
invokeai/app/invocations/flux_text_encoder.py
|
|
52
53
|
invokeai/app/invocations/flux_vae_decode.py
|
|
@@ -266,6 +267,7 @@ invokeai/backend/model_patcher.py
|
|
|
266
267
|
invokeai/backend/raw_model.py
|
|
267
268
|
invokeai/backend/spandrel_image_to_image_model.py
|
|
268
269
|
invokeai/backend/textual_inversion.py
|
|
270
|
+
invokeai/backend/flux/custom_block_processor.py
|
|
269
271
|
invokeai/backend/flux/denoise.py
|
|
270
272
|
invokeai/backend/flux/math.py
|
|
271
273
|
invokeai/backend/flux/model.py
|
|
@@ -282,6 +284,11 @@ invokeai/backend/flux/extensions/base_controlnet_extension.py
|
|
|
282
284
|
invokeai/backend/flux/extensions/inpaint_extension.py
|
|
283
285
|
invokeai/backend/flux/extensions/instantx_controlnet_extension.py
|
|
284
286
|
invokeai/backend/flux/extensions/xlabs_controlnet_extension.py
|
|
287
|
+
invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py
|
|
288
|
+
invokeai/backend/flux/ip_adapter/__init__.py
|
|
289
|
+
invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py
|
|
290
|
+
invokeai/backend/flux/ip_adapter/state_dict_utils.py
|
|
291
|
+
invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py
|
|
285
292
|
invokeai/backend/flux/modules/autoencoder.py
|
|
286
293
|
invokeai/backend/flux/modules/conditioner.py
|
|
287
294
|
invokeai/backend/flux/modules/layers.py
|
|
@@ -409,6 +416,7 @@ invokeai/backend/model_manager/load/model_cache/model_cache_base.py
|
|
|
409
416
|
invokeai/backend/model_manager/load/model_cache/model_cache_default.py
|
|
410
417
|
invokeai/backend/model_manager/load/model_cache/model_locker.py
|
|
411
418
|
invokeai/backend/model_manager/load/model_loaders/__init__.py
|
|
419
|
+
invokeai/backend/model_manager/load/model_loaders/clip_vision.py
|
|
412
420
|
invokeai/backend/model_manager/load/model_loaders/controlnet.py
|
|
413
421
|
invokeai/backend/model_manager/load/model_loaders/flux.py
|
|
414
422
|
invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py
|
|
@@ -505,12 +513,12 @@ invokeai/frontend/install/__init__.py
|
|
|
505
513
|
invokeai/frontend/install/import_images.py
|
|
506
514
|
invokeai/frontend/web/__init__.py
|
|
507
515
|
invokeai/frontend/web/dist/index.html
|
|
508
|
-
invokeai/frontend/web/dist/assets/App-CeaAHUEz.js
|
|
509
516
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
517
|
+
invokeai/frontend/web/dist/assets/App-DqSd1s3k.js
|
|
510
518
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
|
|
511
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
519
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CvgnMQ11.js
|
|
512
520
|
invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
|
|
513
|
-
invokeai/frontend/web/dist/assets/index-
|
|
521
|
+
invokeai/frontend/web/dist/assets/index-BQPuxPiy.js
|
|
514
522
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
|
|
515
523
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
|
|
516
524
|
invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
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
|
|
@@ -808,7 +808,11 @@ def get_is_installed(
|
|
|
808
808
|
for model in installed_models:
|
|
809
809
|
if model.source == starter_model.source:
|
|
810
810
|
return True
|
|
811
|
-
if
|
|
811
|
+
if (
|
|
812
|
+
(model.name == starter_model.name or model.name in starter_model.previous_names)
|
|
813
|
+
and model.base == starter_model.base
|
|
814
|
+
and model.type == starter_model.type
|
|
815
|
+
):
|
|
812
816
|
return True
|
|
813
817
|
return False
|
|
814
818
|
|
|
@@ -547,7 +547,9 @@ class DenoiseLatentsInvocation(BaseInvocation):
|
|
|
547
547
|
if not isinstance(single_ipa_image_fields, list):
|
|
548
548
|
single_ipa_image_fields = [single_ipa_image_fields]
|
|
549
549
|
|
|
550
|
-
single_ipa_images = [
|
|
550
|
+
single_ipa_images = [
|
|
551
|
+
context.images.get_pil(image.image_name, mode="RGB") for image in single_ipa_image_fields
|
|
552
|
+
]
|
|
551
553
|
with image_encoder_model_info as image_encoder_model:
|
|
552
554
|
assert isinstance(image_encoder_model, CLIPVisionModelWithProjection)
|
|
553
555
|
# Get image embeddings from CLIP and ImageProjModel.
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
from contextlib import ExitStack
|
|
2
2
|
from typing import Callable, Iterator, Optional, Tuple
|
|
3
3
|
|
|
4
|
+
import numpy as np
|
|
5
|
+
import numpy.typing as npt
|
|
4
6
|
import torch
|
|
5
7
|
import torchvision.transforms as tv_transforms
|
|
6
8
|
from torchvision.transforms.functional import resize as tv_resize
|
|
9
|
+
from transformers import CLIPImageProcessor, CLIPVisionModelWithProjection
|
|
7
10
|
|
|
8
11
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
|
|
9
12
|
from invokeai.app.invocations.fields import (
|
|
10
13
|
DenoiseMaskField,
|
|
11
14
|
FieldDescriptions,
|
|
12
15
|
FluxConditioningField,
|
|
16
|
+
ImageField,
|
|
13
17
|
Input,
|
|
14
18
|
InputField,
|
|
15
19
|
LatentsField,
|
|
@@ -17,6 +21,7 @@ from invokeai.app.invocations.fields import (
|
|
|
17
21
|
WithMetadata,
|
|
18
22
|
)
|
|
19
23
|
from invokeai.app.invocations.flux_controlnet import FluxControlNetField
|
|
24
|
+
from invokeai.app.invocations.ip_adapter import IPAdapterField
|
|
20
25
|
from invokeai.app.invocations.model import TransformerField, VAEField
|
|
21
26
|
from invokeai.app.invocations.primitives import LatentsOutput
|
|
22
27
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
@@ -26,6 +31,8 @@ from invokeai.backend.flux.denoise import denoise
|
|
|
26
31
|
from invokeai.backend.flux.extensions.inpaint_extension import InpaintExtension
|
|
27
32
|
from invokeai.backend.flux.extensions.instantx_controlnet_extension import InstantXControlNetExtension
|
|
28
33
|
from invokeai.backend.flux.extensions.xlabs_controlnet_extension import XLabsControlNetExtension
|
|
34
|
+
from invokeai.backend.flux.extensions.xlabs_ip_adapter_extension import XLabsIPAdapterExtension
|
|
35
|
+
from invokeai.backend.flux.ip_adapter.xlabs_ip_adapter_flux import XlabsIpAdapterFlux
|
|
29
36
|
from invokeai.backend.flux.model import Flux
|
|
30
37
|
from invokeai.backend.flux.sampling_utils import (
|
|
31
38
|
clip_timestep_schedule_fractional,
|
|
@@ -49,7 +56,7 @@ from invokeai.backend.util.devices import TorchDevice
|
|
|
49
56
|
title="FLUX Denoise",
|
|
50
57
|
tags=["image", "flux"],
|
|
51
58
|
category="image",
|
|
52
|
-
version="3.
|
|
59
|
+
version="3.2.0",
|
|
53
60
|
classification=Classification.Prototype,
|
|
54
61
|
)
|
|
55
62
|
class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
@@ -82,6 +89,24 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
82
89
|
positive_text_conditioning: FluxConditioningField = InputField(
|
|
83
90
|
description=FieldDescriptions.positive_cond, input=Input.Connection
|
|
84
91
|
)
|
|
92
|
+
negative_text_conditioning: FluxConditioningField | None = InputField(
|
|
93
|
+
default=None,
|
|
94
|
+
description="Negative conditioning tensor. Can be None if cfg_scale is 1.0.",
|
|
95
|
+
input=Input.Connection,
|
|
96
|
+
)
|
|
97
|
+
cfg_scale: float | list[float] = InputField(default=1.0, description=FieldDescriptions.cfg_scale, title="CFG Scale")
|
|
98
|
+
cfg_scale_start_step: int = InputField(
|
|
99
|
+
default=0,
|
|
100
|
+
title="CFG Scale Start Step",
|
|
101
|
+
description="Index of the first step to apply cfg_scale. Negative indices count backwards from the "
|
|
102
|
+
+ "the last step (e.g. a value of -1 refers to the final step).",
|
|
103
|
+
)
|
|
104
|
+
cfg_scale_end_step: int = InputField(
|
|
105
|
+
default=-1,
|
|
106
|
+
title="CFG Scale End Step",
|
|
107
|
+
description="Index of the last step to apply cfg_scale. Negative indices count backwards from the "
|
|
108
|
+
+ "last step (e.g. a value of -1 refers to the final step).",
|
|
109
|
+
)
|
|
85
110
|
width: int = InputField(default=1024, multiple_of=16, description="Width of the generated image.")
|
|
86
111
|
height: int = InputField(default=1024, multiple_of=16, description="Height of the generated image.")
|
|
87
112
|
num_steps: int = InputField(
|
|
@@ -96,10 +121,15 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
96
121
|
default=None, input=Input.Connection, description="ControlNet models."
|
|
97
122
|
)
|
|
98
123
|
controlnet_vae: VAEField | None = InputField(
|
|
124
|
+
default=None,
|
|
99
125
|
description=FieldDescriptions.vae,
|
|
100
126
|
input=Input.Connection,
|
|
101
127
|
)
|
|
102
128
|
|
|
129
|
+
ip_adapter: IPAdapterField | list[IPAdapterField] | None = InputField(
|
|
130
|
+
description=FieldDescriptions.ip_adapter, title="IP-Adapter", default=None, input=Input.Connection
|
|
131
|
+
)
|
|
132
|
+
|
|
103
133
|
@torch.no_grad()
|
|
104
134
|
def invoke(self, context: InvocationContext) -> LatentsOutput:
|
|
105
135
|
latents = self._run_diffusion(context)
|
|
@@ -108,6 +138,19 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
108
138
|
name = context.tensors.save(tensor=latents)
|
|
109
139
|
return LatentsOutput.build(latents_name=name, latents=latents, seed=None)
|
|
110
140
|
|
|
141
|
+
def _load_text_conditioning(
|
|
142
|
+
self, context: InvocationContext, conditioning_name: str, dtype: torch.dtype
|
|
143
|
+
) -> Tuple[torch.Tensor, torch.Tensor]:
|
|
144
|
+
# Load the conditioning data.
|
|
145
|
+
cond_data = context.conditioning.load(conditioning_name)
|
|
146
|
+
assert len(cond_data.conditionings) == 1
|
|
147
|
+
flux_conditioning = cond_data.conditionings[0]
|
|
148
|
+
assert isinstance(flux_conditioning, FLUXConditioningInfo)
|
|
149
|
+
flux_conditioning = flux_conditioning.to(dtype=dtype)
|
|
150
|
+
t5_embeddings = flux_conditioning.t5_embeds
|
|
151
|
+
clip_embeddings = flux_conditioning.clip_embeds
|
|
152
|
+
return t5_embeddings, clip_embeddings
|
|
153
|
+
|
|
111
154
|
def _run_diffusion(
|
|
112
155
|
self,
|
|
113
156
|
context: InvocationContext,
|
|
@@ -115,13 +158,15 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
115
158
|
inference_dtype = torch.bfloat16
|
|
116
159
|
|
|
117
160
|
# Load the conditioning data.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
161
|
+
pos_t5_embeddings, pos_clip_embeddings = self._load_text_conditioning(
|
|
162
|
+
context, self.positive_text_conditioning.conditioning_name, inference_dtype
|
|
163
|
+
)
|
|
164
|
+
neg_t5_embeddings: torch.Tensor | None = None
|
|
165
|
+
neg_clip_embeddings: torch.Tensor | None = None
|
|
166
|
+
if self.negative_text_conditioning is not None:
|
|
167
|
+
neg_t5_embeddings, neg_clip_embeddings = self._load_text_conditioning(
|
|
168
|
+
context, self.negative_text_conditioning.conditioning_name, inference_dtype
|
|
169
|
+
)
|
|
125
170
|
|
|
126
171
|
# Load the input latents, if provided.
|
|
127
172
|
init_latents = context.tensors.load(self.latents.latents_name) if self.latents else None
|
|
@@ -182,8 +227,16 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
182
227
|
b, _c, latent_h, latent_w = x.shape
|
|
183
228
|
img_ids = generate_img_ids(h=latent_h, w=latent_w, batch_size=b, device=x.device, dtype=x.dtype)
|
|
184
229
|
|
|
185
|
-
|
|
186
|
-
|
|
230
|
+
pos_bs, pos_t5_seq_len, _ = pos_t5_embeddings.shape
|
|
231
|
+
pos_txt_ids = torch.zeros(
|
|
232
|
+
pos_bs, pos_t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device()
|
|
233
|
+
)
|
|
234
|
+
neg_txt_ids: torch.Tensor | None = None
|
|
235
|
+
if neg_t5_embeddings is not None:
|
|
236
|
+
neg_bs, neg_t5_seq_len, _ = neg_t5_embeddings.shape
|
|
237
|
+
neg_txt_ids = torch.zeros(
|
|
238
|
+
neg_bs, neg_t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device()
|
|
239
|
+
)
|
|
187
240
|
|
|
188
241
|
# Pack all latent tensors.
|
|
189
242
|
init_latents = pack(init_latents) if init_latents is not None else None
|
|
@@ -204,6 +257,21 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
204
257
|
noise=noise,
|
|
205
258
|
)
|
|
206
259
|
|
|
260
|
+
# Compute the IP-Adapter image prompt clip embeddings.
|
|
261
|
+
# We do this before loading other models to minimize peak memory.
|
|
262
|
+
# TODO(ryand): We should really do this in a separate invocation to benefit from caching.
|
|
263
|
+
ip_adapter_fields = self._normalize_ip_adapter_fields()
|
|
264
|
+
pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds = self._prep_ip_adapter_image_prompt_clip_embeds(
|
|
265
|
+
ip_adapter_fields, context
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
cfg_scale = self.prep_cfg_scale(
|
|
269
|
+
cfg_scale=self.cfg_scale,
|
|
270
|
+
timesteps=timesteps,
|
|
271
|
+
cfg_scale_start_step=self.cfg_scale_start_step,
|
|
272
|
+
cfg_scale_end_step=self.cfg_scale_end_step,
|
|
273
|
+
)
|
|
274
|
+
|
|
207
275
|
with ExitStack() as exit_stack:
|
|
208
276
|
# Prepare ControlNet extensions.
|
|
209
277
|
# Note: We do this before loading the transformer model to minimize peak memory (see implementation).
|
|
@@ -252,23 +320,88 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
252
320
|
else:
|
|
253
321
|
raise ValueError(f"Unsupported model format: {config.format}")
|
|
254
322
|
|
|
323
|
+
# Prepare IP-Adapter extensions.
|
|
324
|
+
pos_ip_adapter_extensions, neg_ip_adapter_extensions = self._prep_ip_adapter_extensions(
|
|
325
|
+
pos_image_prompt_clip_embeds=pos_image_prompt_clip_embeds,
|
|
326
|
+
neg_image_prompt_clip_embeds=neg_image_prompt_clip_embeds,
|
|
327
|
+
ip_adapter_fields=ip_adapter_fields,
|
|
328
|
+
context=context,
|
|
329
|
+
exit_stack=exit_stack,
|
|
330
|
+
dtype=inference_dtype,
|
|
331
|
+
)
|
|
332
|
+
|
|
255
333
|
x = denoise(
|
|
256
334
|
model=transformer,
|
|
257
335
|
img=x,
|
|
258
336
|
img_ids=img_ids,
|
|
259
|
-
txt=
|
|
260
|
-
txt_ids=
|
|
261
|
-
vec=
|
|
337
|
+
txt=pos_t5_embeddings,
|
|
338
|
+
txt_ids=pos_txt_ids,
|
|
339
|
+
vec=pos_clip_embeddings,
|
|
340
|
+
neg_txt=neg_t5_embeddings,
|
|
341
|
+
neg_txt_ids=neg_txt_ids,
|
|
342
|
+
neg_vec=neg_clip_embeddings,
|
|
262
343
|
timesteps=timesteps,
|
|
263
344
|
step_callback=self._build_step_callback(context),
|
|
264
345
|
guidance=self.guidance,
|
|
346
|
+
cfg_scale=cfg_scale,
|
|
265
347
|
inpaint_extension=inpaint_extension,
|
|
266
348
|
controlnet_extensions=controlnet_extensions,
|
|
349
|
+
pos_ip_adapter_extensions=pos_ip_adapter_extensions,
|
|
350
|
+
neg_ip_adapter_extensions=neg_ip_adapter_extensions,
|
|
267
351
|
)
|
|
268
352
|
|
|
269
353
|
x = unpack(x.float(), self.height, self.width)
|
|
270
354
|
return x
|
|
271
355
|
|
|
356
|
+
@classmethod
|
|
357
|
+
def prep_cfg_scale(
|
|
358
|
+
cls, cfg_scale: float | list[float], timesteps: list[float], cfg_scale_start_step: int, cfg_scale_end_step: int
|
|
359
|
+
) -> list[float]:
|
|
360
|
+
"""Prepare the cfg_scale schedule.
|
|
361
|
+
|
|
362
|
+
- Clips the cfg_scale schedule based on cfg_scale_start_step and cfg_scale_end_step.
|
|
363
|
+
- If cfg_scale is a list, then it is assumed to be a schedule and is returned as-is.
|
|
364
|
+
- If cfg_scale is a scalar, then a linear schedule is created from cfg_scale_start_step to cfg_scale_end_step.
|
|
365
|
+
"""
|
|
366
|
+
# num_steps is the number of denoising steps, which is one less than the number of timesteps.
|
|
367
|
+
num_steps = len(timesteps) - 1
|
|
368
|
+
|
|
369
|
+
# Normalize cfg_scale to a list if it is a scalar.
|
|
370
|
+
cfg_scale_list: list[float]
|
|
371
|
+
if isinstance(cfg_scale, float):
|
|
372
|
+
cfg_scale_list = [cfg_scale] * num_steps
|
|
373
|
+
elif isinstance(cfg_scale, list):
|
|
374
|
+
cfg_scale_list = cfg_scale
|
|
375
|
+
else:
|
|
376
|
+
raise ValueError(f"Unsupported cfg_scale type: {type(cfg_scale)}")
|
|
377
|
+
assert len(cfg_scale_list) == num_steps
|
|
378
|
+
|
|
379
|
+
# Handle negative indices for cfg_scale_start_step and cfg_scale_end_step.
|
|
380
|
+
start_step_index = cfg_scale_start_step
|
|
381
|
+
if start_step_index < 0:
|
|
382
|
+
start_step_index = num_steps + start_step_index
|
|
383
|
+
end_step_index = cfg_scale_end_step
|
|
384
|
+
if end_step_index < 0:
|
|
385
|
+
end_step_index = num_steps + end_step_index
|
|
386
|
+
|
|
387
|
+
# Validate the start and end step indices.
|
|
388
|
+
if not (0 <= start_step_index < num_steps):
|
|
389
|
+
raise ValueError(f"Invalid cfg_scale_start_step. Out of range: {cfg_scale_start_step}.")
|
|
390
|
+
if not (0 <= end_step_index < num_steps):
|
|
391
|
+
raise ValueError(f"Invalid cfg_scale_end_step. Out of range: {cfg_scale_end_step}.")
|
|
392
|
+
if start_step_index > end_step_index:
|
|
393
|
+
raise ValueError(
|
|
394
|
+
f"cfg_scale_start_step ({cfg_scale_start_step}) must be before cfg_scale_end_step "
|
|
395
|
+
+ f"({cfg_scale_end_step})."
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
# Set values outside the start and end step indices to 1.0. This is equivalent to disabling cfg_scale for those
|
|
399
|
+
# steps.
|
|
400
|
+
clipped_cfg_scale = [1.0] * num_steps
|
|
401
|
+
clipped_cfg_scale[start_step_index : end_step_index + 1] = cfg_scale_list[start_step_index : end_step_index + 1]
|
|
402
|
+
|
|
403
|
+
return clipped_cfg_scale
|
|
404
|
+
|
|
272
405
|
def _prep_inpaint_mask(self, context: InvocationContext, latents: torch.Tensor) -> torch.Tensor | None:
|
|
273
406
|
"""Prepare the inpaint mask.
|
|
274
407
|
|
|
@@ -408,6 +541,112 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
408
541
|
|
|
409
542
|
return controlnet_extensions
|
|
410
543
|
|
|
544
|
+
def _normalize_ip_adapter_fields(self) -> list[IPAdapterField]:
|
|
545
|
+
if self.ip_adapter is None:
|
|
546
|
+
return []
|
|
547
|
+
elif isinstance(self.ip_adapter, IPAdapterField):
|
|
548
|
+
return [self.ip_adapter]
|
|
549
|
+
elif isinstance(self.ip_adapter, list):
|
|
550
|
+
return self.ip_adapter
|
|
551
|
+
else:
|
|
552
|
+
raise ValueError(f"Unsupported IP-Adapter type: {type(self.ip_adapter)}")
|
|
553
|
+
|
|
554
|
+
def _prep_ip_adapter_image_prompt_clip_embeds(
|
|
555
|
+
self,
|
|
556
|
+
ip_adapter_fields: list[IPAdapterField],
|
|
557
|
+
context: InvocationContext,
|
|
558
|
+
) -> tuple[list[torch.Tensor], list[torch.Tensor]]:
|
|
559
|
+
"""Run the IPAdapter CLIPVisionModel, returning image prompt embeddings."""
|
|
560
|
+
clip_image_processor = CLIPImageProcessor()
|
|
561
|
+
|
|
562
|
+
pos_image_prompt_clip_embeds: list[torch.Tensor] = []
|
|
563
|
+
neg_image_prompt_clip_embeds: list[torch.Tensor] = []
|
|
564
|
+
for ip_adapter_field in ip_adapter_fields:
|
|
565
|
+
# `ip_adapter_field.image` could be a list or a single ImageField. Normalize to a list here.
|
|
566
|
+
ipa_image_fields: list[ImageField]
|
|
567
|
+
if isinstance(ip_adapter_field.image, ImageField):
|
|
568
|
+
ipa_image_fields = [ip_adapter_field.image]
|
|
569
|
+
elif isinstance(ip_adapter_field.image, list):
|
|
570
|
+
ipa_image_fields = ip_adapter_field.image
|
|
571
|
+
else:
|
|
572
|
+
raise ValueError(f"Unsupported IP-Adapter image type: {type(ip_adapter_field.image)}")
|
|
573
|
+
|
|
574
|
+
if len(ipa_image_fields) != 1:
|
|
575
|
+
raise ValueError(
|
|
576
|
+
f"FLUX IP-Adapter only supports a single image prompt (received {len(ipa_image_fields)})."
|
|
577
|
+
)
|
|
578
|
+
|
|
579
|
+
ipa_images = [context.images.get_pil(image.image_name, mode="RGB") for image in ipa_image_fields]
|
|
580
|
+
|
|
581
|
+
pos_images: list[npt.NDArray[np.uint8]] = []
|
|
582
|
+
neg_images: list[npt.NDArray[np.uint8]] = []
|
|
583
|
+
for ipa_image in ipa_images:
|
|
584
|
+
assert ipa_image.mode == "RGB"
|
|
585
|
+
pos_image = np.array(ipa_image)
|
|
586
|
+
# We use a black image as the negative image prompt for parity with
|
|
587
|
+
# https://github.com/XLabs-AI/x-flux-comfyui/blob/45c834727dd2141aebc505ae4b01f193a8414e38/nodes.py#L592-L593
|
|
588
|
+
# An alternative scheme would be to apply zeros_like() after calling the clip_image_processor.
|
|
589
|
+
neg_image = np.zeros_like(pos_image)
|
|
590
|
+
pos_images.append(pos_image)
|
|
591
|
+
neg_images.append(neg_image)
|
|
592
|
+
|
|
593
|
+
with context.models.load(ip_adapter_field.image_encoder_model) as image_encoder_model:
|
|
594
|
+
assert isinstance(image_encoder_model, CLIPVisionModelWithProjection)
|
|
595
|
+
|
|
596
|
+
clip_image: torch.Tensor = clip_image_processor(images=pos_images, return_tensors="pt").pixel_values
|
|
597
|
+
clip_image = clip_image.to(device=image_encoder_model.device, dtype=image_encoder_model.dtype)
|
|
598
|
+
pos_clip_image_embeds = image_encoder_model(clip_image).image_embeds
|
|
599
|
+
|
|
600
|
+
clip_image = clip_image_processor(images=neg_images, return_tensors="pt").pixel_values
|
|
601
|
+
clip_image = clip_image.to(device=image_encoder_model.device, dtype=image_encoder_model.dtype)
|
|
602
|
+
neg_clip_image_embeds = image_encoder_model(clip_image).image_embeds
|
|
603
|
+
|
|
604
|
+
pos_image_prompt_clip_embeds.append(pos_clip_image_embeds)
|
|
605
|
+
neg_image_prompt_clip_embeds.append(neg_clip_image_embeds)
|
|
606
|
+
|
|
607
|
+
return pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds
|
|
608
|
+
|
|
609
|
+
def _prep_ip_adapter_extensions(
|
|
610
|
+
self,
|
|
611
|
+
ip_adapter_fields: list[IPAdapterField],
|
|
612
|
+
pos_image_prompt_clip_embeds: list[torch.Tensor],
|
|
613
|
+
neg_image_prompt_clip_embeds: list[torch.Tensor],
|
|
614
|
+
context: InvocationContext,
|
|
615
|
+
exit_stack: ExitStack,
|
|
616
|
+
dtype: torch.dtype,
|
|
617
|
+
) -> tuple[list[XLabsIPAdapterExtension], list[XLabsIPAdapterExtension]]:
|
|
618
|
+
pos_ip_adapter_extensions: list[XLabsIPAdapterExtension] = []
|
|
619
|
+
neg_ip_adapter_extensions: list[XLabsIPAdapterExtension] = []
|
|
620
|
+
for ip_adapter_field, pos_image_prompt_clip_embed, neg_image_prompt_clip_embed in zip(
|
|
621
|
+
ip_adapter_fields, pos_image_prompt_clip_embeds, neg_image_prompt_clip_embeds, strict=True
|
|
622
|
+
):
|
|
623
|
+
ip_adapter_model = exit_stack.enter_context(context.models.load(ip_adapter_field.ip_adapter_model))
|
|
624
|
+
assert isinstance(ip_adapter_model, XlabsIpAdapterFlux)
|
|
625
|
+
ip_adapter_model = ip_adapter_model.to(dtype=dtype)
|
|
626
|
+
if ip_adapter_field.mask is not None:
|
|
627
|
+
raise ValueError("IP-Adapter masks are not yet supported in Flux.")
|
|
628
|
+
ip_adapter_extension = XLabsIPAdapterExtension(
|
|
629
|
+
model=ip_adapter_model,
|
|
630
|
+
image_prompt_clip_embed=pos_image_prompt_clip_embed,
|
|
631
|
+
weight=ip_adapter_field.weight,
|
|
632
|
+
begin_step_percent=ip_adapter_field.begin_step_percent,
|
|
633
|
+
end_step_percent=ip_adapter_field.end_step_percent,
|
|
634
|
+
)
|
|
635
|
+
ip_adapter_extension.run_image_proj(dtype=dtype)
|
|
636
|
+
pos_ip_adapter_extensions.append(ip_adapter_extension)
|
|
637
|
+
|
|
638
|
+
ip_adapter_extension = XLabsIPAdapterExtension(
|
|
639
|
+
model=ip_adapter_model,
|
|
640
|
+
image_prompt_clip_embed=neg_image_prompt_clip_embed,
|
|
641
|
+
weight=ip_adapter_field.weight,
|
|
642
|
+
begin_step_percent=ip_adapter_field.begin_step_percent,
|
|
643
|
+
end_step_percent=ip_adapter_field.end_step_percent,
|
|
644
|
+
)
|
|
645
|
+
ip_adapter_extension.run_image_proj(dtype=dtype)
|
|
646
|
+
neg_ip_adapter_extensions.append(ip_adapter_extension)
|
|
647
|
+
|
|
648
|
+
return pos_ip_adapter_extensions, neg_ip_adapter_extensions
|
|
649
|
+
|
|
411
650
|
def _lora_iterator(self, context: InvocationContext) -> Iterator[Tuple[LoRAModelRaw, float]]:
|
|
412
651
|
for lora in self.transformer.loras:
|
|
413
652
|
lora_info = context.models.load(lora.lora)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from builtins import float
|
|
2
|
+
from typing import List, Literal, Union
|
|
3
|
+
|
|
4
|
+
from pydantic import field_validator, model_validator
|
|
5
|
+
from typing_extensions import Self
|
|
6
|
+
|
|
7
|
+
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
|
|
8
|
+
from invokeai.app.invocations.fields import InputField, UIType
|
|
9
|
+
from invokeai.app.invocations.ip_adapter import (
|
|
10
|
+
CLIP_VISION_MODEL_MAP,
|
|
11
|
+
IPAdapterField,
|
|
12
|
+
IPAdapterInvocation,
|
|
13
|
+
IPAdapterOutput,
|
|
14
|
+
)
|
|
15
|
+
from invokeai.app.invocations.model import ModelIdentifierField
|
|
16
|
+
from invokeai.app.invocations.primitives import ImageField
|
|
17
|
+
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
|
18
|
+
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
19
|
+
from invokeai.backend.model_manager.config import (
|
|
20
|
+
IPAdapterCheckpointConfig,
|
|
21
|
+
IPAdapterInvokeAIConfig,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@invocation(
|
|
26
|
+
"flux_ip_adapter",
|
|
27
|
+
title="FLUX IP-Adapter",
|
|
28
|
+
tags=["ip_adapter", "control"],
|
|
29
|
+
category="ip_adapter",
|
|
30
|
+
version="1.0.0",
|
|
31
|
+
classification=Classification.Prototype,
|
|
32
|
+
)
|
|
33
|
+
class FluxIPAdapterInvocation(BaseInvocation):
|
|
34
|
+
"""Collects FLUX IP-Adapter info to pass to other nodes."""
|
|
35
|
+
|
|
36
|
+
# FLUXIPAdapterInvocation is based closely on IPAdapterInvocation, but with some unsupported features removed.
|
|
37
|
+
|
|
38
|
+
image: ImageField = InputField(description="The IP-Adapter image prompt(s).")
|
|
39
|
+
ip_adapter_model: ModelIdentifierField = InputField(
|
|
40
|
+
description="The IP-Adapter model.", title="IP-Adapter Model", ui_type=UIType.IPAdapterModel
|
|
41
|
+
)
|
|
42
|
+
# Currently, the only known ViT model used by FLUX IP-Adapters is ViT-L.
|
|
43
|
+
clip_vision_model: Literal["ViT-L"] = InputField(description="CLIP Vision model to use.", default="ViT-L")
|
|
44
|
+
weight: Union[float, List[float]] = InputField(
|
|
45
|
+
default=1, description="The weight given to the IP-Adapter", title="Weight"
|
|
46
|
+
)
|
|
47
|
+
begin_step_percent: float = InputField(
|
|
48
|
+
default=0, ge=0, le=1, description="When the IP-Adapter is first applied (% of total steps)"
|
|
49
|
+
)
|
|
50
|
+
end_step_percent: float = InputField(
|
|
51
|
+
default=1, ge=0, le=1, description="When the IP-Adapter is last applied (% of total steps)"
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
@field_validator("weight")
|
|
55
|
+
@classmethod
|
|
56
|
+
def validate_ip_adapter_weight(cls, v: float) -> float:
|
|
57
|
+
validate_weights(v)
|
|
58
|
+
return v
|
|
59
|
+
|
|
60
|
+
@model_validator(mode="after")
|
|
61
|
+
def validate_begin_end_step_percent(self) -> Self:
|
|
62
|
+
validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
|
|
63
|
+
return self
|
|
64
|
+
|
|
65
|
+
def invoke(self, context: InvocationContext) -> IPAdapterOutput:
|
|
66
|
+
# Lookup the CLIP Vision encoder that is intended to be used with the IP-Adapter model.
|
|
67
|
+
ip_adapter_info = context.models.get_config(self.ip_adapter_model.key)
|
|
68
|
+
assert isinstance(ip_adapter_info, (IPAdapterInvokeAIConfig, IPAdapterCheckpointConfig))
|
|
69
|
+
|
|
70
|
+
# Note: There is a IPAdapterInvokeAIConfig.image_encoder_model_id field, but it isn't trustworthy.
|
|
71
|
+
image_encoder_starter_model = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
|
|
72
|
+
image_encoder_model_id = image_encoder_starter_model.source
|
|
73
|
+
image_encoder_model_name = image_encoder_starter_model.name
|
|
74
|
+
image_encoder_model = IPAdapterInvocation.get_clip_image_encoder(
|
|
75
|
+
context, image_encoder_model_id, image_encoder_model_name
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return IPAdapterOutput(
|
|
79
|
+
ip_adapter=IPAdapterField(
|
|
80
|
+
image=self.image,
|
|
81
|
+
ip_adapter_model=self.ip_adapter_model,
|
|
82
|
+
image_encoder_model=ModelIdentifierField.from_config(image_encoder_model),
|
|
83
|
+
weight=self.weight,
|
|
84
|
+
target_blocks=[], # target_blocks is currently unused for FLUX IP-Adapters.
|
|
85
|
+
begin_step_percent=self.begin_step_percent,
|
|
86
|
+
end_step_percent=self.end_step_percent,
|
|
87
|
+
mask=None, # mask is currently unused for FLUX IP-Adapters.
|
|
88
|
+
),
|
|
89
|
+
)
|
|
@@ -9,6 +9,7 @@ from invokeai.app.invocations.fields import FieldDescriptions, InputField, Outpu
|
|
|
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
|
|
12
|
+
from invokeai.app.services.model_records.model_records_base import ModelRecordChanges
|
|
12
13
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
13
14
|
from invokeai.backend.model_manager.config import (
|
|
14
15
|
AnyModelConfig,
|
|
@@ -17,6 +18,12 @@ from invokeai.backend.model_manager.config import (
|
|
|
17
18
|
IPAdapterInvokeAIConfig,
|
|
18
19
|
ModelType,
|
|
19
20
|
)
|
|
21
|
+
from invokeai.backend.model_manager.starter_models import (
|
|
22
|
+
StarterModel,
|
|
23
|
+
clip_vit_l_image_encoder,
|
|
24
|
+
ip_adapter_sd_image_encoder,
|
|
25
|
+
ip_adapter_sdxl_image_encoder,
|
|
26
|
+
)
|
|
20
27
|
|
|
21
28
|
|
|
22
29
|
class IPAdapterField(BaseModel):
|
|
@@ -55,10 +62,14 @@ class IPAdapterOutput(BaseInvocationOutput):
|
|
|
55
62
|
ip_adapter: IPAdapterField = OutputField(description=FieldDescriptions.ip_adapter, title="IP-Adapter")
|
|
56
63
|
|
|
57
64
|
|
|
58
|
-
CLIP_VISION_MODEL_MAP
|
|
65
|
+
CLIP_VISION_MODEL_MAP: dict[Literal["ViT-L", "ViT-H", "ViT-G"], StarterModel] = {
|
|
66
|
+
"ViT-L": clip_vit_l_image_encoder,
|
|
67
|
+
"ViT-H": ip_adapter_sd_image_encoder,
|
|
68
|
+
"ViT-G": ip_adapter_sdxl_image_encoder,
|
|
69
|
+
}
|
|
59
70
|
|
|
60
71
|
|
|
61
|
-
@invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.
|
|
72
|
+
@invocation("ip_adapter", title="IP-Adapter", tags=["ip_adapter", "control"], category="ip_adapter", version="1.5.0")
|
|
62
73
|
class IPAdapterInvocation(BaseInvocation):
|
|
63
74
|
"""Collects IP-Adapter info to pass to other nodes."""
|
|
64
75
|
|
|
@@ -70,7 +81,7 @@ class IPAdapterInvocation(BaseInvocation):
|
|
|
70
81
|
ui_order=-1,
|
|
71
82
|
ui_type=UIType.IPAdapterModel,
|
|
72
83
|
)
|
|
73
|
-
clip_vision_model: Literal["ViT-H", "ViT-G"] = InputField(
|
|
84
|
+
clip_vision_model: Literal["ViT-H", "ViT-G", "ViT-L"] = InputField(
|
|
74
85
|
description="CLIP Vision model to use. Overrides model settings. Mandatory for checkpoint models.",
|
|
75
86
|
default="ViT-H",
|
|
76
87
|
ui_order=2,
|
|
@@ -111,9 +122,11 @@ class IPAdapterInvocation(BaseInvocation):
|
|
|
111
122
|
image_encoder_model_id = ip_adapter_info.image_encoder_model_id
|
|
112
123
|
image_encoder_model_name = image_encoder_model_id.split("/")[-1].strip()
|
|
113
124
|
else:
|
|
114
|
-
|
|
125
|
+
image_encoder_starter_model = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
|
|
126
|
+
image_encoder_model_id = image_encoder_starter_model.source
|
|
127
|
+
image_encoder_model_name = image_encoder_starter_model.name
|
|
115
128
|
|
|
116
|
-
image_encoder_model = self.
|
|
129
|
+
image_encoder_model = self.get_clip_image_encoder(context, image_encoder_model_id, image_encoder_model_name)
|
|
117
130
|
|
|
118
131
|
if self.method == "style":
|
|
119
132
|
if ip_adapter_info.base == "sd-1":
|
|
@@ -147,7 +160,10 @@ class IPAdapterInvocation(BaseInvocation):
|
|
|
147
160
|
),
|
|
148
161
|
)
|
|
149
162
|
|
|
150
|
-
|
|
163
|
+
@classmethod
|
|
164
|
+
def get_clip_image_encoder(
|
|
165
|
+
cls, context: InvocationContext, image_encoder_model_id: str, image_encoder_model_name: str
|
|
166
|
+
) -> AnyModelConfig:
|
|
151
167
|
image_encoder_models = context.models.search_by_attrs(
|
|
152
168
|
name=image_encoder_model_name, base=BaseModelType.Any, type=ModelType.CLIPVision
|
|
153
169
|
)
|
|
@@ -159,7 +175,11 @@ class IPAdapterInvocation(BaseInvocation):
|
|
|
159
175
|
)
|
|
160
176
|
|
|
161
177
|
installer = context._services.model_manager.install
|
|
162
|
-
|
|
178
|
+
# Note: We hard-code the type to CLIPVision here because if the model contains both a CLIPVision and a
|
|
179
|
+
# CLIPText model, the probe may treat it as a CLIPText model.
|
|
180
|
+
job = installer.heuristic_import(
|
|
181
|
+
image_encoder_model_id, ModelRecordChanges(name=image_encoder_model_name, type=ModelType.CLIPVision)
|
|
182
|
+
)
|
|
163
183
|
installer.wait_for_job(job, timeout=600) # Wait for up to 10 minutes
|
|
164
184
|
image_encoder_models = context.models.search_by_attrs(
|
|
165
185
|
name=image_encoder_model_name, base=BaseModelType.Any, type=ModelType.CLIPVision
|