InvokeAI 5.1.1__tar.gz → 5.2.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.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/PKG-INFO +3 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/SOURCES.txt +15 -4
- {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/requires.txt +2 -2
- {invokeai-5.1.1 → invokeai-5.2.0}/PKG-INFO +3 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/boards.py +6 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/model_manager.py +39 -8
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/workflows.py +1 -1
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/fields.py +1 -0
- invokeai-5.2.0/invokeai/app/invocations/flux_controlnet.py +99 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_denoise.py +130 -10
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_base.py +11 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_common.py +9 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_sqlite.py +34 -19
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_base.py +11 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_default.py +15 -5
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_base.py +1 -1
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +8 -17
- invokeai-5.2.0/invokeai/backend/flux/controlnet/controlnet_flux_output.py +58 -0
- invokeai-5.2.0/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +180 -0
- invokeai-5.2.0/invokeai/backend/flux/controlnet/state_dict_utils.py +295 -0
- invokeai-5.2.0/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +130 -0
- invokeai-5.2.0/invokeai/backend/flux/controlnet/zero_module.py +12 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/denoise.py +31 -1
- invokeai-5.2.0/invokeai/backend/flux/extensions/base_controlnet_extension.py +45 -0
- invokeai-5.2.0/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +194 -0
- invokeai-5.2.0/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +150 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/model.py +20 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +22 -3
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +59 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/probe.py +37 -16
- invokeai-5.2.0/invokeai/backend/model_manager/starter_models.py +653 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +26 -11
- invokeai-5.2.0/invokeai/backend/tiles/__init__.py +0 -0
- invokeai-5.2.0/invokeai/frontend/cli/__init__.py +0 -0
- invokeai-5.2.0/invokeai/frontend/web/dist/assets/App-B7TWqqSi.js +122 -0
- invokeai-5.1.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-Djtn-j09.js → invokeai-5.2.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-BHgh8vF3.js +1 -1
- invokeai-5.2.0/invokeai/frontend/web/dist/assets/index-pJtvKw6b.js +510 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/index.html +1 -1
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/de.json +115 -8
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/en.json +41 -8
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/es.json +17 -2
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/fr.json +960 -46
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/it.json +25 -9
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ru.json +14 -6
- invokeai-5.2.0/invokeai/version/invokeai_version.py +1 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/pyproject.toml +2 -2
- invokeai-5.1.1/invokeai/backend/model_manager/starter_models.py +0 -528
- invokeai-5.1.1/invokeai/frontend/web/dist/assets/App-8bkD1zLK.js +0 -124
- invokeai-5.1.1/invokeai/frontend/web/dist/assets/index-BCfBeBaM.js +0 -509
- invokeai-5.1.1/invokeai/version/invokeai_version.py +0 -1
- {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/entry_points.txt +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/InvokeAI.egg-info/top_level.txt +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE-SD1+SD2.txt +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/LICENSE-SDXL.txt +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/README.md +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/dependencies.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/app_info.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/board_images.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/download_queue.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/images.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/session_queue.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/style_presets.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/routers/utilities.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api/sockets.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/api_app.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/assets/images/caution.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/baseinvocation.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/blend_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/canny.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/collections.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/color_map.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/compel.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/constants.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/content_shuffle.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/crop_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/cv.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/denoise_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/depth_anything.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/dw_openpose.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/facetools.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/grounding_dino.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/hed.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/ideal_size.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/image.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/image_to_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/infill.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/ip_adapter.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/latents_to_image.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/lineart.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/lineart_anime.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mask.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/math.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/metadata.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/mlsd.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/model.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/noise.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/normal_bae.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/param_easing.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/pidi.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/primitives.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/prompt.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/resize_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/scheduler.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/sdxl.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/segment_anything.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/strings.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/tiles.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/upscale.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/invocations/util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/run_app.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/boards/boards_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/config_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/config/config_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/download_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/download/download_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_files/image_files_disk.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/images/images_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_services.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/invoker.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/model_records_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/names/names_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/graph.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/invocation_context.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/pagination.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/urls_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/urls/urls_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/shared/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/shared/models.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/controlnet_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/custom_openapi.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/metaenum.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/misc.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/model_exclude_null.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/profiler.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/step_callback.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/suppress_output.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/thumbnails.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/util/ti_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/grounding_dino → invokeai-5.2.0/invokeai/backend/flux/controlnet}/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/mlsd/models → invokeai-5.2.0/invokeai/backend/flux/extensions}/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/flux → invokeai-5.2.0/invokeai/backend/flux/extensions}/inpaint_extension.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/math.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/modules/layers.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/sampling_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/flux/util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/canny.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets → invokeai-5.2.0/invokeai/backend/image_util/grounding_dino}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/hed.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/lineart.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets/submodules → invokeai-5.2.0/invokeai/backend/image_util/mlsd/models}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/realesrgan → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets/submodules}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
- {invokeai-5.1.1/invokeai/backend/image_util/segment_anything → invokeai-5.2.0/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pidi/model.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/pngwriter.py +0 -0
- {invokeai-5.1.1/invokeai/backend/ip_adapter → invokeai-5.2.0/invokeai/backend/image_util/realesrgan}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/safety_checker.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora → invokeai-5.2.0/invokeai/backend/image_util/segment_anything}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/image_util/util.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora/conversions → invokeai-5.2.0/invokeai/backend/ip_adapter}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora/layers → invokeai-5.2.0/invokeai/backend/lora}/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers → invokeai-5.2.0/invokeai/backend/lora/conversions}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers/concatenated_lora → invokeai-5.2.0/invokeai/backend/lora/layers}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/layers/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/lora_patcher.py +0 -0
- {invokeai-5.1.1/invokeai/backend/lora/sidecar_layers/lora → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers}/__init__.py +0 -0
- {invokeai-5.1.1/invokeai/backend/quantization → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers/concatenated_lora}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.1.1/invokeai/backend/tiles → invokeai-5.2.0/invokeai/backend/lora/sidecar_layers/lora}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_hash/model_hash.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/config.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/merge.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/search.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/model_util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/model_patcher.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {invokeai-5.1.1/invokeai/frontend/cli → invokeai-5.2.0/invokeai/backend/quantization}/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/raw_model.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/textual_inversion.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/tiles/tiles.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/tiles/utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/attention.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/build_line.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/catch_sigint.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/db_maintenance.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/devices.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/hotfixes.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/logging.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/mask.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/mps_fixes.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/original_weights_storage.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/silence_warnings.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/test_utils.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/backend/util/util.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/cli/arg_parser.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/install/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/install/import_images.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/invocation_api/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/invokeai/version/__init__.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/setup.cfg +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_config.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_docs.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_graph_execution_state.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_invocation_cache_memory.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_item_storage_memory.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_hash.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_probe.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_model_search.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_node_graph.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_nodes.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_object_serializer_disk.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_path.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_profiler.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.0}/tests/test_session_queue.py +0 -0
- {invokeai-5.1.1 → invokeai-5.2.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.2.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
|
|
@@ -219,8 +219,8 @@ Requires-Dist: gguf==0.10.0
|
|
|
219
219
|
Requires-Dist: invisible-watermark==0.2.0
|
|
220
220
|
Requires-Dist: mediapipe>=0.10.7
|
|
221
221
|
Requires-Dist: numpy==1.26.4
|
|
222
|
-
Requires-Dist: onnx
|
|
223
|
-
Requires-Dist: onnxruntime
|
|
222
|
+
Requires-Dist: onnx==1.16.1
|
|
223
|
+
Requires-Dist: onnxruntime==1.19.2
|
|
224
224
|
Requires-Dist: opencv-python==4.9.0.80
|
|
225
225
|
Requires-Dist: pytorch-lightning==2.1.3
|
|
226
226
|
Requires-Dist: safetensors==0.4.3
|
|
@@ -45,6 +45,7 @@ invokeai/app/invocations/depth_anything.py
|
|
|
45
45
|
invokeai/app/invocations/dw_openpose.py
|
|
46
46
|
invokeai/app/invocations/facetools.py
|
|
47
47
|
invokeai/app/invocations/fields.py
|
|
48
|
+
invokeai/app/invocations/flux_controlnet.py
|
|
48
49
|
invokeai/app/invocations/flux_denoise.py
|
|
49
50
|
invokeai/app/invocations/flux_lora_loader.py
|
|
50
51
|
invokeai/app/invocations/flux_text_encoder.py
|
|
@@ -266,11 +267,21 @@ invokeai/backend/raw_model.py
|
|
|
266
267
|
invokeai/backend/spandrel_image_to_image_model.py
|
|
267
268
|
invokeai/backend/textual_inversion.py
|
|
268
269
|
invokeai/backend/flux/denoise.py
|
|
269
|
-
invokeai/backend/flux/inpaint_extension.py
|
|
270
270
|
invokeai/backend/flux/math.py
|
|
271
271
|
invokeai/backend/flux/model.py
|
|
272
272
|
invokeai/backend/flux/sampling_utils.py
|
|
273
273
|
invokeai/backend/flux/util.py
|
|
274
|
+
invokeai/backend/flux/controlnet/__init__.py
|
|
275
|
+
invokeai/backend/flux/controlnet/controlnet_flux_output.py
|
|
276
|
+
invokeai/backend/flux/controlnet/instantx_controlnet_flux.py
|
|
277
|
+
invokeai/backend/flux/controlnet/state_dict_utils.py
|
|
278
|
+
invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py
|
|
279
|
+
invokeai/backend/flux/controlnet/zero_module.py
|
|
280
|
+
invokeai/backend/flux/extensions/__init__.py
|
|
281
|
+
invokeai/backend/flux/extensions/base_controlnet_extension.py
|
|
282
|
+
invokeai/backend/flux/extensions/inpaint_extension.py
|
|
283
|
+
invokeai/backend/flux/extensions/instantx_controlnet_extension.py
|
|
284
|
+
invokeai/backend/flux/extensions/xlabs_controlnet_extension.py
|
|
274
285
|
invokeai/backend/flux/modules/autoencoder.py
|
|
275
286
|
invokeai/backend/flux/modules/conditioner.py
|
|
276
287
|
invokeai/backend/flux/modules/layers.py
|
|
@@ -494,12 +505,12 @@ invokeai/frontend/install/__init__.py
|
|
|
494
505
|
invokeai/frontend/install/import_images.py
|
|
495
506
|
invokeai/frontend/web/__init__.py
|
|
496
507
|
invokeai/frontend/web/dist/index.html
|
|
497
|
-
invokeai/frontend/web/dist/assets/App-
|
|
508
|
+
invokeai/frontend/web/dist/assets/App-B7TWqqSi.js
|
|
498
509
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
499
510
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
|
|
500
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
511
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-BHgh8vF3.js
|
|
501
512
|
invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
|
|
502
|
-
invokeai/frontend/web/dist/assets/index-
|
|
513
|
+
invokeai/frontend/web/dist/assets/index-pJtvKw6b.js
|
|
503
514
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
|
|
504
515
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
|
|
505
516
|
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.2.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
|
|
@@ -219,8 +219,8 @@ Requires-Dist: gguf==0.10.0
|
|
|
219
219
|
Requires-Dist: invisible-watermark==0.2.0
|
|
220
220
|
Requires-Dist: mediapipe>=0.10.7
|
|
221
221
|
Requires-Dist: numpy==1.26.4
|
|
222
|
-
Requires-Dist: onnx
|
|
223
|
-
Requires-Dist: onnxruntime
|
|
222
|
+
Requires-Dist: onnx==1.16.1
|
|
223
|
+
Requires-Dist: onnxruntime==1.19.2
|
|
224
224
|
Requires-Dist: opencv-python==4.9.0.80
|
|
225
225
|
Requires-Dist: pytorch-lightning==2.1.3
|
|
226
226
|
Requires-Dist: safetensors==0.4.3
|
|
@@ -5,9 +5,10 @@ from fastapi.routing import APIRouter
|
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
7
|
from invokeai.app.api.dependencies import ApiDependencies
|
|
8
|
-
from invokeai.app.services.board_records.board_records_common import BoardChanges
|
|
8
|
+
from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecordOrderBy
|
|
9
9
|
from invokeai.app.services.boards.boards_common import BoardDTO
|
|
10
10
|
from invokeai.app.services.shared.pagination import OffsetPaginatedResults
|
|
11
|
+
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
|
11
12
|
|
|
12
13
|
boards_router = APIRouter(prefix="/v1/boards", tags=["boards"])
|
|
13
14
|
|
|
@@ -115,6 +116,8 @@ async def delete_board(
|
|
|
115
116
|
response_model=Union[OffsetPaginatedResults[BoardDTO], list[BoardDTO]],
|
|
116
117
|
)
|
|
117
118
|
async def list_boards(
|
|
119
|
+
order_by: BoardRecordOrderBy = Query(default=BoardRecordOrderBy.CreatedAt, description="The attribute to order by"),
|
|
120
|
+
direction: SQLiteDirection = Query(default=SQLiteDirection.Descending, description="The direction to order by"),
|
|
118
121
|
all: Optional[bool] = Query(default=None, description="Whether to list all boards"),
|
|
119
122
|
offset: Optional[int] = Query(default=None, description="The page offset"),
|
|
120
123
|
limit: Optional[int] = Query(default=None, description="The number of boards per page"),
|
|
@@ -122,9 +125,9 @@ async def list_boards(
|
|
|
122
125
|
) -> Union[OffsetPaginatedResults[BoardDTO], list[BoardDTO]]:
|
|
123
126
|
"""Gets a list of boards"""
|
|
124
127
|
if all:
|
|
125
|
-
return ApiDependencies.invoker.services.boards.get_all(include_archived)
|
|
128
|
+
return ApiDependencies.invoker.services.boards.get_all(order_by, direction, include_archived)
|
|
126
129
|
elif offset is not None and limit is not None:
|
|
127
|
-
return ApiDependencies.invoker.services.boards.get_many(offset, limit, include_archived)
|
|
130
|
+
return ApiDependencies.invoker.services.boards.get_many(order_by, direction, offset, limit, include_archived)
|
|
128
131
|
else:
|
|
129
132
|
raise HTTPException(
|
|
130
133
|
status_code=400,
|
|
@@ -38,7 +38,12 @@ from invokeai.backend.model_manager.load.model_cache.model_cache_base import Cac
|
|
|
38
38
|
from invokeai.backend.model_manager.metadata.fetch.huggingface import HuggingFaceMetadataFetch
|
|
39
39
|
from invokeai.backend.model_manager.metadata.metadata_base import ModelMetadataWithFiles, UnknownMetadataException
|
|
40
40
|
from invokeai.backend.model_manager.search import ModelSearch
|
|
41
|
-
from invokeai.backend.model_manager.starter_models import
|
|
41
|
+
from invokeai.backend.model_manager.starter_models import (
|
|
42
|
+
STARTER_BUNDLES,
|
|
43
|
+
STARTER_MODELS,
|
|
44
|
+
StarterModel,
|
|
45
|
+
StarterModelWithoutDependencies,
|
|
46
|
+
)
|
|
42
47
|
|
|
43
48
|
model_manager_router = APIRouter(prefix="/v2/models", tags=["model_manager"])
|
|
44
49
|
|
|
@@ -792,22 +797,48 @@ async def convert_model(
|
|
|
792
797
|
return new_config
|
|
793
798
|
|
|
794
799
|
|
|
795
|
-
|
|
796
|
-
|
|
800
|
+
class StarterModelResponse(BaseModel):
|
|
801
|
+
starter_models: list[StarterModel]
|
|
802
|
+
starter_bundles: dict[str, list[StarterModel]]
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
def get_is_installed(
|
|
806
|
+
starter_model: StarterModel | StarterModelWithoutDependencies, installed_models: list[AnyModelConfig]
|
|
807
|
+
) -> bool:
|
|
808
|
+
for model in installed_models:
|
|
809
|
+
if model.source == starter_model.source:
|
|
810
|
+
return True
|
|
811
|
+
if model.name == starter_model.name and model.base == starter_model.base and model.type == starter_model.type:
|
|
812
|
+
return True
|
|
813
|
+
return False
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
@model_manager_router.get("/starter_models", operation_id="get_starter_models", response_model=StarterModelResponse)
|
|
817
|
+
async def get_starter_models() -> StarterModelResponse:
|
|
797
818
|
installed_models = ApiDependencies.invoker.services.model_manager.store.search_by_attr()
|
|
798
|
-
installed_model_sources = {m.source for m in installed_models}
|
|
799
819
|
starter_models = deepcopy(STARTER_MODELS)
|
|
820
|
+
starter_bundles = deepcopy(STARTER_BUNDLES)
|
|
800
821
|
for model in starter_models:
|
|
801
|
-
|
|
802
|
-
model.is_installed = True
|
|
822
|
+
model.is_installed = get_is_installed(model, installed_models)
|
|
803
823
|
# Remove already-installed dependencies
|
|
804
824
|
missing_deps: list[StarterModelWithoutDependencies] = []
|
|
825
|
+
|
|
805
826
|
for dep in model.dependencies or []:
|
|
806
|
-
if
|
|
827
|
+
if not get_is_installed(dep, installed_models):
|
|
807
828
|
missing_deps.append(dep)
|
|
808
829
|
model.dependencies = missing_deps
|
|
809
830
|
|
|
810
|
-
|
|
831
|
+
for bundle in starter_bundles.values():
|
|
832
|
+
for model in bundle:
|
|
833
|
+
model.is_installed = get_is_installed(model, installed_models)
|
|
834
|
+
# Remove already-installed dependencies
|
|
835
|
+
missing_deps: list[StarterModelWithoutDependencies] = []
|
|
836
|
+
for dep in model.dependencies or []:
|
|
837
|
+
if not get_is_installed(dep, installed_models):
|
|
838
|
+
missing_deps.append(dep)
|
|
839
|
+
model.dependencies = missing_deps
|
|
840
|
+
|
|
841
|
+
return StarterModelResponse(starter_models=starter_models, starter_bundles=starter_bundles)
|
|
811
842
|
|
|
812
843
|
|
|
813
844
|
@model_manager_router.get(
|
|
@@ -88,7 +88,7 @@ async def list_workflows(
|
|
|
88
88
|
default=WorkflowRecordOrderBy.Name, description="The attribute to order by"
|
|
89
89
|
),
|
|
90
90
|
direction: SQLiteDirection = Query(default=SQLiteDirection.Ascending, description="The direction to order by"),
|
|
91
|
-
category:
|
|
91
|
+
category: WorkflowCategory = Query(default=WorkflowCategory.User, description="The category of workflow to get"),
|
|
92
92
|
query: Optional[str] = Query(default=None, description="The text to query by (matches name and description)"),
|
|
93
93
|
) -> PaginatedResults[WorkflowRecordListItemDTO]:
|
|
94
94
|
"""Gets a page of workflows"""
|
|
@@ -192,6 +192,7 @@ class FieldDescriptions:
|
|
|
192
192
|
freeu_s2 = 'Scaling factor for stage 2 to attenuate the contributions of the skip features. This is done to mitigate the "oversmoothing effect" in the enhanced denoising process.'
|
|
193
193
|
freeu_b1 = "Scaling factor for stage 1 to amplify the contributions of backbone features."
|
|
194
194
|
freeu_b2 = "Scaling factor for stage 2 to amplify the contributions of backbone features."
|
|
195
|
+
instantx_control_mode = "The control mode for InstantX ControlNet union models. Ignored for other ControlNet models. The standard mapping is: canny (0), tile (1), depth (2), blur (3), pose (4), gray (5), low quality (6). Negative values will be treated as 'None'."
|
|
195
196
|
|
|
196
197
|
|
|
197
198
|
class ImageField(BaseModel):
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
from pydantic import BaseModel, Field, field_validator, model_validator
|
|
2
|
+
|
|
3
|
+
from invokeai.app.invocations.baseinvocation import (
|
|
4
|
+
BaseInvocation,
|
|
5
|
+
BaseInvocationOutput,
|
|
6
|
+
Classification,
|
|
7
|
+
invocation,
|
|
8
|
+
invocation_output,
|
|
9
|
+
)
|
|
10
|
+
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField, UIType
|
|
11
|
+
from invokeai.app.invocations.model import ModelIdentifierField
|
|
12
|
+
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
|
13
|
+
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
14
|
+
from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class FluxControlNetField(BaseModel):
|
|
18
|
+
image: ImageField = Field(description="The control image")
|
|
19
|
+
control_model: ModelIdentifierField = Field(description="The ControlNet model to use")
|
|
20
|
+
control_weight: float | list[float] = Field(default=1, description="The weight given to the ControlNet")
|
|
21
|
+
begin_step_percent: float = Field(
|
|
22
|
+
default=0, ge=0, le=1, description="When the ControlNet is first applied (% of total steps)"
|
|
23
|
+
)
|
|
24
|
+
end_step_percent: float = Field(
|
|
25
|
+
default=1, ge=0, le=1, description="When the ControlNet is last applied (% of total steps)"
|
|
26
|
+
)
|
|
27
|
+
resize_mode: CONTROLNET_RESIZE_VALUES = Field(default="just_resize", description="The resize mode to use")
|
|
28
|
+
instantx_control_mode: int | None = Field(default=-1, description=FieldDescriptions.instantx_control_mode)
|
|
29
|
+
|
|
30
|
+
@field_validator("control_weight")
|
|
31
|
+
@classmethod
|
|
32
|
+
def validate_control_weight(cls, v: float | list[float]) -> float | list[float]:
|
|
33
|
+
validate_weights(v)
|
|
34
|
+
return v
|
|
35
|
+
|
|
36
|
+
@model_validator(mode="after")
|
|
37
|
+
def validate_begin_end_step_percent(self):
|
|
38
|
+
validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
|
|
39
|
+
return self
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@invocation_output("flux_controlnet_output")
|
|
43
|
+
class FluxControlNetOutput(BaseInvocationOutput):
|
|
44
|
+
"""FLUX ControlNet info"""
|
|
45
|
+
|
|
46
|
+
control: FluxControlNetField = OutputField(description=FieldDescriptions.control)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@invocation(
|
|
50
|
+
"flux_controlnet",
|
|
51
|
+
title="FLUX ControlNet",
|
|
52
|
+
tags=["controlnet", "flux"],
|
|
53
|
+
category="controlnet",
|
|
54
|
+
version="1.0.0",
|
|
55
|
+
classification=Classification.Prototype,
|
|
56
|
+
)
|
|
57
|
+
class FluxControlNetInvocation(BaseInvocation):
|
|
58
|
+
"""Collect FLUX ControlNet info to pass to other nodes."""
|
|
59
|
+
|
|
60
|
+
image: ImageField = InputField(description="The control image")
|
|
61
|
+
control_model: ModelIdentifierField = InputField(
|
|
62
|
+
description=FieldDescriptions.controlnet_model, ui_type=UIType.ControlNetModel
|
|
63
|
+
)
|
|
64
|
+
control_weight: float | list[float] = InputField(
|
|
65
|
+
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
|
66
|
+
)
|
|
67
|
+
begin_step_percent: float = InputField(
|
|
68
|
+
default=0, ge=0, le=1, description="When the ControlNet is first applied (% of total steps)"
|
|
69
|
+
)
|
|
70
|
+
end_step_percent: float = InputField(
|
|
71
|
+
default=1, ge=0, le=1, description="When the ControlNet is last applied (% of total steps)"
|
|
72
|
+
)
|
|
73
|
+
resize_mode: CONTROLNET_RESIZE_VALUES = InputField(default="just_resize", description="The resize mode used")
|
|
74
|
+
# Note: We default to -1 instead of None, because in the workflow editor UI None is not currently supported.
|
|
75
|
+
instantx_control_mode: int | None = InputField(default=-1, description=FieldDescriptions.instantx_control_mode)
|
|
76
|
+
|
|
77
|
+
@field_validator("control_weight")
|
|
78
|
+
@classmethod
|
|
79
|
+
def validate_control_weight(cls, v: float | list[float]) -> float | list[float]:
|
|
80
|
+
validate_weights(v)
|
|
81
|
+
return v
|
|
82
|
+
|
|
83
|
+
@model_validator(mode="after")
|
|
84
|
+
def validate_begin_end_step_percent(self):
|
|
85
|
+
validate_begin_end_step(self.begin_step_percent, self.end_step_percent)
|
|
86
|
+
return self
|
|
87
|
+
|
|
88
|
+
def invoke(self, context: InvocationContext) -> FluxControlNetOutput:
|
|
89
|
+
return FluxControlNetOutput(
|
|
90
|
+
control=FluxControlNetField(
|
|
91
|
+
image=self.image,
|
|
92
|
+
control_model=self.control_model,
|
|
93
|
+
control_weight=self.control_weight,
|
|
94
|
+
begin_step_percent=self.begin_step_percent,
|
|
95
|
+
end_step_percent=self.end_step_percent,
|
|
96
|
+
resize_mode=self.resize_mode,
|
|
97
|
+
instantx_control_mode=self.instantx_control_mode,
|
|
98
|
+
),
|
|
99
|
+
)
|
|
@@ -16,11 +16,16 @@ from invokeai.app.invocations.fields import (
|
|
|
16
16
|
WithBoard,
|
|
17
17
|
WithMetadata,
|
|
18
18
|
)
|
|
19
|
-
from invokeai.app.invocations.
|
|
19
|
+
from invokeai.app.invocations.flux_controlnet import FluxControlNetField
|
|
20
|
+
from invokeai.app.invocations.model import TransformerField, VAEField
|
|
20
21
|
from invokeai.app.invocations.primitives import LatentsOutput
|
|
21
22
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
23
|
+
from invokeai.backend.flux.controlnet.instantx_controlnet_flux import InstantXControlNetFlux
|
|
24
|
+
from invokeai.backend.flux.controlnet.xlabs_controlnet_flux import XLabsControlNetFlux
|
|
22
25
|
from invokeai.backend.flux.denoise import denoise
|
|
23
|
-
from invokeai.backend.flux.inpaint_extension import InpaintExtension
|
|
26
|
+
from invokeai.backend.flux.extensions.inpaint_extension import InpaintExtension
|
|
27
|
+
from invokeai.backend.flux.extensions.instantx_controlnet_extension import InstantXControlNetExtension
|
|
28
|
+
from invokeai.backend.flux.extensions.xlabs_controlnet_extension import XLabsControlNetExtension
|
|
24
29
|
from invokeai.backend.flux.model import Flux
|
|
25
30
|
from invokeai.backend.flux.sampling_utils import (
|
|
26
31
|
clip_timestep_schedule_fractional,
|
|
@@ -44,7 +49,7 @@ from invokeai.backend.util.devices import TorchDevice
|
|
|
44
49
|
title="FLUX Denoise",
|
|
45
50
|
tags=["image", "flux"],
|
|
46
51
|
category="image",
|
|
47
|
-
version="3.
|
|
52
|
+
version="3.1.0",
|
|
48
53
|
classification=Classification.Prototype,
|
|
49
54
|
)
|
|
50
55
|
class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
@@ -87,6 +92,13 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
87
92
|
description="The guidance strength. Higher values adhere more strictly to the prompt, and will produce less diverse images. FLUX dev only, ignored for schnell.",
|
|
88
93
|
)
|
|
89
94
|
seed: int = InputField(default=0, description="Randomness seed for reproducibility.")
|
|
95
|
+
control: FluxControlNetField | list[FluxControlNetField] | None = InputField(
|
|
96
|
+
default=None, input=Input.Connection, description="ControlNet models."
|
|
97
|
+
)
|
|
98
|
+
controlnet_vae: VAEField | None = InputField(
|
|
99
|
+
description=FieldDescriptions.vae,
|
|
100
|
+
input=Input.Connection,
|
|
101
|
+
)
|
|
90
102
|
|
|
91
103
|
@torch.no_grad()
|
|
92
104
|
def invoke(self, context: InvocationContext) -> LatentsOutput:
|
|
@@ -167,8 +179,8 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
167
179
|
|
|
168
180
|
inpaint_mask = self._prep_inpaint_mask(context, x)
|
|
169
181
|
|
|
170
|
-
b, _c,
|
|
171
|
-
img_ids = generate_img_ids(h=
|
|
182
|
+
b, _c, latent_h, latent_w = x.shape
|
|
183
|
+
img_ids = generate_img_ids(h=latent_h, w=latent_w, batch_size=b, device=x.device, dtype=x.dtype)
|
|
172
184
|
|
|
173
185
|
bs, t5_seq_len, _ = t5_embeddings.shape
|
|
174
186
|
txt_ids = torch.zeros(bs, t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device())
|
|
@@ -192,12 +204,21 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
192
204
|
noise=noise,
|
|
193
205
|
)
|
|
194
206
|
|
|
195
|
-
with (
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
207
|
+
with ExitStack() as exit_stack:
|
|
208
|
+
# Prepare ControlNet extensions.
|
|
209
|
+
# Note: We do this before loading the transformer model to minimize peak memory (see implementation).
|
|
210
|
+
controlnet_extensions = self._prep_controlnet_extensions(
|
|
211
|
+
context=context,
|
|
212
|
+
exit_stack=exit_stack,
|
|
213
|
+
latent_height=latent_h,
|
|
214
|
+
latent_width=latent_w,
|
|
215
|
+
dtype=inference_dtype,
|
|
216
|
+
device=x.device,
|
|
217
|
+
)
|
|
200
218
|
|
|
219
|
+
# Load the transformer model.
|
|
220
|
+
(cached_weights, transformer) = exit_stack.enter_context(transformer_info.model_on_device())
|
|
221
|
+
assert isinstance(transformer, Flux)
|
|
201
222
|
config = transformer_info.config
|
|
202
223
|
assert config is not None
|
|
203
224
|
|
|
@@ -242,6 +263,7 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
242
263
|
step_callback=self._build_step_callback(context),
|
|
243
264
|
guidance=self.guidance,
|
|
244
265
|
inpaint_extension=inpaint_extension,
|
|
266
|
+
controlnet_extensions=controlnet_extensions,
|
|
245
267
|
)
|
|
246
268
|
|
|
247
269
|
x = unpack(x.float(), self.height, self.width)
|
|
@@ -288,6 +310,104 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
288
310
|
# `latents`.
|
|
289
311
|
return mask.expand_as(latents)
|
|
290
312
|
|
|
313
|
+
def _prep_controlnet_extensions(
|
|
314
|
+
self,
|
|
315
|
+
context: InvocationContext,
|
|
316
|
+
exit_stack: ExitStack,
|
|
317
|
+
latent_height: int,
|
|
318
|
+
latent_width: int,
|
|
319
|
+
dtype: torch.dtype,
|
|
320
|
+
device: torch.device,
|
|
321
|
+
) -> list[XLabsControlNetExtension | InstantXControlNetExtension]:
|
|
322
|
+
# Normalize the controlnet input to list[ControlField].
|
|
323
|
+
controlnets: list[FluxControlNetField]
|
|
324
|
+
if self.control is None:
|
|
325
|
+
controlnets = []
|
|
326
|
+
elif isinstance(self.control, FluxControlNetField):
|
|
327
|
+
controlnets = [self.control]
|
|
328
|
+
elif isinstance(self.control, list):
|
|
329
|
+
controlnets = self.control
|
|
330
|
+
else:
|
|
331
|
+
raise ValueError(f"Unsupported controlnet type: {type(self.control)}")
|
|
332
|
+
|
|
333
|
+
# TODO(ryand): Add a field to the model config so that we can distinguish between XLabs and InstantX ControlNets
|
|
334
|
+
# before loading the models. Then make sure that all VAE encoding is done before loading the ControlNets to
|
|
335
|
+
# minimize peak memory.
|
|
336
|
+
|
|
337
|
+
# First, load the ControlNet models so that we can determine the ControlNet types.
|
|
338
|
+
controlnet_models = [context.models.load(controlnet.control_model) for controlnet in controlnets]
|
|
339
|
+
|
|
340
|
+
# Calculate the controlnet conditioning tensors.
|
|
341
|
+
# We do this before loading the ControlNet models because it may require running the VAE, and we are trying to
|
|
342
|
+
# keep peak memory down.
|
|
343
|
+
controlnet_conds: list[torch.Tensor] = []
|
|
344
|
+
for controlnet, controlnet_model in zip(controlnets, controlnet_models, strict=True):
|
|
345
|
+
image = context.images.get_pil(controlnet.image.image_name)
|
|
346
|
+
if isinstance(controlnet_model.model, InstantXControlNetFlux):
|
|
347
|
+
if self.controlnet_vae is None:
|
|
348
|
+
raise ValueError("A ControlNet VAE is required when using an InstantX FLUX ControlNet.")
|
|
349
|
+
vae_info = context.models.load(self.controlnet_vae.vae)
|
|
350
|
+
controlnet_conds.append(
|
|
351
|
+
InstantXControlNetExtension.prepare_controlnet_cond(
|
|
352
|
+
controlnet_image=image,
|
|
353
|
+
vae_info=vae_info,
|
|
354
|
+
latent_height=latent_height,
|
|
355
|
+
latent_width=latent_width,
|
|
356
|
+
dtype=dtype,
|
|
357
|
+
device=device,
|
|
358
|
+
resize_mode=controlnet.resize_mode,
|
|
359
|
+
)
|
|
360
|
+
)
|
|
361
|
+
elif isinstance(controlnet_model.model, XLabsControlNetFlux):
|
|
362
|
+
controlnet_conds.append(
|
|
363
|
+
XLabsControlNetExtension.prepare_controlnet_cond(
|
|
364
|
+
controlnet_image=image,
|
|
365
|
+
latent_height=latent_height,
|
|
366
|
+
latent_width=latent_width,
|
|
367
|
+
dtype=dtype,
|
|
368
|
+
device=device,
|
|
369
|
+
resize_mode=controlnet.resize_mode,
|
|
370
|
+
)
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
# Finally, load the ControlNet models and initialize the ControlNet extensions.
|
|
374
|
+
controlnet_extensions: list[XLabsControlNetExtension | InstantXControlNetExtension] = []
|
|
375
|
+
for controlnet, controlnet_cond, controlnet_model in zip(
|
|
376
|
+
controlnets, controlnet_conds, controlnet_models, strict=True
|
|
377
|
+
):
|
|
378
|
+
model = exit_stack.enter_context(controlnet_model)
|
|
379
|
+
|
|
380
|
+
if isinstance(model, XLabsControlNetFlux):
|
|
381
|
+
controlnet_extensions.append(
|
|
382
|
+
XLabsControlNetExtension(
|
|
383
|
+
model=model,
|
|
384
|
+
controlnet_cond=controlnet_cond,
|
|
385
|
+
weight=controlnet.control_weight,
|
|
386
|
+
begin_step_percent=controlnet.begin_step_percent,
|
|
387
|
+
end_step_percent=controlnet.end_step_percent,
|
|
388
|
+
)
|
|
389
|
+
)
|
|
390
|
+
elif isinstance(model, InstantXControlNetFlux):
|
|
391
|
+
instantx_control_mode: torch.Tensor | None = None
|
|
392
|
+
if controlnet.instantx_control_mode is not None and controlnet.instantx_control_mode >= 0:
|
|
393
|
+
instantx_control_mode = torch.tensor(controlnet.instantx_control_mode, dtype=torch.long)
|
|
394
|
+
instantx_control_mode = instantx_control_mode.reshape([-1, 1])
|
|
395
|
+
|
|
396
|
+
controlnet_extensions.append(
|
|
397
|
+
InstantXControlNetExtension(
|
|
398
|
+
model=model,
|
|
399
|
+
controlnet_cond=controlnet_cond,
|
|
400
|
+
instantx_control_mode=instantx_control_mode,
|
|
401
|
+
weight=controlnet.control_weight,
|
|
402
|
+
begin_step_percent=controlnet.begin_step_percent,
|
|
403
|
+
end_step_percent=controlnet.end_step_percent,
|
|
404
|
+
)
|
|
405
|
+
)
|
|
406
|
+
else:
|
|
407
|
+
raise ValueError(f"Unsupported ControlNet model type: {type(model)}")
|
|
408
|
+
|
|
409
|
+
return controlnet_extensions
|
|
410
|
+
|
|
291
411
|
def _lora_iterator(self, context: InvocationContext) -> Iterator[Tuple[LoRAModelRaw, float]]:
|
|
292
412
|
for lora in self.transformer.loras:
|
|
293
413
|
lora_info = context.models.load(lora.lora)
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
|
|
3
|
-
from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecord
|
|
3
|
+
from invokeai.app.services.board_records.board_records_common import BoardChanges, BoardRecord, BoardRecordOrderBy
|
|
4
4
|
from invokeai.app.services.shared.pagination import OffsetPaginatedResults
|
|
5
|
+
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class BoardRecordStorageBase(ABC):
|
|
@@ -39,12 +40,19 @@ class BoardRecordStorageBase(ABC):
|
|
|
39
40
|
|
|
40
41
|
@abstractmethod
|
|
41
42
|
def get_many(
|
|
42
|
-
self,
|
|
43
|
+
self,
|
|
44
|
+
order_by: BoardRecordOrderBy,
|
|
45
|
+
direction: SQLiteDirection,
|
|
46
|
+
offset: int = 0,
|
|
47
|
+
limit: int = 10,
|
|
48
|
+
include_archived: bool = False,
|
|
43
49
|
) -> OffsetPaginatedResults[BoardRecord]:
|
|
44
50
|
"""Gets many board records."""
|
|
45
51
|
pass
|
|
46
52
|
|
|
47
53
|
@abstractmethod
|
|
48
|
-
def get_all(
|
|
54
|
+
def get_all(
|
|
55
|
+
self, order_by: BoardRecordOrderBy, direction: SQLiteDirection, include_archived: bool = False
|
|
56
|
+
) -> list[BoardRecord]:
|
|
49
57
|
"""Gets all board records."""
|
|
50
58
|
pass
|
{invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_common.py
RENAMED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
2
3
|
from typing import Optional, Union
|
|
3
4
|
|
|
4
5
|
from pydantic import BaseModel, Field
|
|
5
6
|
|
|
7
|
+
from invokeai.app.util.metaenum import MetaEnum
|
|
6
8
|
from invokeai.app.util.misc import get_iso_timestamp
|
|
7
9
|
from invokeai.app.util.model_exclude_null import BaseModelExcludeNull
|
|
8
10
|
|
|
@@ -60,6 +62,13 @@ class BoardChanges(BaseModel, extra="forbid"):
|
|
|
60
62
|
archived: Optional[bool] = Field(default=None, description="Whether or not the board is archived")
|
|
61
63
|
|
|
62
64
|
|
|
65
|
+
class BoardRecordOrderBy(str, Enum, metaclass=MetaEnum):
|
|
66
|
+
"""The order by options for board records"""
|
|
67
|
+
|
|
68
|
+
CreatedAt = "created_at"
|
|
69
|
+
Name = "board_name"
|
|
70
|
+
|
|
71
|
+
|
|
63
72
|
class BoardRecordNotFoundException(Exception):
|
|
64
73
|
"""Raised when an board record is not found."""
|
|
65
74
|
|
{invokeai-5.1.1 → invokeai-5.2.0}/invokeai/app/services/board_records/board_records_sqlite.py
RENAMED
|
@@ -8,10 +8,12 @@ from invokeai.app.services.board_records.board_records_common import (
|
|
|
8
8
|
BoardRecord,
|
|
9
9
|
BoardRecordDeleteException,
|
|
10
10
|
BoardRecordNotFoundException,
|
|
11
|
+
BoardRecordOrderBy,
|
|
11
12
|
BoardRecordSaveException,
|
|
12
13
|
deserialize_board_record,
|
|
13
14
|
)
|
|
14
15
|
from invokeai.app.services.shared.pagination import OffsetPaginatedResults
|
|
16
|
+
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
|
15
17
|
from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase
|
|
16
18
|
from invokeai.app.util.misc import uuid_string
|
|
17
19
|
|
|
@@ -144,7 +146,12 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
|
|
|
144
146
|
return self.get(board_id)
|
|
145
147
|
|
|
146
148
|
def get_many(
|
|
147
|
-
self,
|
|
149
|
+
self,
|
|
150
|
+
order_by: BoardRecordOrderBy,
|
|
151
|
+
direction: SQLiteDirection,
|
|
152
|
+
offset: int = 0,
|
|
153
|
+
limit: int = 10,
|
|
154
|
+
include_archived: bool = False,
|
|
148
155
|
) -> OffsetPaginatedResults[BoardRecord]:
|
|
149
156
|
try:
|
|
150
157
|
self._lock.acquire()
|
|
@@ -154,17 +161,16 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
|
|
|
154
161
|
SELECT *
|
|
155
162
|
FROM boards
|
|
156
163
|
{archived_filter}
|
|
157
|
-
ORDER BY
|
|
164
|
+
ORDER BY {order_by} {direction}
|
|
158
165
|
LIMIT ? OFFSET ?;
|
|
159
166
|
"""
|
|
160
167
|
|
|
161
168
|
# Determine archived filter condition
|
|
162
|
-
if include_archived
|
|
163
|
-
archived_filter = ""
|
|
164
|
-
else:
|
|
165
|
-
archived_filter = "WHERE archived = 0"
|
|
169
|
+
archived_filter = "" if include_archived else "WHERE archived = 0"
|
|
166
170
|
|
|
167
|
-
final_query = base_query.format(
|
|
171
|
+
final_query = base_query.format(
|
|
172
|
+
archived_filter=archived_filter, order_by=order_by.value, direction=direction.value
|
|
173
|
+
)
|
|
168
174
|
|
|
169
175
|
# Execute query to fetch boards
|
|
170
176
|
self._cursor.execute(final_query, (limit, offset))
|
|
@@ -198,23 +204,32 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase):
|
|
|
198
204
|
finally:
|
|
199
205
|
self._lock.release()
|
|
200
206
|
|
|
201
|
-
def get_all(
|
|
207
|
+
def get_all(
|
|
208
|
+
self, order_by: BoardRecordOrderBy, direction: SQLiteDirection, include_archived: bool = False
|
|
209
|
+
) -> list[BoardRecord]:
|
|
202
210
|
try:
|
|
203
211
|
self._lock.acquire()
|
|
204
212
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if include_archived:
|
|
213
|
-
archived_filter = ""
|
|
213
|
+
if order_by == BoardRecordOrderBy.Name:
|
|
214
|
+
base_query = """
|
|
215
|
+
SELECT *
|
|
216
|
+
FROM boards
|
|
217
|
+
{archived_filter}
|
|
218
|
+
ORDER BY LOWER(board_name) {direction}
|
|
219
|
+
"""
|
|
214
220
|
else:
|
|
215
|
-
|
|
221
|
+
base_query = """
|
|
222
|
+
SELECT *
|
|
223
|
+
FROM boards
|
|
224
|
+
{archived_filter}
|
|
225
|
+
ORDER BY {order_by} {direction}
|
|
226
|
+
"""
|
|
216
227
|
|
|
217
|
-
|
|
228
|
+
archived_filter = "" if include_archived else "WHERE archived = 0"
|
|
229
|
+
|
|
230
|
+
final_query = base_query.format(
|
|
231
|
+
archived_filter=archived_filter, order_by=order_by.value, direction=direction.value
|
|
232
|
+
)
|
|
218
233
|
|
|
219
234
|
self._cursor.execute(final_query)
|
|
220
235
|
|