diff --git a/invokeai/app/api/routers/model_manager.py b/invokeai/app/api/routers/model_manager.py index 681646504d..b0c8e6bdd1 100644 --- a/invokeai/app/api/routers/model_manager.py +++ b/invokeai/app/api/routers/model_manager.py @@ -287,7 +287,7 @@ async def update_model_record( "description": "The model image was fetched successfully", }, 400: {"description": "Bad request"}, - 404: {"description": "The model image could not be found"} + 404: {"description": "The model image could not be found"}, }, status_code=200, ) @@ -310,6 +310,7 @@ async def get_model_image( except Exception: raise HTTPException(status_code=404) + @model_manager_router.patch( "/i/{key}/image", operation_id="update_model_image", @@ -376,6 +377,7 @@ async def delete_model( logger.error(str(e)) raise HTTPException(status_code=404, detail=str(e)) + @model_manager_router.delete( "/i/{key}/image", operation_id="delete_model_image", diff --git a/invokeai/app/services/model_images/model_images_default.py b/invokeai/app/services/model_images/model_images_default.py index 789caf8fd4..ae79071667 100644 --- a/invokeai/app/services/model_images/model_images_default.py +++ b/invokeai/app/services/model_images/model_images_default.py @@ -23,8 +23,9 @@ class ModelImagesService(ModelImagesBase): __invoker: Invoker def __init__(self, model_images_folder: Union[str, Path]): - - self.__model_images_folder: Path = model_images_folder if isinstance(model_images_folder, Path) else Path(model_images_folder) + self.__model_images_folder: Path = ( + model_images_folder if isinstance(model_images_folder, Path) else Path(model_images_folder) + ) # Validate required folders at launch self.__validate_storage_folders() @@ -50,7 +51,7 @@ class ModelImagesService(ModelImagesBase): ) -> None: try: self.__validate_storage_folders() - image_path = self.__model_images_folder / (model_key + '.webp') + image_path = self.__model_images_folder / (model_key + ".webp") image = make_thumbnail(image, 256) image.save(image_path, format="webp") @@ -59,7 +60,7 @@ class ModelImagesService(ModelImagesBase): raise ModelImageFileSaveException from e def get_path(self, model_key: str) -> Path: - path = self.__model_images_folder / (model_key + '.webp') + path = self.__model_images_folder / (model_key + ".webp") return path @@ -75,7 +76,7 @@ class ModelImagesService(ModelImagesBase): path = self.get_path(model_key) if not self.validate_path(path): - raise ModelImageFileNotFoundException + raise ModelImageFileNotFoundException send2trash(path) diff --git a/invokeai/backend/model_manager/config.py b/invokeai/backend/model_manager/config.py index 7cb69f572e..d274867707 100644 --- a/invokeai/backend/model_manager/config.py +++ b/invokeai/backend/model_manager/config.py @@ -374,6 +374,7 @@ AnyModelConfig = Annotated[ AnyModelConfigValidator = TypeAdapter(AnyModelConfig) + class ModelConfigFactory(object): """Class for parsing config dicts into StableDiffusion Config obects.""" diff --git a/invokeai/frontend/web/src/features/modelManagerV2/subpanels/ModelManagerPanel/ModelListItem.tsx b/invokeai/frontend/web/src/features/modelManagerV2/subpanels/ModelManagerPanel/ModelListItem.tsx index c522aa7bbe..40d477a3b0 100644 --- a/invokeai/frontend/web/src/features/modelManagerV2/subpanels/ModelManagerPanel/ModelListItem.tsx +++ b/invokeai/frontend/web/src/features/modelManagerV2/subpanels/ModelManagerPanel/ModelListItem.tsx @@ -75,7 +75,7 @@ const ModelListItem = (props: ModelListItemProps) => { return ( - + { return; } - setImage(URL.createObjectURL(file)); - updateModelImage({ key: model_key, image: file }) .unwrap() .then(() => { + setImage(URL.createObjectURL(file)); dispatch( addToast( makeToast({ @@ -103,6 +102,7 @@ const ModelImageUpload = ({ model_key, model_image }: Props) => { objectPosition="50% 50%" height="100px" width="100px" + minWidth="100px" borderRadius="base" />