2023-11-18 09:44:17 +00:00
|
|
|
import nodes
|
|
|
|
MAX_RESOLUTION = nodes.MAX_RESOLUTION
|
|
|
|
|
|
|
|
class ImageCrop:
|
|
|
|
@classmethod
|
|
|
|
def INPUT_TYPES(s):
|
|
|
|
return {"required": { "image": ("IMAGE",),
|
|
|
|
"width": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}),
|
|
|
|
"height": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}),
|
|
|
|
"x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}),
|
|
|
|
"y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}),
|
|
|
|
}}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
|
|
FUNCTION = "crop"
|
|
|
|
|
|
|
|
CATEGORY = "image/transform"
|
|
|
|
|
|
|
|
def crop(self, image, width, height, x, y):
|
|
|
|
x = min(x, image.shape[2] - 1)
|
|
|
|
y = min(y, image.shape[1] - 1)
|
|
|
|
to_x = width + x
|
|
|
|
to_y = height + y
|
|
|
|
img = image[:,y:to_y, x:to_x, :]
|
|
|
|
return (img,)
|
|
|
|
|
2023-11-19 11:09:01 +00:00
|
|
|
class RepeatImageBatch:
|
|
|
|
@classmethod
|
|
|
|
def INPUT_TYPES(s):
|
|
|
|
return {"required": { "image": ("IMAGE",),
|
|
|
|
"amount": ("INT", {"default": 1, "min": 1, "max": 64}),
|
|
|
|
}}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
|
|
FUNCTION = "repeat"
|
|
|
|
|
|
|
|
CATEGORY = "image/batch"
|
|
|
|
|
|
|
|
def repeat(self, image, amount):
|
|
|
|
s = image.repeat((amount, 1,1,1))
|
|
|
|
return (s,)
|
2023-11-18 09:44:17 +00:00
|
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
|
|
"ImageCrop": ImageCrop,
|
2023-11-19 11:09:01 +00:00
|
|
|
"RepeatImageBatch": RepeatImageBatch,
|
2023-11-18 09:44:17 +00:00
|
|
|
}
|