diff --git a/__init__.py b/__init__.py index 525cb18..cbbcc97 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,4 @@ -from .stability_api import StabilityConservativeUpscale, StabilityCreativeUpscale, StabilityRemoveBackground, StabilityInpainting, StabilityErase, StabilityCore, StabilityImageUltra, StabilitySearchAndReplace, StabilityOutpainting, StabilitySD3, StabilityControlSketch, StabilityControlStructure +from .stability_api import StabilityConservativeUpscale, StabilityCreativeUpscale, StabilityRemoveBackground, StabilityInpainting, StabilityErase, StabilityCore, StabilityImageUltra, StabilitySearchAndReplace, StabilityOutpainting, StabilitySD3, StabilityControlSketch, StabilityControlStructure, StabilityFastUpscale, StabilityStyle, StabilitySearchAndRecolor NODE_CLASS_MAPPINGS = { "Stability Conservative Upscale": StabilityConservativeUpscale, @@ -11,6 +11,9 @@ NODE_CLASS_MAPPINGS = { "Stability Search and Replace": StabilitySearchAndReplace, "Stability Outpainting": StabilityOutpainting, "Stability SD3": StabilitySD3, - "Stability Control Skech": StabilityControlSketch, + "Stability Control Sketch": StabilityControlSketch, "Stability Control Structure": StabilityControlStructure, + "Stability Fast Upscale": StabilityFastUpscale, + "Stability Style": StabilityStyle, + "Stability Search and Recolor": StabilitySearchAndRecolor, } diff --git a/stability_api.py b/stability_api.py index 72f7498..5144408 100644 --- a/stability_api.py +++ b/stability_api.py @@ -52,8 +52,9 @@ class StabilityBase: image = kwargs.get('image', None) if image is not None: - kwargs["mode"] = "image-to-image" - kwargs.pop("aspect_ratio", None) + if self.API_ENDPOINT != "stable-image/control/style": + kwargs["mode"] = "image-to-image" + kwargs.pop("aspect_ratio", None) image = ToPILImage()(image.squeeze(0).permute(2,0,1)) image.save(buffered, format="PNG") files = self._get_files(buffered, **kwargs) @@ -222,6 +223,10 @@ class StabilityRemoveBackground(StabilityBase): "required": { "image": ("IMAGE",), }, + "optional": { + "output_format": (["png", "webp"],), + "api_key_override": ("STRING", {"multiline": False}), + } } @@ -304,7 +309,7 @@ class StabilitySD3(StabilityBase): ACCEPT = "image/*" INPUT_SPEC = { "required": { - "model": (["sd3", "sd3-turbo"],), + "model": (["sd3.5-large", "sd3.5-large-turbo", "sd3.5-medium", "sd3-large", "sd3-large-turbo", "sd3-medium"],), "prompt": ("STRING", {"multiline": True}), }, "optional": { @@ -372,3 +377,52 @@ class StabilityControlStructure(StabilityBase): "api_key_override": ("STRING", {"multiline": False}), }, } + +class StabilityFastUpscale(StabilityBase): + API_ENDPOINT = "stable-image/upscale/fast" + ACCEPT = "image/*" + INPUT_SPEC = { + "required": { + "image": ("IMAGE",), + }, + "optional": { + "output_format": (["png", "webp", "jpeg"],), + "api_key_override": ("STRING", {"multiline": False}), + } + } + +class StabilityStyle(StabilityBase): + API_ENDPOINT = "stable-image/control/style" + ACCEPT = "image/*" + INPUT_SPEC = { + "required": { + "image": ("IMAGE",), + "prompt": ("STRING", {"multiline": True}), + }, + "optional": { + "negative_prompt": ("STRING", {"multiline": True}), + "aspect_ratio": (["16:9", "1:1", "21:9", "2:3", "3:2", "4:5", "5:4", "9:16", "9:21"],), + "fidelity": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "seed": ("INT", {"default": 0, "min": 0, "max": 4294967294}), + "output_format": (["png", "webp", "jpeg"],), + "api_key_override": ("STRING", {"multiline": False}), + } + } + +class StabilitySearchAndRecolor(StabilityBase): + API_ENDPOINT = "stable-image/edit/search-and-recolor" + ACCEPT = "image/*" + INPUT_SPEC = { + "required": { + "image": ("IMAGE",), + "select_prompt": ("STRING", {"multiline": True}), + "prompt": ("STRING", {"multiline": True}), + }, + "optional": { + "negative_prompt": ("STRING", {"multiline": True}), + "grow_mask": ("INT", {"default": 3, "min": 0, "max": 20}), + "seed": ("INT", {"default": 0, "min": 0, "max": 4294967294}), + "output_format": (["png", "webp", "jpeg"],), + "api_key_override": ("STRING", {"multiline": False}), + } + }