Spaces:
Running
on
Zero
Running
on
Zero
import torch | |
import nodes | |
import inspect | |
from .libs import utils | |
from nodes import MAX_RESOLUTION | |
class ConcatConditioningsWithMultiplier: | |
def INPUT_TYPES(s): | |
flex_inputs = {} | |
stack = inspect.stack() | |
if stack[1].function == 'get_input_data': | |
# bypass validation | |
for x in range(0, 100): | |
flex_inputs[f"multiplier{x}"] = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}) | |
else: | |
flex_inputs["multiplier1"] = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}) | |
return { | |
"required": {"conditioning1": ("CONDITIONING",), }, | |
"optional": flex_inputs | |
} | |
RETURN_TYPES = ("CONDITIONING",) | |
FUNCTION = "doit" | |
CATEGORY = "InspirePack/__for_testing" | |
def doit(self, **kwargs): | |
if "ConditioningMultiplier_PoP" in nodes.NODE_CLASS_MAPPINGS: | |
obj = nodes.NODE_CLASS_MAPPINGS["ConditioningMultiplier_PoP"]() | |
else: | |
utils.try_install_custom_node('https://github.com/picturesonpictures/comfy_PoP', | |
"To use 'ConcatConditioningsWithMultiplier' node, 'comfy_PoP' extension is required.") | |
raise Exception("'comfy_PoP' node isn't installed.") | |
conditioning_to = kwargs['conditioning1'] | |
conditioning_to = obj.multiply_conditioning_strength(conditioning=conditioning_to, multiplier=float(kwargs['multiplier1']))[0] | |
out = None | |
for k, conditioning_from in kwargs.items(): | |
if k == 'conditioning1' or not k.startswith('conditioning'): | |
continue | |
out = [] | |
if len(conditioning_from) > 1: | |
print(f"Warning: ConcatConditioningsWithMultiplier {k} contains more than 1 cond, only the first one will actually be applied to conditioning1.") | |
mkey = 'multiplier' + k[12:] | |
multiplier = float(kwargs[mkey]) | |
conditioning_from = obj.multiply_conditioning_strength(conditioning=conditioning_from, multiplier=multiplier)[0] | |
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 | |
if out is None: | |
return (kwargs['conditioning1'],) | |
else: | |
return (out,) | |
# CREDIT for ConditioningStretch, ConditioningUpscale: Davemane42 | |
# Imported to support archived custom nodes. | |
# original code: https://github.com/Davemane42/ComfyUI_Dave_CustomNode/blob/main/MultiAreaConditioning.py | |
class ConditioningStretch: | |
def __init__(self) -> None: | |
pass | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"conditioning": ("CONDITIONING",), | |
"resolutionX": ("INT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 64}), | |
"resolutionY": ("INT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 64}), | |
"newWidth": ("INT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 64}), | |
"newHeight": ("INT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 64}), | |
# "scalar": ("INT", {"default": 2, "min": 1, "max": 100, "step": 0.5}), | |
}, | |
} | |
RETURN_TYPES = ("CONDITIONING",) | |
CATEGORY = "InspirePack/conditioning" | |
FUNCTION = 'upscale' | |
def upscale(conditioning, resolutionX, resolutionY, newWidth, newHeight, scalar=1): | |
c = [] | |
for t in conditioning: | |
n = [t[0], t[1].copy()] | |
if 'area' in n[1]: | |
newWidth *= scalar | |
newHeight *= scalar | |
x = ((n[1]['area'][3] * 8) * newWidth / resolutionX) // 8 | |
y = ((n[1]['area'][2] * 8) * newHeight / resolutionY) // 8 | |
w = ((n[1]['area'][1] * 8) * newWidth / resolutionX) // 8 | |
h = ((n[1]['area'][0] * 8) * newHeight / resolutionY) // 8 | |
n[1]['area'] = tuple(map(lambda x: (((int(x) + 7) >> 3) << 3), [h, w, y, x])) | |
c.append(n) | |
return (c,) | |
class ConditioningUpscale: | |
def __init__(self) -> None: | |
pass | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"conditioning": ("CONDITIONING",), | |
"scalar": ("INT", {"default": 2, "min": 1, "max": 100, "step": 0.5}), | |
}, | |
} | |
RETURN_TYPES = ("CONDITIONING",) | |
CATEGORY = "InspirePack/conditioning" | |
FUNCTION = 'upscale' | |
def upscale(conditioning, scalar): | |
c = [] | |
for t in conditioning: | |
n = [t[0], t[1].copy()] | |
if 'area' in n[1]: | |
n[1]['area'] = tuple(map(lambda x: ((x * scalar + 7) >> 3) << 3, n[1]['area'])) | |
c.append(n) | |
return (c,) | |
NODE_CLASS_MAPPINGS = { | |
"ConcatConditioningsWithMultiplier //Inspire": ConcatConditioningsWithMultiplier, | |
"ConditioningUpscale //Inspire": ConditioningUpscale, | |
"ConditioningStretch //Inspire": ConditioningStretch, | |
} | |
NODE_DISPLAY_NAME_MAPPINGS = { | |
"ConcatConditioningsWithMultiplier //Inspire": "Concat Conditionings with Multiplier (Inspire)", | |
"ConditioningUpscale //Inspire": "Conditioning Upscale (Inspire)", | |
"ConditioningStretch //Inspire": "Conditioning Stretch (Inspire)", | |
} | |