From 3cefd47a3225cfb02676bceb3bfca00ffd686ffe Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Mon, 11 Dec 2023 11:30:39 +0900 Subject: [PATCH] feat: Concat Conditionings --- README.md | 1 + __init__.py | 2 ++ js/impact-pack.js | 4 +++- modules/impact/config.py | 2 +- modules/impact/special_samplers.py | 34 ++++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 92ab097..d77050a 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,7 @@ This takes latent as input and outputs latent as the result. * String Selector - It selects and returns a portion of the string. When `multiline` mode is disabled, it simply returns the string of the line pointed to by the selector. When `multiline` mode is enabled, it divides the string based on lines that start with `#` and returns them. If the `select` value is larger than the number of items, it will start counting from the first line again and return accordingly. * Combine Conditionings - It takes multiple conditionings as input and combines them into a single conditioning. +* Concat Conditionings - It takes multiple conditionings as input and concat them into a single conditioning. * Logics (experimental) - These nodes are experimental nodes designed to implement the logic for loops and dynamic switching. * ImpactCompare, ImpactConditionalBranch, ImpactInt, ImpactValueSender, ImpactValueReceiver, ImpactImageInfo, ImpactMinMax, ImpactNeg, ImpactConditionalStopIteration diff --git a/__init__.py b/__init__.py index 70b864f..8673175 100644 --- a/__init__.py +++ b/__init__.py @@ -264,6 +264,7 @@ NODE_CLASS_MAPPINGS = { "RegionalPrompt": RegionalPrompt, "ImpactCombineConditionings": CombineConditionings, + "ImpactConcatConditionings": ConcatConditionings, "ImpactSEGSLabelFilter": SEGSLabelFilter, "ImpactSEGSRangeFilter": SEGSRangeFilter, @@ -390,6 +391,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "RemoveNoiseMask": "Remove Noise Mask", "ImpactCombineConditionings": "Combine Conditionings", + "ImpactConcatConditionings": "Concat Conditionings", "ImpactQueueTrigger": "Queue Trigger", "ImpactQueueTriggerCountdown": "Queue Trigger (Countdown)", diff --git a/js/impact-pack.js b/js/impact-pack.js index ef6587a..eb27cec 100644 --- a/js/impact-pack.js +++ b/js/impact-pack.js @@ -370,7 +370,8 @@ app.registerExtension({ } if (nodeData.name === 'ImpactMakeImageList' || nodeData.name === 'ImpactMakeImageBatch' || - nodeData.name === 'CombineRegionalPrompts' || nodeData.name === 'ImpactCombineConditionings' || + nodeData.name === 'CombineRegionalPrompts' || + nodeData.name === 'ImpactCombineConditionings' || nodeData.name === 'ImpactConcatConditionings' || nodeData.name === 'ImpactSEGSConcat' || nodeData.name === 'ImpactSwitch' || nodeData.name === 'LatentSwitch' || nodeData.name == 'SEGSSwitch') { var input_name = "input"; @@ -390,6 +391,7 @@ app.registerExtension({ break; case 'ImpactCombineConditionings': + case 'ImpactConcatConditionings': input_name = "conditioning"; break; diff --git a/modules/impact/config.py b/modules/impact/config.py index eef9b4e..2a385a1 100644 --- a/modules/impact/config.py +++ b/modules/impact/config.py @@ -2,7 +2,7 @@ import configparser import os -version = "V4.44.7" +version = "V4.45" dependency_version = 19 diff --git a/modules/impact/special_samplers.py b/modules/impact/special_samplers.py index 2626035..55188e3 100644 --- a/modules/impact/special_samplers.py +++ b/modules/impact/special_samplers.py @@ -236,8 +236,42 @@ class CombineConditionings: res += v return (res, ) + +class ConcatConditionings: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "conditioning1": ("CONDITIONING", ), + }, + } + RETURN_TYPES = ("CONDITIONING", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/__for_testing" + + def doit(self, **kwargs): + conditioning_to = kwargs[0].values()[0] + + for k, conditioning_from in kwargs.items()[1:]: + out = [] + if len(conditioning_from) > 1: + print("Warning: ConcatConditionings {k} contains more than 1 cond, only the first one will actually be applied to conditioning1.") + + cond_from = conditioning_from[0][0] + + for i in range(len(conditioning_to)): + t1 = conditioning_to[i][0] + tw = torch.cat((t1, cond_from),1) + n = [tw, conditioning_to[i][1].copy()] + out.append(n) + + conditioning_to = out + + return (out, ) + + class RegionalSampler: @classmethod def INPUT_TYPES(s):