mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
160267c71a
- Remove `ImageType` entirely, it is confusing - Create `ResourceOrigin`, may be `internal` or `external` - Revamp `ImageCategory`, may be `general`, `mask`, `control`, `user`, `other`. Expect to add more as time goes on - Update images `list` route to accept `include_categories` OR `exclude_categories` query parameters to afford finer-grained querying. All services are updated to accomodate this change. The new setup should account for our types of images, including the combinations we couldn't really handle until now: - Canvas init and masks - Canvas when saved-to-gallery or merged
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
from enum import Enum
|
|
from typing import Optional, Tuple
|
|
from pydantic import BaseModel, Field
|
|
|
|
from invokeai.app.util.metaenum import MetaEnum
|
|
|
|
|
|
class ResourceOrigin(str, Enum, metaclass=MetaEnum):
|
|
"""The origin of a resource (eg image).
|
|
|
|
- INTERNAL: The resource was created by the application.
|
|
- EXTERNAL: The resource was not created by the application.
|
|
This may be a user-initiated upload, or an internal application upload (eg Canvas init image).
|
|
"""
|
|
|
|
INTERNAL = "internal"
|
|
"""The resource was created by the application."""
|
|
EXTERNAL = "external"
|
|
"""The resource was not created by the application.
|
|
This may be a user-initiated upload, or an internal application upload (eg Canvas init image).
|
|
"""
|
|
|
|
|
|
class InvalidOriginException(ValueError):
|
|
"""Raised when a provided value is not a valid ResourceOrigin.
|
|
|
|
Subclasses `ValueError`.
|
|
"""
|
|
|
|
def __init__(self, message="Invalid resource origin."):
|
|
super().__init__(message)
|
|
|
|
|
|
class ImageCategory(str, Enum, metaclass=MetaEnum):
|
|
"""The category of an image.
|
|
|
|
- GENERAL: The image is an output, init image, or otherwise an image without a specialized purpose.
|
|
- MASK: The image is a mask image.
|
|
- CONTROL: The image is a ControlNet control image.
|
|
- USER: The image is a user-provide image.
|
|
- OTHER: The image is some other type of image with a specialized purpose. To be used by external nodes.
|
|
"""
|
|
|
|
GENERAL = "general"
|
|
"""GENERAL: The image is an output, init image, or otherwise an image without a specialized purpose."""
|
|
MASK = "mask"
|
|
"""MASK: The image is a mask image."""
|
|
CONTROL = "control"
|
|
"""CONTROL: The image is a ControlNet control image."""
|
|
USER = "user"
|
|
"""USER: The image is a user-provide image."""
|
|
OTHER = "other"
|
|
"""OTHER: The image is some other type of image with a specialized purpose. To be used by external nodes."""
|
|
|
|
|
|
class InvalidImageCategoryException(ValueError):
|
|
"""Raised when a provided value is not a valid ImageCategory.
|
|
|
|
Subclasses `ValueError`.
|
|
"""
|
|
|
|
def __init__(self, message="Invalid image category."):
|
|
super().__init__(message)
|
|
|
|
|
|
class ImageField(BaseModel):
|
|
"""An image field used for passing image objects between invocations"""
|
|
|
|
image_origin: ResourceOrigin = Field(
|
|
default=ResourceOrigin.INTERNAL, description="The type of the image"
|
|
)
|
|
image_name: Optional[str] = Field(default=None, description="The name of the image")
|
|
|
|
class Config:
|
|
schema_extra = {"required": ["image_origin", "image_name"]}
|
|
|
|
|
|
class ColorField(BaseModel):
|
|
r: int = Field(ge=0, le=255, description="The red component")
|
|
g: int = Field(ge=0, le=255, description="The green component")
|
|
b: int = Field(ge=0, le=255, description="The blue component")
|
|
a: int = Field(ge=0, le=255, description="The alpha component")
|
|
|
|
def tuple(self) -> Tuple[int, int, int, int]:
|
|
return (self.r, self.g, self.b, self.a)
|
|
|
|
|
|
class ProgressImage(BaseModel):
|
|
"""The progress image sent intermittently during processing"""
|
|
|
|
width: int = Field(description="The effective width of the image in pixels")
|
|
height: int = Field(description="The effective height of the image in pixels")
|
|
dataURL: str = Field(description="The image data as a b64 data URL")
|