Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions comfy_api/latest/_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -1249,6 +1249,7 @@ class NodeInfoV1:
experimental: bool=None
api_node: bool=None
price_badge: dict | None = None
search_aliases: list[str]=None

@dataclass
class NodeInfoV3:
Expand Down Expand Up @@ -1346,6 +1347,8 @@ class Schema:
hidden: list[Hidden] = field(default_factory=list)
description: str=""
"""Node description, shown as a tooltip when hovering over the node."""
search_aliases: list[str] = field(default_factory=list)
"""Alternative names for search. Useful for synonyms, abbreviations, or old names after renaming."""
is_input_list: bool = False
"""A flag indicating if this node implements the additional code necessary to deal with OUTPUT_IS_LIST nodes.

Expand Down Expand Up @@ -1483,6 +1486,7 @@ def get_v1_info(self, cls) -> NodeInfoV1:
api_node=self.is_api_node,
python_module=getattr(cls, "RELATIVE_PYTHON_MODULE", "nodes"),
price_badge=self.price_badge.as_dict(self.inputs) if self.price_badge is not None else None,
search_aliases=self.search_aliases if self.search_aliases else None,
)
return info

Expand Down
1 change: 1 addition & 0 deletions comfy_extras/nodes_post_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,7 @@ def define_schema(cls):
node_id="BatchImagesNode",
display_name="Batch Images",
category="image",
search_aliases=["batch", "image batch", "batch images", "combine images", "merge images", "stack images"],
inputs=[
io.Autogrow.Input("images", template=autogrow_template)
],
Expand Down
1 change: 1 addition & 0 deletions comfy_extras/nodes_preview_any.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def INPUT_TYPES(cls):
OUTPUT_NODE = True

CATEGORY = "utils"
SEARCH_ALIASES = ["preview", "show", "display", "view", "show text", "display text", "preview text", "show output", "inspect", "debug"]

def main(self, source=None):
value = 'None'
Expand Down
1 change: 1 addition & 0 deletions comfy_extras/nodes_string.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ def define_schema(cls):
node_id="StringConcatenate",
display_name="Concatenate",
category="utils/string",
search_aliases=["text concat", "join text", "merge text", "combine strings", "concat", "concatenate", "append text", "combine text", "string"],
inputs=[
io.String.Input("string_a", multiline=True),
io.String.Input("string_b", multiline=True),
Expand Down
1 change: 1 addition & 0 deletions comfy_extras/nodes_upscale_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def define_schema(cls):
node_id="ImageUpscaleWithModel",
display_name="Upscale Image (using Model)",
category="image/upscaling",
search_aliases=["upscale", "upscaler", "upsc", "enlarge image", "super resolution", "hires", "superres", "increase resolution"],
inputs=[
io.UpscaleModel.Input("upscale_model"),
io.Image.Input("image"),
Expand Down
15 changes: 15 additions & 0 deletions nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def INPUT_TYPES(s) -> InputTypeDict:

CATEGORY = "conditioning"
DESCRIPTION = "Encodes a text prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images."
SEARCH_ALIASES = ["text", "prompt", "text prompt", "positive prompt", "negative prompt", "encode text", "text encoder", "encode prompt"]

def encode(self, clip, text):
if clip is None:
Expand All @@ -86,6 +87,7 @@ def INPUT_TYPES(s):
FUNCTION = "combine"

CATEGORY = "conditioning"
SEARCH_ALIASES = ["combine", "merge conditioning", "combine prompts", "merge prompts", "mix prompts", "add prompt"]

def combine(self, conditioning_1, conditioning_2):
return (conditioning_1 + conditioning_2, )
Expand Down Expand Up @@ -294,6 +296,7 @@ def INPUT_TYPES(s):

CATEGORY = "latent"
DESCRIPTION = "Decodes latent images back into pixel space images."
SEARCH_ALIASES = ["decode", "decode latent", "latent to image", "render latent"]

def decode(self, vae, samples):
latent = samples["samples"]
Expand Down Expand Up @@ -346,6 +349,7 @@ def INPUT_TYPES(s):
FUNCTION = "encode"

CATEGORY = "latent"
SEARCH_ALIASES = ["encode", "encode image", "image to latent"]

def encode(self, vae, pixels):
t = vae.encode(pixels)
Expand Down Expand Up @@ -581,6 +585,7 @@ def INPUT_TYPES(s):

CATEGORY = "loaders"
DESCRIPTION = "Loads a diffusion model checkpoint, diffusion models are used to denoise latents."
SEARCH_ALIASES = ["load model", "checkpoint", "model loader", "load checkpoint", "ckpt", "model"]

def load_checkpoint(self, ckpt_name):
ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name)
Expand Down Expand Up @@ -667,6 +672,7 @@ def INPUT_TYPES(s):

CATEGORY = "loaders"
DESCRIPTION = "LoRAs are used to modify diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together."
SEARCH_ALIASES = ["lora", "load lora", "apply lora", "lora loader", "lora model"]

def load_lora(self, model, clip, lora_name, strength_model, strength_clip):
if strength_model == 0 and strength_clip == 0:
Expand Down Expand Up @@ -814,6 +820,7 @@ def INPUT_TYPES(s):
FUNCTION = "load_controlnet"

CATEGORY = "loaders"
SEARCH_ALIASES = ["controlnet", "control net", "cn", "load controlnet", "controlnet loader"]

def load_controlnet(self, control_net_name):
controlnet_path = folder_paths.get_full_path_or_raise("controlnet", control_net_name)
Expand Down Expand Up @@ -890,6 +897,7 @@ def INPUT_TYPES(s):
FUNCTION = "apply_controlnet"

CATEGORY = "conditioning/controlnet"
SEARCH_ALIASES = ["controlnet", "apply controlnet", "use controlnet", "control net"]

def apply_controlnet(self, positive, negative, control_net, image, strength, start_percent, end_percent, vae=None, extra_concat=[]):
if strength == 0:
Expand Down Expand Up @@ -1200,6 +1208,7 @@ def INPUT_TYPES(s):

CATEGORY = "latent"
DESCRIPTION = "Create a new batch of empty latent images to be denoised via sampling."
SEARCH_ALIASES = ["empty", "empty latent", "new latent", "create latent", "blank latent", "blank"]

def generate(self, width, height, batch_size=1):
latent = torch.zeros([batch_size, 4, height // 8, width // 8], device=self.device)
Expand Down Expand Up @@ -1540,6 +1549,7 @@ def INPUT_TYPES(s):

CATEGORY = "sampling"
DESCRIPTION = "Uses the provided model, positive and negative conditioning to denoise the latent image."
SEARCH_ALIASES = ["sampler", "sample", "generate", "denoise", "diffuse", "txt2img", "img2img"]

def sample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=1.0):
return common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=denoise)
Expand Down Expand Up @@ -1604,6 +1614,7 @@ def INPUT_TYPES(s):

CATEGORY = "image"
DESCRIPTION = "Saves the input images to your ComfyUI output directory."
SEARCH_ALIASES = ["save", "save image", "export image", "output image", "write image", "download"]

def save_images(self, images, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None):
filename_prefix += self.prefix_append
Expand Down Expand Up @@ -1640,6 +1651,8 @@ def __init__(self):
self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5))
self.compress_level = 1

SEARCH_ALIASES = ["preview", "preview image", "show image", "view image", "display image", "image viewer"]

@classmethod
def INPUT_TYPES(s):
return {"required":
Expand All @@ -1658,6 +1671,7 @@ def INPUT_TYPES(s):
}

CATEGORY = "image"
SEARCH_ALIASES = ["load image", "open image", "import image", "image input", "upload image", "read image", "image loader"]

RETURN_TYPES = ("IMAGE", "MASK")
FUNCTION = "load_image"
Expand Down Expand Up @@ -1810,6 +1824,7 @@ def INPUT_TYPES(s):
FUNCTION = "upscale"

CATEGORY = "image/upscaling"
SEARCH_ALIASES = ["resize", "resize image", "scale image", "image resize", "zoom", "zoom in", "change size"]

def upscale(self, image, upscale_method, width, height, crop):
if width == 0 and height == 0:
Expand Down
2 changes: 2 additions & 0 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -682,6 +682,8 @@ def node_info(node_class):

if hasattr(obj_class, 'API_NODE'):
info['api_node'] = obj_class.API_NODE

info['search_aliases'] = getattr(obj_class, 'SEARCH_ALIASES', [])
return info

@routes.get("/object_info")
Expand Down