Skip to content

Commit 0860fdd

Browse files
feat: add SEARCH_ALIASES for image, mask, and string nodes
Add search aliases to nodes in comfy_extras for better discoverability: - nodes_mask.py: mask manipulation nodes - nodes_images.py: image processing nodes - nodes_post_processing.py: post-processing effect nodes - nodes_string.py: string manipulation nodes - nodes_compositing.py: compositing nodes - nodes_morphology.py: morphological operation nodes - nodes_latent.py: latent space nodes Uses search_aliases parameter in io.Schema() for v3 nodes.
1 parent dcde864 commit 0860fdd

File tree

7 files changed

+52
-7
lines changed

7 files changed

+52
-7
lines changed

comfy_extras/nodes_compositing.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class PorterDuffImageComposite(io.ComfyNode):
109109
def define_schema(cls):
110110
return io.Schema(
111111
node_id="PorterDuffImageComposite",
112+
search_aliases=["alpha composite", "blend modes", "layer blend", "transparency blend"],
112113
display_name="Porter-Duff Image Composite",
113114
category="mask/compositing",
114115
inputs=[
@@ -165,6 +166,7 @@ class SplitImageWithAlpha(io.ComfyNode):
165166
def define_schema(cls):
166167
return io.Schema(
167168
node_id="SplitImageWithAlpha",
169+
search_aliases=["extract alpha", "separate transparency", "remove alpha"],
168170
display_name="Split Image with Alpha",
169171
category="mask/compositing",
170172
inputs=[
@@ -188,6 +190,7 @@ class JoinImageWithAlpha(io.ComfyNode):
188190
def define_schema(cls):
189191
return io.Schema(
190192
node_id="JoinImageWithAlpha",
193+
search_aliases=["add transparency", "apply alpha", "composite alpha", "RGBA"],
191194
display_name="Join Image with Alpha",
192195
category="mask/compositing",
193196
inputs=[

comfy_extras/nodes_images.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class ImageCrop(IO.ComfyNode):
2222
def define_schema(cls):
2323
return IO.Schema(
2424
node_id="ImageCrop",
25+
search_aliases=["trim"],
2526
display_name="Image Crop",
2627
category="image/transform",
2728
inputs=[
@@ -51,6 +52,7 @@ class RepeatImageBatch(IO.ComfyNode):
5152
def define_schema(cls):
5253
return IO.Schema(
5354
node_id="RepeatImageBatch",
55+
search_aliases=["duplicate image", "clone image"],
5456
category="image/batch",
5557
inputs=[
5658
IO.Image.Input("image"),
@@ -72,6 +74,7 @@ class ImageFromBatch(IO.ComfyNode):
7274
def define_schema(cls):
7375
return IO.Schema(
7476
node_id="ImageFromBatch",
77+
search_aliases=["select image", "pick from batch", "extract image"],
7578
category="image/batch",
7679
inputs=[
7780
IO.Image.Input("image"),
@@ -97,6 +100,7 @@ class ImageAddNoise(IO.ComfyNode):
97100
def define_schema(cls):
98101
return IO.Schema(
99102
node_id="ImageAddNoise",
103+
search_aliases=["film grain"],
100104
category="image",
101105
inputs=[
102106
IO.Image.Input("image"),
@@ -194,11 +198,11 @@ def execute(cls, images, fps, compress_level, filename_prefix="ComfyUI") -> IO.N
194198

195199
class ImageStitch(IO.ComfyNode):
196200
"""Upstreamed from https://github.com/kijai/ComfyUI-KJNodes"""
197-
198201
@classmethod
199202
def define_schema(cls):
200203
return IO.Schema(
201204
node_id="ImageStitch",
205+
search_aliases=["combine images", "join images", "concatenate images", "side by side"],
202206
display_name="Image Stitch",
203207
description="Stitches image2 to image1 in the specified direction.\n"
204208
"If image2 is not provided, returns image1 unchanged.\n"
@@ -369,11 +373,11 @@ def execute(
369373

370374

371375
class ResizeAndPadImage(IO.ComfyNode):
372-
373376
@classmethod
374377
def define_schema(cls):
375378
return IO.Schema(
376379
node_id="ResizeAndPadImage",
380+
search_aliases=["fit to size"],
377381
category="image/transform",
378382
inputs=[
379383
IO.Image.Input("image"),
@@ -420,11 +424,11 @@ def execute(cls, image, target_width, target_height, padding_color, interpolatio
420424

421425

422426
class SaveSVGNode(IO.ComfyNode):
423-
424427
@classmethod
425428
def define_schema(cls):
426429
return IO.Schema(
427430
node_id="SaveSVGNode",
431+
search_aliases=["export vector", "save vector graphics"],
428432
description="Save SVG files on disk.",
429433
category="image/save",
430434
inputs=[
@@ -492,11 +496,11 @@ def replacement(match):
492496

493497

494498
class GetImageSize(IO.ComfyNode):
495-
496499
@classmethod
497500
def define_schema(cls):
498501
return IO.Schema(
499502
node_id="GetImageSize",
503+
search_aliases=["dimensions", "resolution", "image info"],
500504
display_name="Get Image Size",
501505
description="Returns width and height of the image, and passes it through unchanged.",
502506
category="image",
@@ -527,11 +531,11 @@ def execute(cls, image) -> IO.NodeOutput:
527531

528532

529533
class ImageRotate(IO.ComfyNode):
530-
531534
@classmethod
532535
def define_schema(cls):
533536
return IO.Schema(
534537
node_id="ImageRotate",
538+
search_aliases=["turn", "flip orientation"],
535539
category="image/transform",
536540
inputs=[
537541
IO.Image.Input("image"),
@@ -557,11 +561,11 @@ def execute(cls, image, rotation) -> IO.NodeOutput:
557561

558562

559563
class ImageFlip(IO.ComfyNode):
560-
561564
@classmethod
562565
def define_schema(cls):
563566
return IO.Schema(
564567
node_id="ImageFlip",
568+
search_aliases=["mirror", "reflect"],
565569
category="image/transform",
566570
inputs=[
567571
IO.Image.Input("image"),

comfy_extras/nodes_latent.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class LatentAdd(io.ComfyNode):
2121
def define_schema(cls):
2222
return io.Schema(
2323
node_id="LatentAdd",
24+
search_aliases=["combine latents", "sum latents"],
2425
category="latent/advanced",
2526
inputs=[
2627
io.Latent.Input("samples1"),
@@ -47,6 +48,7 @@ class LatentSubtract(io.ComfyNode):
4748
def define_schema(cls):
4849
return io.Schema(
4950
node_id="LatentSubtract",
51+
search_aliases=["difference latent", "remove features"],
5052
category="latent/advanced",
5153
inputs=[
5254
io.Latent.Input("samples1"),
@@ -73,6 +75,7 @@ class LatentMultiply(io.ComfyNode):
7375
def define_schema(cls):
7476
return io.Schema(
7577
node_id="LatentMultiply",
78+
search_aliases=["scale latent", "amplify latent", "latent gain"],
7679
category="latent/advanced",
7780
inputs=[
7881
io.Latent.Input("samples"),
@@ -96,6 +99,7 @@ class LatentInterpolate(io.ComfyNode):
9699
def define_schema(cls):
97100
return io.Schema(
98101
node_id="LatentInterpolate",
102+
search_aliases=["blend latent", "mix latent", "lerp latent", "transition"],
99103
category="latent/advanced",
100104
inputs=[
101105
io.Latent.Input("samples1"),
@@ -134,6 +138,7 @@ class LatentConcat(io.ComfyNode):
134138
def define_schema(cls):
135139
return io.Schema(
136140
node_id="LatentConcat",
141+
search_aliases=["join latents", "stitch latents"],
137142
category="latent/advanced",
138143
inputs=[
139144
io.Latent.Input("samples1"),
@@ -173,6 +178,7 @@ class LatentCut(io.ComfyNode):
173178
def define_schema(cls):
174179
return io.Schema(
175180
node_id="LatentCut",
181+
search_aliases=["crop latent", "slice latent", "extract region"],
176182
category="latent/advanced",
177183
inputs=[
178184
io.Latent.Input("samples"),
@@ -213,6 +219,7 @@ class LatentCutToBatch(io.ComfyNode):
213219
def define_schema(cls):
214220
return io.Schema(
215221
node_id="LatentCutToBatch",
222+
search_aliases=["slice to batch", "split latent", "tile latent"],
216223
category="latent/advanced",
217224
inputs=[
218225
io.Latent.Input("samples"),
@@ -254,6 +261,7 @@ class LatentBatch(io.ComfyNode):
254261
def define_schema(cls):
255262
return io.Schema(
256263
node_id="LatentBatch",
264+
search_aliases=["combine latents", "merge latents", "join latents"],
257265
category="latent/batch",
258266
is_deprecated=True,
259267
inputs=[
@@ -310,6 +318,7 @@ class LatentApplyOperation(io.ComfyNode):
310318
def define_schema(cls):
311319
return io.Schema(
312320
node_id="LatentApplyOperation",
321+
search_aliases=["transform latent"],
313322
category="latent/advanced/operations",
314323
is_experimental=True,
315324
inputs=[
@@ -365,6 +374,7 @@ class LatentOperationTonemapReinhard(io.ComfyNode):
365374
def define_schema(cls):
366375
return io.Schema(
367376
node_id="LatentOperationTonemapReinhard",
377+
search_aliases=["hdr latent"],
368378
category="latent/advanced/operations",
369379
is_experimental=True,
370380
inputs=[

comfy_extras/nodes_mask.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class LatentCompositeMasked(IO.ComfyNode):
5050
def define_schema(cls):
5151
return IO.Schema(
5252
node_id="LatentCompositeMasked",
53+
search_aliases=["overlay latent", "layer latent", "paste latent", "inpaint latent"],
5354
category="latent",
5455
inputs=[
5556
IO.Latent.Input("destination"),
@@ -78,6 +79,7 @@ class ImageCompositeMasked(IO.ComfyNode):
7879
def define_schema(cls):
7980
return IO.Schema(
8081
node_id="ImageCompositeMasked",
82+
search_aliases=["paste image", "overlay", "layer"],
8183
category="image",
8284
inputs=[
8385
IO.Image.Input("destination"),
@@ -105,6 +107,7 @@ class MaskToImage(IO.ComfyNode):
105107
def define_schema(cls):
106108
return IO.Schema(
107109
node_id="MaskToImage",
110+
search_aliases=["convert mask"],
108111
display_name="Convert Mask to Image",
109112
category="mask",
110113
inputs=[
@@ -126,6 +129,7 @@ class ImageToMask(IO.ComfyNode):
126129
def define_schema(cls):
127130
return IO.Schema(
128131
node_id="ImageToMask",
132+
search_aliases=["extract channel", "channel to mask"],
129133
display_name="Convert Image to Mask",
130134
category="mask",
131135
inputs=[
@@ -149,6 +153,7 @@ class ImageColorToMask(IO.ComfyNode):
149153
def define_schema(cls):
150154
return IO.Schema(
151155
node_id="ImageColorToMask",
156+
search_aliases=["color keying", "chroma key"],
152157
category="mask",
153158
inputs=[
154159
IO.Image.Input("image"),
@@ -194,6 +199,7 @@ class InvertMask(IO.ComfyNode):
194199
def define_schema(cls):
195200
return IO.Schema(
196201
node_id="InvertMask",
202+
search_aliases=["reverse mask", "flip mask"],
197203
category="mask",
198204
inputs=[
199205
IO.Mask.Input("mask"),
@@ -214,6 +220,7 @@ class CropMask(IO.ComfyNode):
214220
def define_schema(cls):
215221
return IO.Schema(
216222
node_id="CropMask",
223+
search_aliases=["cut mask", "extract mask region", "mask slice"],
217224
category="mask",
218225
inputs=[
219226
IO.Mask.Input("mask"),
@@ -239,6 +246,7 @@ class MaskComposite(IO.ComfyNode):
239246
def define_schema(cls):
240247
return IO.Schema(
241248
node_id="MaskComposite",
249+
search_aliases=["combine masks", "blend masks", "layer masks"],
242250
category="mask",
243251
inputs=[
244252
IO.Mask.Input("destination"),
@@ -287,6 +295,7 @@ class FeatherMask(IO.ComfyNode):
287295
def define_schema(cls):
288296
return IO.Schema(
289297
node_id="FeatherMask",
298+
search_aliases=["soft edge mask", "blur mask edges", "gradient mask edge"],
290299
category="mask",
291300
inputs=[
292301
IO.Mask.Input("mask"),
@@ -333,6 +342,7 @@ class GrowMask(IO.ComfyNode):
333342
def define_schema(cls):
334343
return IO.Schema(
335344
node_id="GrowMask",
345+
search_aliases=["expand mask", "shrink mask"],
336346
display_name="Grow Mask",
337347
category="mask",
338348
inputs=[
@@ -370,6 +380,7 @@ class ThresholdMask(IO.ComfyNode):
370380
def define_schema(cls):
371381
return IO.Schema(
372382
node_id="ThresholdMask",
383+
search_aliases=["binary mask"],
373384
category="mask",
374385
inputs=[
375386
IO.Mask.Input("mask"),
@@ -394,6 +405,7 @@ class MaskPreview(IO.ComfyNode):
394405
def define_schema(cls):
395406
return IO.Schema(
396407
node_id="MaskPreview",
408+
search_aliases=["show mask", "view mask", "inspect mask", "debug mask"],
397409
display_name="Preview Mask",
398410
category="mask",
399411
description="Saves the input images to your ComfyUI output directory.",

comfy_extras/nodes_morphology.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class Morphology(io.ComfyNode):
1212
def define_schema(cls):
1313
return io.Schema(
1414
node_id="Morphology",
15+
search_aliases=["erode", "dilate"],
1516
display_name="ImageMorphology",
1617
category="image/postprocessing",
1718
inputs=[
@@ -57,6 +58,7 @@ class ImageRGBToYUV(io.ComfyNode):
5758
def define_schema(cls):
5859
return io.Schema(
5960
node_id="ImageRGBToYUV",
61+
search_aliases=["color space conversion"],
6062
category="image/batch",
6163
inputs=[
6264
io.Image.Input("image"),
@@ -78,6 +80,7 @@ class ImageYUVToRGB(io.ComfyNode):
7880
def define_schema(cls):
7981
return io.Schema(
8082
node_id="ImageYUVToRGB",
83+
search_aliases=["color space conversion"],
8184
category="image/batch",
8285
inputs=[
8386
io.Image.Input("Y"),

comfy_extras/nodes_post_processing.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,6 @@ def scale_to_multiple_cover(input: torch.Tensor, multiple: int, scale_method: st
402402
return input[:, y0:y1, x0:x1]
403403

404404
class ResizeImageMaskNode(io.ComfyNode):
405-
406405
scale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]
407406
crop_methods = ["disabled", "center"]
408407

@@ -424,6 +423,7 @@ def define_schema(cls):
424423
crop_combo = io.Combo.Input("crop", options=cls.crop_methods, default="center")
425424
return io.Schema(
426425
node_id="ResizeImageMaskNode",
426+
search_aliases=["scale image", "scale mask"],
427427
display_name="Resize Image/Mask",
428428
category="transform",
429429
inputs=[
@@ -569,6 +569,7 @@ def define_schema(cls):
569569
autogrow_template = io.Autogrow.TemplatePrefix(io.Mask.Input("mask"), prefix="mask", min=2, max=50)
570570
return io.Schema(
571571
node_id="BatchMasksNode",
572+
search_aliases=["combine masks", "stack masks", "merge masks"],
572573
display_name="Batch Masks",
573574
category="mask",
574575
inputs=[
@@ -589,6 +590,7 @@ def define_schema(cls):
589590
autogrow_template = io.Autogrow.TemplatePrefix(io.Latent.Input("latent"), prefix="latent", min=2, max=50)
590591
return io.Schema(
591592
node_id="BatchLatentsNode",
593+
search_aliases=["combine latents", "stack latents", "merge latents"],
592594
display_name="Batch Latents",
593595
category="latent",
594596
inputs=[
@@ -612,6 +614,7 @@ def define_schema(cls):
612614
prefix="input", min=1, max=50)
613615
return io.Schema(
614616
node_id="BatchImagesMasksLatentsNode",
617+
search_aliases=["combine batch", "merge batch", "stack inputs"],
615618
display_name="Batch Images/Masks/Latents",
616619
category="util",
617620
inputs=[

0 commit comments

Comments
 (0)