diff --git a/runware/base.py b/runware/base.py index b060f80..eca3de0 100644 --- a/runware/base.py +++ b/runware/base.py @@ -744,6 +744,14 @@ async def _imageInference( if isinstance(requestImage.inputs, dict): requestImage.inputs = IInputs(**requestImage.inputs) + if requestImage.inputs.image: + requestImage.inputs.image = await process_image(requestImage.inputs.image) + + if requestImage.inputs.images: + requestImage.inputs.images = await self._process_media_list( + requestImage.inputs.images + ) + if requestImage.inputs.referenceImages: requestImage.inputs.referenceImages = await self._process_media_list( requestImage.inputs.referenceImages, diff --git a/runware/types.py b/runware/types.py index d1fdf3a..e5c087d 100644 --- a/runware/types.py +++ b/runware/types.py @@ -810,6 +810,20 @@ def request_key(self) -> str: return "texSlat" +@dataclass +class IColorPaletteEntry(SerializableMixin): + hex: str + ratio: Optional[Union[str, float]] = None + + +@dataclass +class IEditRegion(SerializableMixin): + x1: int + y1: int + x2: int + y2: int + + @dataclass class ISettings(SerializableMixin): # Image @@ -820,6 +834,10 @@ class ISettings(SerializableMixin): trueCFGScale: Optional[float] = None quality: Optional[str] = None promptExtend: Optional[bool] = None + editRegions: Optional[List[List[Union[IEditRegion, Dict[str, Any]]]]] = None + sequential: Optional[bool] = None + thinking: Optional[bool] = None + colorPalette: Optional[List[Union[IColorPaletteEntry, Dict[str, Any]]]] = None # 3D inference textureSize: Optional[int] = None decimationTarget: Optional[int] = None @@ -859,6 +877,19 @@ def __post_init__(self): self.shapeSlat = IShapeSlat(**self.shapeSlat) if self.texSlat is not None and isinstance(self.texSlat, dict): self.texSlat = ITexSlat(**self.texSlat) + if self.editRegions is not None: + self.editRegions = [ + [ + IEditRegion(**item) if isinstance(item, dict) else item + for item in image_regions + ] + for image_regions in self.editRegions + ] + if self.colorPalette is not None: + self.colorPalette = [ + IColorPaletteEntry(**item) if isinstance(item, dict) else item + for item in self.colorPalette + ] @property def request_key(self) -> str: @@ -891,6 +922,7 @@ class IInputs(SerializableMixin): references: Optional[List[Union[str, File]]] = None referenceImages: Optional[List[Union[str, File, IInputReference]]] = None image: Optional[Union[str, File]] = None + images: Optional[List[Union[str, File]]] = None mask: Optional[Union[str, File]] = None superResolutionReferences: Optional[List[Union[str, File]]] = None