mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-02 13:22:32 +08:00
Add new node to split image channels
This commit is contained in:
parent
1de83f91c3
commit
547ed9b4a9
@ -185,6 +185,36 @@ class SplitImageWithAlpha(io.ComfyNode):
|
||||
return io.NodeOutput(torch.stack(out_images), 1.0 - torch.stack(out_alphas))
|
||||
|
||||
|
||||
class SplitImageChannels(io.ComfyNode):
|
||||
@classmethod
|
||||
def define_schema(cls):
|
||||
return io.Schema(
|
||||
node_id="SplitImageChannels",
|
||||
search_aliases=["extract alpha", "extract channels", "separate transparency", "split channels", "remove alpha"],
|
||||
display_name="Split Image Channels",
|
||||
category="mask/compositing",
|
||||
inputs=[
|
||||
io.Image.Input("image"),
|
||||
],
|
||||
outputs=[
|
||||
io.Image.Output(display_name="red"),
|
||||
io.Image.Output(display_name="green"),
|
||||
io.Image.Output(display_name="blue"),
|
||||
io.Mask.Output(display_name="alpha")
|
||||
],
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def execute(cls, image: torch.Tensor) -> io.NodeOutput:
|
||||
images = [i[:,:,:3] for i in image]
|
||||
stacked = torch.stack(images)
|
||||
reds = stacked[:, :, :, 0:1].repeat(1, 1, 1, 3)
|
||||
greens = stacked[:, :, :, 1:2].repeat(1, 1, 1, 3)
|
||||
blues = stacked[:, :, :, 2:3].repeat(1, 1, 1, 3)
|
||||
alphas = [i[:,:,3] if i.shape[2] > 3 else torch.ones_like(i[:,:,0]) for i in image]
|
||||
return io.NodeOutput(reds, greens, blues, 1.0 - torch.stack(alphas))
|
||||
|
||||
|
||||
class JoinImageWithAlpha(io.ComfyNode):
|
||||
@classmethod
|
||||
def define_schema(cls):
|
||||
@ -217,6 +247,7 @@ class CompositingExtension(ComfyExtension):
|
||||
async def get_node_list(self) -> list[type[io.ComfyNode]]:
|
||||
return [
|
||||
PorterDuffImageComposite,
|
||||
SplitImageChannels,
|
||||
SplitImageWithAlpha,
|
||||
JoinImageWithAlpha,
|
||||
]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user