InvokeAI 5.3.1__tar.gz → 5.4.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.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/PKG-INFO +3 -3
- {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/SOURCES.txt +9 -3
- {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/requires.txt +2 -2
- {invokeai-5.3.1 → invokeai-5.4.0}/PKG-INFO +3 -3
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/fields.py +12 -0
- invokeai-5.4.0/invokeai/app/invocations/flux_model_loader.py +89 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/model.py +1 -75
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/primitives.py +12 -0
- invokeai-5.4.0/invokeai/app/invocations/sd3_denoise.py +260 -0
- invokeai-5.4.0/invokeai/app/invocations/sd3_latents_to_image.py +73 -0
- invokeai-5.4.0/invokeai/app/invocations/sd3_model_loader.py +108 -0
- invokeai-5.4.0/invokeai/app/invocations/sd3_text_encoder.py +199 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/segment_anything.py +4 -9
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/model_records_base.py +2 -1
- invokeai-5.4.0/invokeai/app/services/workflow_records/default_workflows/SD3.5 Text to Image.json +382 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/step_callback.py +22 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/config.py +46 -1
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +4 -4
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +1 -7
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/probe.py +67 -15
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/starter_models.py +18 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/model_util.py +18 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/select_hf_files.py +16 -5
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +24 -1
- invokeai-5.4.0/invokeai/frontend/web/dist/assets/App-Cgdz1lBg.js +122 -0
- invokeai-5.3.1/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-UZ5hK60i.js → invokeai-5.4.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-QXscVpCV.js +1 -1
- invokeai-5.4.0/invokeai/frontend/web/dist/assets/index-DT5PJ9-6.js +510 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/index.html +1 -1
- invokeai-5.4.0/invokeai/version/invokeai_version.py +1 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/pyproject.toml +2 -2
- invokeai-5.3.1/invokeai/frontend/web/dist/assets/App-CX6bWf7A.js +0 -122
- invokeai-5.3.1/invokeai/frontend/web/dist/assets/index-ClIla1IK.js +0 -510
- invokeai-5.3.1/invokeai/version/invokeai_version.py +0 -1
- {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/entry_points.txt +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/InvokeAI.egg-info/top_level.txt +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE-SD1+SD2.txt +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/LICENSE-SDXL.txt +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/README.md +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/dependencies.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/app_info.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/board_images.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/boards.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/download_queue.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/images.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/model_manager.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/session_queue.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/style_presets.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/utilities.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/routers/workflows.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api/sockets.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/api_app.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/assets/images/caution.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/baseinvocation.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/blend_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/canny.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/collections.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/color_map.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/compel.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/constants.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/content_shuffle.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/crop_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/cv.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/denoise_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/depth_anything.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/dw_openpose.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/facetools.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_controlnet.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_denoise.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_ip_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/grounding_dino.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/hed.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/ideal_size.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/image.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/image_to_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/infill.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/ip_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/latents_to_image.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/lineart.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/lineart_anime.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mask.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/math.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/metadata.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/mlsd.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/noise.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/normal_bae.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/param_easing.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/pidi.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/prompt.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/resize_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/scheduler.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/sdxl.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/strings.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/tiles.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/upscale.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/invocations/util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/run_app.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/boards/boards_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/config_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/config/config_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/download_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/download/download_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_files/image_files_disk.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/images/images_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_services.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/invoker.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/names/names_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/graph.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/invocation_context.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/pagination.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/urls_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/urls/urls_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/shared/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/shared/models.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/controlnet_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/custom_openapi.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/metaenum.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/misc.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/model_exclude_null.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/profiler.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/suppress_output.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/thumbnails.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/app/util/ti_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/controlnet_flux_output.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/instantx_controlnet_flux.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/state_dict_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/xlabs_controlnet_flux.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/controlnet/zero_module.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/custom_block_processor.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/denoise.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/base_controlnet_extension.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/inpaint_extension.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/instantx_controlnet_extension.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/xlabs_controlnet_extension.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/extensions/xlabs_ip_adapter_extension.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/ip_double_stream_block_processor.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/state_dict_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/ip_adapter/xlabs_ip_adapter_flux.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/math.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/model.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/modules/layers.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/sampling_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/flux/util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/canny.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/hed.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/lineart.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pidi/model.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/pngwriter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/safety_checker.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/image_util/util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/layers/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/lora_patcher.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_hash/model_hash.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/clip_vision.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/merge.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/search.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/model_patcher.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/ggml_tensor.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/loaders.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/gguf/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/raw_model.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/textual_inversion.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/tiles.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/tiles/utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/attention.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/build_line.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/catch_sigint.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/db_maintenance.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/devices.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/hotfixes.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/logging.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/mask.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/mps_fixes.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/original_weights_storage.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/silence_warnings.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/test_utils.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/backend/util/util.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/cli/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/cli/arg_parser.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/install/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/install/import_images.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/de.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/en.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/es.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/fi.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/fr.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/it.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ja.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ko.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/nl.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pl.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pt.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/ru.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/sv.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/tr.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/uk.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/zh_CN.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/invocation_api/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/invokeai/version/__init__.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/setup.cfg +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_config.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_docs.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_graph_execution_state.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_invocation_cache_memory.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_item_storage_memory.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_hash.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_probe.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_model_search.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_node_graph.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_nodes.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_object_serializer_disk.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_path.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_profiler.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.0}/tests/test_session_queue.py +0 -0
- {invokeai-5.3.1 → invokeai-5.4.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.4.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
|
|
@@ -217,7 +217,7 @@ Requires-Dist: controlnet-aux==0.0.7
|
|
|
217
217
|
Requires-Dist: diffusers[torch]==0.31.0
|
|
218
218
|
Requires-Dist: gguf==0.10.0
|
|
219
219
|
Requires-Dist: invisible-watermark==0.2.0
|
|
220
|
-
Requires-Dist: mediapipe
|
|
220
|
+
Requires-Dist: mediapipe==0.10.14
|
|
221
221
|
Requires-Dist: numpy<2.0.0
|
|
222
222
|
Requires-Dist: onnx==1.16.1
|
|
223
223
|
Requires-Dist: onnxruntime==1.19.2
|
|
@@ -227,7 +227,7 @@ Requires-Dist: safetensors==0.4.3
|
|
|
227
227
|
Requires-Dist: sentencepiece==0.2.0
|
|
228
228
|
Requires-Dist: spandrel==0.3.4
|
|
229
229
|
Requires-Dist: timm==0.6.13
|
|
230
|
-
Requires-Dist: torch
|
|
230
|
+
Requires-Dist: torch<2.5.0
|
|
231
231
|
Requires-Dist: torchmetrics
|
|
232
232
|
Requires-Dist: torchsde
|
|
233
233
|
Requires-Dist: torchvision
|
|
@@ -49,6 +49,7 @@ invokeai/app/invocations/flux_controlnet.py
|
|
|
49
49
|
invokeai/app/invocations/flux_denoise.py
|
|
50
50
|
invokeai/app/invocations/flux_ip_adapter.py
|
|
51
51
|
invokeai/app/invocations/flux_lora_loader.py
|
|
52
|
+
invokeai/app/invocations/flux_model_loader.py
|
|
52
53
|
invokeai/app/invocations/flux_text_encoder.py
|
|
53
54
|
invokeai/app/invocations/flux_vae_decode.py
|
|
54
55
|
invokeai/app/invocations/flux_vae_encode.py
|
|
@@ -76,6 +77,10 @@ invokeai/app/invocations/primitives.py
|
|
|
76
77
|
invokeai/app/invocations/prompt.py
|
|
77
78
|
invokeai/app/invocations/resize_latents.py
|
|
78
79
|
invokeai/app/invocations/scheduler.py
|
|
80
|
+
invokeai/app/invocations/sd3_denoise.py
|
|
81
|
+
invokeai/app/invocations/sd3_latents_to_image.py
|
|
82
|
+
invokeai/app/invocations/sd3_model_loader.py
|
|
83
|
+
invokeai/app/invocations/sd3_text_encoder.py
|
|
79
84
|
invokeai/app/invocations/sdxl.py
|
|
80
85
|
invokeai/app/invocations/segment_anything.py
|
|
81
86
|
invokeai/app/invocations/spandrel_image_to_image.py
|
|
@@ -244,6 +249,7 @@ invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny
|
|
|
244
249
|
invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json
|
|
245
250
|
invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json
|
|
246
251
|
invokeai/app/services/workflow_records/default_workflows/Prompt from File.json
|
|
252
|
+
invokeai/app/services/workflow_records/default_workflows/SD3.5 Text to Image.json
|
|
247
253
|
invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json
|
|
248
254
|
invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json
|
|
249
255
|
invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json
|
|
@@ -513,12 +519,12 @@ invokeai/frontend/install/__init__.py
|
|
|
513
519
|
invokeai/frontend/install/import_images.py
|
|
514
520
|
invokeai/frontend/web/__init__.py
|
|
515
521
|
invokeai/frontend/web/dist/index.html
|
|
516
|
-
invokeai/frontend/web/dist/assets/App-
|
|
522
|
+
invokeai/frontend/web/dist/assets/App-Cgdz1lBg.js
|
|
517
523
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
518
524
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
|
|
519
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
525
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-QXscVpCV.js
|
|
520
526
|
invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
|
|
521
|
-
invokeai/frontend/web/dist/assets/index-
|
|
527
|
+
invokeai/frontend/web/dist/assets/index-DT5PJ9-6.js
|
|
522
528
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
|
|
523
529
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
|
|
524
530
|
invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
|
|
@@ -5,7 +5,7 @@ controlnet-aux==0.0.7
|
|
|
5
5
|
diffusers[torch]==0.31.0
|
|
6
6
|
gguf==0.10.0
|
|
7
7
|
invisible-watermark==0.2.0
|
|
8
|
-
mediapipe
|
|
8
|
+
mediapipe==0.10.14
|
|
9
9
|
numpy<2.0.0
|
|
10
10
|
onnx==1.16.1
|
|
11
11
|
onnxruntime==1.19.2
|
|
@@ -15,7 +15,7 @@ safetensors==0.4.3
|
|
|
15
15
|
sentencepiece==0.2.0
|
|
16
16
|
spandrel==0.3.4
|
|
17
17
|
timm==0.6.13
|
|
18
|
-
torch
|
|
18
|
+
torch<2.5.0
|
|
19
19
|
torchmetrics
|
|
20
20
|
torchsde
|
|
21
21
|
torchvision
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.4.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
|
|
@@ -217,7 +217,7 @@ Requires-Dist: controlnet-aux==0.0.7
|
|
|
217
217
|
Requires-Dist: diffusers[torch]==0.31.0
|
|
218
218
|
Requires-Dist: gguf==0.10.0
|
|
219
219
|
Requires-Dist: invisible-watermark==0.2.0
|
|
220
|
-
Requires-Dist: mediapipe
|
|
220
|
+
Requires-Dist: mediapipe==0.10.14
|
|
221
221
|
Requires-Dist: numpy<2.0.0
|
|
222
222
|
Requires-Dist: onnx==1.16.1
|
|
223
223
|
Requires-Dist: onnxruntime==1.19.2
|
|
@@ -227,7 +227,7 @@ Requires-Dist: safetensors==0.4.3
|
|
|
227
227
|
Requires-Dist: sentencepiece==0.2.0
|
|
228
228
|
Requires-Dist: spandrel==0.3.4
|
|
229
229
|
Requires-Dist: timm==0.6.13
|
|
230
|
-
Requires-Dist: torch
|
|
230
|
+
Requires-Dist: torch<2.5.0
|
|
231
231
|
Requires-Dist: torchmetrics
|
|
232
232
|
Requires-Dist: torchsde
|
|
233
233
|
Requires-Dist: torchvision
|
|
@@ -41,6 +41,7 @@ class UIType(str, Enum, metaclass=MetaEnum):
|
|
|
41
41
|
# region Model Field Types
|
|
42
42
|
MainModel = "MainModelField"
|
|
43
43
|
FluxMainModel = "FluxMainModelField"
|
|
44
|
+
SD3MainModel = "SD3MainModelField"
|
|
44
45
|
SDXLMainModel = "SDXLMainModelField"
|
|
45
46
|
SDXLRefinerModel = "SDXLRefinerModelField"
|
|
46
47
|
ONNXModel = "ONNXModelField"
|
|
@@ -52,6 +53,8 @@ class UIType(str, Enum, metaclass=MetaEnum):
|
|
|
52
53
|
T2IAdapterModel = "T2IAdapterModelField"
|
|
53
54
|
T5EncoderModel = "T5EncoderModelField"
|
|
54
55
|
CLIPEmbedModel = "CLIPEmbedModelField"
|
|
56
|
+
CLIPLEmbedModel = "CLIPLEmbedModelField"
|
|
57
|
+
CLIPGEmbedModel = "CLIPGEmbedModelField"
|
|
55
58
|
SpandrelImageToImageModel = "SpandrelImageToImageModelField"
|
|
56
59
|
# endregion
|
|
57
60
|
|
|
@@ -131,8 +134,10 @@ class FieldDescriptions:
|
|
|
131
134
|
clip = "CLIP (tokenizer, text encoder, LoRAs) and skipped layer count"
|
|
132
135
|
t5_encoder = "T5 tokenizer and text encoder"
|
|
133
136
|
clip_embed_model = "CLIP Embed loader"
|
|
137
|
+
clip_g_model = "CLIP-G Embed loader"
|
|
134
138
|
unet = "UNet (scheduler, LoRAs)"
|
|
135
139
|
transformer = "Transformer"
|
|
140
|
+
mmditx = "MMDiTX"
|
|
136
141
|
vae = "VAE"
|
|
137
142
|
cond = "Conditioning tensor"
|
|
138
143
|
controlnet_model = "ControlNet model to load"
|
|
@@ -140,6 +145,7 @@ class FieldDescriptions:
|
|
|
140
145
|
lora_model = "LoRA model to load"
|
|
141
146
|
main_model = "Main model (UNet, VAE, CLIP) to load"
|
|
142
147
|
flux_model = "Flux model (Transformer) to load"
|
|
148
|
+
sd3_model = "SD3 model (MMDiTX) to load"
|
|
143
149
|
sdxl_main_model = "SDXL Main model (UNet, VAE, CLIP1, CLIP2) to load"
|
|
144
150
|
sdxl_refiner_model = "SDXL Refiner Main Modde (UNet, VAE, CLIP2) to load"
|
|
145
151
|
onnx_main_model = "ONNX Main model (UNet, VAE, CLIP) to load"
|
|
@@ -246,6 +252,12 @@ class FluxConditioningField(BaseModel):
|
|
|
246
252
|
conditioning_name: str = Field(description="The name of conditioning tensor")
|
|
247
253
|
|
|
248
254
|
|
|
255
|
+
class SD3ConditioningField(BaseModel):
|
|
256
|
+
"""A conditioning tensor primitive value"""
|
|
257
|
+
|
|
258
|
+
conditioning_name: str = Field(description="The name of conditioning tensor")
|
|
259
|
+
|
|
260
|
+
|
|
249
261
|
class ConditioningField(BaseModel):
|
|
250
262
|
"""A conditioning tensor primitive value"""
|
|
251
263
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from typing import Literal
|
|
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, Input, InputField, OutputField, UIType
|
|
11
|
+
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
|
|
12
|
+
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
13
|
+
from invokeai.backend.flux.util import max_seq_lengths
|
|
14
|
+
from invokeai.backend.model_manager.config import (
|
|
15
|
+
CheckpointConfigBase,
|
|
16
|
+
SubModelType,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@invocation_output("flux_model_loader_output")
|
|
21
|
+
class FluxModelLoaderOutput(BaseInvocationOutput):
|
|
22
|
+
"""Flux base model loader output"""
|
|
23
|
+
|
|
24
|
+
transformer: TransformerField = OutputField(description=FieldDescriptions.transformer, title="Transformer")
|
|
25
|
+
clip: CLIPField = OutputField(description=FieldDescriptions.clip, title="CLIP")
|
|
26
|
+
t5_encoder: T5EncoderField = OutputField(description=FieldDescriptions.t5_encoder, title="T5 Encoder")
|
|
27
|
+
vae: VAEField = OutputField(description=FieldDescriptions.vae, title="VAE")
|
|
28
|
+
max_seq_len: Literal[256, 512] = OutputField(
|
|
29
|
+
description="The max sequence length to used for the T5 encoder. (256 for schnell transformer, 512 for dev transformer)",
|
|
30
|
+
title="Max Seq Length",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@invocation(
|
|
35
|
+
"flux_model_loader",
|
|
36
|
+
title="Flux Main Model",
|
|
37
|
+
tags=["model", "flux"],
|
|
38
|
+
category="model",
|
|
39
|
+
version="1.0.4",
|
|
40
|
+
classification=Classification.Prototype,
|
|
41
|
+
)
|
|
42
|
+
class FluxModelLoaderInvocation(BaseInvocation):
|
|
43
|
+
"""Loads a flux base model, outputting its submodels."""
|
|
44
|
+
|
|
45
|
+
model: ModelIdentifierField = InputField(
|
|
46
|
+
description=FieldDescriptions.flux_model,
|
|
47
|
+
ui_type=UIType.FluxMainModel,
|
|
48
|
+
input=Input.Direct,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
t5_encoder_model: ModelIdentifierField = InputField(
|
|
52
|
+
description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
clip_embed_model: ModelIdentifierField = InputField(
|
|
56
|
+
description=FieldDescriptions.clip_embed_model,
|
|
57
|
+
ui_type=UIType.CLIPEmbedModel,
|
|
58
|
+
input=Input.Direct,
|
|
59
|
+
title="CLIP Embed",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
vae_model: ModelIdentifierField = InputField(
|
|
63
|
+
description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
|
|
67
|
+
for key in [self.model.key, self.t5_encoder_model.key, self.clip_embed_model.key, self.vae_model.key]:
|
|
68
|
+
if not context.models.exists(key):
|
|
69
|
+
raise ValueError(f"Unknown model: {key}")
|
|
70
|
+
|
|
71
|
+
transformer = self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
|
|
72
|
+
vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
|
|
73
|
+
|
|
74
|
+
tokenizer = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
|
|
75
|
+
clip_encoder = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
|
|
76
|
+
|
|
77
|
+
tokenizer2 = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer2})
|
|
78
|
+
t5_encoder = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder2})
|
|
79
|
+
|
|
80
|
+
transformer_config = context.models.get_config(transformer)
|
|
81
|
+
assert isinstance(transformer_config, CheckpointConfigBase)
|
|
82
|
+
|
|
83
|
+
return FluxModelLoaderOutput(
|
|
84
|
+
transformer=TransformerField(transformer=transformer, loras=[]),
|
|
85
|
+
clip=CLIPField(tokenizer=tokenizer, text_encoder=clip_encoder, loras=[], skipped_layers=0),
|
|
86
|
+
t5_encoder=T5EncoderField(tokenizer=tokenizer2, text_encoder=t5_encoder),
|
|
87
|
+
vae=VAEField(vae=vae),
|
|
88
|
+
max_seq_len=max_seq_lengths[transformer_config.config_path],
|
|
89
|
+
)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import copy
|
|
2
|
-
from typing import List,
|
|
2
|
+
from typing import List, Optional
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
5
5
|
|
|
@@ -13,11 +13,9 @@ from invokeai.app.invocations.baseinvocation import (
|
|
|
13
13
|
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
|
|
14
14
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
15
15
|
from invokeai.app.shared.models import FreeUConfig
|
|
16
|
-
from invokeai.backend.flux.util import max_seq_lengths
|
|
17
16
|
from invokeai.backend.model_manager.config import (
|
|
18
17
|
AnyModelConfig,
|
|
19
18
|
BaseModelType,
|
|
20
|
-
CheckpointConfigBase,
|
|
21
19
|
ModelType,
|
|
22
20
|
SubModelType,
|
|
23
21
|
)
|
|
@@ -139,78 +137,6 @@ class ModelIdentifierInvocation(BaseInvocation):
|
|
|
139
137
|
return ModelIdentifierOutput(model=self.model)
|
|
140
138
|
|
|
141
139
|
|
|
142
|
-
@invocation_output("flux_model_loader_output")
|
|
143
|
-
class FluxModelLoaderOutput(BaseInvocationOutput):
|
|
144
|
-
"""Flux base model loader output"""
|
|
145
|
-
|
|
146
|
-
transformer: TransformerField = OutputField(description=FieldDescriptions.transformer, title="Transformer")
|
|
147
|
-
clip: CLIPField = OutputField(description=FieldDescriptions.clip, title="CLIP")
|
|
148
|
-
t5_encoder: T5EncoderField = OutputField(description=FieldDescriptions.t5_encoder, title="T5 Encoder")
|
|
149
|
-
vae: VAEField = OutputField(description=FieldDescriptions.vae, title="VAE")
|
|
150
|
-
max_seq_len: Literal[256, 512] = OutputField(
|
|
151
|
-
description="The max sequence length to used for the T5 encoder. (256 for schnell transformer, 512 for dev transformer)",
|
|
152
|
-
title="Max Seq Length",
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
@invocation(
|
|
157
|
-
"flux_model_loader",
|
|
158
|
-
title="Flux Main Model",
|
|
159
|
-
tags=["model", "flux"],
|
|
160
|
-
category="model",
|
|
161
|
-
version="1.0.4",
|
|
162
|
-
classification=Classification.Prototype,
|
|
163
|
-
)
|
|
164
|
-
class FluxModelLoaderInvocation(BaseInvocation):
|
|
165
|
-
"""Loads a flux base model, outputting its submodels."""
|
|
166
|
-
|
|
167
|
-
model: ModelIdentifierField = InputField(
|
|
168
|
-
description=FieldDescriptions.flux_model,
|
|
169
|
-
ui_type=UIType.FluxMainModel,
|
|
170
|
-
input=Input.Direct,
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
t5_encoder_model: ModelIdentifierField = InputField(
|
|
174
|
-
description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
clip_embed_model: ModelIdentifierField = InputField(
|
|
178
|
-
description=FieldDescriptions.clip_embed_model,
|
|
179
|
-
ui_type=UIType.CLIPEmbedModel,
|
|
180
|
-
input=Input.Direct,
|
|
181
|
-
title="CLIP Embed",
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
vae_model: ModelIdentifierField = InputField(
|
|
185
|
-
description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
|
|
189
|
-
for key in [self.model.key, self.t5_encoder_model.key, self.clip_embed_model.key, self.vae_model.key]:
|
|
190
|
-
if not context.models.exists(key):
|
|
191
|
-
raise ValueError(f"Unknown model: {key}")
|
|
192
|
-
|
|
193
|
-
transformer = self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
|
|
194
|
-
vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
|
|
195
|
-
|
|
196
|
-
tokenizer = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
|
|
197
|
-
clip_encoder = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
|
|
198
|
-
|
|
199
|
-
tokenizer2 = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer2})
|
|
200
|
-
t5_encoder = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder2})
|
|
201
|
-
|
|
202
|
-
transformer_config = context.models.get_config(transformer)
|
|
203
|
-
assert isinstance(transformer_config, CheckpointConfigBase)
|
|
204
|
-
|
|
205
|
-
return FluxModelLoaderOutput(
|
|
206
|
-
transformer=TransformerField(transformer=transformer, loras=[]),
|
|
207
|
-
clip=CLIPField(tokenizer=tokenizer, text_encoder=clip_encoder, loras=[], skipped_layers=0),
|
|
208
|
-
t5_encoder=T5EncoderField(tokenizer=tokenizer2, text_encoder=t5_encoder),
|
|
209
|
-
vae=VAEField(vae=vae),
|
|
210
|
-
max_seq_len=max_seq_lengths[transformer_config.config_path],
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
|
|
214
140
|
@invocation(
|
|
215
141
|
"main_model_loader",
|
|
216
142
|
title="Main Model",
|
|
@@ -18,6 +18,7 @@ from invokeai.app.invocations.fields import (
|
|
|
18
18
|
InputField,
|
|
19
19
|
LatentsField,
|
|
20
20
|
OutputField,
|
|
21
|
+
SD3ConditioningField,
|
|
21
22
|
TensorField,
|
|
22
23
|
UIComponent,
|
|
23
24
|
)
|
|
@@ -426,6 +427,17 @@ class FluxConditioningOutput(BaseInvocationOutput):
|
|
|
426
427
|
return cls(conditioning=FluxConditioningField(conditioning_name=conditioning_name))
|
|
427
428
|
|
|
428
429
|
|
|
430
|
+
@invocation_output("sd3_conditioning_output")
|
|
431
|
+
class SD3ConditioningOutput(BaseInvocationOutput):
|
|
432
|
+
"""Base class for nodes that output a single SD3 conditioning tensor"""
|
|
433
|
+
|
|
434
|
+
conditioning: SD3ConditioningField = OutputField(description=FieldDescriptions.cond)
|
|
435
|
+
|
|
436
|
+
@classmethod
|
|
437
|
+
def build(cls, conditioning_name: str) -> "SD3ConditioningOutput":
|
|
438
|
+
return cls(conditioning=SD3ConditioningField(conditioning_name=conditioning_name))
|
|
439
|
+
|
|
440
|
+
|
|
429
441
|
@invocation_output("conditioning_output")
|
|
430
442
|
class ConditioningOutput(BaseInvocationOutput):
|
|
431
443
|
"""Base class for nodes that output a single conditioning tensor"""
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
from typing import Callable, Tuple
|
|
2
|
+
|
|
3
|
+
import torch
|
|
4
|
+
from diffusers.models.transformers.transformer_sd3 import SD3Transformer2DModel
|
|
5
|
+
from diffusers.schedulers.scheduling_flow_match_euler_discrete import FlowMatchEulerDiscreteScheduler
|
|
6
|
+
from tqdm import tqdm
|
|
7
|
+
|
|
8
|
+
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
|
|
9
|
+
from invokeai.app.invocations.constants import LATENT_SCALE_FACTOR
|
|
10
|
+
from invokeai.app.invocations.fields import (
|
|
11
|
+
FieldDescriptions,
|
|
12
|
+
Input,
|
|
13
|
+
InputField,
|
|
14
|
+
SD3ConditioningField,
|
|
15
|
+
WithBoard,
|
|
16
|
+
WithMetadata,
|
|
17
|
+
)
|
|
18
|
+
from invokeai.app.invocations.model import TransformerField
|
|
19
|
+
from invokeai.app.invocations.primitives import LatentsOutput
|
|
20
|
+
from invokeai.app.invocations.sd3_text_encoder import SD3_T5_MAX_SEQ_LEN
|
|
21
|
+
from invokeai.app.services.shared.invocation_context import InvocationContext
|
|
22
|
+
from invokeai.backend.model_manager.config import BaseModelType
|
|
23
|
+
from invokeai.backend.stable_diffusion.diffusers_pipeline import PipelineIntermediateState
|
|
24
|
+
from invokeai.backend.stable_diffusion.diffusion.conditioning_data import SD3ConditioningInfo
|
|
25
|
+
from invokeai.backend.util.devices import TorchDevice
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@invocation(
|
|
29
|
+
"sd3_denoise",
|
|
30
|
+
title="SD3 Denoise",
|
|
31
|
+
tags=["image", "sd3"],
|
|
32
|
+
category="image",
|
|
33
|
+
version="1.0.0",
|
|
34
|
+
classification=Classification.Prototype,
|
|
35
|
+
)
|
|
36
|
+
class SD3DenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
37
|
+
"""Run denoising process with a SD3 model."""
|
|
38
|
+
|
|
39
|
+
transformer: TransformerField = InputField(
|
|
40
|
+
description=FieldDescriptions.sd3_model,
|
|
41
|
+
input=Input.Connection,
|
|
42
|
+
title="Transformer",
|
|
43
|
+
)
|
|
44
|
+
positive_conditioning: SD3ConditioningField = InputField(
|
|
45
|
+
description=FieldDescriptions.positive_cond, input=Input.Connection
|
|
46
|
+
)
|
|
47
|
+
negative_conditioning: SD3ConditioningField = InputField(
|
|
48
|
+
description=FieldDescriptions.negative_cond, input=Input.Connection
|
|
49
|
+
)
|
|
50
|
+
cfg_scale: float | list[float] = InputField(default=3.5, description=FieldDescriptions.cfg_scale, title="CFG Scale")
|
|
51
|
+
width: int = InputField(default=1024, multiple_of=16, description="Width of the generated image.")
|
|
52
|
+
height: int = InputField(default=1024, multiple_of=16, description="Height of the generated image.")
|
|
53
|
+
steps: int = InputField(default=10, gt=0, description=FieldDescriptions.steps)
|
|
54
|
+
seed: int = InputField(default=0, description="Randomness seed for reproducibility.")
|
|
55
|
+
|
|
56
|
+
@torch.no_grad()
|
|
57
|
+
def invoke(self, context: InvocationContext) -> LatentsOutput:
|
|
58
|
+
latents = self._run_diffusion(context)
|
|
59
|
+
latents = latents.detach().to("cpu")
|
|
60
|
+
|
|
61
|
+
name = context.tensors.save(tensor=latents)
|
|
62
|
+
return LatentsOutput.build(latents_name=name, latents=latents, seed=None)
|
|
63
|
+
|
|
64
|
+
def _load_text_conditioning(
|
|
65
|
+
self,
|
|
66
|
+
context: InvocationContext,
|
|
67
|
+
conditioning_name: str,
|
|
68
|
+
joint_attention_dim: int,
|
|
69
|
+
dtype: torch.dtype,
|
|
70
|
+
device: torch.device,
|
|
71
|
+
) -> Tuple[torch.Tensor, torch.Tensor]:
|
|
72
|
+
# Load the conditioning data.
|
|
73
|
+
cond_data = context.conditioning.load(conditioning_name)
|
|
74
|
+
assert len(cond_data.conditionings) == 1
|
|
75
|
+
sd3_conditioning = cond_data.conditionings[0]
|
|
76
|
+
assert isinstance(sd3_conditioning, SD3ConditioningInfo)
|
|
77
|
+
sd3_conditioning = sd3_conditioning.to(dtype=dtype, device=device)
|
|
78
|
+
|
|
79
|
+
t5_embeds = sd3_conditioning.t5_embeds
|
|
80
|
+
if t5_embeds is None:
|
|
81
|
+
t5_embeds = torch.zeros(
|
|
82
|
+
(1, SD3_T5_MAX_SEQ_LEN, joint_attention_dim),
|
|
83
|
+
device=device,
|
|
84
|
+
dtype=dtype,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
clip_prompt_embeds = torch.cat([sd3_conditioning.clip_l_embeds, sd3_conditioning.clip_g_embeds], dim=-1)
|
|
88
|
+
clip_prompt_embeds = torch.nn.functional.pad(
|
|
89
|
+
clip_prompt_embeds, (0, t5_embeds.shape[-1] - clip_prompt_embeds.shape[-1])
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
prompt_embeds = torch.cat([clip_prompt_embeds, t5_embeds], dim=-2)
|
|
93
|
+
pooled_prompt_embeds = torch.cat(
|
|
94
|
+
[sd3_conditioning.clip_l_pooled_embeds, sd3_conditioning.clip_g_pooled_embeds], dim=-1
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return prompt_embeds, pooled_prompt_embeds
|
|
98
|
+
|
|
99
|
+
def _get_noise(
|
|
100
|
+
self,
|
|
101
|
+
num_samples: int,
|
|
102
|
+
num_channels_latents: int,
|
|
103
|
+
height: int,
|
|
104
|
+
width: int,
|
|
105
|
+
dtype: torch.dtype,
|
|
106
|
+
device: torch.device,
|
|
107
|
+
seed: int,
|
|
108
|
+
) -> torch.Tensor:
|
|
109
|
+
# We always generate noise on the same device and dtype then cast to ensure consistency across devices/dtypes.
|
|
110
|
+
rand_device = "cpu"
|
|
111
|
+
rand_dtype = torch.float16
|
|
112
|
+
|
|
113
|
+
return torch.randn(
|
|
114
|
+
num_samples,
|
|
115
|
+
num_channels_latents,
|
|
116
|
+
int(height) // LATENT_SCALE_FACTOR,
|
|
117
|
+
int(width) // LATENT_SCALE_FACTOR,
|
|
118
|
+
device=rand_device,
|
|
119
|
+
dtype=rand_dtype,
|
|
120
|
+
generator=torch.Generator(device=rand_device).manual_seed(seed),
|
|
121
|
+
).to(device=device, dtype=dtype)
|
|
122
|
+
|
|
123
|
+
def _prepare_cfg_scale(self, num_timesteps: int) -> list[float]:
|
|
124
|
+
"""Prepare the CFG scale list.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
num_timesteps (int): The number of timesteps in the scheduler. Could be different from num_steps depending
|
|
128
|
+
on the scheduler used (e.g. higher order schedulers).
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
list[float]: _description_
|
|
132
|
+
"""
|
|
133
|
+
if isinstance(self.cfg_scale, float):
|
|
134
|
+
cfg_scale = [self.cfg_scale] * num_timesteps
|
|
135
|
+
elif isinstance(self.cfg_scale, list):
|
|
136
|
+
assert len(self.cfg_scale) == num_timesteps
|
|
137
|
+
cfg_scale = self.cfg_scale
|
|
138
|
+
else:
|
|
139
|
+
raise ValueError(f"Invalid CFG scale type: {type(self.cfg_scale)}")
|
|
140
|
+
|
|
141
|
+
return cfg_scale
|
|
142
|
+
|
|
143
|
+
def _run_diffusion(
|
|
144
|
+
self,
|
|
145
|
+
context: InvocationContext,
|
|
146
|
+
):
|
|
147
|
+
inference_dtype = TorchDevice.choose_torch_dtype()
|
|
148
|
+
device = TorchDevice.choose_torch_device()
|
|
149
|
+
|
|
150
|
+
transformer_info = context.models.load(self.transformer.transformer)
|
|
151
|
+
|
|
152
|
+
# Load/process the conditioning data.
|
|
153
|
+
# TODO(ryand): Make CFG optional.
|
|
154
|
+
do_classifier_free_guidance = True
|
|
155
|
+
pos_prompt_embeds, pos_pooled_prompt_embeds = self._load_text_conditioning(
|
|
156
|
+
context=context,
|
|
157
|
+
conditioning_name=self.positive_conditioning.conditioning_name,
|
|
158
|
+
joint_attention_dim=transformer_info.model.config.joint_attention_dim,
|
|
159
|
+
dtype=inference_dtype,
|
|
160
|
+
device=device,
|
|
161
|
+
)
|
|
162
|
+
neg_prompt_embeds, neg_pooled_prompt_embeds = self._load_text_conditioning(
|
|
163
|
+
context=context,
|
|
164
|
+
conditioning_name=self.negative_conditioning.conditioning_name,
|
|
165
|
+
joint_attention_dim=transformer_info.model.config.joint_attention_dim,
|
|
166
|
+
dtype=inference_dtype,
|
|
167
|
+
device=device,
|
|
168
|
+
)
|
|
169
|
+
# TODO(ryand): Support both sequential and batched CFG inference.
|
|
170
|
+
prompt_embeds = torch.cat([neg_prompt_embeds, pos_prompt_embeds], dim=0)
|
|
171
|
+
pooled_prompt_embeds = torch.cat([neg_pooled_prompt_embeds, pos_pooled_prompt_embeds], dim=0)
|
|
172
|
+
|
|
173
|
+
# Prepare the scheduler.
|
|
174
|
+
scheduler = FlowMatchEulerDiscreteScheduler()
|
|
175
|
+
scheduler.set_timesteps(num_inference_steps=self.steps, device=device)
|
|
176
|
+
timesteps = scheduler.timesteps
|
|
177
|
+
assert isinstance(timesteps, torch.Tensor)
|
|
178
|
+
|
|
179
|
+
# Prepare the CFG scale list.
|
|
180
|
+
cfg_scale = self._prepare_cfg_scale(len(timesteps))
|
|
181
|
+
|
|
182
|
+
# Generate initial latent noise.
|
|
183
|
+
num_channels_latents = transformer_info.model.config.in_channels
|
|
184
|
+
assert isinstance(num_channels_latents, int)
|
|
185
|
+
noise = self._get_noise(
|
|
186
|
+
num_samples=1,
|
|
187
|
+
num_channels_latents=num_channels_latents,
|
|
188
|
+
height=self.height,
|
|
189
|
+
width=self.width,
|
|
190
|
+
dtype=inference_dtype,
|
|
191
|
+
device=device,
|
|
192
|
+
seed=self.seed,
|
|
193
|
+
)
|
|
194
|
+
latents: torch.Tensor = noise
|
|
195
|
+
|
|
196
|
+
total_steps = len(timesteps)
|
|
197
|
+
step_callback = self._build_step_callback(context)
|
|
198
|
+
|
|
199
|
+
step_callback(
|
|
200
|
+
PipelineIntermediateState(
|
|
201
|
+
step=0,
|
|
202
|
+
order=1,
|
|
203
|
+
total_steps=total_steps,
|
|
204
|
+
timestep=int(timesteps[0]),
|
|
205
|
+
latents=latents,
|
|
206
|
+
),
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
with transformer_info.model_on_device() as (cached_weights, transformer):
|
|
210
|
+
assert isinstance(transformer, SD3Transformer2DModel)
|
|
211
|
+
|
|
212
|
+
# 6. Denoising loop
|
|
213
|
+
for step_idx, t in tqdm(list(enumerate(timesteps))):
|
|
214
|
+
# Expand the latents if we are doing CFG.
|
|
215
|
+
latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents
|
|
216
|
+
# Expand the timestep to match the latent model input.
|
|
217
|
+
timestep = t.expand(latent_model_input.shape[0])
|
|
218
|
+
|
|
219
|
+
noise_pred = transformer(
|
|
220
|
+
hidden_states=latent_model_input,
|
|
221
|
+
timestep=timestep,
|
|
222
|
+
encoder_hidden_states=prompt_embeds,
|
|
223
|
+
pooled_projections=pooled_prompt_embeds,
|
|
224
|
+
joint_attention_kwargs=None,
|
|
225
|
+
return_dict=False,
|
|
226
|
+
)[0]
|
|
227
|
+
|
|
228
|
+
# Apply CFG.
|
|
229
|
+
if do_classifier_free_guidance:
|
|
230
|
+
noise_pred_uncond, noise_pred_cond = noise_pred.chunk(2)
|
|
231
|
+
noise_pred = noise_pred_uncond + cfg_scale[step_idx] * (noise_pred_cond - noise_pred_uncond)
|
|
232
|
+
|
|
233
|
+
# Compute the previous noisy sample x_t -> x_t-1.
|
|
234
|
+
latents_dtype = latents.dtype
|
|
235
|
+
latents = scheduler.step(model_output=noise_pred, timestep=t, sample=latents, return_dict=False)[0]
|
|
236
|
+
|
|
237
|
+
# TODO(ryand): This MPS dtype handling was copied from diffusers, I haven't tested to see if it's
|
|
238
|
+
# needed.
|
|
239
|
+
if latents.dtype != latents_dtype:
|
|
240
|
+
if torch.backends.mps.is_available():
|
|
241
|
+
# some platforms (eg. apple mps) misbehave due to a pytorch bug: https://github.com/pytorch/pytorch/pull/99272
|
|
242
|
+
latents = latents.to(latents_dtype)
|
|
243
|
+
|
|
244
|
+
step_callback(
|
|
245
|
+
PipelineIntermediateState(
|
|
246
|
+
step=step_idx + 1,
|
|
247
|
+
order=1,
|
|
248
|
+
total_steps=total_steps,
|
|
249
|
+
timestep=int(t),
|
|
250
|
+
latents=latents,
|
|
251
|
+
),
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
return latents
|
|
255
|
+
|
|
256
|
+
def _build_step_callback(self, context: InvocationContext) -> Callable[[PipelineIntermediateState], None]:
|
|
257
|
+
def step_callback(state: PipelineIntermediateState) -> None:
|
|
258
|
+
context.util.sd_step_callback(state, BaseModelType.StableDiffusion3)
|
|
259
|
+
|
|
260
|
+
return step_callback
|