From 60ae7de568a8c67b201e215b0021f348ac092db1 Mon Sep 17 00:00:00 2001 From: MrJs <30782821+mrjschulte@users.noreply.github.com> Date: Sun, 11 Feb 2024 13:06:15 -0800 Subject: [PATCH 1/2] Create "Mix" node This node allow let the user do a quick and simple mix (otherwise known as a dissolve/fade) between two input images. --- .../image_utility/compositing/mix.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py diff --git a/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py b/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py new file mode 100644 index 0000000000..522d4a85ec --- /dev/null +++ b/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import numpy as np + +from nodes.properties.inputs import ImageInput, SliderInput +from nodes.properties.outputs import ImageOutput + +from .. import compositing_group + + +@compositing_group.register( + schema_id="chainner:image:mix", + name="Mix", + description="Mixes 2 images together.", + icon="BsLayersHalf", + inputs=[ + ImageInput("Image A"), + ImageInput("Image B"), + SliderInput( + "Mix", + minimum=0.0, + maximum=1.0, + default=0.5, + precision=4, + controls_step=0.001, + scale="linear", + ), + ], + outputs=[ + ImageOutput( + image_type="Input0", + ) + ], +) +def mix_node(input1: np.ndarray, input2: np.ndarray, mix: float) -> np.ndarray: + mixed_image = (1 - mix) * input1 + mix * input2 + return mixed_image From 219a9b161cf40505d885317cc41b75770c78a895 Mon Sep 17 00:00:00 2001 From: MrJs <30782821+mrjschulte@users.noreply.github.com> Date: Sun, 11 Feb 2024 17:52:27 -0800 Subject: [PATCH 2/2] Update backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py Co-authored-by: Michael Schmidt --- .../chaiNNer_standard/image_utility/compositing/mix.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py b/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py index 522d4a85ec..c7051b23eb 100644 --- a/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py +++ b/backend/src/packages/chaiNNer_standard/image_utility/compositing/mix.py @@ -28,8 +28,14 @@ ], outputs=[ ImageOutput( - image_type="Input0", - ) + image_type=""" + Image { + width: Input0.width & Input1.width, + height: Input0.height & Input1.height, + channels: max(Input0.channels, Input1.channels), + } + """, + ).with_never_reason("Both images must have the same size."), ], ) def mix_node(input1: np.ndarray, input2: np.ndarray, mix: float) -> np.ndarray: