mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
CenterPadCrop node (#3861)
* add centerpadcrop node - Allows users to add padding to or crop images from the center - Also outputs a white mask with the dimensions of the output image for use with outpainting * add CenterPadCrop to NODES.md Updates NODES.md with CenterPadCrop entry. * remove mask & output class - Remove "ImageMaskOutput" where both image and mask are output - Remove ability to output mask from node --------- Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
This commit is contained in:
parent
0beb08686c
commit
3e01c396e1
@ -1,13 +1,15 @@
|
|||||||
# List of Default Nodes
|
# List of Default Nodes
|
||||||
|
|
||||||
The table below contains a list of the default nodes shipped with InvokeAI and their descriptions.
|
The table below contains a list of the default nodes shipped with InvokeAI and
|
||||||
|
their descriptions.
|
||||||
|
|
||||||
| Node <img width=160 align="right"> | Function |
|
| Node <img width=160 align="right"> | Function |
|
||||||
|: ---------------------------------- | :--------------------------------------------------------------------------------------|
|
| :------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Add Integers | Adds two numbers |
|
| Add Integers | Adds two numbers |
|
||||||
| Boolean Primitive Collection | A collection of boolean primitive values |
|
| Boolean Primitive Collection | A collection of boolean primitive values |
|
||||||
| Boolean Primitive | A boolean primitive value |
|
| Boolean Primitive | A boolean primitive value |
|
||||||
| Canny Processor | Canny edge detection for ControlNet |
|
| Canny Processor | Canny edge detection for ControlNet |
|
||||||
|
| CenterPadCrop | Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image. |
|
||||||
| CLIP Skip | Skip layers in clip text_encoder model. |
|
| CLIP Skip | Skip layers in clip text_encoder model. |
|
||||||
| Collect | Collects values into a collection |
|
| Collect | Collects values into a collection |
|
||||||
| Color Correct | Shifts the colors of a target image to match the reference image, optionally using a mask to only color-correct certain regions of the target image. |
|
| Color Correct | Shifts the colors of a target image to match the reference image, optionally using a mask to only color-correct certain regions of the target image. |
|
||||||
@ -74,7 +76,7 @@ The table below contains a list of the default nodes shipped with InvokeAI and t
|
|||||||
| Noise | Generates latent noise. |
|
| Noise | Generates latent noise. |
|
||||||
| Normal BAE Processor | Applies NormalBae processing to image |
|
| Normal BAE Processor | Applies NormalBae processing to image |
|
||||||
| ONNX Latents to Image | Generates an image from latents. |
|
| ONNX Latents to Image | Generates an image from latents. |
|
||||||
|ONNX Prompt (Raw) | A node to process inputs and produce outputs. May use dependency injection in __init__ to receive providers.|
|
| ONNX Prompt (Raw) | A node to process inputs and produce outputs. May use dependency injection in **init** to receive providers. |
|
||||||
| ONNX Text to Latents | Generates latents from conditionings. |
|
| ONNX Text to Latents | Generates latents from conditionings. |
|
||||||
| ONNX Model Loader | Loads a main model, outputting its submodels. |
|
| ONNX Model Loader | Loads a main model, outputting its submodels. |
|
||||||
| OpenCV Inpaint | Simple inpaint using opencv. |
|
| OpenCV Inpaint | Simple inpaint using opencv. |
|
||||||
|
@ -100,6 +100,61 @@ class ImageCropInvocation(BaseInvocation, WithWorkflow, WithMetadata):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@invocation(
|
||||||
|
invocation_type="img_pad_crop",
|
||||||
|
title="Center Pad or Crop Image",
|
||||||
|
category="image",
|
||||||
|
tags=["image", "pad", "crop"],
|
||||||
|
version="1.0.0",
|
||||||
|
)
|
||||||
|
class CenterPadCropInvocation(BaseInvocation):
|
||||||
|
"""Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image."""
|
||||||
|
|
||||||
|
image: ImageField = InputField(description="The image to crop")
|
||||||
|
left: int = InputField(
|
||||||
|
default=0,
|
||||||
|
description="Number of pixels to pad/crop from the left (negative values crop inwards, positive values pad outwards)",
|
||||||
|
)
|
||||||
|
right: int = InputField(
|
||||||
|
default=0,
|
||||||
|
description="Number of pixels to pad/crop from the right (negative values crop inwards, positive values pad outwards)",
|
||||||
|
)
|
||||||
|
top: int = InputField(
|
||||||
|
default=0,
|
||||||
|
description="Number of pixels to pad/crop from the top (negative values crop inwards, positive values pad outwards)",
|
||||||
|
)
|
||||||
|
bottom: int = InputField(
|
||||||
|
default=0,
|
||||||
|
description="Number of pixels to pad/crop from the bottom (negative values crop inwards, positive values pad outwards)",
|
||||||
|
)
|
||||||
|
|
||||||
|
def invoke(self, context: InvocationContext) -> ImageOutput:
|
||||||
|
image = context.services.images.get_pil_image(self.image.image_name)
|
||||||
|
|
||||||
|
# Calculate and create new image dimensions
|
||||||
|
new_width = image.width + self.right + self.left
|
||||||
|
new_height = image.height + self.top + self.bottom
|
||||||
|
image_crop = Image.new(mode="RGBA", size=(new_width, new_height), color=(0, 0, 0, 0))
|
||||||
|
|
||||||
|
# Paste new image onto input
|
||||||
|
image_crop.paste(image, (self.left, self.top))
|
||||||
|
|
||||||
|
image_dto = context.services.images.create(
|
||||||
|
image=image_crop,
|
||||||
|
image_origin=ResourceOrigin.INTERNAL,
|
||||||
|
image_category=ImageCategory.GENERAL,
|
||||||
|
node_id=self.id,
|
||||||
|
session_id=context.graph_execution_state_id,
|
||||||
|
is_intermediate=self.is_intermediate,
|
||||||
|
)
|
||||||
|
|
||||||
|
return ImageOutput(
|
||||||
|
image=ImageField(image_name=image_dto.image_name),
|
||||||
|
width=image_dto.width,
|
||||||
|
height=image_dto.height,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@invocation("img_paste", title="Paste Image", tags=["image", "paste"], category="image", version="1.1.0")
|
@invocation("img_paste", title="Paste Image", tags=["image", "paste"], category="image", version="1.1.0")
|
||||||
class ImagePasteInvocation(BaseInvocation, WithWorkflow, WithMetadata):
|
class ImagePasteInvocation(BaseInvocation, WithWorkflow, WithMetadata):
|
||||||
"""Pastes an image into another image."""
|
"""Pastes an image into another image."""
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user