mirror of
https://git.datalinker.icu/kijai/ComfyUI-KJNodes.git
synced 2025-12-09 21:04:41 +08:00
Add CrossFadeImages -node
This commit is contained in:
parent
ec5adf5f62
commit
432301313f
81
nodes.py
81
nodes.py
@ -9,7 +9,7 @@ import librosa
|
||||
from scipy.special import erf
|
||||
from .fluid import Fluid
|
||||
import comfy.model_management
|
||||
|
||||
import math
|
||||
from nodes import MAX_RESOLUTION
|
||||
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
@ -266,6 +266,83 @@ class CreateFadeMask:
|
||||
return (1.0 - torch.cat(out, dim=0),)
|
||||
return (torch.cat(out, dim=0),)
|
||||
|
||||
class CrossFadeImages:
|
||||
|
||||
RETURN_TYPES = ("IMAGE",)
|
||||
FUNCTION = "crossfadeimages"
|
||||
CATEGORY = "KJNodes"
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"images_1": ("IMAGE",),
|
||||
"images_2": ("IMAGE",),
|
||||
"interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],),
|
||||
"transition_start_index": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}),
|
||||
"transitioning_frames": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}),
|
||||
"start_level": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 1.0, "step": 0.01}),
|
||||
"end_level": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 1.0, "step": 0.01}),
|
||||
},
|
||||
}
|
||||
|
||||
def crossfadeimages(self, images_1, images_2, transition_start_index, transitioning_frames, interpolation, start_level, end_level):
|
||||
|
||||
def crossfade(images_1, images_2, alpha):
|
||||
crossfade = (1 - alpha) * images_1 + alpha * images_2
|
||||
return crossfade
|
||||
def ease_in(t):
|
||||
return t * t
|
||||
def ease_out(t):
|
||||
return 1 - (1 - t) * (1 - t)
|
||||
def ease_in_out(t):
|
||||
return 3 * t * t - 2 * t * t * t
|
||||
def bounce(t):
|
||||
if t < 0.5:
|
||||
return self.ease_out(t * 2) * 0.5
|
||||
else:
|
||||
return self.ease_in((t - 0.5) * 2) * 0.5 + 0.5
|
||||
def elastic(t):
|
||||
return math.sin(13 * math.pi / 2 * t) * math.pow(2, 10 * (t - 1))
|
||||
def glitchy(t):
|
||||
return t + 0.1 * math.sin(40 * t)
|
||||
def exponential_ease_out(t):
|
||||
return 1 - (1 - t) ** 4
|
||||
|
||||
easing_functions = {
|
||||
"linear": lambda t: t,
|
||||
"ease_in": ease_in,
|
||||
"ease_out": ease_out,
|
||||
"ease_in_out": ease_in_out,
|
||||
"bounce": bounce,
|
||||
"elastic": elastic,
|
||||
"glitchy": glitchy,
|
||||
"exponential_ease_out": exponential_ease_out,
|
||||
}
|
||||
|
||||
|
||||
batch_size = images_1.size(0)
|
||||
crossfade_images = []
|
||||
#transition_frame_length = int(batch_size / transitioning_frames)
|
||||
|
||||
alphas = torch.linspace(start_level, end_level, batch_size)
|
||||
for i in range(batch_size):
|
||||
alpha = alphas[i]
|
||||
image1 = images_1[i]
|
||||
image2 = images_2[i]
|
||||
easing_function = easing_functions.get(interpolation)
|
||||
if i >= transition_start_index and i < transition_start_index + transitioning_frames:
|
||||
# Apply transition effect within the transition frame length
|
||||
transition_alpha = (i - transition_start_index) / transitioning_frames
|
||||
alpha = easing_function(transition_alpha) # Apply the easing function to the alpha value
|
||||
else:
|
||||
alpha = end_level if i < transition_start_index else start_level
|
||||
|
||||
crossfade_image = crossfade(image1, image2, alpha)
|
||||
crossfade_images.append(crossfade_image)
|
||||
|
||||
return (torch.stack(crossfade_images, dim=0),)
|
||||
|
||||
class CreateTextMask:
|
||||
|
||||
RETURN_TYPES = ("IMAGE", "MASK",)
|
||||
@ -764,6 +841,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
"CreateFadeMask": CreateFadeMask,
|
||||
"CreateFluidMask" :CreateFluidMask,
|
||||
"VRAM_Debug" : VRAM_Debug,
|
||||
"CrossFadeImages": CrossFadeImages
|
||||
}
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"INTConstant": "INT Constant",
|
||||
@ -779,4 +857,5 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"CreateFadeMask" : "CreateFadeMask",
|
||||
"CreateFluidMask" : "CreateFluidMask",
|
||||
"VRAM_Debug" : "VRAM Debug",
|
||||
"CrossFadeImages": "CrossFadeImages"
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user