From 627444e17c870d3f3c404cbc6adaf818b2b97a21 Mon Sep 17 00:00:00 2001 From: Brandon Rising Date: Thu, 21 Sep 2023 18:55:26 -0400 Subject: [PATCH] Add images to a board through nodes --- invokeai/app/invocations/boards.py | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 invokeai/app/invocations/boards.py diff --git a/invokeai/app/invocations/boards.py b/invokeai/app/invocations/boards.py new file mode 100644 index 0000000000..7855265dfb --- /dev/null +++ b/invokeai/app/invocations/boards.py @@ -0,0 +1,54 @@ +# Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) + +from invokeai.app.invocations.metadata import CoreMetadata +from invokeai.app.invocations.primitives import ImageField + +from .baseinvocation import BaseInvocation, FieldDescriptions, InputField, InvocationContext, invocation, invocation_output, OutputField, BaseInvocationOutput + + +@invocation_output("image_to_board_output") +class ImageToBoardOutput(BaseInvocationOutput): + image: ImageField = OutputField(description="The image that was associated") + board_name: str = OutputField(description="Board this image was associated with") + + +@invocation( + "image_to_board", + title="Associate Image with Board", + tags=["primitives", "board"], + category="primitives", + version="1.0.0", + use_cache=False, +) +class ImageToBoardInvocation(BaseInvocation): + """Associates an image with a board so you view it in the board's gallery.""" + + image: ImageField = InputField(description="The image to associate") + board_name: str = InputField(description="Name of the board you'd like associate this image with") + + metadata: CoreMetadata = InputField( + default=None, + description=FieldDescriptions.core_metadata, + ui_hidden=True, + ) + + def invoke(self, context: InvocationContext) -> ImageToBoardOutput: + board_id = None + page = 0 + page_size = 10 + while not board_id: + boards = context.services.boards.get_many(page * page_size, page_size) + board_id = next(board.board_id for board in boards.items if board.board_name == self.board_name) + page += 1 + if len(boards < page_size): + break + + context.services.board_images.add_image_to_board( + board_id=board_id, + image_name=self.image.image_name, + ) + + return ImageToBoardOutput( + image=self.image, + board_id=board_id + )