mirror of
https://git.datalinker.icu/kijai/ComfyUI-KJNodes.git
synced 2026-06-01 20:20:07 +08:00
Add Split/Merge image channels -nodes
This commit is contained in:
parent
2405a6192a
commit
edae7ef9d2
@ -56,6 +56,8 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"ImagePass": ImagePass,
|
"ImagePass": ImagePass,
|
||||||
"ImagePadForOutpaintMasked": ImagePadForOutpaintMasked,
|
"ImagePadForOutpaintMasked": ImagePadForOutpaintMasked,
|
||||||
"ImageAndMaskPreview": ImageAndMaskPreview,
|
"ImageAndMaskPreview": ImageAndMaskPreview,
|
||||||
|
"SplitImageChannels": SplitImageChannels,
|
||||||
|
"MergeImageChannels": MergeImageChannels,
|
||||||
#batch cropping
|
#batch cropping
|
||||||
"BatchCropFromMask": BatchCropFromMask,
|
"BatchCropFromMask": BatchCropFromMask,
|
||||||
"BatchCropFromMaskAdvanced": BatchCropFromMaskAdvanced,
|
"BatchCropFromMaskAdvanced": BatchCropFromMaskAdvanced,
|
||||||
@ -194,6 +196,8 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
|||||||
"FloatToSigmas": "Float To Sigmas",
|
"FloatToSigmas": "Float To Sigmas",
|
||||||
"CustomSigmas": "Custom Sigmas",
|
"CustomSigmas": "Custom Sigmas",
|
||||||
"ImagePass": "ImagePass",
|
"ImagePass": "ImagePass",
|
||||||
|
"SplitImageChannels": "Split Image Channels",
|
||||||
|
"MergeImageChannels": "Merge Image Channels",
|
||||||
#curve nodes
|
#curve nodes
|
||||||
"SplineEditor": "Spline Editor",
|
"SplineEditor": "Spline Editor",
|
||||||
"CreateShapeMaskOnPath": "Create Shape Mask On Path",
|
"CreateShapeMaskOnPath": "Create Shape Mask On Path",
|
||||||
|
|||||||
@ -3558,7 +3558,70 @@ Remaps the image values to the specified range.
|
|||||||
if clamp:
|
if clamp:
|
||||||
image = torch.clamp(image, min=0.0, max=1.0)
|
image = torch.clamp(image, min=0.0, max=1.0)
|
||||||
return (image, )
|
return (image, )
|
||||||
|
|
||||||
|
class SplitImageChannels:
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
return {"required": {
|
||||||
|
"image": ("IMAGE",),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "MASK")
|
||||||
|
RETURN_NAMES = ("red", "green", "blue", "mask")
|
||||||
|
FUNCTION = "split"
|
||||||
|
CATEGORY = "KJNodes/image"
|
||||||
|
DESCRIPTION = """
|
||||||
|
Splits image channels into images where the selected channel
|
||||||
|
is repeated for all channels, and the alpha as a mask.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def split(self, image):
|
||||||
|
red = image[:, :, :, 0:1] # Red channel
|
||||||
|
green = image[:, :, :, 1:2] # Green channel
|
||||||
|
blue = image[:, :, :, 2:3] # Blue channel
|
||||||
|
alpha = image[:, :, :, 3:4] # Alpha channel
|
||||||
|
alpha = alpha.squeeze(-1)
|
||||||
|
|
||||||
|
# Repeat the selected channel for all channels
|
||||||
|
red = torch.cat([red, red, red], dim=3)
|
||||||
|
green = torch.cat([green, green, green], dim=3)
|
||||||
|
blue = torch.cat([blue, blue, blue], dim=3)
|
||||||
|
return (red, green, blue, alpha)
|
||||||
|
|
||||||
|
class MergeImageChannels:
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
return {"required": {
|
||||||
|
"red": ("IMAGE",),
|
||||||
|
"green": ("IMAGE",),
|
||||||
|
"blue": ("IMAGE",),
|
||||||
|
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"mask": ("MASK", {"default": None}),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ("IMAGE",)
|
||||||
|
RETURN_NAMES = ("image",)
|
||||||
|
FUNCTION = "merge"
|
||||||
|
CATEGORY = "KJNodes/image"
|
||||||
|
DESCRIPTION = """
|
||||||
|
Merges channel data into an image.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def merge(self, red, green, blue, alpha=None):
|
||||||
|
image = torch.stack([
|
||||||
|
red[..., 0, None], # Red channel
|
||||||
|
green[..., 1, None], # Green channel
|
||||||
|
blue[..., 2, None] # Blue channel
|
||||||
|
], dim=-1)
|
||||||
|
image = image.squeeze(-2)
|
||||||
|
if alpha is not None:
|
||||||
|
image = torch.cat([image, alpha], dim=-1)
|
||||||
|
return (image,)
|
||||||
|
|
||||||
class CameraPoseVisualizer:
|
class CameraPoseVisualizer:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user