mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-24 13:20:19 +08:00
add search aliases to all nodes (#12035)
* feat: Add search_aliases field to node schema
Adds `search_aliases` field to improve node discoverability. Users can define alternative search terms for nodes (e.g., "text concat" → StringConcatenate).
Changes:
- Add `search_aliases: list[str]` to V3 Schema
- Add `SEARCH_ALIASES` support for V1 nodes
- Include field in `/object_info` response
- Add aliases to high-priority core nodes
V1 usage:
```python
class MyNode:
SEARCH_ALIASES = ["alt name", "synonym"]
```
V3 usage:
```python
io.Schema(
node_id="MyNode",
search_aliases=["alt name", "synonym"],
...
)
```
## Related PRs
- Frontend: Comfy-Org/ComfyUI_frontend#XXXX (draft - merge after this)
- Docs: Comfy-Org/docs#XXXX (draft - merge after stable)
* Propagate search_aliases through V3 Schema.get_v1_info to NodeInfoV1
* feat: add SEARCH_ALIASES for core nodes (#12016)
Add search aliases to 22 core nodes in nodes.py to improve node discoverability:
- Checkpoint/model loaders: CheckpointLoader, DiffusersLoader
- Conditioning nodes: ConditioningAverage, ConditioningSetArea, ConditioningSetMask, ConditioningZeroOut
- Style nodes: StyleModelApply
- Image nodes: LoadImageMask, LoadImageOutput, ImageBatch, ImageInvert, ImagePadForOutpaint
- Latent nodes: LoadLatent, SaveLatent, LatentBlend, LatentComposite, LatentCrop, LatentFlip, LatentFromBatch, LatentUpscale, LatentUpscaleBy, RepeatLatentBatch
* feat: add SEARCH_ALIASES for image, mask, and string nodes (#12017)
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.
* feat: add SEARCH_ALIASES for audio and video nodes (#12018)
Add search aliases to audio and video nodes for better discoverability:
- nodes_audio.py: audio loading, saving, and processing nodes
- nodes_video.py: video loading and processing nodes
- nodes_wan.py: WAN model nodes
Uses search_aliases parameter in io.Schema() for v3 nodes.
* feat: add SEARCH_ALIASES for model and misc nodes (#12019)
Add search aliases to model-related and miscellaneous nodes:
- Model nodes: nodes_model_merging.py, nodes_model_advanced.py, nodes_lora_extract.py
- Sampler nodes: nodes_custom_sampler.py, nodes_align_your_steps.py
- Control nodes: nodes_controlnet.py, nodes_attention_multiply.py, nodes_hooks.py
- Training nodes: nodes_train.py, nodes_dataset.py
- Utility nodes: nodes_logic.py, nodes_canny.py, nodes_differential_diffusion.py
- Architecture-specific: nodes_sd3.py, nodes_pixart.py, nodes_lumina2.py, nodes_kandinsky5.py, nodes_hidream.py, nodes_fresca.py, nodes_hunyuan3d.py
- Media nodes: nodes_load_3d.py, nodes_webcam.py, nodes_preview_any.py, nodes_wanmove.py
Uses search_aliases parameter in io.Schema() for v3 nodes, SEARCH_ALIASES class attribute for legacy nodes.
This commit is contained in:
parent
d7f3241bf6
commit
bbb8864778
@ -28,6 +28,7 @@ class AlignYourStepsScheduler(io.ComfyNode):
|
|||||||
def define_schema(cls) -> io.Schema:
|
def define_schema(cls) -> io.Schema:
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="AlignYourStepsScheduler",
|
node_id="AlignYourStepsScheduler",
|
||||||
|
search_aliases=["AYS scheduler"],
|
||||||
category="sampling/custom_sampling/schedulers",
|
category="sampling/custom_sampling/schedulers",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Combo.Input("model_type", options=["SD1", "SDXL", "SVD"]),
|
io.Combo.Input("model_type", options=["SD1", "SDXL", "SVD"]),
|
||||||
|
|||||||
@ -71,6 +71,7 @@ class CLIPAttentionMultiply(io.ComfyNode):
|
|||||||
def define_schema(cls) -> io.Schema:
|
def define_schema(cls) -> io.Schema:
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPAttentionMultiply",
|
node_id="CLIPAttentionMultiply",
|
||||||
|
search_aliases=["clip attention scale", "text encoder attention"],
|
||||||
category="_for_testing/attention_experiments",
|
category="_for_testing/attention_experiments",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Clip.Input("clip"),
|
io.Clip.Input("clip"),
|
||||||
|
|||||||
@ -69,6 +69,7 @@ class VAEEncodeAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="VAEEncodeAudio",
|
node_id="VAEEncodeAudio",
|
||||||
|
search_aliases=["audio to latent"],
|
||||||
display_name="VAE Encode Audio",
|
display_name="VAE Encode Audio",
|
||||||
category="latent/audio",
|
category="latent/audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -97,6 +98,7 @@ class VAEDecodeAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="VAEDecodeAudio",
|
node_id="VAEDecodeAudio",
|
||||||
|
search_aliases=["latent to audio"],
|
||||||
display_name="VAE Decode Audio",
|
display_name="VAE Decode Audio",
|
||||||
category="latent/audio",
|
category="latent/audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -122,6 +124,7 @@ class SaveAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SaveAudio",
|
node_id="SaveAudio",
|
||||||
|
search_aliases=["export flac"],
|
||||||
display_name="Save Audio (FLAC)",
|
display_name="Save Audio (FLAC)",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -146,6 +149,7 @@ class SaveAudioMP3(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SaveAudioMP3",
|
node_id="SaveAudioMP3",
|
||||||
|
search_aliases=["export mp3"],
|
||||||
display_name="Save Audio (MP3)",
|
display_name="Save Audio (MP3)",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -173,6 +177,7 @@ class SaveAudioOpus(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SaveAudioOpus",
|
node_id="SaveAudioOpus",
|
||||||
|
search_aliases=["export opus"],
|
||||||
display_name="Save Audio (Opus)",
|
display_name="Save Audio (Opus)",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -200,6 +205,7 @@ class PreviewAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="PreviewAudio",
|
node_id="PreviewAudio",
|
||||||
|
search_aliases=["play audio"],
|
||||||
display_name="Preview Audio",
|
display_name="Preview Audio",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -259,6 +265,7 @@ class LoadAudio(IO.ComfyNode):
|
|||||||
files = folder_paths.filter_files_content_types(os.listdir(input_dir), ["audio", "video"])
|
files = folder_paths.filter_files_content_types(os.listdir(input_dir), ["audio", "video"])
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="LoadAudio",
|
node_id="LoadAudio",
|
||||||
|
search_aliases=["import audio", "open audio", "audio file"],
|
||||||
display_name="Load Audio",
|
display_name="Load Audio",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -296,6 +303,7 @@ class RecordAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="RecordAudio",
|
node_id="RecordAudio",
|
||||||
|
search_aliases=["microphone input", "audio capture", "voice input"],
|
||||||
display_name="Record Audio",
|
display_name="Record Audio",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -320,6 +328,7 @@ class TrimAudioDuration(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="TrimAudioDuration",
|
node_id="TrimAudioDuration",
|
||||||
|
search_aliases=["cut audio", "audio clip", "shorten audio"],
|
||||||
display_name="Trim Audio Duration",
|
display_name="Trim Audio Duration",
|
||||||
description="Trim audio tensor into chosen time range.",
|
description="Trim audio tensor into chosen time range.",
|
||||||
category="audio",
|
category="audio",
|
||||||
@ -372,6 +381,7 @@ class SplitAudioChannels(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SplitAudioChannels",
|
node_id="SplitAudioChannels",
|
||||||
|
search_aliases=["stereo to mono"],
|
||||||
display_name="Split Audio Channels",
|
display_name="Split Audio Channels",
|
||||||
description="Separates the audio into left and right channels.",
|
description="Separates the audio into left and right channels.",
|
||||||
category="audio",
|
category="audio",
|
||||||
@ -472,6 +482,7 @@ class AudioConcat(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="AudioConcat",
|
node_id="AudioConcat",
|
||||||
|
search_aliases=["join audio", "combine audio", "append audio"],
|
||||||
display_name="Audio Concat",
|
display_name="Audio Concat",
|
||||||
description="Concatenates the audio1 to audio2 in the specified direction.",
|
description="Concatenates the audio1 to audio2 in the specified direction.",
|
||||||
category="audio",
|
category="audio",
|
||||||
@ -519,6 +530,7 @@ class AudioMerge(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="AudioMerge",
|
node_id="AudioMerge",
|
||||||
|
search_aliases=["mix audio", "overlay audio", "layer audio"],
|
||||||
display_name="Audio Merge",
|
display_name="Audio Merge",
|
||||||
description="Combine two audio tracks by overlaying their waveforms.",
|
description="Combine two audio tracks by overlaying their waveforms.",
|
||||||
category="audio",
|
category="audio",
|
||||||
@ -579,6 +591,7 @@ class AudioAdjustVolume(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="AudioAdjustVolume",
|
node_id="AudioAdjustVolume",
|
||||||
|
search_aliases=["audio gain", "loudness", "audio level"],
|
||||||
display_name="Audio Adjust Volume",
|
display_name="Audio Adjust Volume",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -614,6 +627,7 @@ class EmptyAudio(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="EmptyAudio",
|
node_id="EmptyAudio",
|
||||||
|
search_aliases=["blank audio"],
|
||||||
display_name="Empty Audio",
|
display_name="Empty Audio",
|
||||||
category="audio",
|
category="audio",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -10,6 +10,7 @@ class Canny(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="Canny",
|
node_id="Canny",
|
||||||
|
search_aliases=["edge detection", "outline", "contour detection", "line art"],
|
||||||
category="image/preprocessors",
|
category="image/preprocessors",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Image.Input("image"),
|
io.Image.Input("image"),
|
||||||
|
|||||||
@ -109,6 +109,7 @@ class PorterDuffImageComposite(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="PorterDuffImageComposite",
|
node_id="PorterDuffImageComposite",
|
||||||
|
search_aliases=["alpha composite", "blend modes", "layer blend", "transparency blend"],
|
||||||
display_name="Porter-Duff Image Composite",
|
display_name="Porter-Duff Image Composite",
|
||||||
category="mask/compositing",
|
category="mask/compositing",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -165,6 +166,7 @@ class SplitImageWithAlpha(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="SplitImageWithAlpha",
|
node_id="SplitImageWithAlpha",
|
||||||
|
search_aliases=["extract alpha", "separate transparency", "remove alpha"],
|
||||||
display_name="Split Image with Alpha",
|
display_name="Split Image with Alpha",
|
||||||
category="mask/compositing",
|
category="mask/compositing",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -188,6 +190,7 @@ class JoinImageWithAlpha(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="JoinImageWithAlpha",
|
node_id="JoinImageWithAlpha",
|
||||||
|
search_aliases=["add transparency", "apply alpha", "composite alpha", "RGBA"],
|
||||||
display_name="Join Image with Alpha",
|
display_name="Join Image with Alpha",
|
||||||
category="mask/compositing",
|
category="mask/compositing",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class ControlNetInpaintingAliMamaApply(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ControlNetInpaintingAliMamaApply",
|
node_id="ControlNetInpaintingAliMamaApply",
|
||||||
|
search_aliases=["masked controlnet"],
|
||||||
category="conditioning/controlnet",
|
category="conditioning/controlnet",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Conditioning.Input("positive"),
|
io.Conditioning.Input("positive"),
|
||||||
|
|||||||
@ -297,6 +297,7 @@ class ExtendIntermediateSigmas(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ExtendIntermediateSigmas",
|
node_id="ExtendIntermediateSigmas",
|
||||||
|
search_aliases=["interpolate sigmas"],
|
||||||
category="sampling/custom_sampling/sigmas",
|
category="sampling/custom_sampling/sigmas",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Sigmas.Input("sigmas"),
|
io.Sigmas.Input("sigmas"),
|
||||||
@ -856,6 +857,7 @@ class DualCFGGuider(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="DualCFGGuider",
|
node_id="DualCFGGuider",
|
||||||
|
search_aliases=["dual prompt guidance"],
|
||||||
category="sampling/custom_sampling/guiders",
|
category="sampling/custom_sampling/guiders",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Model.Input("model"),
|
io.Model.Input("model"),
|
||||||
@ -883,6 +885,7 @@ class DisableNoise(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="DisableNoise",
|
node_id="DisableNoise",
|
||||||
|
search_aliases=["zero noise"],
|
||||||
category="sampling/custom_sampling/noise",
|
category="sampling/custom_sampling/noise",
|
||||||
inputs=[],
|
inputs=[],
|
||||||
outputs=[io.Noise.Output()]
|
outputs=[io.Noise.Output()]
|
||||||
@ -1019,6 +1022,7 @@ class ManualSigmas(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ManualSigmas",
|
node_id="ManualSigmas",
|
||||||
|
search_aliases=["custom noise schedule", "define sigmas"],
|
||||||
category="_for_testing/custom_sampling",
|
category="_for_testing/custom_sampling",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -1223,11 +1223,11 @@ class ResolutionBucket(io.ComfyNode):
|
|||||||
|
|
||||||
class MakeTrainingDataset(io.ComfyNode):
|
class MakeTrainingDataset(io.ComfyNode):
|
||||||
"""Encode images with VAE and texts with CLIP to create a training dataset."""
|
"""Encode images with VAE and texts with CLIP to create a training dataset."""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="MakeTrainingDataset",
|
node_id="MakeTrainingDataset",
|
||||||
|
search_aliases=["encode dataset"],
|
||||||
display_name="Make Training Dataset",
|
display_name="Make Training Dataset",
|
||||||
category="dataset",
|
category="dataset",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
@ -1309,11 +1309,11 @@ class MakeTrainingDataset(io.ComfyNode):
|
|||||||
|
|
||||||
class SaveTrainingDataset(io.ComfyNode):
|
class SaveTrainingDataset(io.ComfyNode):
|
||||||
"""Save encoded training dataset (latents + conditioning) to disk."""
|
"""Save encoded training dataset (latents + conditioning) to disk."""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="SaveTrainingDataset",
|
node_id="SaveTrainingDataset",
|
||||||
|
search_aliases=["export training data"],
|
||||||
display_name="Save Training Dataset",
|
display_name="Save Training Dataset",
|
||||||
category="dataset",
|
category="dataset",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
@ -1410,11 +1410,11 @@ class SaveTrainingDataset(io.ComfyNode):
|
|||||||
|
|
||||||
class LoadTrainingDataset(io.ComfyNode):
|
class LoadTrainingDataset(io.ComfyNode):
|
||||||
"""Load encoded training dataset from disk."""
|
"""Load encoded training dataset from disk."""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LoadTrainingDataset",
|
node_id="LoadTrainingDataset",
|
||||||
|
search_aliases=["import dataset", "training data"],
|
||||||
display_name="Load Training Dataset",
|
display_name="Load Training Dataset",
|
||||||
category="dataset",
|
category="dataset",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
|
|||||||
@ -11,6 +11,7 @@ class DifferentialDiffusion(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="DifferentialDiffusion",
|
node_id="DifferentialDiffusion",
|
||||||
|
search_aliases=["inpaint gradient", "variable denoise strength"],
|
||||||
display_name="Differential Diffusion",
|
display_name="Differential Diffusion",
|
||||||
category="_for_testing",
|
category="_for_testing",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -58,6 +58,7 @@ class FreSca(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="FreSca",
|
node_id="FreSca",
|
||||||
|
search_aliases=["frequency guidance"],
|
||||||
display_name="FreSca",
|
display_name="FreSca",
|
||||||
category="_for_testing",
|
category="_for_testing",
|
||||||
description="Applies frequency-dependent scaling to the guidance",
|
description="Applies frequency-dependent scaling to the guidance",
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class CLIPTextEncodeHiDream(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPTextEncodeHiDream",
|
node_id="CLIPTextEncodeHiDream",
|
||||||
|
search_aliases=["hidream prompt"],
|
||||||
category="advanced/conditioning",
|
category="advanced/conditioning",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Clip.Input("clip"),
|
io.Clip.Input("clip"),
|
||||||
|
|||||||
@ -259,6 +259,7 @@ class SetClipHooks:
|
|||||||
return (clip,)
|
return (clip,)
|
||||||
|
|
||||||
class ConditioningTimestepsRange:
|
class ConditioningTimestepsRange:
|
||||||
|
SEARCH_ALIASES = ["prompt scheduling", "timestep segments", "conditioning phases"]
|
||||||
NodeId = 'ConditioningTimestepsRange'
|
NodeId = 'ConditioningTimestepsRange'
|
||||||
NodeName = 'Timesteps Range'
|
NodeName = 'Timesteps Range'
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -468,6 +469,7 @@ class SetHookKeyframes:
|
|||||||
return (hooks,)
|
return (hooks,)
|
||||||
|
|
||||||
class CreateHookKeyframe:
|
class CreateHookKeyframe:
|
||||||
|
SEARCH_ALIASES = ["hook scheduling", "strength animation", "timed hook"]
|
||||||
NodeId = 'CreateHookKeyframe'
|
NodeId = 'CreateHookKeyframe'
|
||||||
NodeName = 'Create Hook Keyframe'
|
NodeName = 'Create Hook Keyframe'
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -497,6 +499,7 @@ class CreateHookKeyframe:
|
|||||||
return (prev_hook_kf,)
|
return (prev_hook_kf,)
|
||||||
|
|
||||||
class CreateHookKeyframesInterpolated:
|
class CreateHookKeyframesInterpolated:
|
||||||
|
SEARCH_ALIASES = ["ease hook strength", "smooth hook transition", "interpolate keyframes"]
|
||||||
NodeId = 'CreateHookKeyframesInterpolated'
|
NodeId = 'CreateHookKeyframesInterpolated'
|
||||||
NodeName = 'Create Hook Keyframes Interp.'
|
NodeName = 'Create Hook Keyframes Interp.'
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -544,6 +547,7 @@ class CreateHookKeyframesInterpolated:
|
|||||||
return (prev_hook_kf,)
|
return (prev_hook_kf,)
|
||||||
|
|
||||||
class CreateHookKeyframesFromFloats:
|
class CreateHookKeyframesFromFloats:
|
||||||
|
SEARCH_ALIASES = ["batch keyframes", "strength list to keyframes"]
|
||||||
NodeId = 'CreateHookKeyframesFromFloats'
|
NodeId = 'CreateHookKeyframesFromFloats'
|
||||||
NodeName = 'Create Hook Keyframes From Floats'
|
NodeName = 'Create Hook Keyframes From Floats'
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -618,6 +622,7 @@ class SetModelHooksOnCond:
|
|||||||
# Combine Hooks
|
# Combine Hooks
|
||||||
#------------------------------------------
|
#------------------------------------------
|
||||||
class CombineHooks:
|
class CombineHooks:
|
||||||
|
SEARCH_ALIASES = ["merge hooks"]
|
||||||
NodeId = 'CombineHooks2'
|
NodeId = 'CombineHooks2'
|
||||||
NodeName = 'Combine Hooks [2]'
|
NodeName = 'Combine Hooks [2]'
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@ -618,6 +618,7 @@ class SaveGLB(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SaveGLB",
|
node_id="SaveGLB",
|
||||||
|
search_aliases=["export 3d model", "save mesh"],
|
||||||
category="3d",
|
category="3d",
|
||||||
is_output_node=True,
|
is_output_node=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -22,6 +22,7 @@ class ImageCrop(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageCrop",
|
node_id="ImageCrop",
|
||||||
|
search_aliases=["trim"],
|
||||||
display_name="Image Crop",
|
display_name="Image Crop",
|
||||||
category="image/transform",
|
category="image/transform",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -51,6 +52,7 @@ class RepeatImageBatch(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="RepeatImageBatch",
|
node_id="RepeatImageBatch",
|
||||||
|
search_aliases=["duplicate image", "clone image"],
|
||||||
category="image/batch",
|
category="image/batch",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -72,6 +74,7 @@ class ImageFromBatch(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageFromBatch",
|
node_id="ImageFromBatch",
|
||||||
|
search_aliases=["select image", "pick from batch", "extract image"],
|
||||||
category="image/batch",
|
category="image/batch",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -97,6 +100,7 @@ class ImageAddNoise(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageAddNoise",
|
node_id="ImageAddNoise",
|
||||||
|
search_aliases=["film grain"],
|
||||||
category="image",
|
category="image",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -194,11 +198,11 @@ class SaveAnimatedPNG(IO.ComfyNode):
|
|||||||
|
|
||||||
class ImageStitch(IO.ComfyNode):
|
class ImageStitch(IO.ComfyNode):
|
||||||
"""Upstreamed from https://github.com/kijai/ComfyUI-KJNodes"""
|
"""Upstreamed from https://github.com/kijai/ComfyUI-KJNodes"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageStitch",
|
node_id="ImageStitch",
|
||||||
|
search_aliases=["combine images", "join images", "concatenate images", "side by side"],
|
||||||
display_name="Image Stitch",
|
display_name="Image Stitch",
|
||||||
description="Stitches image2 to image1 in the specified direction.\n"
|
description="Stitches image2 to image1 in the specified direction.\n"
|
||||||
"If image2 is not provided, returns image1 unchanged.\n"
|
"If image2 is not provided, returns image1 unchanged.\n"
|
||||||
@ -369,11 +373,11 @@ class ImageStitch(IO.ComfyNode):
|
|||||||
|
|
||||||
|
|
||||||
class ResizeAndPadImage(IO.ComfyNode):
|
class ResizeAndPadImage(IO.ComfyNode):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ResizeAndPadImage",
|
node_id="ResizeAndPadImage",
|
||||||
|
search_aliases=["fit to size"],
|
||||||
category="image/transform",
|
category="image/transform",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -420,11 +424,11 @@ class ResizeAndPadImage(IO.ComfyNode):
|
|||||||
|
|
||||||
|
|
||||||
class SaveSVGNode(IO.ComfyNode):
|
class SaveSVGNode(IO.ComfyNode):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="SaveSVGNode",
|
node_id="SaveSVGNode",
|
||||||
|
search_aliases=["export vector", "save vector graphics"],
|
||||||
description="Save SVG files on disk.",
|
description="Save SVG files on disk.",
|
||||||
category="image/save",
|
category="image/save",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -492,11 +496,11 @@ class SaveSVGNode(IO.ComfyNode):
|
|||||||
|
|
||||||
|
|
||||||
class GetImageSize(IO.ComfyNode):
|
class GetImageSize(IO.ComfyNode):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="GetImageSize",
|
node_id="GetImageSize",
|
||||||
|
search_aliases=["dimensions", "resolution", "image info"],
|
||||||
display_name="Get Image Size",
|
display_name="Get Image Size",
|
||||||
description="Returns width and height of the image, and passes it through unchanged.",
|
description="Returns width and height of the image, and passes it through unchanged.",
|
||||||
category="image",
|
category="image",
|
||||||
@ -527,11 +531,11 @@ class GetImageSize(IO.ComfyNode):
|
|||||||
|
|
||||||
|
|
||||||
class ImageRotate(IO.ComfyNode):
|
class ImageRotate(IO.ComfyNode):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageRotate",
|
node_id="ImageRotate",
|
||||||
|
search_aliases=["turn", "flip orientation"],
|
||||||
category="image/transform",
|
category="image/transform",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -557,11 +561,11 @@ class ImageRotate(IO.ComfyNode):
|
|||||||
|
|
||||||
|
|
||||||
class ImageFlip(IO.ComfyNode):
|
class ImageFlip(IO.ComfyNode):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageFlip",
|
node_id="ImageFlip",
|
||||||
|
search_aliases=["mirror", "reflect"],
|
||||||
category="image/transform",
|
category="image/transform",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
|
|||||||
@ -104,6 +104,7 @@ class CLIPTextEncodeKandinsky5(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPTextEncodeKandinsky5",
|
node_id="CLIPTextEncodeKandinsky5",
|
||||||
|
search_aliases=["kandinsky prompt"],
|
||||||
category="advanced/conditioning/kandinsky5",
|
category="advanced/conditioning/kandinsky5",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Clip.Input("clip"),
|
io.Clip.Input("clip"),
|
||||||
|
|||||||
@ -21,6 +21,7 @@ class LatentAdd(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentAdd",
|
node_id="LatentAdd",
|
||||||
|
search_aliases=["combine latents", "sum latents"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples1"),
|
io.Latent.Input("samples1"),
|
||||||
@ -47,6 +48,7 @@ class LatentSubtract(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentSubtract",
|
node_id="LatentSubtract",
|
||||||
|
search_aliases=["difference latent", "remove features"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples1"),
|
io.Latent.Input("samples1"),
|
||||||
@ -73,6 +75,7 @@ class LatentMultiply(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentMultiply",
|
node_id="LatentMultiply",
|
||||||
|
search_aliases=["scale latent", "amplify latent", "latent gain"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples"),
|
io.Latent.Input("samples"),
|
||||||
@ -96,6 +99,7 @@ class LatentInterpolate(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentInterpolate",
|
node_id="LatentInterpolate",
|
||||||
|
search_aliases=["blend latent", "mix latent", "lerp latent", "transition"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples1"),
|
io.Latent.Input("samples1"),
|
||||||
@ -134,6 +138,7 @@ class LatentConcat(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentConcat",
|
node_id="LatentConcat",
|
||||||
|
search_aliases=["join latents", "stitch latents"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples1"),
|
io.Latent.Input("samples1"),
|
||||||
@ -173,6 +178,7 @@ class LatentCut(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentCut",
|
node_id="LatentCut",
|
||||||
|
search_aliases=["crop latent", "slice latent", "extract region"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples"),
|
io.Latent.Input("samples"),
|
||||||
@ -213,6 +219,7 @@ class LatentCutToBatch(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentCutToBatch",
|
node_id="LatentCutToBatch",
|
||||||
|
search_aliases=["slice to batch", "split latent", "tile latent"],
|
||||||
category="latent/advanced",
|
category="latent/advanced",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Latent.Input("samples"),
|
io.Latent.Input("samples"),
|
||||||
@ -254,6 +261,7 @@ class LatentBatch(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentBatch",
|
node_id="LatentBatch",
|
||||||
|
search_aliases=["combine latents", "merge latents", "join latents"],
|
||||||
category="latent/batch",
|
category="latent/batch",
|
||||||
is_deprecated=True,
|
is_deprecated=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -310,6 +318,7 @@ class LatentApplyOperation(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentApplyOperation",
|
node_id="LatentApplyOperation",
|
||||||
|
search_aliases=["transform latent"],
|
||||||
category="latent/advanced/operations",
|
category="latent/advanced/operations",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -365,6 +374,7 @@ class LatentOperationTonemapReinhard(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LatentOperationTonemapReinhard",
|
node_id="LatentOperationTonemapReinhard",
|
||||||
|
search_aliases=["hdr latent"],
|
||||||
category="latent/advanced/operations",
|
category="latent/advanced/operations",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -75,6 +75,7 @@ class Preview3D(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="Preview3D",
|
node_id="Preview3D",
|
||||||
|
search_aliases=["view mesh", "3d viewer"],
|
||||||
display_name="Preview 3D & Animation",
|
display_name="Preview 3D & Animation",
|
||||||
category="3d",
|
category="3d",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
|
|||||||
@ -224,6 +224,7 @@ class ConvertStringToComboNode(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ConvertStringToComboNode",
|
node_id="ConvertStringToComboNode",
|
||||||
|
search_aliases=["string to dropdown", "text to combo"],
|
||||||
display_name="Convert String to Combo",
|
display_name="Convert String to Combo",
|
||||||
category="logic",
|
category="logic",
|
||||||
inputs=[io.String.Input("string")],
|
inputs=[io.String.Input("string")],
|
||||||
@ -239,6 +240,7 @@ class InvertBooleanNode(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="InvertBooleanNode",
|
node_id="InvertBooleanNode",
|
||||||
|
search_aliases=["not", "toggle", "negate", "flip boolean"],
|
||||||
display_name="Invert Boolean",
|
display_name="Invert Boolean",
|
||||||
category="logic",
|
category="logic",
|
||||||
inputs=[io.Boolean.Input("boolean")],
|
inputs=[io.Boolean.Input("boolean")],
|
||||||
|
|||||||
@ -78,6 +78,7 @@ class LoraSave(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LoraSave",
|
node_id="LoraSave",
|
||||||
|
search_aliases=["export lora"],
|
||||||
display_name="Extract and Save Lora",
|
display_name="Extract and Save Lora",
|
||||||
category="_for_testing",
|
category="_for_testing",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -79,6 +79,7 @@ class CLIPTextEncodeLumina2(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPTextEncodeLumina2",
|
node_id="CLIPTextEncodeLumina2",
|
||||||
|
search_aliases=["lumina prompt"],
|
||||||
display_name="CLIP Text Encode for Lumina2",
|
display_name="CLIP Text Encode for Lumina2",
|
||||||
category="conditioning",
|
category="conditioning",
|
||||||
description="Encodes a system prompt and a user prompt using a CLIP model into an embedding "
|
description="Encodes a system prompt and a user prompt using a CLIP model into an embedding "
|
||||||
|
|||||||
@ -50,6 +50,7 @@ class LatentCompositeMasked(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="LatentCompositeMasked",
|
node_id="LatentCompositeMasked",
|
||||||
|
search_aliases=["overlay latent", "layer latent", "paste latent", "inpaint latent"],
|
||||||
category="latent",
|
category="latent",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Latent.Input("destination"),
|
IO.Latent.Input("destination"),
|
||||||
@ -78,6 +79,7 @@ class ImageCompositeMasked(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageCompositeMasked",
|
node_id="ImageCompositeMasked",
|
||||||
|
search_aliases=["paste image", "overlay", "layer"],
|
||||||
category="image",
|
category="image",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("destination"),
|
IO.Image.Input("destination"),
|
||||||
@ -105,6 +107,7 @@ class MaskToImage(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="MaskToImage",
|
node_id="MaskToImage",
|
||||||
|
search_aliases=["convert mask"],
|
||||||
display_name="Convert Mask to Image",
|
display_name="Convert Mask to Image",
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -126,6 +129,7 @@ class ImageToMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageToMask",
|
node_id="ImageToMask",
|
||||||
|
search_aliases=["extract channel", "channel to mask"],
|
||||||
display_name="Convert Image to Mask",
|
display_name="Convert Image to Mask",
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -149,6 +153,7 @@ class ImageColorToMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ImageColorToMask",
|
node_id="ImageColorToMask",
|
||||||
|
search_aliases=["color keying", "chroma key"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Image.Input("image"),
|
IO.Image.Input("image"),
|
||||||
@ -194,6 +199,7 @@ class InvertMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="InvertMask",
|
node_id="InvertMask",
|
||||||
|
search_aliases=["reverse mask", "flip mask"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Mask.Input("mask"),
|
IO.Mask.Input("mask"),
|
||||||
@ -214,6 +220,7 @@ class CropMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="CropMask",
|
node_id="CropMask",
|
||||||
|
search_aliases=["cut mask", "extract mask region", "mask slice"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Mask.Input("mask"),
|
IO.Mask.Input("mask"),
|
||||||
@ -239,6 +246,7 @@ class MaskComposite(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="MaskComposite",
|
node_id="MaskComposite",
|
||||||
|
search_aliases=["combine masks", "blend masks", "layer masks"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Mask.Input("destination"),
|
IO.Mask.Input("destination"),
|
||||||
@ -287,6 +295,7 @@ class FeatherMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="FeatherMask",
|
node_id="FeatherMask",
|
||||||
|
search_aliases=["soft edge mask", "blur mask edges", "gradient mask edge"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Mask.Input("mask"),
|
IO.Mask.Input("mask"),
|
||||||
@ -333,6 +342,7 @@ class GrowMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="GrowMask",
|
node_id="GrowMask",
|
||||||
|
search_aliases=["expand mask", "shrink mask"],
|
||||||
display_name="Grow Mask",
|
display_name="Grow Mask",
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -370,6 +380,7 @@ class ThresholdMask(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="ThresholdMask",
|
node_id="ThresholdMask",
|
||||||
|
search_aliases=["binary mask"],
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
IO.Mask.Input("mask"),
|
IO.Mask.Input("mask"),
|
||||||
@ -394,6 +405,7 @@ class MaskPreview(IO.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return IO.Schema(
|
return IO.Schema(
|
||||||
node_id="MaskPreview",
|
node_id="MaskPreview",
|
||||||
|
search_aliases=["show mask", "view mask", "inspect mask", "debug mask"],
|
||||||
display_name="Preview Mask",
|
display_name="Preview Mask",
|
||||||
category="mask",
|
category="mask",
|
||||||
description="Saves the input images to your ComfyUI output directory.",
|
description="Saves the input images to your ComfyUI output directory.",
|
||||||
|
|||||||
@ -299,6 +299,7 @@ class RescaleCFG:
|
|||||||
return (m, )
|
return (m, )
|
||||||
|
|
||||||
class ModelComputeDtype:
|
class ModelComputeDtype:
|
||||||
|
SEARCH_ALIASES = ["model precision", "change dtype"]
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "model": ("MODEL",),
|
return {"required": { "model": ("MODEL",),
|
||||||
|
|||||||
@ -91,6 +91,7 @@ class CLIPMergeSimple:
|
|||||||
|
|
||||||
|
|
||||||
class CLIPSubtract:
|
class CLIPSubtract:
|
||||||
|
SEARCH_ALIASES = ["clip difference", "text encoder subtract"]
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "clip1": ("CLIP",),
|
return {"required": { "clip1": ("CLIP",),
|
||||||
@ -113,6 +114,7 @@ class CLIPSubtract:
|
|||||||
|
|
||||||
|
|
||||||
class CLIPAdd:
|
class CLIPAdd:
|
||||||
|
SEARCH_ALIASES = ["combine clip"]
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "clip1": ("CLIP",),
|
return {"required": { "clip1": ("CLIP",),
|
||||||
@ -225,6 +227,7 @@ def save_checkpoint(model, clip=None, vae=None, clip_vision=None, filename_prefi
|
|||||||
comfy.sd.save_checkpoint(output_checkpoint, model, clip, vae, clip_vision, metadata=metadata, extra_keys=extra_keys)
|
comfy.sd.save_checkpoint(output_checkpoint, model, clip, vae, clip_vision, metadata=metadata, extra_keys=extra_keys)
|
||||||
|
|
||||||
class CheckpointSave:
|
class CheckpointSave:
|
||||||
|
SEARCH_ALIASES = ["save model", "export checkpoint", "merge save"]
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.output_dir = folder_paths.get_output_directory()
|
self.output_dir = folder_paths.get_output_directory()
|
||||||
|
|
||||||
@ -337,6 +340,7 @@ class VAESave:
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
class ModelSave:
|
class ModelSave:
|
||||||
|
SEARCH_ALIASES = ["export model", "checkpoint save"]
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.output_dir = folder_paths.get_output_directory()
|
self.output_dir = folder_paths.get_output_directory()
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ class Morphology(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="Morphology",
|
node_id="Morphology",
|
||||||
|
search_aliases=["erode", "dilate"],
|
||||||
display_name="ImageMorphology",
|
display_name="ImageMorphology",
|
||||||
category="image/postprocessing",
|
category="image/postprocessing",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -57,6 +58,7 @@ class ImageRGBToYUV(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ImageRGBToYUV",
|
node_id="ImageRGBToYUV",
|
||||||
|
search_aliases=["color space conversion"],
|
||||||
category="image/batch",
|
category="image/batch",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Image.Input("image"),
|
io.Image.Input("image"),
|
||||||
@ -78,6 +80,7 @@ class ImageYUVToRGB(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ImageYUVToRGB",
|
node_id="ImageYUVToRGB",
|
||||||
|
search_aliases=["color space conversion"],
|
||||||
category="image/batch",
|
category="image/batch",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Image.Input("Y"),
|
io.Image.Input("Y"),
|
||||||
|
|||||||
@ -7,6 +7,7 @@ class CLIPTextEncodePixArtAlpha(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPTextEncodePixArtAlpha",
|
node_id="CLIPTextEncodePixArtAlpha",
|
||||||
|
search_aliases=["pixart prompt"],
|
||||||
category="advanced/conditioning",
|
category="advanced/conditioning",
|
||||||
description="Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.",
|
description="Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -402,7 +402,6 @@ def scale_to_multiple_cover(input: torch.Tensor, multiple: int, scale_method: st
|
|||||||
return input[:, y0:y1, x0:x1]
|
return input[:, y0:y1, x0:x1]
|
||||||
|
|
||||||
class ResizeImageMaskNode(io.ComfyNode):
|
class ResizeImageMaskNode(io.ComfyNode):
|
||||||
|
|
||||||
scale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]
|
scale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]
|
||||||
crop_methods = ["disabled", "center"]
|
crop_methods = ["disabled", "center"]
|
||||||
|
|
||||||
@ -424,6 +423,7 @@ class ResizeImageMaskNode(io.ComfyNode):
|
|||||||
crop_combo = io.Combo.Input("crop", options=cls.crop_methods, default="center")
|
crop_combo = io.Combo.Input("crop", options=cls.crop_methods, default="center")
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="ResizeImageMaskNode",
|
node_id="ResizeImageMaskNode",
|
||||||
|
search_aliases=["scale image", "scale mask"],
|
||||||
display_name="Resize Image/Mask",
|
display_name="Resize Image/Mask",
|
||||||
category="transform",
|
category="transform",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -569,6 +569,7 @@ class BatchMasksNode(io.ComfyNode):
|
|||||||
autogrow_template = io.Autogrow.TemplatePrefix(io.Mask.Input("mask"), prefix="mask", min=2, max=50)
|
autogrow_template = io.Autogrow.TemplatePrefix(io.Mask.Input("mask"), prefix="mask", min=2, max=50)
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="BatchMasksNode",
|
node_id="BatchMasksNode",
|
||||||
|
search_aliases=["combine masks", "stack masks", "merge masks"],
|
||||||
display_name="Batch Masks",
|
display_name="Batch Masks",
|
||||||
category="mask",
|
category="mask",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -589,6 +590,7 @@ class BatchLatentsNode(io.ComfyNode):
|
|||||||
autogrow_template = io.Autogrow.TemplatePrefix(io.Latent.Input("latent"), prefix="latent", min=2, max=50)
|
autogrow_template = io.Autogrow.TemplatePrefix(io.Latent.Input("latent"), prefix="latent", min=2, max=50)
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="BatchLatentsNode",
|
node_id="BatchLatentsNode",
|
||||||
|
search_aliases=["combine latents", "stack latents", "merge latents"],
|
||||||
display_name="Batch Latents",
|
display_name="Batch Latents",
|
||||||
category="latent",
|
category="latent",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -612,6 +614,7 @@ class BatchImagesMasksLatentsNode(io.ComfyNode):
|
|||||||
prefix="input", min=1, max=50)
|
prefix="input", min=1, max=50)
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="BatchImagesMasksLatentsNode",
|
node_id="BatchImagesMasksLatentsNode",
|
||||||
|
search_aliases=["combine batch", "merge batch", "stack inputs"],
|
||||||
display_name="Batch Images/Masks/Latents",
|
display_name="Batch Images/Masks/Latents",
|
||||||
category="util",
|
category="util",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -16,7 +16,7 @@ class PreviewAny():
|
|||||||
OUTPUT_NODE = True
|
OUTPUT_NODE = True
|
||||||
|
|
||||||
CATEGORY = "utils"
|
CATEGORY = "utils"
|
||||||
SEARCH_ALIASES = ["preview", "show", "display", "view", "show text", "display text", "preview text", "show output", "inspect", "debug"]
|
SEARCH_ALIASES = ["show output", "inspect", "debug", "print value", "show text"]
|
||||||
|
|
||||||
def main(self, source=None):
|
def main(self, source=None):
|
||||||
value = 'None'
|
value = 'None'
|
||||||
|
|||||||
@ -65,6 +65,7 @@ class CLIPTextEncodeSD3(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CLIPTextEncodeSD3",
|
node_id="CLIPTextEncodeSD3",
|
||||||
|
search_aliases=["sd3 prompt"],
|
||||||
category="advanced/conditioning",
|
category="advanced/conditioning",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Clip.Input("clip"),
|
io.Clip.Input("clip"),
|
||||||
|
|||||||
@ -32,6 +32,7 @@ class StringSubstring(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringSubstring",
|
node_id="StringSubstring",
|
||||||
|
search_aliases=["extract text", "text portion"],
|
||||||
display_name="Substring",
|
display_name="Substring",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -54,6 +55,7 @@ class StringLength(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringLength",
|
node_id="StringLength",
|
||||||
|
search_aliases=["character count", "text size"],
|
||||||
display_name="Length",
|
display_name="Length",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -74,6 +76,7 @@ class CaseConverter(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CaseConverter",
|
node_id="CaseConverter",
|
||||||
|
search_aliases=["text case", "uppercase", "lowercase", "capitalize"],
|
||||||
display_name="Case Converter",
|
display_name="Case Converter",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -106,6 +109,7 @@ class StringTrim(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringTrim",
|
node_id="StringTrim",
|
||||||
|
search_aliases=["clean whitespace", "remove whitespace"],
|
||||||
display_name="Trim",
|
display_name="Trim",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -136,6 +140,7 @@ class StringReplace(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringReplace",
|
node_id="StringReplace",
|
||||||
|
search_aliases=["find and replace", "substitute", "swap text"],
|
||||||
display_name="Replace",
|
display_name="Replace",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -158,6 +163,7 @@ class StringContains(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringContains",
|
node_id="StringContains",
|
||||||
|
search_aliases=["text includes", "string includes"],
|
||||||
display_name="Contains",
|
display_name="Contains",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -185,6 +191,7 @@ class StringCompare(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="StringCompare",
|
node_id="StringCompare",
|
||||||
|
search_aliases=["text match", "string equals", "starts with", "ends with"],
|
||||||
display_name="Compare",
|
display_name="Compare",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -220,6 +227,7 @@ class RegexMatch(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="RegexMatch",
|
node_id="RegexMatch",
|
||||||
|
search_aliases=["pattern match", "text contains", "string match"],
|
||||||
display_name="Regex Match",
|
display_name="Regex Match",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -260,6 +268,7 @@ class RegexExtract(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="RegexExtract",
|
node_id="RegexExtract",
|
||||||
|
search_aliases=["pattern extract", "text parser", "parse text"],
|
||||||
display_name="Regex Extract",
|
display_name="Regex Extract",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -334,6 +343,7 @@ class RegexReplace(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="RegexReplace",
|
node_id="RegexReplace",
|
||||||
|
search_aliases=["pattern replace", "find and replace", "substitution"],
|
||||||
display_name="Regex Replace",
|
display_name="Regex Replace",
|
||||||
category="utils/string",
|
category="utils/string",
|
||||||
description="Find and replace text using regex patterns.",
|
description="Find and replace text using regex patterns.",
|
||||||
|
|||||||
@ -1101,6 +1101,7 @@ class SaveLoRA(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="SaveLoRA",
|
node_id="SaveLoRA",
|
||||||
|
search_aliases=["export lora"],
|
||||||
display_name="Save LoRA Weights",
|
display_name="Save LoRA Weights",
|
||||||
category="loaders",
|
category="loaders",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
@ -1144,6 +1145,7 @@ class LossGraphNode(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LossGraphNode",
|
node_id="LossGraphNode",
|
||||||
|
search_aliases=["training chart", "training visualization", "plot loss"],
|
||||||
display_name="Plot Loss Graph",
|
display_name="Plot Loss Graph",
|
||||||
category="training",
|
category="training",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
|
|||||||
@ -16,6 +16,7 @@ class SaveWEBM(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="SaveWEBM",
|
node_id="SaveWEBM",
|
||||||
|
search_aliases=["export webm"],
|
||||||
category="image/video",
|
category="image/video",
|
||||||
is_experimental=True,
|
is_experimental=True,
|
||||||
inputs=[
|
inputs=[
|
||||||
@ -69,6 +70,7 @@ class SaveVideo(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="SaveVideo",
|
node_id="SaveVideo",
|
||||||
|
search_aliases=["export video"],
|
||||||
display_name="Save Video",
|
display_name="Save Video",
|
||||||
category="image/video",
|
category="image/video",
|
||||||
description="Saves the input images to your ComfyUI output directory.",
|
description="Saves the input images to your ComfyUI output directory.",
|
||||||
@ -116,6 +118,7 @@ class CreateVideo(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="CreateVideo",
|
node_id="CreateVideo",
|
||||||
|
search_aliases=["images to video"],
|
||||||
display_name="Create Video",
|
display_name="Create Video",
|
||||||
category="image/video",
|
category="image/video",
|
||||||
description="Create a video from images.",
|
description="Create a video from images.",
|
||||||
@ -140,6 +143,7 @@ class GetVideoComponents(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="GetVideoComponents",
|
node_id="GetVideoComponents",
|
||||||
|
search_aliases=["extract frames", "split video", "video to images", "demux"],
|
||||||
display_name="Get Video Components",
|
display_name="Get Video Components",
|
||||||
category="image/video",
|
category="image/video",
|
||||||
description="Extracts all components from a video: frames, audio, and framerate.",
|
description="Extracts all components from a video: frames, audio, and framerate.",
|
||||||
@ -167,6 +171,7 @@ class LoadVideo(io.ComfyNode):
|
|||||||
files = folder_paths.filter_files_content_types(files, ["video"])
|
files = folder_paths.filter_files_content_types(files, ["video"])
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="LoadVideo",
|
node_id="LoadVideo",
|
||||||
|
search_aliases=["import video", "open video", "video file"],
|
||||||
display_name="Load Video",
|
display_name="Load Video",
|
||||||
category="image/video",
|
category="image/video",
|
||||||
inputs=[
|
inputs=[
|
||||||
|
|||||||
@ -287,6 +287,7 @@ class WanVaceToVideo(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="WanVaceToVideo",
|
node_id="WanVaceToVideo",
|
||||||
|
search_aliases=["video conditioning", "video control"],
|
||||||
category="conditioning/video_models",
|
category="conditioning/video_models",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Conditioning.Input("positive"),
|
io.Conditioning.Input("positive"),
|
||||||
@ -705,6 +706,7 @@ class WanTrackToVideo(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="WanTrackToVideo",
|
node_id="WanTrackToVideo",
|
||||||
|
search_aliases=["motion tracking", "trajectory video", "point tracking", "keypoint animation"],
|
||||||
category="conditioning/video_models",
|
category="conditioning/video_models",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Conditioning.Input("positive"),
|
io.Conditioning.Input("positive"),
|
||||||
|
|||||||
@ -324,6 +324,7 @@ class GenerateTracks(io.ComfyNode):
|
|||||||
def define_schema(cls):
|
def define_schema(cls):
|
||||||
return io.Schema(
|
return io.Schema(
|
||||||
node_id="GenerateTracks",
|
node_id="GenerateTracks",
|
||||||
|
search_aliases=["motion paths", "camera movement", "trajectory"],
|
||||||
category="conditioning/video_models",
|
category="conditioning/video_models",
|
||||||
inputs=[
|
inputs=[
|
||||||
io.Int.Input("width", default=832, min=16, max=4096, step=16),
|
io.Int.Input("width", default=832, min=16, max=4096, step=16),
|
||||||
|
|||||||
@ -5,6 +5,7 @@ MAX_RESOLUTION = nodes.MAX_RESOLUTION
|
|||||||
|
|
||||||
|
|
||||||
class WebcamCapture(nodes.LoadImage):
|
class WebcamCapture(nodes.LoadImage):
|
||||||
|
SEARCH_ALIASES = ["camera input", "live capture", "camera feed", "snapshot"]
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {
|
return {
|
||||||
|
|||||||
41
nodes.py
41
nodes.py
@ -93,6 +93,8 @@ class ConditioningCombine:
|
|||||||
return (conditioning_1 + conditioning_2, )
|
return (conditioning_1 + conditioning_2, )
|
||||||
|
|
||||||
class ConditioningAverage :
|
class ConditioningAverage :
|
||||||
|
SEARCH_ALIASES = ["blend prompts", "interpolate conditioning", "mix prompts", "style fusion", "weighted blend"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {"conditioning_to": ("CONDITIONING", ), "conditioning_from": ("CONDITIONING", ),
|
return {"required": {"conditioning_to": ("CONDITIONING", ), "conditioning_from": ("CONDITIONING", ),
|
||||||
@ -159,6 +161,8 @@ class ConditioningConcat:
|
|||||||
return (out, )
|
return (out, )
|
||||||
|
|
||||||
class ConditioningSetArea:
|
class ConditioningSetArea:
|
||||||
|
SEARCH_ALIASES = ["regional prompt", "area prompt", "spatial conditioning", "localized prompt"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {"conditioning": ("CONDITIONING", ),
|
return {"required": {"conditioning": ("CONDITIONING", ),
|
||||||
@ -217,6 +221,8 @@ class ConditioningSetAreaStrength:
|
|||||||
|
|
||||||
|
|
||||||
class ConditioningSetMask:
|
class ConditioningSetMask:
|
||||||
|
SEARCH_ALIASES = ["masked prompt", "regional inpaint conditioning", "mask conditioning"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {"conditioning": ("CONDITIONING", ),
|
return {"required": {"conditioning": ("CONDITIONING", ),
|
||||||
@ -242,6 +248,8 @@ class ConditioningSetMask:
|
|||||||
return (c, )
|
return (c, )
|
||||||
|
|
||||||
class ConditioningZeroOut:
|
class ConditioningZeroOut:
|
||||||
|
SEARCH_ALIASES = ["null conditioning", "clear conditioning"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {"conditioning": ("CONDITIONING", )}}
|
return {"required": {"conditioning": ("CONDITIONING", )}}
|
||||||
@ -467,6 +475,8 @@ class InpaintModelConditioning:
|
|||||||
|
|
||||||
|
|
||||||
class SaveLatent:
|
class SaveLatent:
|
||||||
|
SEARCH_ALIASES = ["export latent"]
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.output_dir = folder_paths.get_output_directory()
|
self.output_dir = folder_paths.get_output_directory()
|
||||||
|
|
||||||
@ -518,6 +528,8 @@ class SaveLatent:
|
|||||||
|
|
||||||
|
|
||||||
class LoadLatent:
|
class LoadLatent:
|
||||||
|
SEARCH_ALIASES = ["import latent", "open latent"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
input_dir = folder_paths.get_input_directory()
|
input_dir = folder_paths.get_input_directory()
|
||||||
@ -554,6 +566,8 @@ class LoadLatent:
|
|||||||
|
|
||||||
|
|
||||||
class CheckpointLoader:
|
class CheckpointLoader:
|
||||||
|
SEARCH_ALIASES = ["load model", "model loader"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "config_name": (folder_paths.get_filename_list("configs"), ),
|
return {"required": { "config_name": (folder_paths.get_filename_list("configs"), ),
|
||||||
@ -593,6 +607,8 @@ class CheckpointLoaderSimple:
|
|||||||
return out[:3]
|
return out[:3]
|
||||||
|
|
||||||
class DiffusersLoader:
|
class DiffusersLoader:
|
||||||
|
SEARCH_ALIASES = ["load diffusers model"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(cls):
|
def INPUT_TYPES(cls):
|
||||||
paths = []
|
paths = []
|
||||||
@ -1063,6 +1079,8 @@ class StyleModelLoader:
|
|||||||
|
|
||||||
|
|
||||||
class StyleModelApply:
|
class StyleModelApply:
|
||||||
|
SEARCH_ALIASES = ["style transfer"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {"conditioning": ("CONDITIONING", ),
|
return {"required": {"conditioning": ("CONDITIONING", ),
|
||||||
@ -1216,6 +1234,8 @@ class EmptyLatentImage:
|
|||||||
|
|
||||||
|
|
||||||
class LatentFromBatch:
|
class LatentFromBatch:
|
||||||
|
SEARCH_ALIASES = ["select from batch", "pick latent", "batch subset"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "samples": ("LATENT",),
|
return {"required": { "samples": ("LATENT",),
|
||||||
@ -1248,6 +1268,8 @@ class LatentFromBatch:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class RepeatLatentBatch:
|
class RepeatLatentBatch:
|
||||||
|
SEARCH_ALIASES = ["duplicate latent", "clone latent"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "samples": ("LATENT",),
|
return {"required": { "samples": ("LATENT",),
|
||||||
@ -1274,6 +1296,8 @@ class RepeatLatentBatch:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class LatentUpscale:
|
class LatentUpscale:
|
||||||
|
SEARCH_ALIASES = ["enlarge latent", "resize latent"]
|
||||||
|
|
||||||
upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]
|
upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]
|
||||||
crop_methods = ["disabled", "center"]
|
crop_methods = ["disabled", "center"]
|
||||||
|
|
||||||
@ -1308,6 +1332,8 @@ class LatentUpscale:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class LatentUpscaleBy:
|
class LatentUpscaleBy:
|
||||||
|
SEARCH_ALIASES = ["enlarge latent", "resize latent", "scale latent"]
|
||||||
|
|
||||||
upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]
|
upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -1351,6 +1377,8 @@ class LatentRotate:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class LatentFlip:
|
class LatentFlip:
|
||||||
|
SEARCH_ALIASES = ["mirror latent"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "samples": ("LATENT",),
|
return {"required": { "samples": ("LATENT",),
|
||||||
@ -1371,6 +1399,8 @@ class LatentFlip:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class LatentComposite:
|
class LatentComposite:
|
||||||
|
SEARCH_ALIASES = ["overlay latent", "layer latent", "paste latent"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "samples_to": ("LATENT",),
|
return {"required": { "samples_to": ("LATENT",),
|
||||||
@ -1413,6 +1443,8 @@ class LatentComposite:
|
|||||||
return (samples_out,)
|
return (samples_out,)
|
||||||
|
|
||||||
class LatentBlend:
|
class LatentBlend:
|
||||||
|
SEARCH_ALIASES = ["mix latents", "interpolate latents"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": {
|
return {"required": {
|
||||||
@ -1454,6 +1486,8 @@ class LatentBlend:
|
|||||||
raise ValueError(f"Unsupported blend mode: {mode}")
|
raise ValueError(f"Unsupported blend mode: {mode}")
|
||||||
|
|
||||||
class LatentCrop:
|
class LatentCrop:
|
||||||
|
SEARCH_ALIASES = ["trim latent", "cut latent"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required": { "samples": ("LATENT",),
|
return {"required": { "samples": ("LATENT",),
|
||||||
@ -1739,6 +1773,8 @@ class LoadImage:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
class LoadImageMask:
|
class LoadImageMask:
|
||||||
|
SEARCH_ALIASES = ["import mask", "alpha mask", "channel mask"]
|
||||||
|
|
||||||
_color_channels = ["alpha", "red", "green", "blue"]
|
_color_channels = ["alpha", "red", "green", "blue"]
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
@ -1789,6 +1825,8 @@ class LoadImageMask:
|
|||||||
|
|
||||||
|
|
||||||
class LoadImageOutput(LoadImage):
|
class LoadImageOutput(LoadImage):
|
||||||
|
SEARCH_ALIASES = ["output image", "previous generation"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {
|
return {
|
||||||
@ -1862,6 +1900,7 @@ class ImageScaleBy:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class ImageInvert:
|
class ImageInvert:
|
||||||
|
SEARCH_ALIASES = ["reverse colors"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
@ -1877,6 +1916,7 @@ class ImageInvert:
|
|||||||
return (s,)
|
return (s,)
|
||||||
|
|
||||||
class ImageBatch:
|
class ImageBatch:
|
||||||
|
SEARCH_ALIASES = ["combine images", "merge images", "stack images"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
@ -1922,6 +1962,7 @@ class EmptyImage:
|
|||||||
return (torch.cat((r, g, b), dim=-1), )
|
return (torch.cat((r, g, b), dim=-1), )
|
||||||
|
|
||||||
class ImagePadForOutpaint:
|
class ImagePadForOutpaint:
|
||||||
|
SEARCH_ALIASES = ["extend canvas", "expand image"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user