InvokeAI 5.0.2__tar.gz → 5.1.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.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/PKG-INFO +2 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/SOURCES.txt +6 -3
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/requires.txt +4 -3
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/PKG-INFO +2 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/README.md +1 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/flux_denoise.py +5 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/config.py +18 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/flux.py +49 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/probe.py +12 -7
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/search.py +1 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/util/model_util.py +7 -1
- InvokeAI-5.1.0/invokeai/backend/quantization/gguf/ggml_tensor.py +152 -0
- InvokeAI-5.1.0/invokeai/backend/quantization/gguf/loaders.py +22 -0
- InvokeAI-5.1.0/invokeai/backend/quantization/gguf/utils.py +308 -0
- InvokeAI-5.1.0/invokeai/frontend/web/dist/assets/App-DIWPmKhe.js +124 -0
- InvokeAI-5.0.2/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CGYUFFev.js → InvokeAI-5.1.0/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CRJdOC9C.js +1 -1
- InvokeAI-5.1.0/invokeai/frontend/web/dist/assets/index-oRALkRAJ.js +509 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/index.html +1 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/de.json +102 -8
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/en.json +16 -6
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/es.json +0 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/fi.json +1 -2
- InvokeAI-5.1.0/invokeai/frontend/web/dist/locales/fr.json +1134 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/it.json +416 -16
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/ja.json +0 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/ko.json +1 -3
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/nl.json +0 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/pl.json +0 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/pt.json +1 -3
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/ru.json +553 -33
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/sv.json +1 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/tr.json +0 -2
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/uk.json +0 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/zh_CN.json +2 -3
- InvokeAI-5.1.0/invokeai/version/invokeai_version.py +1 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/pyproject.toml +4 -3
- InvokeAI-5.0.2/invokeai/frontend/web/dist/assets/App-CsIbq0US.js +0 -124
- InvokeAI-5.0.2/invokeai/frontend/web/dist/assets/index-DXIqgMot.js +0 -509
- InvokeAI-5.0.2/invokeai/frontend/web/dist/locales/fr.json +0 -418
- InvokeAI-5.0.2/invokeai/version/invokeai_version.py +0 -1
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/dependency_links.txt +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/entry_points.txt +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/InvokeAI.egg-info/top_level.txt +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/LICENSE +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/LICENSE-SD1+SD2.txt +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/LICENSE-SDXL.txt +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/dependencies.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/no_cache_staticfiles.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/app_info.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/board_images.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/boards.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/download_queue.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/images.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/model_manager.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/session_queue.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/style_presets.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/utilities.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/routers/workflows.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api/sockets.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/api_app.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/assets/images/caution.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/baseinvocation.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/blend_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/canny.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/collections.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/color_map.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/compel.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/constants.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/content_shuffle.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/controlnet_image_processors.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/create_denoise_mask.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/create_gradient_mask.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/crop_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/custom_nodes/README.md +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/custom_nodes/init.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/cv.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/denoise_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/depth_anything.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/dw_openpose.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/facetools.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/fields.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/flux_lora_loader.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/flux_text_encoder.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/flux_vae_decode.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/flux_vae_encode.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/grounding_dino.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/hed.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/ideal_size.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/image.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/image_to_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/infill.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/ip_adapter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/latents_to_image.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/lineart.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/lineart_anime.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/mask.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/math.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/mediapipe_face.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/metadata.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/mlsd.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/noise.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/normal_bae.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/param_easing.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/pidi.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/primitives.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/prompt.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/resize_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/scheduler.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/sdxl.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/segment_anything.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/spandrel_image_to_image.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/strings.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/t2i_adapter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/tiles.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/upscale.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/invocations/util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/run_app.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_image_records/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_image_records/board_image_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_image_records/board_image_records_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_images/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_images/board_images_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_images/board_images_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_images/board_images_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_records/board_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_records/board_records_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/board_records/board_records_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/boards/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/boards/boards_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/boards/boards_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/boards/boards_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/bulk_download/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/bulk_download/bulk_download_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/bulk_download/bulk_download_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/bulk_download/bulk_download_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/config/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/config/config_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/config/config_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/download/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/download/download_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/download/download_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/events/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/events/events_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/events/events_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/events/events_fastapievents.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_files/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_files/image_files_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_files/image_files_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_files/image_files_disk.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_records/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_records/image_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_records/image_records_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/image_records/image_records_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/images/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/images/images_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/images/images_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/images/images_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_cache/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_cache/invocation_cache_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_cache/invocation_cache_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_cache/invocation_cache_memory.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_services.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_stats/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_stats/invocation_stats_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_stats/invocation_stats_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invocation_stats/invocation_stats_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/invoker.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/item_storage/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/item_storage/item_storage_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/item_storage/item_storage_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/item_storage/item_storage_memory.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_images/model_images_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_images/model_images_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_images/model_images_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_install/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_install/model_install_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_install/model_install_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_install/model_install_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_load/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_load/model_load_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_load/model_load_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_manager/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_manager/model_manager_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_manager/model_manager_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_manager/model_manager_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_records/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_records/model_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/model_records/model_records_sql.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/names/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/names/names_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/names/names_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/names/names_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/object_serializer/object_serializer_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/object_serializer/object_serializer_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/object_serializer/object_serializer_disk.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/object_serializer/object_serializer_forward_cache.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_processor/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_processor/session_processor_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_processor/session_processor_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_processor/session_processor_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_queue/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_queue/session_queue_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_queue/session_queue_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/session_queue/session_queue_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/graph.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/invocation_context.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/pagination.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite/sqlite_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite/sqlite_database.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite/sqlite_util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_10.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_11.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_12.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_13.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_14.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_15.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_4.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_5.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_6.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_7.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_8.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/migrations/migration_9.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Anime.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Architectural Visualization.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Character).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Fantasy).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Painterly).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Concept Art (Sci-Fi).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Environment Art.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Illustration.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Interior Design (Visualization).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Line Art.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Black and White).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (General).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Landscape).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Portrait).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Photography (Studio Lighting).png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Product Rendering.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Sketch.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/Vehicles.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/default_style_preset_images/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/style_preset_images_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/style_preset_images_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_images/style_preset_images_disk.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_records/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_records/default_style_presets.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_records/style_preset_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_records/style_preset_records_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/style_preset_records/style_preset_records_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/urls/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/urls/urls_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/urls/urls_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/FLUX Image to Image.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/workflow_records_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/workflow_records_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/services/workflow_records/workflow_records_sqlite.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/shared/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/shared/models.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/controlnet_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/custom_openapi.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/metaenum.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/misc.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/model_exclude_null.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/profiler.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/step_callback.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/suppress_output.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/thumbnails.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/app/util/ti_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/assets/fonts/inter/Inter-Regular.ttf +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/denoise.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/inpaint_extension.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/math.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/modules/autoencoder.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/modules/conditioner.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/modules/layers.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/sampling_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/flux/util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/basicsr/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/basicsr/arch_util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/basicsr/rrdbnet_arch.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/canny.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/content_shuffle.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/depth_anything/depth_anything_pipeline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/dw_openpose/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/dw_openpose/onnxdet.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/dw_openpose/onnxpose.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/dw_openpose/utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/dw_openpose/wholebody.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/grounding_dino/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/grounding_dino/detection_result.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/grounding_dino/grounding_dino_pipeline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/hed.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/infill_methods/cv2_inpaint.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/infill_methods/lama.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/infill_methods/mosaic.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/infill_methods/patchmatch.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/infill_methods/tile.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/invisible_watermark.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/lineart.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/lineart_anime.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mediapipe_face/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mediapipe_face/mediapipe_face_common.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mlsd/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mlsd/models/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_large.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mlsd/models/mbv2_mlsd_tiny.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/mlsd/utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/NNET.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/baseline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/decoder.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_benchmark.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/caffe2_validate.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_jit.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/activations/activations_me.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/config.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/conv2d_layers.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/efficientnet_builder.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/gen_efficientnet.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/helpers.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/mobilenetv3.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/model_factory.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/geffnet/version.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/hubconf.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_export.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_to_caffe.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_validate.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/setup.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/validate.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/encoder.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/normal_bae/nets/submodules/submodules.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/pidi/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/pidi/model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/pngwriter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/realesrgan/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/realesrgan/realesrgan.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/safety_checker.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/segment_anything/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/segment_anything/mask_refinement.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/segment_anything/segment_anything_pipeline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/image_util/util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/ip_adapter/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/ip_adapter/ip_adapter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/ip_adapter/ip_attention_weights.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/ip_adapter/resampler.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/flux_diffusers_lora_conversion_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/flux_kohya_lora_conversion_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/flux_lora_constants.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/sd_lora_conversion_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/conversions/sdxl_lora_conversion_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/any_lora_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/concatenated_lora_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/full_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/ia3_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/loha_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/lokr_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/lora_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/lora_layer_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/norm_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/layers/utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/lora_model_raw.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/lora_patcher.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/concatenated_lora/concatenated_lora_linear_sidecar_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/lora/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/lora/lora_linear_sidecar_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_layer.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/lora/sidecar_layers/lora_sidecar_module.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_hash/hash_validator.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_hash/model_hash.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/load_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/load_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/memory_snapshot.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_cache/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_cache/model_locker.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loader_registry.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/controlnet.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/generic_diffusers.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/ip_adapter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/lora.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/onnx.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/spandrel_image_to_image.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/stable_diffusion.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/textual_inversion.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_loaders/vae.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/model_util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/load/optimizations.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/merge.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/metadata/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/metadata/fetch/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/metadata/fetch/fetch_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/metadata/fetch/huggingface.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/metadata/metadata_base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/starter_models.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/util/libc_util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_manager/util/select_hf_files.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/model_patcher.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/onnx/onnx_runtime.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/bnb_llm_int8.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/bnb_nf4.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/raw_model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/spandrel_image_to_image_model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/denoise_context.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusers_pipeline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/custom_atttention.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion/unet_attention_patcher.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/diffusion_backend.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extension_callback_type.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/base.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/controlnet.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/freeu.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/inpaint.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/inpaint_model.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/lora.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/preview.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/rescale_cfg.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/seamless.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions/t2i_adapter.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/extensions_manager.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/schedulers/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/schedulers/schedulers.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/stable_diffusion/vae_tiling.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/textual_inversion.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/tiles/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/tiles/tiles.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/tiles/utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/attention.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/build_line.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/calc_tensor_size.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/catch_sigint.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/db_maintenance.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/devices.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/hotfixes.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/logging.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/mask.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/mps_fixes.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/original_weights_storage.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/silence_warnings.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/test_utils.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/backend/util/util.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/controlnet/cldm_v15.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/controlnet/cldm_v21.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/sd_xl_base.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/sd_xl_inpaint.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/sd_xl_refiner.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-finetune.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-finetune_style.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-inference-v.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-inference.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-inpainting-inference.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v1-m1-finetune.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v2-inference-v.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v2-inference.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference-v.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v2-inpainting-inference.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/configs/stable-diffusion/v2-midas-inference.yaml +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/cli/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/cli/arg_parser.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/install/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/install/import_images.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/App-DEu4J2pT.css +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/commercial-license-bg.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-alert-favicon.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-circle.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-avatar-square.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.png +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-favicon.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-key-char-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-key-wht-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-char-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-wht-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-symbol-ylw-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-char-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-lrg.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-tag-sml.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-charcoal.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/invoke-wordmark-white.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/images/mask.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-CaVNZxsx.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-latin-wght-normal-C2S99t-D.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/assets/worker-Dywf1EVc.js +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/ar.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/az.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/bg.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/he.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/hu.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/mn.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/pt_BR.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/ro.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/vi.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/dist/locales/zh_Hant.json +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/scripts/clean_translations.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/frontend/web/static/docs/invoke-favicon-docs.svg +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/invocation_api/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/invokeai/version/__init__.py +0 -0
- {InvokeAI-5.0.2 → InvokeAI-5.1.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 5.0
|
|
3
|
+
Version: 5.1.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
|
|
@@ -325,7 +325,7 @@ Invoke features an organized gallery system for easily storing, accessing, and r
|
|
|
325
325
|
### Other features
|
|
326
326
|
|
|
327
327
|
- Support for both ckpt and diffusers models
|
|
328
|
-
- SD1.5, SD2.0, and
|
|
328
|
+
- SD1.5, SD2.0, SDXL, and FLUX support
|
|
329
329
|
- Upscaling Tools
|
|
330
330
|
- Embedding Manager & Support
|
|
331
331
|
- Model Manager & Support
|
|
@@ -420,6 +420,9 @@ invokeai/backend/onnx/onnx_runtime.py
|
|
|
420
420
|
invokeai/backend/quantization/__init__.py
|
|
421
421
|
invokeai/backend/quantization/bnb_llm_int8.py
|
|
422
422
|
invokeai/backend/quantization/bnb_nf4.py
|
|
423
|
+
invokeai/backend/quantization/gguf/ggml_tensor.py
|
|
424
|
+
invokeai/backend/quantization/gguf/loaders.py
|
|
425
|
+
invokeai/backend/quantization/gguf/utils.py
|
|
423
426
|
invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py
|
|
424
427
|
invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py
|
|
425
428
|
invokeai/backend/quantization/scripts/quantize_t5_xxl_bnb_llm_int8.py
|
|
@@ -491,12 +494,12 @@ invokeai/frontend/install/__init__.py
|
|
|
491
494
|
invokeai/frontend/install/import_images.py
|
|
492
495
|
invokeai/frontend/web/__init__.py
|
|
493
496
|
invokeai/frontend/web/dist/index.html
|
|
494
|
-
invokeai/frontend/web/dist/assets/App-CsIbq0US.js
|
|
495
497
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css
|
|
498
|
+
invokeai/frontend/web/dist/assets/App-DIWPmKhe.js
|
|
496
499
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css
|
|
497
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
500
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-CRJdOC9C.js
|
|
498
501
|
invokeai/frontend/web/dist/assets/commercial-license-bg-C_dHp7on.png
|
|
499
|
-
invokeai/frontend/web/dist/assets/index-
|
|
502
|
+
invokeai/frontend/web/dist/assets/index-oRALkRAJ.js
|
|
500
503
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2
|
|
501
504
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2
|
|
502
505
|
invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2
|
|
@@ -3,6 +3,7 @@ clip_anytorch==2.6.0
|
|
|
3
3
|
compel==2.0.2
|
|
4
4
|
controlnet-aux==0.0.7
|
|
5
5
|
diffusers[torch]==0.27.2
|
|
6
|
+
gguf==0.10.0
|
|
6
7
|
invisible-watermark==0.2.0
|
|
7
8
|
mediapipe==0.10.7
|
|
8
9
|
numpy==1.26.4
|
|
@@ -14,10 +15,10 @@ safetensors==0.4.3
|
|
|
14
15
|
sentencepiece==0.2.0
|
|
15
16
|
spandrel==0.3.4
|
|
16
17
|
timm==0.6.13
|
|
17
|
-
torch==2.
|
|
18
|
+
torch==2.4.1
|
|
18
19
|
torchmetrics==0.11.4
|
|
19
20
|
torchsde==0.2.6
|
|
20
|
-
torchvision==0.
|
|
21
|
+
torchvision==0.19.1
|
|
21
22
|
transformers==4.41.1
|
|
22
23
|
fastapi-events==0.11.1
|
|
23
24
|
fastapi==0.111.0
|
|
@@ -100,7 +101,7 @@ httpx
|
|
|
100
101
|
[xformers]
|
|
101
102
|
|
|
102
103
|
[xformers:sys_platform != "darwin"]
|
|
103
|
-
xformers==0.0.
|
|
104
|
+
xformers==0.0.28.post1
|
|
104
105
|
|
|
105
106
|
[xformers:sys_platform == "linux"]
|
|
106
107
|
triton
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 5.0
|
|
3
|
+
Version: 5.1.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
|
|
@@ -325,7 +325,7 @@ Invoke features an organized gallery system for easily storing, accessing, and r
|
|
|
325
325
|
### Other features
|
|
326
326
|
|
|
327
327
|
- Support for both ckpt and diffusers models
|
|
328
|
-
- SD1.5, SD2.0, and
|
|
328
|
+
- SD1.5, SD2.0, SDXL, and FLUX support
|
|
329
329
|
- Upscaling Tools
|
|
330
330
|
- Embedding Manager & Support
|
|
331
331
|
- Model Manager & Support
|
|
@@ -105,7 +105,7 @@ Invoke features an organized gallery system for easily storing, accessing, and r
|
|
|
105
105
|
### Other features
|
|
106
106
|
|
|
107
107
|
- Support for both ckpt and diffusers models
|
|
108
|
-
- SD1.5, SD2.0, and
|
|
108
|
+
- SD1.5, SD2.0, SDXL, and FLUX support
|
|
109
109
|
- Upscaling Tools
|
|
110
110
|
- Embedding Manager & Support
|
|
111
111
|
- Model Manager & Support
|
|
@@ -213,7 +213,11 @@ class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
213
213
|
cached_weights=cached_weights,
|
|
214
214
|
)
|
|
215
215
|
)
|
|
216
|
-
elif config.format in [
|
|
216
|
+
elif config.format in [
|
|
217
|
+
ModelFormat.BnbQuantizedLlmInt8b,
|
|
218
|
+
ModelFormat.BnbQuantizednf4b,
|
|
219
|
+
ModelFormat.GGUFQuantized,
|
|
220
|
+
]:
|
|
217
221
|
# The model is quantized, so apply the LoRA weights as sidecar layers. This results in slower inference,
|
|
218
222
|
# than directly patching the weights, but is agnostic to the quantization format.
|
|
219
223
|
exit_stack.enter_context(
|
|
@@ -114,6 +114,7 @@ class ModelFormat(str, Enum):
|
|
|
114
114
|
T5Encoder = "t5_encoder"
|
|
115
115
|
BnbQuantizedLlmInt8b = "bnb_quantized_int8b"
|
|
116
116
|
BnbQuantizednf4b = "bnb_quantized_nf4b"
|
|
117
|
+
GGUFQuantized = "gguf_quantized"
|
|
117
118
|
|
|
118
119
|
|
|
119
120
|
class SchedulerPredictionType(str, Enum):
|
|
@@ -197,7 +198,7 @@ class ModelConfigBase(BaseModel):
|
|
|
197
198
|
class CheckpointConfigBase(ModelConfigBase):
|
|
198
199
|
"""Model config for checkpoint-style models."""
|
|
199
200
|
|
|
200
|
-
format: Literal[ModelFormat.Checkpoint, ModelFormat.BnbQuantizednf4b] = Field(
|
|
201
|
+
format: Literal[ModelFormat.Checkpoint, ModelFormat.BnbQuantizednf4b, ModelFormat.GGUFQuantized] = Field(
|
|
201
202
|
description="Format of the provided checkpoint model", default=ModelFormat.Checkpoint
|
|
202
203
|
)
|
|
203
204
|
config_path: str = Field(description="path to the checkpoint model config file")
|
|
@@ -363,6 +364,21 @@ class MainBnbQuantized4bCheckpointConfig(CheckpointConfigBase, MainConfigBase):
|
|
|
363
364
|
return Tag(f"{ModelType.Main.value}.{ModelFormat.BnbQuantizednf4b.value}")
|
|
364
365
|
|
|
365
366
|
|
|
367
|
+
class MainGGUFCheckpointConfig(CheckpointConfigBase, MainConfigBase):
|
|
368
|
+
"""Model config for main checkpoint models."""
|
|
369
|
+
|
|
370
|
+
prediction_type: SchedulerPredictionType = SchedulerPredictionType.Epsilon
|
|
371
|
+
upcast_attention: bool = False
|
|
372
|
+
|
|
373
|
+
def __init__(self, *args, **kwargs):
|
|
374
|
+
super().__init__(*args, **kwargs)
|
|
375
|
+
self.format = ModelFormat.GGUFQuantized
|
|
376
|
+
|
|
377
|
+
@staticmethod
|
|
378
|
+
def get_tag() -> Tag:
|
|
379
|
+
return Tag(f"{ModelType.Main.value}.{ModelFormat.GGUFQuantized.value}")
|
|
380
|
+
|
|
381
|
+
|
|
366
382
|
class MainDiffusersConfig(DiffusersConfigBase, MainConfigBase):
|
|
367
383
|
"""Model config for main diffusers models."""
|
|
368
384
|
|
|
@@ -466,6 +482,7 @@ AnyModelConfig = Annotated[
|
|
|
466
482
|
Annotated[MainDiffusersConfig, MainDiffusersConfig.get_tag()],
|
|
467
483
|
Annotated[MainCheckpointConfig, MainCheckpointConfig.get_tag()],
|
|
468
484
|
Annotated[MainBnbQuantized4bCheckpointConfig, MainBnbQuantized4bCheckpointConfig.get_tag()],
|
|
485
|
+
Annotated[MainGGUFCheckpointConfig, MainGGUFCheckpointConfig.get_tag()],
|
|
469
486
|
Annotated[VAEDiffusersConfig, VAEDiffusersConfig.get_tag()],
|
|
470
487
|
Annotated[VAECheckpointConfig, VAECheckpointConfig.get_tag()],
|
|
471
488
|
Annotated[ControlNetDiffusersConfig, ControlNetDiffusersConfig.get_tag()],
|
|
@@ -26,6 +26,7 @@ from invokeai.backend.model_manager.config import (
|
|
|
26
26
|
CLIPEmbedDiffusersConfig,
|
|
27
27
|
MainBnbQuantized4bCheckpointConfig,
|
|
28
28
|
MainCheckpointConfig,
|
|
29
|
+
MainGGUFCheckpointConfig,
|
|
29
30
|
T5EncoderBnbQuantizedLlmInt8bConfig,
|
|
30
31
|
T5EncoderConfig,
|
|
31
32
|
VAECheckpointConfig,
|
|
@@ -35,6 +36,8 @@ from invokeai.backend.model_manager.load.model_loader_registry import ModelLoade
|
|
|
35
36
|
from invokeai.backend.model_manager.util.model_util import (
|
|
36
37
|
convert_bundle_to_flux_transformer_checkpoint,
|
|
37
38
|
)
|
|
39
|
+
from invokeai.backend.quantization.gguf.loaders import gguf_sd_loader
|
|
40
|
+
from invokeai.backend.quantization.gguf.utils import TORCH_COMPATIBLE_QTYPES
|
|
38
41
|
from invokeai.backend.util.silence_warnings import SilenceWarnings
|
|
39
42
|
|
|
40
43
|
try:
|
|
@@ -204,6 +207,52 @@ class FluxCheckpointModel(ModelLoader):
|
|
|
204
207
|
return model
|
|
205
208
|
|
|
206
209
|
|
|
210
|
+
@ModelLoaderRegistry.register(base=BaseModelType.Flux, type=ModelType.Main, format=ModelFormat.GGUFQuantized)
|
|
211
|
+
class FluxGGUFCheckpointModel(ModelLoader):
|
|
212
|
+
"""Class to load GGUF main models."""
|
|
213
|
+
|
|
214
|
+
def _load_model(
|
|
215
|
+
self,
|
|
216
|
+
config: AnyModelConfig,
|
|
217
|
+
submodel_type: Optional[SubModelType] = None,
|
|
218
|
+
) -> AnyModel:
|
|
219
|
+
if not isinstance(config, CheckpointConfigBase):
|
|
220
|
+
raise ValueError("Only CheckpointConfigBase models are currently supported here.")
|
|
221
|
+
|
|
222
|
+
match submodel_type:
|
|
223
|
+
case SubModelType.Transformer:
|
|
224
|
+
return self._load_from_singlefile(config)
|
|
225
|
+
|
|
226
|
+
raise ValueError(
|
|
227
|
+
f"Only Transformer submodels are currently supported. Received: {submodel_type.value if submodel_type else 'None'}"
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
def _load_from_singlefile(
|
|
231
|
+
self,
|
|
232
|
+
config: AnyModelConfig,
|
|
233
|
+
) -> AnyModel:
|
|
234
|
+
assert isinstance(config, MainGGUFCheckpointConfig)
|
|
235
|
+
model_path = Path(config.path)
|
|
236
|
+
|
|
237
|
+
with SilenceWarnings():
|
|
238
|
+
model = Flux(params[config.config_path])
|
|
239
|
+
|
|
240
|
+
# HACK(ryand): We shouldn't be hard-coding the compute_dtype here.
|
|
241
|
+
sd = gguf_sd_loader(model_path, compute_dtype=torch.bfloat16)
|
|
242
|
+
|
|
243
|
+
# HACK(ryand): There are some broken GGUF models in circulation that have the wrong shape for img_in.weight.
|
|
244
|
+
# We override the shape here to fix the issue.
|
|
245
|
+
# Example model with this issue (Q4_K_M): https://civitai.com/models/705823/ggufk-flux-unchained-km-quants
|
|
246
|
+
img_in_weight = sd.get("img_in.weight", None)
|
|
247
|
+
if img_in_weight is not None and img_in_weight._ggml_quantization_type in TORCH_COMPATIBLE_QTYPES:
|
|
248
|
+
expected_img_in_weight_shape = model.img_in.weight.shape
|
|
249
|
+
img_in_weight.quantized_data = img_in_weight.quantized_data.view(expected_img_in_weight_shape)
|
|
250
|
+
img_in_weight.tensor_shape = expected_img_in_weight_shape
|
|
251
|
+
|
|
252
|
+
model.load_state_dict(sd, assign=True)
|
|
253
|
+
return model
|
|
254
|
+
|
|
255
|
+
|
|
207
256
|
@ModelLoaderRegistry.register(base=BaseModelType.Flux, type=ModelType.Main, format=ModelFormat.BnbQuantizednf4b)
|
|
208
257
|
class FluxBnbQuantizednf4bCheckpointModel(ModelLoader):
|
|
209
258
|
"""Class to load main models."""
|
|
@@ -30,6 +30,8 @@ from invokeai.backend.model_manager.config import (
|
|
|
30
30
|
SchedulerPredictionType,
|
|
31
31
|
)
|
|
32
32
|
from invokeai.backend.model_manager.util.model_util import lora_token_vector_length, read_checkpoint_meta
|
|
33
|
+
from invokeai.backend.quantization.gguf.ggml_tensor import GGMLTensor
|
|
34
|
+
from invokeai.backend.quantization.gguf.loaders import gguf_sd_loader
|
|
33
35
|
from invokeai.backend.spandrel_image_to_image_model import SpandrelImageToImageModel
|
|
34
36
|
from invokeai.backend.util.silence_warnings import SilenceWarnings
|
|
35
37
|
|
|
@@ -187,6 +189,7 @@ class ModelProbe(object):
|
|
|
187
189
|
if fields["type"] in [ModelType.Main, ModelType.ControlNet, ModelType.VAE] and fields["format"] in [
|
|
188
190
|
ModelFormat.Checkpoint,
|
|
189
191
|
ModelFormat.BnbQuantizednf4b,
|
|
192
|
+
ModelFormat.GGUFQuantized,
|
|
190
193
|
]:
|
|
191
194
|
ckpt_config_path = cls._get_checkpoint_config_path(
|
|
192
195
|
model_path,
|
|
@@ -220,7 +223,7 @@ class ModelProbe(object):
|
|
|
220
223
|
|
|
221
224
|
@classmethod
|
|
222
225
|
def get_model_type_from_checkpoint(cls, model_path: Path, checkpoint: Optional[CkptType] = None) -> ModelType:
|
|
223
|
-
if model_path.suffix not in (".bin", ".pt", ".ckpt", ".safetensors", ".pth"):
|
|
226
|
+
if model_path.suffix not in (".bin", ".pt", ".ckpt", ".safetensors", ".pth", ".gguf"):
|
|
224
227
|
raise InvalidModelConfigException(f"{model_path}: unrecognized suffix")
|
|
225
228
|
|
|
226
229
|
if model_path.name == "learned_embeds.bin":
|
|
@@ -278,12 +281,10 @@ class ModelProbe(object):
|
|
|
278
281
|
return ModelType.SpandrelImageToImage
|
|
279
282
|
except spandrel.UnsupportedModelError:
|
|
280
283
|
pass
|
|
281
|
-
except
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
else:
|
|
286
|
-
raise e
|
|
284
|
+
except Exception as e:
|
|
285
|
+
logger.warning(
|
|
286
|
+
f"Encountered error while probing to determine if {model_path} is a Spandrel model. Ignoring. Error: {e}"
|
|
287
|
+
)
|
|
287
288
|
|
|
288
289
|
raise InvalidModelConfigException(f"Unable to determine model type for {model_path}")
|
|
289
290
|
|
|
@@ -408,6 +409,8 @@ class ModelProbe(object):
|
|
|
408
409
|
model = torch.load(model_path, map_location="cpu")
|
|
409
410
|
assert isinstance(model, dict)
|
|
410
411
|
return model
|
|
412
|
+
elif model_path.suffix.endswith(".gguf"):
|
|
413
|
+
return gguf_sd_loader(model_path, compute_dtype=torch.float32)
|
|
411
414
|
else:
|
|
412
415
|
return safetensors.torch.load_file(model_path)
|
|
413
416
|
|
|
@@ -477,6 +480,8 @@ class CheckpointProbeBase(ProbeBase):
|
|
|
477
480
|
or "model.diffusion_model.double_blocks.0.img_attn.proj.weight.quant_state.bitsandbytes__nf4" in state_dict
|
|
478
481
|
):
|
|
479
482
|
return ModelFormat.BnbQuantizednf4b
|
|
483
|
+
elif any(isinstance(v, GGMLTensor) for v in state_dict.values()):
|
|
484
|
+
return ModelFormat.GGUFQuantized
|
|
480
485
|
return ModelFormat("checkpoint")
|
|
481
486
|
|
|
482
487
|
def get_variant_type(self) -> ModelVariantType:
|
|
@@ -130,7 +130,7 @@ class ModelSearch:
|
|
|
130
130
|
return
|
|
131
131
|
|
|
132
132
|
for n in file_names:
|
|
133
|
-
if n.endswith((".ckpt", ".bin", ".pth", ".safetensors", ".pt")):
|
|
133
|
+
if n.endswith((".ckpt", ".bin", ".pth", ".safetensors", ".pt", ".gguf")):
|
|
134
134
|
try:
|
|
135
135
|
self.model_found(absolute_path / n)
|
|
136
136
|
except KeyboardInterrupt:
|
|
@@ -8,6 +8,8 @@ import safetensors
|
|
|
8
8
|
import torch
|
|
9
9
|
from picklescan.scanner import scan_file_path
|
|
10
10
|
|
|
11
|
+
from invokeai.backend.quantization.gguf.loaders import gguf_sd_loader
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
def _fast_safetensors_reader(path: str) -> Dict[str, torch.Tensor]:
|
|
13
15
|
checkpoint = {}
|
|
@@ -54,7 +56,11 @@ def read_checkpoint_meta(path: Union[str, Path], scan: bool = False) -> Dict[str
|
|
|
54
56
|
scan_result = scan_file_path(path)
|
|
55
57
|
if scan_result.infected_files != 0:
|
|
56
58
|
raise Exception(f'The model file "{path}" is potentially infected by malware. Aborting import.')
|
|
57
|
-
|
|
59
|
+
if str(path).endswith(".gguf"):
|
|
60
|
+
# The GGUF reader used here uses numpy memmap, so these tensors are not loaded into memory during this function
|
|
61
|
+
checkpoint = gguf_sd_loader(Path(path), compute_dtype=torch.float32)
|
|
62
|
+
else:
|
|
63
|
+
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
|
58
64
|
return checkpoint
|
|
59
65
|
|
|
60
66
|
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
from typing import overload
|
|
2
|
+
|
|
3
|
+
import gguf
|
|
4
|
+
import torch
|
|
5
|
+
|
|
6
|
+
from invokeai.backend.quantization.gguf.utils import (
|
|
7
|
+
DEQUANTIZE_FUNCTIONS,
|
|
8
|
+
TORCH_COMPATIBLE_QTYPES,
|
|
9
|
+
dequantize,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def dequantize_and_run(func, args, kwargs):
|
|
14
|
+
"""A helper function for running math ops on GGMLTensor inputs.
|
|
15
|
+
|
|
16
|
+
Dequantizes the inputs, and runs the function.
|
|
17
|
+
"""
|
|
18
|
+
dequantized_args = [a.get_dequantized_tensor() if hasattr(a, "get_dequantized_tensor") else a for a in args]
|
|
19
|
+
dequantized_kwargs = {
|
|
20
|
+
k: v.get_dequantized_tensor() if hasattr(v, "get_dequantized_tensor") else v for k, v in kwargs.items()
|
|
21
|
+
}
|
|
22
|
+
return func(*dequantized_args, **dequantized_kwargs)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def apply_to_quantized_tensor(func, args, kwargs):
|
|
26
|
+
"""A helper function to apply a function to a quantized GGML tensor, and re-wrap the result in a GGMLTensor.
|
|
27
|
+
|
|
28
|
+
Assumes that the first argument is a GGMLTensor.
|
|
29
|
+
"""
|
|
30
|
+
# We expect the first argument to be a GGMLTensor, and all other arguments to be non-GGMLTensors.
|
|
31
|
+
ggml_tensor = args[0]
|
|
32
|
+
assert isinstance(ggml_tensor, GGMLTensor)
|
|
33
|
+
assert all(not isinstance(a, GGMLTensor) for a in args[1:])
|
|
34
|
+
assert all(not isinstance(v, GGMLTensor) for v in kwargs.values())
|
|
35
|
+
|
|
36
|
+
new_data = func(ggml_tensor.quantized_data, *args[1:], **kwargs)
|
|
37
|
+
|
|
38
|
+
if new_data.dtype != ggml_tensor.quantized_data.dtype:
|
|
39
|
+
# This is intended to catch calls such as `.to(dtype-torch.float32)`, which are not supported on GGMLTensors.
|
|
40
|
+
raise ValueError("Operation changed the dtype of GGMLTensor unexpectedly.")
|
|
41
|
+
|
|
42
|
+
return GGMLTensor(
|
|
43
|
+
new_data, ggml_tensor._ggml_quantization_type, ggml_tensor.tensor_shape, ggml_tensor.compute_dtype
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
GGML_TENSOR_OP_TABLE = {
|
|
48
|
+
# Ops to run on the quantized tensor.
|
|
49
|
+
torch.ops.aten.detach.default: apply_to_quantized_tensor, # pyright: ignore
|
|
50
|
+
torch.ops.aten._to_copy.default: apply_to_quantized_tensor, # pyright: ignore
|
|
51
|
+
# Ops to run on dequantized tensors.
|
|
52
|
+
torch.ops.aten.t.default: dequantize_and_run, # pyright: ignore
|
|
53
|
+
torch.ops.aten.addmm.default: dequantize_and_run, # pyright: ignore
|
|
54
|
+
torch.ops.aten.mul.Tensor: dequantize_and_run, # pyright: ignore
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class GGMLTensor(torch.Tensor):
|
|
59
|
+
"""A torch.Tensor sub-class holding a quantized GGML tensor.
|
|
60
|
+
|
|
61
|
+
The underlying tensor is quantized, but the GGMLTensor class provides a dequantized view of the tensor on-the-fly
|
|
62
|
+
when it is used in operations.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
@staticmethod
|
|
66
|
+
def __new__(
|
|
67
|
+
cls,
|
|
68
|
+
data: torch.Tensor,
|
|
69
|
+
ggml_quantization_type: gguf.GGMLQuantizationType,
|
|
70
|
+
tensor_shape: torch.Size,
|
|
71
|
+
compute_dtype: torch.dtype,
|
|
72
|
+
):
|
|
73
|
+
# Type hinting is not supported for torch.Tensor._make_wrapper_subclass, so we ignore the errors.
|
|
74
|
+
return torch.Tensor._make_wrapper_subclass( # pyright: ignore
|
|
75
|
+
cls,
|
|
76
|
+
data.shape,
|
|
77
|
+
dtype=data.dtype,
|
|
78
|
+
layout=data.layout,
|
|
79
|
+
device=data.device,
|
|
80
|
+
strides=data.stride(),
|
|
81
|
+
storage_offset=data.storage_offset(),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def __init__(
|
|
85
|
+
self,
|
|
86
|
+
data: torch.Tensor,
|
|
87
|
+
ggml_quantization_type: gguf.GGMLQuantizationType,
|
|
88
|
+
tensor_shape: torch.Size,
|
|
89
|
+
compute_dtype: torch.dtype,
|
|
90
|
+
):
|
|
91
|
+
self.quantized_data = data
|
|
92
|
+
self._ggml_quantization_type = ggml_quantization_type
|
|
93
|
+
# The dequantized shape of the tensor.
|
|
94
|
+
self.tensor_shape = tensor_shape
|
|
95
|
+
self.compute_dtype = compute_dtype
|
|
96
|
+
|
|
97
|
+
def __repr__(self, *, tensor_contents=None):
|
|
98
|
+
return f"GGMLTensor(type={self._ggml_quantization_type.name}, dequantized_shape=({self.tensor_shape})"
|
|
99
|
+
|
|
100
|
+
@overload
|
|
101
|
+
def size(self, dim: None = None) -> torch.Size: ...
|
|
102
|
+
|
|
103
|
+
@overload
|
|
104
|
+
def size(self, dim: int) -> int: ...
|
|
105
|
+
|
|
106
|
+
def size(self, dim: int | None = None):
|
|
107
|
+
"""Return the size of the tensor after dequantization. I.e. the shape that will be used in any math ops."""
|
|
108
|
+
if dim is not None:
|
|
109
|
+
return self.tensor_shape[dim]
|
|
110
|
+
return self.tensor_shape
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def shape(self) -> torch.Size: # pyright: ignore[reportIncompatibleVariableOverride] pyright doesn't understand this for some reason.
|
|
114
|
+
"""The shape of the tensor after dequantization. I.e. the shape that will be used in any math ops."""
|
|
115
|
+
return self.size()
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def quantized_shape(self) -> torch.Size:
|
|
119
|
+
"""The shape of the quantized tensor."""
|
|
120
|
+
return self.quantized_data.shape
|
|
121
|
+
|
|
122
|
+
def requires_grad_(self, mode: bool = True) -> torch.Tensor:
|
|
123
|
+
"""The GGMLTensor class is currently only designed for inference (not training). Setting requires_grad to True
|
|
124
|
+
is not supported. This method is a no-op.
|
|
125
|
+
"""
|
|
126
|
+
return self
|
|
127
|
+
|
|
128
|
+
def get_dequantized_tensor(self):
|
|
129
|
+
"""Return the dequantized tensor.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
dtype: The dtype of the dequantized tensor.
|
|
133
|
+
"""
|
|
134
|
+
if self._ggml_quantization_type in TORCH_COMPATIBLE_QTYPES:
|
|
135
|
+
return self.quantized_data.to(self.compute_dtype)
|
|
136
|
+
elif self._ggml_quantization_type in DEQUANTIZE_FUNCTIONS:
|
|
137
|
+
# TODO(ryand): Look into how the dtype param is intended to be used.
|
|
138
|
+
return dequantize(
|
|
139
|
+
data=self.quantized_data, qtype=self._ggml_quantization_type, oshape=self.tensor_shape, dtype=None
|
|
140
|
+
).to(self.compute_dtype)
|
|
141
|
+
else:
|
|
142
|
+
# There is no GPU implementation for this quantization type, so fallback to the numpy implementation.
|
|
143
|
+
new = gguf.quants.dequantize(self.quantized_data.cpu().numpy(), self._ggml_quantization_type)
|
|
144
|
+
return torch.from_numpy(new).to(self.quantized_data.device, dtype=self.compute_dtype)
|
|
145
|
+
|
|
146
|
+
@classmethod
|
|
147
|
+
def __torch_dispatch__(cls, func, types, args, kwargs):
|
|
148
|
+
# We will likely hit cases here in the future where a new op is encountered that is not yet supported.
|
|
149
|
+
# The new op simply needs to be added to the GGML_TENSOR_OP_TABLE.
|
|
150
|
+
if func in GGML_TENSOR_OP_TABLE:
|
|
151
|
+
return GGML_TENSOR_OP_TABLE[func](func, args, kwargs)
|
|
152
|
+
return NotImplemented
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import gguf
|
|
4
|
+
import torch
|
|
5
|
+
|
|
6
|
+
from invokeai.backend.quantization.gguf.ggml_tensor import GGMLTensor
|
|
7
|
+
from invokeai.backend.quantization.gguf.utils import TORCH_COMPATIBLE_QTYPES
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def gguf_sd_loader(path: Path, compute_dtype: torch.dtype) -> dict[str, GGMLTensor]:
|
|
11
|
+
reader = gguf.GGUFReader(path)
|
|
12
|
+
|
|
13
|
+
sd: dict[str, GGMLTensor] = {}
|
|
14
|
+
for tensor in reader.tensors:
|
|
15
|
+
torch_tensor = torch.from_numpy(tensor.data)
|
|
16
|
+
shape = torch.Size(tuple(int(v) for v in reversed(tensor.shape)))
|
|
17
|
+
if tensor.tensor_type in TORCH_COMPATIBLE_QTYPES:
|
|
18
|
+
torch_tensor = torch_tensor.view(*shape)
|
|
19
|
+
sd[tensor.name] = GGMLTensor(
|
|
20
|
+
torch_tensor, ggml_quantization_type=tensor.tensor_type, tensor_shape=shape, compute_dtype=compute_dtype
|
|
21
|
+
)
|
|
22
|
+
return sd
|