mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(nodes): add ImageCollection node in prep for batch processing
This commit is contained in:
parent
42f537f655
commit
fa169b5517
@ -97,6 +97,7 @@ class UIConfig(TypedDict, total=False):
|
|||||||
"latents",
|
"latents",
|
||||||
"model",
|
"model",
|
||||||
"control",
|
"control",
|
||||||
|
"image_collection",
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
tags: List[str]
|
tags: List[str]
|
||||||
|
@ -4,13 +4,16 @@ from typing import Literal
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pydantic import Field, validator
|
from pydantic import Field, validator
|
||||||
|
from invokeai.app.models.image import ImageField
|
||||||
|
|
||||||
from invokeai.app.util.misc import SEED_MAX, get_random_seed
|
from invokeai.app.util.misc import SEED_MAX, get_random_seed
|
||||||
|
|
||||||
from .baseinvocation import (
|
from .baseinvocation import (
|
||||||
BaseInvocation,
|
BaseInvocation,
|
||||||
|
InvocationConfig,
|
||||||
InvocationContext,
|
InvocationContext,
|
||||||
BaseInvocationOutput,
|
BaseInvocationOutput,
|
||||||
|
UIConfig,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -22,6 +25,7 @@ class IntCollectionOutput(BaseInvocationOutput):
|
|||||||
# Outputs
|
# Outputs
|
||||||
collection: list[int] = Field(default=[], description="The int collection")
|
collection: list[int] = Field(default=[], description="The int collection")
|
||||||
|
|
||||||
|
|
||||||
class FloatCollectionOutput(BaseInvocationOutput):
|
class FloatCollectionOutput(BaseInvocationOutput):
|
||||||
"""A collection of floats"""
|
"""A collection of floats"""
|
||||||
|
|
||||||
@ -31,6 +35,18 @@ class FloatCollectionOutput(BaseInvocationOutput):
|
|||||||
collection: list[float] = Field(default=[], description="The float collection")
|
collection: list[float] = Field(default=[], description="The float collection")
|
||||||
|
|
||||||
|
|
||||||
|
class ImageCollectionOutput(BaseInvocationOutput):
|
||||||
|
"""A collection of images"""
|
||||||
|
|
||||||
|
type: Literal["image_collection"] = "image_collection"
|
||||||
|
|
||||||
|
# Outputs
|
||||||
|
collection: list[ImageField] = Field(default=[], description="The output images")
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
schema_extra = {"required": ["type", "collection"]}
|
||||||
|
|
||||||
|
|
||||||
class RangeInvocation(BaseInvocation):
|
class RangeInvocation(BaseInvocation):
|
||||||
"""Creates a range of numbers from start to stop with step"""
|
"""Creates a range of numbers from start to stop with step"""
|
||||||
|
|
||||||
@ -92,3 +108,27 @@ class RandomRangeInvocation(BaseInvocation):
|
|||||||
return IntCollectionOutput(
|
return IntCollectionOutput(
|
||||||
collection=list(rng.integers(low=self.low, high=self.high, size=self.size))
|
collection=list(rng.integers(low=self.low, high=self.high, size=self.size))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ImageCollectionInvocation(BaseInvocation):
|
||||||
|
"""Load a collection of images and provide it as output."""
|
||||||
|
|
||||||
|
# fmt: off
|
||||||
|
type: Literal["image_collection"] = "image_collection"
|
||||||
|
|
||||||
|
# Inputs
|
||||||
|
images: list[ImageField] = Field(
|
||||||
|
default=[], description="The image collection to load"
|
||||||
|
)
|
||||||
|
# fmt: on
|
||||||
|
def invoke(self, context: InvocationContext) -> ImageCollectionOutput:
|
||||||
|
return ImageCollectionOutput(collection=self.images)
|
||||||
|
|
||||||
|
class Config(InvocationConfig):
|
||||||
|
schema_extra = {
|
||||||
|
"ui": {
|
||||||
|
"type_hints": {
|
||||||
|
"images": "image_collection",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user