mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
# 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
|
|
)
|