diff --git a/README.md b/README.md
index 28f5dc6..12b84ac 100644
--- a/README.md
+++ b/README.md
@@ -65,6 +65,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy
2. If you click on 'Install Custom Nodes' or 'Install Models', an installer dialog will open.
+
![menu](misc/menu.jpg)
* When the 'Use local DB' feature is enabled, the application will utilize the data stored locally on your device, rather than retrieving node/model information over the internet
@@ -81,6 +82,11 @@ This repository provides Colab notebooks that allow you to install and use Comfy
* Install: Clicking this button will install the item.
* Try Install: This is a custom node of which installation information cannot be confirmed. Click the button to try installing it.
+4. If you set the `Badge:` item in the menu as `Badge: Nickname` or `Badge: #ID Nickname`, the information badge will be displayed on the node.
+* `Badge: Nickname` displays the nickname of custom nodes, while `Badge: ID Nickname` also includes the internal ID of the node.
+
+![model-install-dialog](misc/nickname.jpg)
+
## Custom node support guide
@@ -104,6 +110,19 @@ NODE_CLASS_MAPPINGS.update({
})
```
+* When you write a docstring in the header of the .py file for the Node as follows, it will be used for managing the database in the Manager.
+ * Currently, only the `nickname` is being used, but other parts will also be utilized in the future.
+ * The `nickname` will be the name displayed on the badge of the node.
+ * If there is no `nickname`, it will be truncated to 20 characters from the arbitrarily written title and used.
+```
+"""
+@author: Dr.Lt.Data
+@title: Impact Pack
+@nickname: Impact Pack
+@description: This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler.
+"""
+```
+
* **Special purpose files** (optional)
* `node_list.js` - When your custom nodes pattern of NODE_CLASS_MAPPINGS is not conventional, it is used to manually provide a list of nodes for reference. ([example](https://github.com/melMass/comfy_mtb/raw/main/node_list.json))
* `requirements.txt` - When installing, this pip requirements will be installed automatically
diff --git a/__init__.py b/__init__.py
index 83a384e..cbfcc05 100644
--- a/__init__.py
+++ b/__init__.py
@@ -55,7 +55,7 @@ sys.path.append('../..')
from torchvision.datasets.utils import download_url
# ensure .js
-print("### Loading: ComfyUI-Manager (V0.21.4)")
+print("### Loading: ComfyUI-Manager (V0.22)")
comfy_ui_required_revision = 1240
comfy_ui_revision = "Unknown"
@@ -84,6 +84,7 @@ def write_config():
config = configparser.ConfigParser()
config['default'] = {
'preview_method': get_current_preview_method(),
+ 'badge_mode': get_config()['badge_mode']
}
with open(config_path, 'w') as configfile:
config.write(configfile)
@@ -96,11 +97,12 @@ def read_config():
default_conf = config['default']
return {
- 'preview_method': default_conf['preview_method']
+ 'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else get_current_preview_method(),
+ 'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none'
}
except Exception:
- return {'preview_method': get_current_preview_method()}
+ return {'preview_method': get_current_preview_method(), 'badge_mode': 'none'}
def get_config():
@@ -136,6 +138,10 @@ def set_preview_method(method):
get_config()['preview_method'] = args.preview_method
+def set_badge_mode(mode):
+ get_config()['badge_mode'] = mode
+
+
set_preview_method(get_config()['preview_method'])
@@ -588,7 +594,7 @@ def copy_install(files, js_path_name=None):
return True
-def copy_uninstall(files, js_path_name=None):
+def copy_uninstall(files, js_path_name='.'):
for url in files:
dir_name = os.path.basename(url)
base_path = custom_nodes_path if url.endswith('.py') else os.path.join(js_path, js_path_name)
@@ -607,7 +613,7 @@ def copy_uninstall(files, js_path_name=None):
return True
-def copy_set_active(files, is_disable, js_path_name=None):
+def copy_set_active(files, is_disable, js_path_name='.'):
if is_disable:
action_name = "Disable"
else:
@@ -838,7 +844,7 @@ async def install_custom_node(request):
res = unzip_install(json_data['files'])
if install_type == "copy":
- js_path_name = json_data['js_path'] if 'js_path' in json_data else None
+ js_path_name = json_data['js_path'] if 'js_path' in json_data else '.'
res = copy_install(json_data['files'], js_path_name)
elif install_type == "git-clone":
@@ -867,7 +873,7 @@ async def install_custom_node(request):
res = False
if install_type == "copy":
- js_path_name = json_data['js_path'] if 'js_path' in json_data else None
+ js_path_name = json_data['js_path'] if 'js_path' in json_data else '.'
res = copy_uninstall(json_data['files'], js_path_name)
elif install_type == "git-clone":
@@ -1000,5 +1006,16 @@ async def preview_method(request):
return web.Response(status=200)
+@server.PromptServer.instance.routes.get("/manager/badge_mode")
+async def badge_mode(request):
+ if "value" in request.rel_url.query:
+ set_badge_mode(request.rel_url.query['value'])
+ write_config()
+ else:
+ return web.Response(text=get_config()['badge_mode'], status=200)
+
+ return web.Response(status=200)
+
+
NODE_CLASS_MAPPINGS = {}
__all__ = ['NODE_CLASS_MAPPINGS']
diff --git a/custom-node-list.json b/custom-node-list.json
index 1abdec5..caedc4b 100644
--- a/custom-node-list.json
+++ b/custom-node-list.json
@@ -1109,6 +1109,26 @@
"install_type": "git-clone",
"description": "Nodes: NoisyLatentPerlin. This allows to create latent spaces filled with perlin-based noise that can actually be used by the samplers."
},
+ {
+ "author": "JPS-GER",
+ "title": "JPS Custom Nodes for ComfyUI",
+ "reference": "https://github.com/JPS-GER/ComfyUI_JPS-Nodes",
+ "files": [
+ "https://github.com/JPS-GER/ComfyUI_JPS-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes: SDXL - Resolutions, SDXL - Basic Settings, SDXL - Additional Settings, Math - Resolution Multiply, Math - Largest Integer, Switch - Generation Mode, ..."
+ },
+ {
+ "author": "hustille",
+ "title": "hus' utils for ComfyUI",
+ "reference": "https://github.com/hustille/ComfyUI_hus_utils",
+ "files": [
+ "https://github.com/hustille/ComfyUI_hus_utils"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes: Fetch widget value, 3way Prompt Styler, Text Hash, Date Time Format, Batch State, Debug Extra, ..."
+ },
{
"author": "taabata",
"title": "Syrian Falcon Nodes",
diff --git a/extension-node-map.json b/extension-node-map.json
index 9ad4412..6bdf45c 100644
--- a/extension-node-map.json
+++ b/extension-node-map.json
@@ -1,1486 +1,2094 @@
{
"https://github.com/AIrjen/OneButtonPrompt": [
- "CreatePromptVariant",
- "OneButtonPrompt",
- "SavePromptToFile"
+ [
+ "CreatePromptVariant",
+ "OneButtonPrompt",
+ "SavePromptToFile"
+ ],
+ {
+ "title_aux": "One Button Prompt"
+ }
],
"https://github.com/ArtVentureX/comfyui-animatediff": [
- "AnimateDiffCombine",
- "AnimateDiffLoader",
- "AnimateDiffLoader_v2",
- "AnimateDiffUnload"
+ [
+ "AnimateDiffCombine",
+ "AnimateDiffLoader",
+ "AnimateDiffLoader_v2",
+ "AnimateDiffUnload"
+ ],
+ {
+ "title_aux": "AnimateDiff"
+ }
],
"https://github.com/BadCafeCode/masquerade-nodes-comfyui": [
- "Blur",
- "Change Channel Count",
- "Combine Masks",
- "Constant Mask",
- "Convert Color Space",
- "Create QR Code",
- "Create Rect Mask",
- "Cut By Mask",
- "Get Image Size",
- "Image To Mask",
- "Make Image Batch",
- "Mask By Text",
- "Mask Morphology",
- "Mask To Region",
- "MasqueradeIncrementer",
- "Mix Color By Mask",
- "Mix Images By Mask",
- "Paste By Mask",
- "Prune By Mask",
- "Separate Mask Components",
- "Unary Image Op",
- "Unary Mask Op"
+ [
+ "Blur",
+ "Change Channel Count",
+ "Combine Masks",
+ "Constant Mask",
+ "Convert Color Space",
+ "Create QR Code",
+ "Create Rect Mask",
+ "Cut By Mask",
+ "Get Image Size",
+ "Image To Mask",
+ "Make Image Batch",
+ "Mask By Text",
+ "Mask Morphology",
+ "Mask To Region",
+ "MasqueradeIncrementer",
+ "Mix Color By Mask",
+ "Mix Images By Mask",
+ "Paste By Mask",
+ "Prune By Mask",
+ "Separate Mask Components",
+ "Unary Image Op",
+ "Unary Mask Op"
+ ],
+ {
+ "title_aux": "Masquerade Nodes"
+ }
],
"https://github.com/Beinsezii/bsz-cui-extras/raw/master/custom_nodes/bsz-auto-hires.py": [
- "BSZAbsoluteHires",
- "BSZAspectHires",
- "BSZCombinedHires"
+ [
+ "BSZAbsoluteHires",
+ "BSZAspectHires",
+ "BSZCombinedHires"
+ ],
+ {
+ "title_aux": "bsz-cui-extras"
+ }
],
"https://github.com/Bikecicle/ComfyUI-Waveform-Extensions/raw/main/EXT_AudioManipulation.py": [
- "BatchJoinAudio",
- "CutAudio",
- "DuplicateAudio",
- "JoinAudio",
- "ResampleAudio",
- "ReverseAudio",
- "StretchAudio"
+ [
+ "BatchJoinAudio",
+ "CutAudio",
+ "DuplicateAudio",
+ "JoinAudio",
+ "ResampleAudio",
+ "ReverseAudio",
+ "StretchAudio"
+ ],
+ {
+ "title_aux": "Waveform Extensions"
+ }
],
"https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb": [
- "BNK_AddCLIPSDXLParams",
- "BNK_AddCLIPSDXLRParams",
- "BNK_CLIPTextEncodeAdvanced",
- "BNK_CLIPTextEncodeSDXLAdvanced"
+ [
+ "BNK_AddCLIPSDXLParams",
+ "BNK_AddCLIPSDXLRParams",
+ "BNK_CLIPTextEncodeAdvanced",
+ "BNK_CLIPTextEncodeSDXLAdvanced"
+ ],
+ {
+ "title_aux": "Advanced CLIP Text Encode"
+ }
],
"https://github.com/BlenderNeko/ComfyUI_Cutoff": [
- "BNK_CutoffBasePrompt",
- "BNK_CutoffRegionsToConditioning",
- "BNK_CutoffRegionsToConditioning_ADV",
- "BNK_CutoffSetRegions"
+ [
+ "BNK_CutoffBasePrompt",
+ "BNK_CutoffRegionsToConditioning",
+ "BNK_CutoffRegionsToConditioning_ADV",
+ "BNK_CutoffSetRegions"
+ ],
+ {
+ "title_aux": "ComfyUI Cutoff"
+ }
],
"https://github.com/BlenderNeko/ComfyUI_Noise": [
- "BNK_DuplicateBatchIndex",
- "BNK_GetSigma",
- "BNK_InjectNoise",
- "BNK_NoisyLatentImage",
- "BNK_SlerpLatent",
- "BNK_Unsampler"
+ [
+ "BNK_DuplicateBatchIndex",
+ "BNK_GetSigma",
+ "BNK_InjectNoise",
+ "BNK_NoisyLatentImage",
+ "BNK_SlerpLatent",
+ "BNK_Unsampler"
+ ],
+ {
+ "title_aux": "ComfyUI Noise"
+ }
],
"https://github.com/BlenderNeko/ComfyUI_SeeCoder": [
- "ConcatConditioning",
- "SEECoderImageEncode"
+ [
+ "ConcatConditioning",
+ "SEECoderImageEncode"
+ ],
+ {
+ "title_aux": "(WIP) SeeCoder"
+ }
],
"https://github.com/BlenderNeko/ComfyUI_TiledKSampler": [
- "BNK_TiledKSampler",
- "BNK_TiledKSamplerAdvanced"
+ [
+ "BNK_TiledKSampler",
+ "BNK_TiledKSamplerAdvanced"
+ ],
+ {
+ "title_aux": "Tiled sampling for ComfyUI"
+ }
],
"https://github.com/Chaoses-Ib/ComfyUI_Ib_CustomNodes": [
- "LoadImageFromPath"
+ [
+ "LoadImageFromPath"
+ ],
+ {
+ "title_aux": "ComfyUI_Ib_CustomNodes"
+ }
],
"https://github.com/Davemane42/ComfyUI_Dave_CustomNode": [
- "ABGRemover",
- "ConditioningStretch",
- "ConditioningUpscale",
- "MultiAreaConditioning",
- "MultiLatentComposite"
+ [
+ "ABGRemover",
+ "ConditioningStretch",
+ "ConditioningUpscale",
+ "MultiAreaConditioning",
+ "MultiLatentComposite"
+ ],
+ {
+ "title_aux": "Visual Area Conditioning / Latent composition"
+ }
],
"https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes": [
- "ABSNode_DF",
- "Absolute value",
- "Ceil",
- "CeilNode_DF",
- "Conditioning area scale by ratio",
- "ConditioningSetArea with tuples",
- "ConditioningSetAreaEXT_DF",
- "ConditioningSetArea_DF",
- "CosNode_DF",
- "Cosines",
- "Divide",
- "DivideNode_DF",
- "EmptyLatentImage_DF",
- "Float",
- "Float debug print",
- "Float2Tuple_DF",
- "FloatDebugPrint_DF",
- "FloatNode_DF",
- "Floor",
- "FloorNode_DF",
- "Get image size",
- "Get latent size",
- "GetImageSize_DF",
- "GetLatentSize_DF",
- "Image scale by ratio",
- "Image scale to side",
- "ImageScale_Ratio_DF",
- "ImageScale_Side_DF",
- "Int debug print",
- "Int to float",
- "Int to tuple",
- "Int2Float_DF",
- "IntDebugPrint_DF",
- "Integer",
- "IntegerNode_DF",
- "Latent Scale by ratio",
- "Latent Scale to side",
- "LatentComposite with tuples",
- "LatentScale_Ratio_DF",
- "LatentScale_Side_DF",
- "MultilineStringNode_DF",
- "Multiply",
- "MultiplyNode_DF",
- "PowNode_DF",
- "Power",
- "Random",
- "RandomFloat_DF",
- "SinNode_DF",
- "Sinus",
- "SqrtNode_DF",
- "Square root",
- "String debug print",
- "StringNode_DF",
- "Subtract",
- "SubtractNode_DF",
- "Sum",
- "SumNode_DF",
- "TanNode_DF",
- "Tangent",
- "Text",
- "Text box",
- "Tuple",
- "Tuple debug print",
- "Tuple multiply",
- "Tuple swap",
- "Tuple to floats",
- "Tuple to ints",
- "Tuple2Float_DF",
- "TupleDebugPrint_DF",
- "TupleNode_DF"
+ [
+ "ABSNode_DF",
+ "Absolute value",
+ "Ceil",
+ "CeilNode_DF",
+ "Conditioning area scale by ratio",
+ "ConditioningSetArea with tuples",
+ "ConditioningSetAreaEXT_DF",
+ "ConditioningSetArea_DF",
+ "CosNode_DF",
+ "Cosines",
+ "Divide",
+ "DivideNode_DF",
+ "EmptyLatentImage_DF",
+ "Float",
+ "Float debug print",
+ "Float2Tuple_DF",
+ "FloatDebugPrint_DF",
+ "FloatNode_DF",
+ "Floor",
+ "FloorNode_DF",
+ "Get image size",
+ "Get latent size",
+ "GetImageSize_DF",
+ "GetLatentSize_DF",
+ "Image scale by ratio",
+ "Image scale to side",
+ "ImageScale_Ratio_DF",
+ "ImageScale_Side_DF",
+ "Int debug print",
+ "Int to float",
+ "Int to tuple",
+ "Int2Float_DF",
+ "IntDebugPrint_DF",
+ "Integer",
+ "IntegerNode_DF",
+ "Latent Scale by ratio",
+ "Latent Scale to side",
+ "LatentComposite with tuples",
+ "LatentScale_Ratio_DF",
+ "LatentScale_Side_DF",
+ "MultilineStringNode_DF",
+ "Multiply",
+ "MultiplyNode_DF",
+ "PowNode_DF",
+ "Power",
+ "Random",
+ "RandomFloat_DF",
+ "SinNode_DF",
+ "Sinus",
+ "SqrtNode_DF",
+ "Square root",
+ "String debug print",
+ "StringNode_DF",
+ "Subtract",
+ "SubtractNode_DF",
+ "Sum",
+ "SumNode_DF",
+ "TanNode_DF",
+ "Tangent",
+ "Text",
+ "Text box",
+ "Tuple",
+ "Tuple debug print",
+ "Tuple multiply",
+ "Tuple swap",
+ "Tuple to floats",
+ "Tuple to ints",
+ "Tuple2Float_DF",
+ "TupleDebugPrint_DF",
+ "TupleNode_DF"
+ ],
+ {
+ "title_aux": "Derfuu_ComfyUI_ModdedNodes"
+ }
],
"https://github.com/EllangoK/ComfyUI-post-processing-nodes": [
- "ArithmeticBlend",
- "AsciiArt",
- "Blend",
- "Blur",
- "CannyEdgeMask",
- "ChromaticAberration",
- "ColorCorrect",
- "ColorTint",
- "Dissolve",
- "Dither",
- "DodgeAndBurn",
- "FilmGrain",
- "Glow",
- "HSVThresholdMask",
- "KMeansQuantize",
- "KuwaharaBlur",
- "Parabolize",
- "PencilSketch",
- "PixelSort",
- "Pixelize",
- "Quantize",
- "Sharpen",
- "SineWave",
- "Solarize",
- "Vignette"
+ [
+ "ArithmeticBlend",
+ "AsciiArt",
+ "Blend",
+ "Blur",
+ "CannyEdgeMask",
+ "ChromaticAberration",
+ "ColorCorrect",
+ "ColorTint",
+ "Dissolve",
+ "Dither",
+ "DodgeAndBurn",
+ "FilmGrain",
+ "Glow",
+ "HSVThresholdMask",
+ "KMeansQuantize",
+ "KuwaharaBlur",
+ "Parabolize",
+ "PencilSketch",
+ "PixelSort",
+ "Pixelize",
+ "Quantize",
+ "Sharpen",
+ "SineWave",
+ "Solarize",
+ "Vignette"
+ ],
+ {
+ "title_aux": "ComfyUI-post-processing-nodes"
+ }
],
"https://github.com/Extraltodeus/noise_latent_perlinpinpin": [
- "NoisyLatentPerlin"
+ [
+ "NoisyLatentPerlin"
+ ],
+ {
+ "title_aux": "noise latent perlinpinpin"
+ }
],
"https://github.com/Fannovel16/ComfyUI-Frame-Interpolation": [
- "AMT VFI",
- "ESAI VFI",
- "GMFSS Fortuna VFI",
- "IFRNet VFI",
- "IFUnet VFI",
- "KSampler Gradually Adding More Denoise (efficient)",
- "M2M VFI",
- "RIFE VFI",
- "Sepconv VFI"
+ [
+ "AMT VFI",
+ "ESAI VFI",
+ "GMFSS Fortuna VFI",
+ "IFRNet VFI",
+ "IFUnet VFI",
+ "KSampler Gradually Adding More Denoise (efficient)",
+ "M2M VFI",
+ "RIFE VFI",
+ "Sepconv VFI"
+ ],
+ {
+ "title_aux": "ComfyUI-Frame-Interpolation"
+ }
],
"https://github.com/Fannovel16/comfy_controlnet_preprocessors": [
- "AnimeLineArtPreprocessor",
- "BAE-NormalMapPreprocessor",
- "BinaryPreprocessor",
- "CannyEdgePreprocessor",
- "ColorPreprocessor",
- "FakeScribblePreprocessor",
- "HEDPreprocessor",
- "InpaintPreprocessor",
- "LeReS-DepthMapPreprocessor",
- "LineArtPreprocessor",
- "M-LSDPreprocessor",
- "Manga2Anime-LineArtPreprocessor",
- "MediaPipe-FaceMeshPreprocessor",
- "MediaPipe-HandPosePreprocessor",
- "MiDaS-DepthMapPreprocessor",
- "MiDaS-NormalMapPreprocessor",
- "OneFormer-ADE20K-SemSegPreprocessor",
- "OneFormer-COCO-SemSegPreprocessor",
- "OpenposePreprocessor",
- "PiDiNetPreprocessor",
- "ScribblePreprocessor",
- "SemSegPreprocessor",
- "ShufflePreprocessor",
- "TilePreprocessor",
- "UniFormer-SemSegPreprocessor",
- "Zoe-DepthMapPreprocessor"
+ [
+ "AnimeLineArtPreprocessor",
+ "BAE-NormalMapPreprocessor",
+ "BinaryPreprocessor",
+ "CannyEdgePreprocessor",
+ "ColorPreprocessor",
+ "FakeScribblePreprocessor",
+ "HEDPreprocessor",
+ "InpaintPreprocessor",
+ "LeReS-DepthMapPreprocessor",
+ "LineArtPreprocessor",
+ "M-LSDPreprocessor",
+ "Manga2Anime-LineArtPreprocessor",
+ "MediaPipe-FaceMeshPreprocessor",
+ "MediaPipe-HandPosePreprocessor",
+ "MiDaS-DepthMapPreprocessor",
+ "MiDaS-NormalMapPreprocessor",
+ "OneFormer-ADE20K-SemSegPreprocessor",
+ "OneFormer-COCO-SemSegPreprocessor",
+ "OpenposePreprocessor",
+ "PiDiNetPreprocessor",
+ "ScribblePreprocessor",
+ "SemSegPreprocessor",
+ "ShufflePreprocessor",
+ "TilePreprocessor",
+ "UniFormer-SemSegPreprocessor",
+ "Zoe-DepthMapPreprocessor"
+ ],
+ {
+ "title_aux": "ControlNet Preprocessors"
+ }
],
"https://github.com/FizzleDorf/AIT": [
- "AITemplateControlNetLoader",
- "AITemplateLoader",
- "AITemplateVAEDecode",
- "AITemplateVAEEncode",
- "AITemplateVAEEncodeForInpaint"
+ [
+ "AITemplateControlNetLoader",
+ "AITemplateLoader",
+ "AITemplateVAEDecode",
+ "AITemplateVAEEncode",
+ "AITemplateVAEEncodeForInpaint"
+ ],
+ {
+ "title_aux": "AIT"
+ }
],
"https://github.com/FizzleDorf/ComfyUI_FizzNodes": [
- "AbsCosWave",
- "AbsSinWave",
- "CosWave",
- "InvCosWave",
- "InvSinWave",
- "Lerp",
- "PromptSchedule",
- "PromptScheduleEncodeSDXL",
- "PromptScheduleGLIGEN",
- "PromptScheduleNodeFlow",
- "PromptScheduleNodeFlowEnd",
- "SawtoothWave",
- "SinWave",
- "SquareWave",
- "TriangleWave",
- "ValueSchedule"
+ [
+ "AbsCosWave",
+ "AbsSinWave",
+ "CosWave",
+ "InvCosWave",
+ "InvSinWave",
+ "Lerp",
+ "PromptSchedule",
+ "PromptScheduleEncodeSDXL",
+ "PromptScheduleGLIGEN",
+ "PromptScheduleNodeFlow",
+ "PromptScheduleNodeFlowEnd",
+ "SawtoothWave",
+ "SinWave",
+ "SquareWave",
+ "TriangleWave",
+ "ValueSchedule"
+ ],
+ {
+ "title_aux": "FizzNodes"
+ }
],
"https://github.com/Gourieff/comfyui-reactor-node": [
- "ReActorFaceSwap"
+ [
+ "ReActorFaceSwap"
+ ],
+ {
+ "title_aux": "ReActor Node 0.1.0 for ComfyUI"
+ }
+ ],
+ "https://github.com/JPS-GER/ComfyUI_JPS-Nodes": [
+ [
+ "Math Largest Int (JPS)",
+ "Math Resolution Multiply (JPS)",
+ "SDXL Additional Settings (JPS)",
+ "SDXL Basic Settings (JPS)",
+ "SDXL Resolutions (JPS)",
+ "Switch Generation Mode (JPS)"
+ ],
+ {
+ "title_aux": "JPS Custom Nodes for ComfyUI"
+ }
],
"https://github.com/Jcd1230/rembg-comfyui-node": [
- "Image Remove Background (rembg)"
+ [
+ "Image Remove Background (rembg)"
+ ],
+ {
+ "title_aux": "Rembg Background Removal Node for ComfyUI"
+ }
],
"https://github.com/Jordach/comfy-plasma": [
- "JDC_AutoContrast",
- "JDC_BlendImages",
- "JDC_BrownNoise",
- "JDC_Contrast",
- "JDC_EqualizeGrey",
- "JDC_GaussianBlur",
- "JDC_GreyNoise",
- "JDC_Greyscale",
- "JDC_ImageLoader",
- "JDC_ImageLoaderMeta",
- "JDC_PinkNoise",
- "JDC_Plasma",
- "JDC_PlasmaSampler",
- "JDC_PowerImage",
- "JDC_RandNoise",
- "JDC_ResizeFactor"
+ [
+ "JDC_AutoContrast",
+ "JDC_BlendImages",
+ "JDC_BrownNoise",
+ "JDC_Contrast",
+ "JDC_EqualizeGrey",
+ "JDC_GaussianBlur",
+ "JDC_GreyNoise",
+ "JDC_Greyscale",
+ "JDC_ImageLoader",
+ "JDC_ImageLoaderMeta",
+ "JDC_PinkNoise",
+ "JDC_Plasma",
+ "JDC_PlasmaSampler",
+ "JDC_PowerImage",
+ "JDC_RandNoise",
+ "JDC_ResizeFactor"
+ ],
+ {
+ "title_aux": "comfy-plasma"
+ }
],
"https://github.com/Kaharos94/ComfyUI-Saveaswebp": [
- "Save_as_webp"
+ [
+ "Save_as_webp"
+ ],
+ {
+ "title_aux": "ComfyUI-Saveaswebp"
+ }
],
"https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": [
- "ControlNetLoaderAdvanced",
- "CustomControlNetWeights",
- "CustomT2IAdapterWeights",
- "DiffControlNetLoaderAdvanced",
- "ScaledSoftControlNetWeights",
- "SoftControlNetWeights",
- "SoftT2IAdapterWeights"
+ [
+ "ControlNetLoaderAdvanced",
+ "CustomControlNetWeights",
+ "CustomT2IAdapterWeights",
+ "DiffControlNetLoaderAdvanced",
+ "ScaledSoftControlNetWeights",
+ "SoftControlNetWeights",
+ "SoftT2IAdapterWeights"
+ ],
+ {
+ "title_aux": "ComfyUI-Advanced-ControlNet"
+ }
],
"https://github.com/LEv145/images-grid-comfy-plugin": [
- "GridAnnotation",
- "ImageCombine",
- "ImagesGridByColumns",
- "ImagesGridByRows",
- "LatentCombine"
+ [
+ "GridAnnotation",
+ "ImageCombine",
+ "ImagesGridByColumns",
+ "ImagesGridByRows",
+ "LatentCombine"
+ ],
+ {
+ "title_aux": "ImagesGrid"
+ }
],
"https://github.com/LucianoCirino/efficiency-nodes-comfyui": [
- "Control Net Stacker",
- "Efficient Loader",
- "Evaluate Integers",
- "Image Overlay",
- "Join XY Inputs of Same Type",
- "KSampler (Efficient)",
- "KSampler Adv. (Efficient)",
- "LoRA Stacker",
- "LoRA Stacker Adv.",
- "Manual XY Entry Info",
- "XY Input: Add/Return Noise",
- "XY Input: CFG Scale",
- "XY Input: Checkpoint",
- "XY Input: Clip Skip",
- "XY Input: Control Net Strengths",
- "XY Input: Denoise",
- "XY Input: End at Step",
- "XY Input: LoRA",
- "XY Input: LoRA Adv.",
- "XY Input: LoRA Stacks",
- "XY Input: Manual XY Entry",
- "XY Input: Negative Prompt S/R",
- "XY Input: Positive Prompt S/R",
- "XY Input: Sampler",
- "XY Input: Scheduler",
- "XY Input: Seeds++ Batch",
- "XY Input: Start at Step",
- "XY Input: Steps",
- "XY Input: VAE",
- "XY Plot"
+ [
+ "Control Net Stacker",
+ "Efficient Loader",
+ "Evaluate Integers",
+ "Image Overlay",
+ "Join XY Inputs of Same Type",
+ "KSampler (Efficient)",
+ "KSampler Adv. (Efficient)",
+ "LoRA Stacker",
+ "LoRA Stacker Adv.",
+ "Manual XY Entry Info",
+ "XY Input: Add/Return Noise",
+ "XY Input: CFG Scale",
+ "XY Input: Checkpoint",
+ "XY Input: Clip Skip",
+ "XY Input: Control Net Strengths",
+ "XY Input: Denoise",
+ "XY Input: End at Step",
+ "XY Input: LoRA",
+ "XY Input: LoRA Adv.",
+ "XY Input: LoRA Stacks",
+ "XY Input: Manual XY Entry",
+ "XY Input: Negative Prompt S/R",
+ "XY Input: Positive Prompt S/R",
+ "XY Input: Sampler",
+ "XY Input: Scheduler",
+ "XY Input: Seeds++ Batch",
+ "XY Input: Start at Step",
+ "XY Input: Steps",
+ "XY Input: VAE",
+ "XY Plot"
+ ],
+ {
+ "title_aux": "Efficiency Nodes for ComfyUI"
+ }
],
"https://github.com/M1kep/ComfyLiterals": [
- "Checkpoint",
- "Float",
- "Int",
- "Operation",
- "String"
+ [
+ "Checkpoint",
+ "Float",
+ "Int",
+ "Operation",
+ "String"
+ ],
+ {
+ "title_aux": "ComfyLiterals"
+ }
],
"https://github.com/ManglerFTW/ComfyI2I": [
- "Color Transfer",
- "Combine and Paste",
- "Inpaint Segments",
- "Mask Ops"
+ [
+ "Color Transfer",
+ "Combine and Paste",
+ "Inpaint Segments",
+ "Mask Ops"
+ ],
+ {
+ "title_aux": "ComfyI2I"
+ }
],
"https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite": [
- "LatentTravel"
+ [
+ "LatentTravel"
+ ],
+ {
+ "title_aux": "ComfyUI_TravelSuite"
+ }
],
"https://github.com/Nourepide/ComfyUI-Allor": [
- "AlphaChanelAdd",
- "AlphaChanelAddByMask",
- "AlphaChanelAsMask",
- "AlphaChanelRemove",
- "AlphaChanelRestore",
- "ClipClamp",
- "ClipVisionClamp",
- "ClipVisionOutputClamp",
- "ConditioningClamp",
- "ControlNetClamp",
- "GligenClamp",
- "ImageBatchFork",
- "ImageBatchGet",
- "ImageBatchJoin",
- "ImageBatchRemove",
- "ImageClamp",
- "ImageCompositeAbsolute",
- "ImageCompositeAbsoluteByContainer",
- "ImageCompositeRelative",
- "ImageCompositeRelativeByContainer",
- "ImageContainer",
- "ImageContainerInheritanceAdd",
- "ImageContainerInheritanceMax",
- "ImageContainerInheritanceScale",
- "ImageContainerInheritanceSum",
- "ImageDrawArc",
- "ImageDrawArcByContainer",
- "ImageDrawChord",
- "ImageDrawChordByContainer",
- "ImageDrawEllipse",
- "ImageDrawEllipseByContainer",
- "ImageDrawLine",
- "ImageDrawLineByContainer",
- "ImageDrawPieslice",
- "ImageDrawPiesliceByContainer",
- "ImageDrawPolygon",
- "ImageDrawRectangle",
- "ImageDrawRectangleByContainer",
- "ImageDrawRectangleRounded",
- "ImageDrawRectangleRoundedByContainer",
- "ImageEffectsAdjustment",
- "ImageEffectsGrayscale",
- "ImageEffectsLensBokeh",
- "ImageEffectsLensChromaticAberration",
- "ImageEffectsLensOpticAxis",
- "ImageEffectsLensVignette",
- "ImageEffectsLensZoomBurst",
- "ImageEffectsNegative",
- "ImageEffectsSepia",
- "ImageFilterBilateralBlur",
- "ImageFilterBlur",
- "ImageFilterBoxBlur",
- "ImageFilterContour",
- "ImageFilterDetail",
- "ImageFilterEdgeEnhance",
- "ImageFilterEdgeEnhanceMore",
- "ImageFilterEmboss",
- "ImageFilterFindEdges",
- "ImageFilterGaussianBlur",
- "ImageFilterGaussianBlurAdvanced",
- "ImageFilterMax",
- "ImageFilterMedianBlur",
- "ImageFilterMin",
- "ImageFilterMode",
- "ImageFilterRank",
- "ImageFilterSharpen",
- "ImageFilterSmooth",
- "ImageFilterSmoothMore",
- "ImageFilterStackBlur",
- "ImageNoiseBeta",
- "ImageNoiseBinomial",
- "ImageNoiseBytes",
- "ImageNoiseGaussian",
- "ImageSegmentation",
- "ImageSegmentationCustom",
- "ImageSegmentationCustomAdvanced",
- "ImageText",
- "ImageTextMultiline",
- "ImageTextMultilineOutlined",
- "ImageTextOutlined",
- "ImageTransformCropAbsolute",
- "ImageTransformCropCorners",
- "ImageTransformCropRelative",
- "ImageTransformPaddingAbsolute",
- "ImageTransformPaddingRelative",
- "ImageTransformResizeAbsolute",
- "ImageTransformResizeRelative",
- "ImageTransformRotate",
- "ImageTransformTranspose",
- "LatentClamp",
- "MaskClamp",
- "ModelClamp",
- "StyleModelClamp",
- "UpscaleModelClamp",
- "VaeClamp"
+ [
+ "AlphaChanelAdd",
+ "AlphaChanelAddByMask",
+ "AlphaChanelAsMask",
+ "AlphaChanelRemove",
+ "AlphaChanelRestore",
+ "ClipClamp",
+ "ClipVisionClamp",
+ "ClipVisionOutputClamp",
+ "ConditioningClamp",
+ "ControlNetClamp",
+ "GligenClamp",
+ "ImageBatchFork",
+ "ImageBatchGet",
+ "ImageBatchJoin",
+ "ImageBatchRemove",
+ "ImageClamp",
+ "ImageCompositeAbsolute",
+ "ImageCompositeAbsoluteByContainer",
+ "ImageCompositeRelative",
+ "ImageCompositeRelativeByContainer",
+ "ImageContainer",
+ "ImageContainerInheritanceAdd",
+ "ImageContainerInheritanceMax",
+ "ImageContainerInheritanceScale",
+ "ImageContainerInheritanceSum",
+ "ImageDrawArc",
+ "ImageDrawArcByContainer",
+ "ImageDrawChord",
+ "ImageDrawChordByContainer",
+ "ImageDrawEllipse",
+ "ImageDrawEllipseByContainer",
+ "ImageDrawLine",
+ "ImageDrawLineByContainer",
+ "ImageDrawPieslice",
+ "ImageDrawPiesliceByContainer",
+ "ImageDrawPolygon",
+ "ImageDrawRectangle",
+ "ImageDrawRectangleByContainer",
+ "ImageDrawRectangleRounded",
+ "ImageDrawRectangleRoundedByContainer",
+ "ImageEffectsAdjustment",
+ "ImageEffectsGrayscale",
+ "ImageEffectsLensBokeh",
+ "ImageEffectsLensChromaticAberration",
+ "ImageEffectsLensOpticAxis",
+ "ImageEffectsLensVignette",
+ "ImageEffectsLensZoomBurst",
+ "ImageEffectsNegative",
+ "ImageEffectsSepia",
+ "ImageFilterBilateralBlur",
+ "ImageFilterBlur",
+ "ImageFilterBoxBlur",
+ "ImageFilterContour",
+ "ImageFilterDetail",
+ "ImageFilterEdgeEnhance",
+ "ImageFilterEdgeEnhanceMore",
+ "ImageFilterEmboss",
+ "ImageFilterFindEdges",
+ "ImageFilterGaussianBlur",
+ "ImageFilterGaussianBlurAdvanced",
+ "ImageFilterMax",
+ "ImageFilterMedianBlur",
+ "ImageFilterMin",
+ "ImageFilterMode",
+ "ImageFilterRank",
+ "ImageFilterSharpen",
+ "ImageFilterSmooth",
+ "ImageFilterSmoothMore",
+ "ImageFilterStackBlur",
+ "ImageNoiseBeta",
+ "ImageNoiseBinomial",
+ "ImageNoiseBytes",
+ "ImageNoiseGaussian",
+ "ImageSegmentation",
+ "ImageSegmentationCustom",
+ "ImageSegmentationCustomAdvanced",
+ "ImageText",
+ "ImageTextMultiline",
+ "ImageTextMultilineOutlined",
+ "ImageTextOutlined",
+ "ImageTransformCropAbsolute",
+ "ImageTransformCropCorners",
+ "ImageTransformCropRelative",
+ "ImageTransformPaddingAbsolute",
+ "ImageTransformPaddingRelative",
+ "ImageTransformResizeAbsolute",
+ "ImageTransformResizeRelative",
+ "ImageTransformRotate",
+ "ImageTransformTranspose",
+ "LatentClamp",
+ "MaskClamp",
+ "ModelClamp",
+ "StyleModelClamp",
+ "UpscaleModelClamp",
+ "VaeClamp"
+ ],
+ {
+ "title_aux": "Allor Plugin"
+ }
],
"https://github.com/Pfaeff/pfaeff-comfyui": [
- "AstropulsePixelDetector",
- "BackgroundRemover",
- "ImagePadForBetterOutpaint",
- "Inpainting",
- "InpaintingPipelineLoader"
+ [
+ "AstropulsePixelDetector",
+ "BackgroundRemover",
+ "ImagePadForBetterOutpaint",
+ "Inpainting",
+ "InpaintingPipelineLoader"
+ ],
+ {
+ "title_aux": "pfaeff-comfyui"
+ }
],
"https://github.com/RockOfFire/ComfyUI_Comfyroll_CustomNodes": [
- "CR Apply ControlNet",
- "CR Apply LoRA Stack",
- "CR Aspect Ratio",
- "CR Aspect Ratio SDXL",
- "CR Clip Input Switch",
- "CR Color Tint",
- "CR Conditioning Input Switch",
- "CR ControlNet Input Switch",
- "CR Halftone Grid",
- "CR Halftone Image",
- "CR Halftones",
- "CR Hires Fix Process Switch",
- "CR Image Input Switch",
- "CR Image Input Switch (4 way)",
- "CR Image Output",
- "CR Image Pipe Edit",
- "CR Image Pipe In",
- "CR Image Pipe Out",
- "CR Image Size",
- "CR Img2Img Process Switch",
- "CR Integer Multiple",
- "CR KSampler (Iterative)",
- "CR Latent Batch Size",
- "CR Latent Input Switch",
- "CR Latent Upscale (Iterative)",
- "CR LoRA Stack",
- "CR Load Image Sequence",
- "CR Load LoRA",
- "CR Model Input Switch",
- "CR Module Input",
- "CR Module Output",
- "CR Module Pipe Loader",
- "CR Pipe Switch",
- "CR Process Switch",
- "CR SDXL Base Prompt Encoder",
- "CR SDXL Prompt Mixer",
- "CR SDXL Style Text",
- "CR Seed to Int",
- "CR Switch"
+ [
+ "CR Apply ControlNet",
+ "CR Apply LoRA Stack",
+ "CR Aspect Ratio",
+ "CR Aspect Ratio SDXL",
+ "CR Clip Input Switch",
+ "CR Color Tint",
+ "CR Conditioning Input Switch",
+ "CR ControlNet Input Switch",
+ "CR Halftone Grid",
+ "CR Halftone Image",
+ "CR Halftones",
+ "CR Hires Fix Process Switch",
+ "CR Image Input Switch",
+ "CR Image Input Switch (4 way)",
+ "CR Image Output",
+ "CR Image Pipe Edit",
+ "CR Image Pipe In",
+ "CR Image Pipe Out",
+ "CR Image Size",
+ "CR Img2Img Process Switch",
+ "CR Integer Multiple",
+ "CR KSampler (Iterative)",
+ "CR Latent Batch Size",
+ "CR Latent Input Switch",
+ "CR Latent Upscale (Iterative)",
+ "CR LoRA Stack",
+ "CR Load Image Sequence",
+ "CR Load LoRA",
+ "CR Model Input Switch",
+ "CR Module Input",
+ "CR Module Output",
+ "CR Module Pipe Loader",
+ "CR Pipe Switch",
+ "CR Process Switch",
+ "CR SDXL Base Prompt Encoder",
+ "CR SDXL Prompt Mixer",
+ "CR SDXL Style Text",
+ "CR Seed to Int",
+ "CR Switch"
+ ],
+ {
+ "title_aux": "ComfyUI_Comfyroll_CustomNodes"
+ }
],
"https://github.com/SLAPaper/ComfyUI-Image-Selector": [
- "ImageDuplicator",
- "ImageSelector",
- "LatentDuplicator",
- "LatentSelector"
+ [
+ "ImageDuplicator",
+ "ImageSelector",
+ "LatentDuplicator",
+ "LatentSelector"
+ ],
+ {
+ "title_aux": "ComfyUI-Image-Selector"
+ }
],
"https://github.com/SOELexicon/ComfyUI-LexMSDBNodes": [
- "MSSqlSelectNode",
- "MSSqlTableNode"
+ [
+ "MSSqlSelectNode",
+ "MSSqlTableNode"
+ ],
+ {
+ "title_aux": "LexMSDBNodes"
+ }
],
"https://github.com/SadaleNet/CLIPTextEncodeA1111-ComfyUI/raw/master/custom_nodes/clip_text_encoder_a1111.py": [
- "CLIPTextEncodeA1111",
- "RerouteTextForCLIPTextEncodeA1111"
+ [
+ "CLIPTextEncodeA1111",
+ "RerouteTextForCLIPTextEncodeA1111"
+ ],
+ {
+ "title_aux": "ComfyUI A1111-like Prompt Custom Node Solution"
+ }
],
"https://github.com/SeargeDP/SeargeSDXL": [
- "SeargeCheckpointLoader",
- "SeargeConditioningMuxer2",
- "SeargeConditioningMuxer5",
- "SeargeEnablerInputs",
- "SeargeFloatConstant",
- "SeargeFloatMath",
- "SeargeFloatPair",
- "SeargeGenerated1",
- "SeargeImageSave",
- "SeargeInput1",
- "SeargeInput2",
- "SeargeInput3",
- "SeargeInput4",
- "SeargeInput5",
- "SeargeInput6",
- "SeargeInput7",
- "SeargeIntegerConstant",
- "SeargeIntegerMath",
- "SeargeIntegerPair",
- "SeargeIntegerScaler",
- "SeargeLatentMuxer3",
- "SeargeLoraLoader",
- "SeargeOutput1",
- "SeargeOutput2",
- "SeargeOutput3",
- "SeargeOutput4",
- "SeargeOutput5",
- "SeargeOutput6",
- "SeargeOutput7",
- "SeargeParameterProcessor",
- "SeargePromptCombiner",
- "SeargePromptText",
- "SeargeSDXLBasePromptEncoder",
- "SeargeSDXLImage2ImageSampler",
- "SeargeSDXLImage2ImageSampler2",
- "SeargeSDXLImage2ImageSamplerV3",
- "SeargeSDXLPromptEncoder",
- "SeargeSDXLRefinerPromptEncoder",
- "SeargeSDXLSampler",
- "SeargeSDXLSampler2",
- "SeargeSDXLSamplerV3",
- "SeargeSamplerInputs",
- "SeargeSaveFolderInputs",
- "SeargeStylePreprocessor",
- "SeargeUpscaleModelLoader",
- "SeargeVAELoader"
+ [
+ "SeargeCheckpointLoader",
+ "SeargeConditioningMuxer2",
+ "SeargeConditioningMuxer5",
+ "SeargeEnablerInputs",
+ "SeargeFloatConstant",
+ "SeargeFloatMath",
+ "SeargeFloatPair",
+ "SeargeGenerated1",
+ "SeargeImageSave",
+ "SeargeInput1",
+ "SeargeInput2",
+ "SeargeInput3",
+ "SeargeInput4",
+ "SeargeInput5",
+ "SeargeInput6",
+ "SeargeInput7",
+ "SeargeIntegerConstant",
+ "SeargeIntegerMath",
+ "SeargeIntegerPair",
+ "SeargeIntegerScaler",
+ "SeargeLatentMuxer3",
+ "SeargeLoraLoader",
+ "SeargeOutput1",
+ "SeargeOutput2",
+ "SeargeOutput3",
+ "SeargeOutput4",
+ "SeargeOutput5",
+ "SeargeOutput6",
+ "SeargeOutput7",
+ "SeargeParameterProcessor",
+ "SeargePromptCombiner",
+ "SeargePromptText",
+ "SeargeSDXLBasePromptEncoder",
+ "SeargeSDXLImage2ImageSampler",
+ "SeargeSDXLImage2ImageSampler2",
+ "SeargeSDXLImage2ImageSamplerV3",
+ "SeargeSDXLPromptEncoder",
+ "SeargeSDXLRefinerPromptEncoder",
+ "SeargeSDXLSampler",
+ "SeargeSDXLSampler2",
+ "SeargeSDXLSamplerV3",
+ "SeargeSamplerInputs",
+ "SeargeSaveFolderInputs",
+ "SeargeStylePreprocessor",
+ "SeargeUpscaleModelLoader",
+ "SeargeVAELoader"
+ ],
+ {
+ "title_aux": "SeargeSDXL"
+ }
],
"https://github.com/Ser-Hilary/SDXL_sizing/raw/main/conditioning_sizing_for_SDXL.py": [
- "get_aspect_from_image",
- "get_aspect_from_ints",
- "sizing_node",
- "sizing_node_basic",
- "sizing_node_unparsed"
+ [
+ "get_aspect_from_image",
+ "get_aspect_from_ints",
+ "sizing_node",
+ "sizing_node_basic",
+ "sizing_node_unparsed"
+ ],
+ {
+ "title_aux": "SDXL_sizing"
+ }
],
"https://github.com/TinyTerra/ComfyUI_tinyterraNodes.git": [
- "ttN busIN",
- "ttN busOUT",
- "ttN concat",
- "ttN debugInput",
- "ttN float",
- "ttN hiresfixScale",
- "ttN imageOutput",
- "ttN imageREMBG",
- "ttN int",
- "ttN pipe2BASIC",
- "ttN pipe2DETAILER",
- "ttN pipeEDIT",
- "ttN pipeIN",
- "ttN pipeKSampler",
- "ttN pipeKSamplerAdvanced",
- "ttN pipeLoader",
- "ttN pipeLoaderSDXL",
- "ttN pipeOUT",
- "ttN seed",
- "ttN seedDebug",
- "ttN text",
- "ttN text3BOX_3WAYconcat",
- "ttN text7BOX_concat",
- "ttN textDebug",
- "ttN xyPlot"
+ [
+ "ttN busIN",
+ "ttN busOUT",
+ "ttN concat",
+ "ttN debugInput",
+ "ttN float",
+ "ttN hiresfixScale",
+ "ttN imageOutput",
+ "ttN imageREMBG",
+ "ttN int",
+ "ttN pipe2BASIC",
+ "ttN pipe2DETAILER",
+ "ttN pipeEDIT",
+ "ttN pipeIN",
+ "ttN pipeKSampler",
+ "ttN pipeKSamplerAdvanced",
+ "ttN pipeLoader",
+ "ttN pipeLoaderSDXL",
+ "ttN pipeOUT",
+ "ttN seed",
+ "ttN seedDebug",
+ "ttN text",
+ "ttN text3BOX_3WAYconcat",
+ "ttN text7BOX_concat",
+ "ttN textDebug",
+ "ttN xyPlot"
+ ],
+ {
+ "title_aux": "tinyterraNodes"
+ }
],
"https://github.com/WASasquatch/ComfyUI_Preset_Merger": [
- "Preset_Model_Merge"
+ [
+ "Preset_Model_Merge"
+ ],
+ {
+ "title_aux": "ComfyUI Preset Merger"
+ }
],
"https://github.com/WASasquatch/was-node-suite-comfyui": [
- "BLIP Analyze Image",
- "BLIP Model Loader",
- "Blend Latents",
- "Bounded Image Blend",
- "Bounded Image Blend with Mask",
- "Bounded Image Crop",
- "Bounded Image Crop with Mask",
- "CLIP Input Switch",
- "CLIP Vision Input Switch",
- "CLIPSeg Batch Masking",
- "CLIPSeg Masking",
- "CLIPSeg Model Loader",
- "CLIPTextEncode (BlenderNeko Advanced + NSP)",
- "CLIPTextEncode (NSP)",
- "Cache Node",
- "Checkpoint Loader",
- "Checkpoint Loader (Simple)",
- "Conditioning Input Switch",
- "Constant Number",
- "Control Net Model Input Switch",
- "Convert Masks to Images",
- "Create Grid Image",
- "Create Morph Image",
- "Create Morph Image from Path",
- "Create Video from Path",
- "Debug Number to Console",
- "Dictionary to Console",
- "Diffusers Hub Model Down-Loader",
- "Diffusers Model Loader",
- "Export API",
- "Image Analyze",
- "Image Aspect Ratio",
- "Image Batch",
- "Image Blank",
- "Image Blend",
- "Image Blend by Mask",
- "Image Blending Mode",
- "Image Bloom Filter",
- "Image Bounds",
- "Image Canny Filter",
- "Image Chromatic Aberration",
- "Image Color Palette",
- "Image Crop Face",
- "Image Crop Location",
- "Image Crop Square Location",
- "Image Displacement Warp",
- "Image Dragan Photography Filter",
- "Image Edge Detection Filter",
- "Image Film Grain",
- "Image Filter Adjustments",
- "Image Flip",
- "Image Generate Gradient",
- "Image Gradient Map",
- "Image High Pass Filter",
- "Image History Loader",
- "Image Input Switch",
- "Image Levels Adjustment",
- "Image Load",
- "Image Lucy Sharpen",
- "Image Median Filter",
- "Image Mix RGB Channels",
- "Image Monitor Effects Filter",
- "Image Nova Filter",
- "Image Padding",
- "Image Paste Crop",
- "Image Paste Crop by Location",
- "Image Paste Face",
- "Image Perlin Noise",
- "Image Perlin Power Fractal",
- "Image Pixelate",
- "Image Power Noise",
- "Image Rembg (Remove Background)",
- "Image Remove Background (Alpha)",
- "Image Remove Color",
- "Image Resize",
- "Image Rotate",
- "Image Rotate Hue",
- "Image SSAO (Ambient Occlusion)",
- "Image SSDO (Direct Occlusion)",
- "Image Save",
- "Image Seamless Texture",
- "Image Select Channel",
- "Image Select Color",
- "Image Shadows and Highlights",
- "Image Size to Number",
- "Image Stitch",
- "Image Style Filter",
- "Image Threshold",
- "Image Tiled",
- "Image Transpose",
- "Image Voronoi Noise Filter",
- "Image fDOF Filter",
- "Image to Latent Mask",
- "Image to Noise",
- "Image to Seed",
- "Images to RGB",
- "Inset Image Bounds",
- "Integer place counter",
- "KSampler (WAS)",
- "KSampler Cycle",
- "LangSAM Masking",
- "LangSAM Model Loader",
- "Latent Input Switch",
- "Latent Noise Injection",
- "Latent Size to Number",
- "Latent Upscale by Factor (WAS)",
- "Load Cache",
- "Load Image Batch",
- "Load Lora",
- "Load Text File",
- "Logic Boolean",
- "Lora Loader",
- "Mask Arbitrary Region",
- "Mask Batch",
- "Mask Batch to Mask",
- "Mask Ceiling Region",
- "Mask Crop Dominant Region",
- "Mask Crop Minority Region",
- "Mask Crop Region",
- "Mask Dilate Region",
- "Mask Dominant Region",
- "Mask Erode Region",
- "Mask Fill Holes",
- "Mask Floor Region",
- "Mask Gaussian Region",
- "Mask Invert",
- "Mask Minority Region",
- "Mask Paste Region",
- "Mask Smooth Region",
- "Mask Threshold Region",
- "Masks Add",
- "Masks Combine Batch",
- "Masks Combine Regions",
- "Masks Subtract",
- "MiDaS Depth Approximation",
- "MiDaS Mask Image",
- "MiDaS Model Loader",
- "Model Input Switch",
- "Number Counter",
- "Number Input Condition",
- "Number Input Switch",
- "Number Multiple Of",
- "Number Operation",
- "Number PI",
- "Number to Float",
- "Number to Int",
- "Number to Seed",
- "Number to String",
- "Number to Text",
- "Prompt Multiple Styles Selector",
- "Prompt Styles Selector",
- "Random Number",
- "SAM Image Mask",
- "SAM Model Loader",
- "SAM Parameters",
- "SAM Parameters Combine",
- "Samples Passthrough (Stat System)",
- "Save Text File",
- "Seed",
- "String to Text",
- "Tensor Batch to Image",
- "Text Add Token by Input",
- "Text Add Tokens",
- "Text Compare",
- "Text Concatenate",
- "Text Dictionary Update",
- "Text File History Loader",
- "Text Find and Replace",
- "Text Find and Replace Input",
- "Text Find and Replace by Dictionary",
- "Text Input Switch",
- "Text List",
- "Text List Concatenate",
- "Text Load Line From File",
- "Text Multiline",
- "Text Parse A1111 Embeddings",
- "Text Parse Noodle Soup Prompts",
- "Text Parse Tokens",
- "Text Random Line",
- "Text Random Prompt",
- "Text String",
- "Text String Truncate",
- "Text to Conditioning",
- "Text to Console",
- "Text to Number",
- "Text to String",
- "True Random.org Number Generator",
- "Upscale Model Loader",
- "Upscale Model Switch",
- "VAE Input Switch",
- "Video Dump Frames",
- "Write to GIF",
- "Write to Video",
- "unCLIP Checkpoint Loader"
+ [
+ "BLIP Analyze Image",
+ "BLIP Model Loader",
+ "Blend Latents",
+ "Bounded Image Blend",
+ "Bounded Image Blend with Mask",
+ "Bounded Image Crop",
+ "Bounded Image Crop with Mask",
+ "CLIP Input Switch",
+ "CLIP Vision Input Switch",
+ "CLIPSeg Batch Masking",
+ "CLIPSeg Masking",
+ "CLIPSeg Model Loader",
+ "CLIPTextEncode (BlenderNeko Advanced + NSP)",
+ "CLIPTextEncode (NSP)",
+ "Cache Node",
+ "Checkpoint Loader",
+ "Checkpoint Loader (Simple)",
+ "Conditioning Input Switch",
+ "Constant Number",
+ "Control Net Model Input Switch",
+ "Convert Masks to Images",
+ "Create Grid Image",
+ "Create Morph Image",
+ "Create Morph Image from Path",
+ "Create Video from Path",
+ "Debug Number to Console",
+ "Dictionary to Console",
+ "Diffusers Hub Model Down-Loader",
+ "Diffusers Model Loader",
+ "Export API",
+ "Image Analyze",
+ "Image Aspect Ratio",
+ "Image Batch",
+ "Image Blank",
+ "Image Blend",
+ "Image Blend by Mask",
+ "Image Blending Mode",
+ "Image Bloom Filter",
+ "Image Bounds",
+ "Image Canny Filter",
+ "Image Chromatic Aberration",
+ "Image Color Palette",
+ "Image Crop Face",
+ "Image Crop Location",
+ "Image Crop Square Location",
+ "Image Displacement Warp",
+ "Image Dragan Photography Filter",
+ "Image Edge Detection Filter",
+ "Image Film Grain",
+ "Image Filter Adjustments",
+ "Image Flip",
+ "Image Generate Gradient",
+ "Image Gradient Map",
+ "Image High Pass Filter",
+ "Image History Loader",
+ "Image Input Switch",
+ "Image Levels Adjustment",
+ "Image Load",
+ "Image Lucy Sharpen",
+ "Image Median Filter",
+ "Image Mix RGB Channels",
+ "Image Monitor Effects Filter",
+ "Image Nova Filter",
+ "Image Padding",
+ "Image Paste Crop",
+ "Image Paste Crop by Location",
+ "Image Paste Face",
+ "Image Perlin Noise",
+ "Image Perlin Power Fractal",
+ "Image Pixelate",
+ "Image Power Noise",
+ "Image Rembg (Remove Background)",
+ "Image Remove Background (Alpha)",
+ "Image Remove Color",
+ "Image Resize",
+ "Image Rotate",
+ "Image Rotate Hue",
+ "Image SSAO (Ambient Occlusion)",
+ "Image SSDO (Direct Occlusion)",
+ "Image Save",
+ "Image Seamless Texture",
+ "Image Select Channel",
+ "Image Select Color",
+ "Image Shadows and Highlights",
+ "Image Size to Number",
+ "Image Stitch",
+ "Image Style Filter",
+ "Image Threshold",
+ "Image Tiled",
+ "Image Transpose",
+ "Image Voronoi Noise Filter",
+ "Image fDOF Filter",
+ "Image to Latent Mask",
+ "Image to Noise",
+ "Image to Seed",
+ "Images to RGB",
+ "Inset Image Bounds",
+ "Integer place counter",
+ "KSampler (WAS)",
+ "KSampler Cycle",
+ "LangSAM Masking",
+ "LangSAM Model Loader",
+ "Latent Input Switch",
+ "Latent Noise Injection",
+ "Latent Size to Number",
+ "Latent Upscale by Factor (WAS)",
+ "Load Cache",
+ "Load Image Batch",
+ "Load Lora",
+ "Load Text File",
+ "Logic Boolean",
+ "Lora Loader",
+ "Mask Arbitrary Region",
+ "Mask Batch",
+ "Mask Batch to Mask",
+ "Mask Ceiling Region",
+ "Mask Crop Dominant Region",
+ "Mask Crop Minority Region",
+ "Mask Crop Region",
+ "Mask Dilate Region",
+ "Mask Dominant Region",
+ "Mask Erode Region",
+ "Mask Fill Holes",
+ "Mask Floor Region",
+ "Mask Gaussian Region",
+ "Mask Invert",
+ "Mask Minority Region",
+ "Mask Paste Region",
+ "Mask Smooth Region",
+ "Mask Threshold Region",
+ "Masks Add",
+ "Masks Combine Batch",
+ "Masks Combine Regions",
+ "Masks Subtract",
+ "MiDaS Depth Approximation",
+ "MiDaS Mask Image",
+ "MiDaS Model Loader",
+ "Model Input Switch",
+ "Number Counter",
+ "Number Input Condition",
+ "Number Input Switch",
+ "Number Multiple Of",
+ "Number Operation",
+ "Number PI",
+ "Number to Float",
+ "Number to Int",
+ "Number to Seed",
+ "Number to String",
+ "Number to Text",
+ "Prompt Multiple Styles Selector",
+ "Prompt Styles Selector",
+ "Random Number",
+ "SAM Image Mask",
+ "SAM Model Loader",
+ "SAM Parameters",
+ "SAM Parameters Combine",
+ "Samples Passthrough (Stat System)",
+ "Save Text File",
+ "Seed",
+ "String to Text",
+ "Tensor Batch to Image",
+ "Text Add Token by Input",
+ "Text Add Tokens",
+ "Text Compare",
+ "Text Concatenate",
+ "Text Dictionary Update",
+ "Text File History Loader",
+ "Text Find and Replace",
+ "Text Find and Replace Input",
+ "Text Find and Replace by Dictionary",
+ "Text Input Switch",
+ "Text List",
+ "Text List Concatenate",
+ "Text Load Line From File",
+ "Text Multiline",
+ "Text Parse A1111 Embeddings",
+ "Text Parse Noodle Soup Prompts",
+ "Text Parse Tokens",
+ "Text Random Line",
+ "Text Random Prompt",
+ "Text String",
+ "Text String Truncate",
+ "Text to Conditioning",
+ "Text to Console",
+ "Text to Number",
+ "Text to String",
+ "True Random.org Number Generator",
+ "Upscale Model Loader",
+ "Upscale Model Switch",
+ "VAE Input Switch",
+ "Video Dump Frames",
+ "Write to GIF",
+ "Write to Video",
+ "unCLIP Checkpoint Loader"
+ ],
+ {
+ "title_aux": "WAS Node Suite"
+ }
],
"https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI": [
- "MergeBlockWeighted"
+ [
+ "MergeBlockWeighted"
+ ],
+ {
+ "title_aux": "MergeBlockWeighted_fo_ComfyUI"
+ }
],
"https://github.com/ZaneA/ComfyUI-ImageReward": [
- "ImageRewardLoader",
- "ImageRewardScore"
+ [
+ "ImageRewardLoader",
+ "ImageRewardScore"
+ ],
+ {
+ "title_aux": "ImageReward"
+ }
],
"https://github.com/adieyal/comfyui-dynamicprompts": [
- "DPCombinatorialGenerator",
- "DPFeelingLucky",
- "DPJinja",
- "DPMagicPrompt",
- "DPOutput",
- "DPRandomGenerator"
+ [
+ "DPCombinatorialGenerator",
+ "DPFeelingLucky",
+ "DPJinja",
+ "DPMagicPrompt",
+ "DPOutput",
+ "DPRandomGenerator"
+ ],
+ {
+ "title_aux": "DynamicPrompts Custom Nodes"
+ }
],
"https://github.com/andersxa/comfyui-PromptAttention": [
- "CLIPAttentionMaskEncode"
+ [
+ "CLIPAttentionMaskEncode"
+ ],
+ {
+ "title_aux": "CLIP Directional Prompt Attention"
+ }
],
"https://github.com/asagi4/comfyui-prompt-control": [
- "CondLinearInterpolate",
- "ConditioningCutoff",
- "EditableCLIPEncode",
- "FilterSchedule",
- "JinjaRender",
- "LoRAScheduler",
- "PromptControlSimple",
- "PromptToSchedule",
- "ScheduleToCond",
- "ScheduleToModel",
- "SimpleWildcard",
- "StringConcat"
+ [
+ "CondLinearInterpolate",
+ "ConditioningCutoff",
+ "EditableCLIPEncode",
+ "FilterSchedule",
+ "JinjaRender",
+ "LoRAScheduler",
+ "PromptControlSimple",
+ "PromptToSchedule",
+ "ScheduleToCond",
+ "ScheduleToModel",
+ "SimpleWildcard",
+ "StringConcat"
+ ],
+ {
+ "title_aux": "ComfyUI prompt control"
+ }
],
"https://github.com/bash-j/mikey_nodes": [
- "AddMetaData",
- "Batch Resize Image for SDXL",
- "Empty Latent Ratio Custom SDXL",
- "Empty Latent Ratio Select SDXL",
- "HaldCLUT",
- "Mikey Sampler",
- "Mikey Sampler Tiled",
- "Prompt With SDXL",
- "Prompt With Style",
- "Prompt With Style V2",
- "Prompt With Style V3",
- "Resize Image for SDXL",
- "Save Image With Prompt Data",
- "Save Images Mikey",
- "SaveMetaData",
- "Style Conditioner",
- "Upscale Tile Calculator",
- "VAE Decode 6GB SDXL (deprecated)",
- "Wildcard Processor"
+ [
+ "AddMetaData",
+ "Batch Resize Image for SDXL",
+ "Empty Latent Ratio Custom SDXL",
+ "Empty Latent Ratio Select SDXL",
+ "HaldCLUT",
+ "Mikey Sampler",
+ "Mikey Sampler Tiled",
+ "Prompt With SDXL",
+ "Prompt With Style",
+ "Prompt With Style V2",
+ "Prompt With Style V3",
+ "Resize Image for SDXL",
+ "Save Image With Prompt Data",
+ "Save Images Mikey",
+ "SaveMetaData",
+ "Style Conditioner",
+ "Upscale Tile Calculator",
+ "VAE Decode 6GB SDXL (deprecated)",
+ "Wildcard Processor"
+ ],
+ {
+ "title_aux": "Mikey Nodes"
+ }
],
"https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py": [
- "CLIPSeg",
- "CombineSegMasks"
+ [
+ "CLIPSeg",
+ "CombineSegMasks"
+ ],
+ {
+ "title_aux": "CLIPSeg"
+ }
],
"https://github.com/bvhari/ComfyUI_ImageProcessing": [
- "BilateralFilter",
- "Brightness",
- "Gamma",
- "Hue",
- "Saturation",
- "SigmoidCorrection",
- "UnsharpMask"
+ [
+ "BilateralFilter",
+ "Brightness",
+ "Gamma",
+ "Hue",
+ "Saturation",
+ "SigmoidCorrection",
+ "UnsharpMask"
+ ],
+ {
+ "title_aux": "ImageProcessing"
+ }
],
"https://github.com/bvhari/ComfyUI_LatentToRGB": [
- "LatentToRGB"
+ [
+ "LatentToRGB"
+ ],
+ {
+ "title_aux": "LatentToRGB"
+ }
],
"https://github.com/chenbaiyujason/sc-node-comfyui": [
- "8 Combine Text String",
- "Builder Text String",
- "Clean Gradio",
- "Combine GPT Prompt",
- "Combine Text String",
- "Get Gradio",
- "Multiple Combine GPT Prompt",
- "Multiple Post to GPT",
- "Multiple Text String",
- "One GPT Builder",
- "One Post to GPT",
- "Out Gradio",
- "Prompt Preview",
- "SCSCCLIPTextEncode",
- "SCSearch and Replace",
- "SCText to Console",
- "Single Text String",
- "String to ASCII",
- "Verb One Post to GPT"
+ [
+ "8 Combine Text String",
+ "Builder Text String",
+ "Clean Gradio",
+ "Combine GPT Prompt",
+ "Combine Text String",
+ "Get Gradio",
+ "Multiple Combine GPT Prompt",
+ "Multiple Post to GPT",
+ "Multiple Text String",
+ "One GPT Builder",
+ "One Post to GPT",
+ "Out Gradio",
+ "Prompt Preview",
+ "SCSCCLIPTextEncode",
+ "SCSearch and Replace",
+ "SCText to Console",
+ "Single Text String",
+ "String to ASCII",
+ "Verb One Post to GPT"
+ ],
+ {
+ "title_aux": "sc-node-comfyui"
+ }
],
"https://github.com/city96/ComfyUI_NetDist": [
- "FetchRemote",
- "QueueRemote"
+ [
+ "FetchRemote",
+ "QueueRemote"
+ ],
+ {
+ "title_aux": "ComfyUI_NetDist"
+ }
],
"https://github.com/city96/SD-Advanced-Noise": [
- "LatentGaussianNoise",
- "MathEncode"
+ [
+ "LatentGaussianNoise",
+ "MathEncode"
+ ],
+ {
+ "title_aux": "SD-Advanced-Noise"
+ }
],
"https://github.com/city96/SD-Latent-Interposer": [
- "LatentInterposer"
+ [
+ "LatentInterposer"
+ ],
+ {
+ "title_aux": "Latent-Interposer"
+ }
],
"https://github.com/civitai/comfy-nodes": [
- "CivitAI_Checkpoint_Loader",
- "CivitAI_Lora_Loader"
+ [
+ "CivitAI_Checkpoint_Loader",
+ "CivitAI_Lora_Loader"
+ ],
+ {
+ "title_aux": "comfy-nodes"
+ }
],
"https://github.com/comfyanonymous/ComfyUI_experiments/raw/master/advanced_model_merging.py": [
- "ModelMergeBlockNumber"
+ [
+ "ModelMergeBlockNumber"
+ ],
+ {
+ "title_aux": "ComfyUI_experiments/advanced_model_merging"
+ }
],
"https://github.com/comfyanonymous/ComfyUI_experiments/raw/master/reference_only.py": [
- "ReferenceOnlySimple"
+ [
+ "ReferenceOnlySimple"
+ ],
+ {
+ "title_aux": "ComfyUI_experiments/reference_only"
+ }
],
"https://github.com/comfyanonymous/ComfyUI_experiments/raw/master/sampler_rescalecfg.py": [
- "RescaleClassifierFreeGuidanceTest"
+ [
+ "RescaleClassifierFreeGuidanceTest"
+ ],
+ {
+ "title_aux": "ComfyUI_experiments/sampler_rescalecfg"
+ }
],
"https://github.com/comfyanonymous/ComfyUI_experiments/raw/master/sampler_tonemap.py": [
- "ModelSamplerTonemapNoiseTest"
+ [
+ "ModelSamplerTonemapNoiseTest"
+ ],
+ {
+ "title_aux": "ComfyUI_experiments/sampler_tonemap"
+ }
],
"https://github.com/coreyryanhanson/comfy-qr": [
- "comfy-qr-by-image-size",
- "comfy-qr-by-module-size",
- "comfy-qr-by-module-split"
+ [
+ "comfy-qr-by-image-size",
+ "comfy-qr-by-module-size",
+ "comfy-qr-by-module-split"
+ ],
+ {
+ "title_aux": "Comfy-QR"
+ }
],
"https://github.com/coreyryanhanson/comfy-qr-validation-nodes": [
- "comfy-qr-read",
- "comfy-qr-validate"
+ [
+ "comfy-qr-read",
+ "comfy-qr-validate"
+ ],
+ {
+ "title_aux": "comfy-qr-validation-nodes"
+ }
],
"https://github.com/cubiq/ComfyUI_SimpleMath": [
- "SimpleMath"
+ [
+ "SimpleMath"
+ ],
+ {
+ "title_aux": "Simple Math"
+ }
],
"https://github.com/dawangraoming/ComfyUI_ksampler_gpu/raw/main/ksampler_gpu.py": [
- "KSamplerAdvancedGPU",
- "KSamplerGPU"
+ [
+ "KSamplerAdvancedGPU",
+ "KSamplerGPU"
+ ],
+ {
+ "title_aux": "KSampler GPU"
+ }
],
"https://github.com/daxthin/facedetailer": [
- "DZ_Face_Detailer"
+ [
+ "DZ_Face_Detailer"
+ ],
+ {
+ "title_aux": "facedetailer"
+ }
],
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [
- "PixelArtDetectorConverter",
- "PixelArtDetectorSave",
- "PixelArtDetectorToImage",
- "PixelArtLoadPalettes"
+ [
+ "PixelArtDetectorConverter",
+ "PixelArtDetectorSave",
+ "PixelArtDetectorToImage",
+ "PixelArtLoadPalettes"
+ ],
+ {
+ "title_aux": "ComfyUI PixelArt Detector"
+ }
],
"https://github.com/diontimmer/ComfyUI-Vextra-Nodes": [
- "Add Text To Image",
- "Apply Instagram Filter",
- "Create Solid Color",
- "Flatten Colors",
- "Generate Noise Image",
- "GlitchThis Effect",
- "Hue Rotation",
- "Load Picture Index",
- "Pixel Sort",
- "Play Sound At Execution",
- "Prettify Prompt Using distilgpt2",
- "Swap Color Mode"
+ [
+ "Add Text To Image",
+ "Apply Instagram Filter",
+ "Create Solid Color",
+ "Flatten Colors",
+ "Generate Noise Image",
+ "GlitchThis Effect",
+ "Hue Rotation",
+ "Load Picture Index",
+ "Pixel Sort",
+ "Play Sound At Execution",
+ "Prettify Prompt Using distilgpt2",
+ "Swap Color Mode"
+ ],
+ {
+ "title_aux": "ComfyUI-Vextra-Nodes"
+ }
],
"https://github.com/evanspearman/ComfyMath": [
- "CM_BoolBinaryOperation",
- "CM_BoolToInt",
- "CM_BoolUnaryOperation",
- "CM_BreakoutVec2",
- "CM_BreakoutVec3",
- "CM_BreakoutVec4",
- "CM_ComposeVec2",
- "CM_ComposeVec3",
- "CM_ComposeVec4",
- "CM_FloatBinaryCondition",
- "CM_FloatBinaryOperation",
- "CM_FloatToInt",
- "CM_FloatToNumber",
- "CM_FloatUnaryCondition",
- "CM_FloatUnaryOperation",
- "CM_IntBinaryCondition",
- "CM_IntBinaryOperation",
- "CM_IntToBool",
- "CM_IntToFloat",
- "CM_IntToNumber",
- "CM_IntUnaryCondition",
- "CM_IntUnaryOperation",
- "CM_NumberBinaryCondition",
- "CM_NumberBinaryOperation",
- "CM_NumberToFloat",
- "CM_NumberToInt",
- "CM_NumberUnaryCondition",
- "CM_NumberUnaryOperation",
- "CM_Vec2BinaryCondition",
- "CM_Vec2BinaryOperation",
- "CM_Vec2ScalarOperation",
- "CM_Vec2ToScalarBinaryOperation",
- "CM_Vec2ToScalarUnaryOperation",
- "CM_Vec2UnaryCondition",
- "CM_Vec2UnaryOperation",
- "CM_Vec3BinaryCondition",
- "CM_Vec3BinaryOperation",
- "CM_Vec3ScalarOperation",
- "CM_Vec3ToScalarBinaryOperation",
- "CM_Vec3ToScalarUnaryOperation",
- "CM_Vec3UnaryCondition",
- "CM_Vec3UnaryOperation",
- "CM_Vec4BinaryCondition",
- "CM_Vec4BinaryOperation",
- "CM_Vec4ScalarOperation",
- "CM_Vec4ToScalarBinaryOperation",
- "CM_Vec4ToScalarUnaryOperation",
- "CM_Vec4UnaryCondition",
- "CM_Vec4UnaryOperation"
+ [
+ "CM_BoolBinaryOperation",
+ "CM_BoolToInt",
+ "CM_BoolUnaryOperation",
+ "CM_BreakoutVec2",
+ "CM_BreakoutVec3",
+ "CM_BreakoutVec4",
+ "CM_ComposeVec2",
+ "CM_ComposeVec3",
+ "CM_ComposeVec4",
+ "CM_FloatBinaryCondition",
+ "CM_FloatBinaryOperation",
+ "CM_FloatToInt",
+ "CM_FloatToNumber",
+ "CM_FloatUnaryCondition",
+ "CM_FloatUnaryOperation",
+ "CM_IntBinaryCondition",
+ "CM_IntBinaryOperation",
+ "CM_IntToBool",
+ "CM_IntToFloat",
+ "CM_IntToNumber",
+ "CM_IntUnaryCondition",
+ "CM_IntUnaryOperation",
+ "CM_NumberBinaryCondition",
+ "CM_NumberBinaryOperation",
+ "CM_NumberToFloat",
+ "CM_NumberToInt",
+ "CM_NumberUnaryCondition",
+ "CM_NumberUnaryOperation",
+ "CM_Vec2BinaryCondition",
+ "CM_Vec2BinaryOperation",
+ "CM_Vec2ScalarOperation",
+ "CM_Vec2ToScalarBinaryOperation",
+ "CM_Vec2ToScalarUnaryOperation",
+ "CM_Vec2UnaryCondition",
+ "CM_Vec2UnaryOperation",
+ "CM_Vec3BinaryCondition",
+ "CM_Vec3BinaryOperation",
+ "CM_Vec3ScalarOperation",
+ "CM_Vec3ToScalarBinaryOperation",
+ "CM_Vec3ToScalarUnaryOperation",
+ "CM_Vec3UnaryCondition",
+ "CM_Vec3UnaryOperation",
+ "CM_Vec4BinaryCondition",
+ "CM_Vec4BinaryOperation",
+ "CM_Vec4ScalarOperation",
+ "CM_Vec4ToScalarBinaryOperation",
+ "CM_Vec4ToScalarUnaryOperation",
+ "CM_Vec4UnaryCondition",
+ "CM_Vec4UnaryOperation"
+ ],
+ {
+ "title_aux": "ComfyMath"
+ }
],
"https://github.com/filipemeneses/comfy_pixelization": [
- "Pixelization"
+ [
+ "Pixelization"
+ ],
+ {
+ "title_aux": "Pixelization"
+ }
],
"https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [
- "fcFloat",
- "fcFloatMatic",
- "fcInteger"
+ [
+ "fcFloat",
+ "fcFloatMatic",
+ "fcInteger"
+ ],
+ {
+ "title_aux": "fcSuite"
+ }
],
"https://github.com/flyingshutter/As_ComfyUI_CustomNodes": [
- "BatchIndex_AS",
- "ImageMixMasked_As",
- "ImageToMask_AS",
- "Increment_AS",
- "Int2Any_AS",
- "LatentAdd_AS",
- "LatentMixMasked_As",
- "LatentMix_AS",
- "LatentToImages_AS",
- "LoadLatent_AS",
- "MapRange_AS",
- "MaskToImage_AS",
- "Math_AS",
- "Number2Float_AS",
- "Number2Int_AS",
- "Number_AS",
- "SaveLatent_AS",
- "TextToImage_AS"
+ [
+ "BatchIndex_AS",
+ "ImageMixMasked_As",
+ "ImageToMask_AS",
+ "Increment_AS",
+ "Int2Any_AS",
+ "LatentAdd_AS",
+ "LatentMixMasked_As",
+ "LatentMix_AS",
+ "LatentToImages_AS",
+ "LoadLatent_AS",
+ "MapRange_AS",
+ "MaskToImage_AS",
+ "Math_AS",
+ "Number2Float_AS",
+ "Number2Int_AS",
+ "Number_AS",
+ "SaveLatent_AS",
+ "TextToImage_AS"
+ ],
+ {
+ "title_aux": "As_ComfyUI_CustomNodes"
+ }
],
"https://github.com/gamert/ComfyUI_tagger": [
- "CLIPTextEncodeTaggerDD",
- "ImageTaggerDD",
- "LoadImage_Tagger",
- "PromptDD"
+ [
+ "CLIPTextEncodeTaggerDD",
+ "ImageTaggerDD",
+ "LoadImage_Tagger",
+ "PromptDD"
+ ],
+ {
+ "title_aux": "ComfyUI_tagger"
+ }
],
"https://github.com/guoyk93/yk-node-suite-comfyui": [
- "YKImagePadForOutpaint",
- "YKMaskToImage"
+ [
+ "YKImagePadForOutpaint",
+ "YKMaskToImage"
+ ],
+ {
+ "title_aux": "y.k.'s ComfyUI node suite"
+ }
],
"https://github.com/hnmr293/ComfyUI-nodes-hnmr": [
- "CLIPIter",
- "Dict2Model",
- "GridImage",
- "ImageBlend2",
- "KSamplerOverrided",
- "KSamplerSetting",
- "KSamplerXYZ",
- "LatentToHist",
- "LatentToImage",
- "ModelIter",
- "RandomLatentImage",
- "SaveStateDict",
- "SaveText",
- "StateDictLoader",
- "StateDictMerger",
- "StateDictMergerBlockWeighted",
- "StateDictMergerBlockWeightedMulti",
- "VAEDecodeBatched",
- "VAEEncodeBatched",
- "VAEIter"
+ [
+ "CLIPIter",
+ "Dict2Model",
+ "GridImage",
+ "ImageBlend2",
+ "KSamplerOverrided",
+ "KSamplerSetting",
+ "KSamplerXYZ",
+ "LatentToHist",
+ "LatentToImage",
+ "ModelIter",
+ "RandomLatentImage",
+ "SaveStateDict",
+ "SaveText",
+ "StateDictLoader",
+ "StateDictMerger",
+ "StateDictMergerBlockWeighted",
+ "StateDictMergerBlockWeightedMulti",
+ "VAEDecodeBatched",
+ "VAEEncodeBatched",
+ "VAEIter"
+ ],
+ {
+ "title_aux": "ComfyUI-nodes-hnmr"
+ }
+ ],
+ "https://github.com/hustille/ComfyUI_hus_utils": [
+ [
+ "3way Prompt Styler",
+ "Batch State",
+ "Date Time Format",
+ "Debug Extra",
+ "Fetch widget value",
+ "Text Hash"
+ ],
+ {
+ "title_aux": "hus' utils for ComfyUI"
+ }
],
"https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo": [
- "EagleImageNode"
+ [
+ "EagleImageNode"
+ ],
+ {
+ "title_aux": "Eagle PNGInfo"
+ }
],
"https://github.com/imb101/ComfyUI-FaceSwap": [
- "FaceSwapNode"
+ [
+ "FaceSwapNode"
+ ],
+ {
+ "title_aux": "FaceSwap"
+ }
],
"https://github.com/kwaroran/abg-comfyui": [
- "Remove Image Background (abg)"
+ [
+ "Remove Image Background (abg)"
+ ],
+ {
+ "title_aux": "abg-comfyui"
+ }
],
"https://github.com/lilly1987/ComfyUI_node_Lilly": [
- "CheckpointLoaderSimpleText",
- "LoraLoaderText",
- "LoraLoaderTextRandom",
- "Random_Sampler",
- "VAELoaderDecode"
+ [
+ "CheckpointLoaderSimpleText",
+ "LoraLoaderText",
+ "LoraLoaderTextRandom",
+ "Random_Sampler",
+ "VAELoaderDecode"
+ ],
+ {
+ "title_aux": "simple wildcard for ComfyUI"
+ }
],
"https://github.com/lordgasmic/ComfyUI-Wildcards/raw/master/wildcards.py": [
- "CLIPTextEncodeWithWildcards"
+ [
+ "CLIPTextEncodeWithWildcards"
+ ],
+ {
+ "title_aux": "Wildcards"
+ }
],
"https://github.com/lrzjason/ComfyUIJasonNode/raw/main/SDXLMixSampler.py": [
- "SDXLMixSampler"
+ [
+ "SDXLMixSampler"
+ ],
+ {
+ "title_aux": "ComfyUIJasonNode"
+ }
],
"https://github.com/ltdrdata/ComfyUI-Impact-Pack": [
- "AddMask",
- "BasicPipeToDetailerPipe",
- "BboxDetectorCombined",
- "BboxDetectorCombined_v2",
- "BboxDetectorForEach",
- "BboxDetectorSEGS",
- "BitwiseAndMask",
- "BitwiseAndMaskForEach",
- "CLIPSegDetectorProvider",
- "CfgScheduleHookProvider",
- "CombineRegionalPrompts",
- "DenoiseScheduleHookProvider",
- "DetailerForEach",
- "DetailerForEachDebug",
- "DetailerForEachDebugPipe",
- "DetailerForEachPipe",
- "DetailerPipeToBasicPipe",
- "EditBasicPipe",
- "EditDetailerPipe",
- "EmptySegs",
- "FaceDetailer",
- "FaceDetailerPipe",
- "FromBasicPipe",
- "FromBasicPipe_v2",
- "FromDetailerPipe",
- "FromDetailerPipe_v2",
- "ImageMaskSwitch",
- "ImageReceiver",
- "ImageSender",
- "ImpactCompare",
- "ImpactConditionalBranch",
- "ImpactConditionalStopIteration",
- "ImpactFloat",
- "ImpactImageBatchToImageList",
- "ImpactImageInfo",
- "ImpactInt",
- "ImpactKSamplerAdvancedBasicPipe",
- "ImpactKSamplerBasicPipe",
- "ImpactLogger",
- "ImpactMakeImageList",
- "ImpactMinMax",
- "ImpactNeg",
- "ImpactSEGSConcat",
- "ImpactSEGSLabelFilter",
- "ImpactSEGSOrderedFilter",
- "ImpactSEGSRangeFilter",
- "ImpactSEGSToMaskList",
- "ImpactSimpleDetectorSEGS",
- "ImpactSimpleDetectorSEGSPipe",
- "ImpactStringSelector",
- "ImpactValueReceiver",
- "ImpactValueSender",
- "ImpactWildcardEncode",
- "ImpactWildcardProcessor",
- "IterativeImageUpscale",
- "IterativeLatentUpscale",
- "KSamplerAdvancedProvider",
- "KSamplerProvider",
- "LatentPixelScale",
- "LatentReceiver",
- "LatentSender",
- "LatentSwitch",
- "LoadConditioning",
- "MMDetDetectorProvider",
- "MMDetLoader",
- "MaskPainter",
- "MaskToSEGS",
- "MasksToMaskList",
- "ONNXDetectorProvider",
- "ONNXDetectorSEGS",
- "PixelKSampleHookCombine",
- "PixelKSampleUpscalerProvider",
- "PixelKSampleUpscalerProviderPipe",
- "PixelTiledKSampleUpscalerProvider",
- "PixelTiledKSampleUpscalerProviderPipe",
- "PreviewBridge",
- "ReencodeLatent",
- "ReencodeLatentPipe",
- "RegionalPrompt",
- "RegionalSampler",
- "SAMDetectorCombined",
- "SAMDetectorSegmented",
- "SAMLoader",
- "SEGEdit",
- "SEGPick",
- "SEGSDetailer",
- "SEGSPaste",
- "SEGSPreview",
- "SEGSSwitch",
- "SEGSToImageList",
- "SaveConditioning",
- "SegmDetectorCombined",
- "SegmDetectorCombined_v2",
- "SegmDetectorForEach",
- "SegmDetectorSEGS",
- "Segs & Mask",
- "Segs & Mask ForEach",
- "SegsMaskCombine",
- "SegsToCombinedMask",
- "SubtractMask",
- "SubtractMaskForEach",
- "TiledKSamplerProvider",
- "ToBasicPipe",
- "ToBinaryMask",
- "ToDetailerPipe",
- "TwoAdvancedSamplersForMask",
- "TwoSamplersForMask",
- "TwoSamplersForMaskUpscalerProvider",
- "TwoSamplersForMaskUpscalerProviderPipe",
- "UltralyticsDetectorProvider"
+ [
+ "AddMask",
+ "BasicPipeToDetailerPipe",
+ "BboxDetectorCombined",
+ "BboxDetectorCombined_v2",
+ "BboxDetectorForEach",
+ "BboxDetectorSEGS",
+ "BitwiseAndMask",
+ "BitwiseAndMaskForEach",
+ "CLIPSegDetectorProvider",
+ "CfgScheduleHookProvider",
+ "CombineRegionalPrompts",
+ "DenoiseScheduleHookProvider",
+ "DetailerForEach",
+ "DetailerForEachDebug",
+ "DetailerForEachDebugPipe",
+ "DetailerForEachPipe",
+ "DetailerPipeToBasicPipe",
+ "EditBasicPipe",
+ "EditDetailerPipe",
+ "EmptySegs",
+ "FaceDetailer",
+ "FaceDetailerPipe",
+ "FromBasicPipe",
+ "FromBasicPipe_v2",
+ "FromDetailerPipe",
+ "FromDetailerPipe_v2",
+ "ImageMaskSwitch",
+ "ImageReceiver",
+ "ImageSender",
+ "ImpactCompare",
+ "ImpactConditionalBranch",
+ "ImpactConditionalStopIteration",
+ "ImpactDummyInput",
+ "ImpactFloat",
+ "ImpactImageBatchToImageList",
+ "ImpactImageInfo",
+ "ImpactInt",
+ "ImpactKSamplerAdvancedBasicPipe",
+ "ImpactKSamplerBasicPipe",
+ "ImpactLogger",
+ "ImpactMakeImageList",
+ "ImpactMinMax",
+ "ImpactNeg",
+ "ImpactSEGSConcat",
+ "ImpactSEGSLabelFilter",
+ "ImpactSEGSOrderedFilter",
+ "ImpactSEGSRangeFilter",
+ "ImpactSEGSToMaskList",
+ "ImpactSimpleDetectorSEGS",
+ "ImpactSimpleDetectorSEGSPipe",
+ "ImpactStringSelector",
+ "ImpactValueReceiver",
+ "ImpactValueSender",
+ "ImpactWildcardEncode",
+ "ImpactWildcardProcessor",
+ "IterativeImageUpscale",
+ "IterativeLatentUpscale",
+ "KSamplerAdvancedProvider",
+ "KSamplerProvider",
+ "LatentPixelScale",
+ "LatentReceiver",
+ "LatentSender",
+ "LatentSwitch",
+ "LoadConditioning",
+ "MMDetDetectorProvider",
+ "MMDetLoader",
+ "MaskPainter",
+ "MaskToSEGS",
+ "MasksToMaskList",
+ "ONNXDetectorProvider",
+ "ONNXDetectorSEGS",
+ "PixelKSampleHookCombine",
+ "PixelKSampleUpscalerProvider",
+ "PixelKSampleUpscalerProviderPipe",
+ "PixelTiledKSampleUpscalerProvider",
+ "PixelTiledKSampleUpscalerProviderPipe",
+ "PreviewBridge",
+ "ReencodeLatent",
+ "ReencodeLatentPipe",
+ "RegionalPrompt",
+ "RegionalSampler",
+ "SAMDetectorCombined",
+ "SAMDetectorSegmented",
+ "SAMLoader",
+ "SEGEdit",
+ "SEGPick",
+ "SEGSDetailer",
+ "SEGSPaste",
+ "SEGSPreview",
+ "SEGSSwitch",
+ "SEGSToImageList",
+ "SaveConditioning",
+ "SegmDetectorCombined",
+ "SegmDetectorCombined_v2",
+ "SegmDetectorForEach",
+ "SegmDetectorSEGS",
+ "Segs & Mask",
+ "Segs & Mask ForEach",
+ "SegsMaskCombine",
+ "SegsToCombinedMask",
+ "SubtractMask",
+ "SubtractMaskForEach",
+ "TiledKSamplerProvider",
+ "ToBasicPipe",
+ "ToBinaryMask",
+ "ToDetailerPipe",
+ "TwoAdvancedSamplersForMask",
+ "TwoSamplersForMask",
+ "TwoSamplersForMaskUpscalerProvider",
+ "TwoSamplersForMaskUpscalerProviderPipe",
+ "UltralyticsDetectorProvider"
+ ],
+ {
+ "author": "Dr.Lt.Data",
+ "description": "This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler.",
+ "nickname": "Impact Pack",
+ "title": "Impact Pack",
+ "title_aux": "ComfyUI Impact Pack"
+ }
],
"https://github.com/ltdrdata/ComfyUI-tomeSD-installer": [
- "CheckpointTomeLoader",
- "TestNode"
+ [
+ "CheckpointTomeLoader",
+ "TestNode"
+ ],
+ {
+ "title_aux": "CheckpointTomeLoader"
+ }
],
"https://github.com/m957ymj75urz/ComfyUI-Custom-Nodes/raw/main/clip-text-encode-split/clip_text_encode_split.py": [
- "RawText",
- "RawTextCombine",
- "RawTextEncode",
- "RawTextReplace"
+ [
+ "RawText",
+ "RawTextCombine",
+ "RawTextEncode",
+ "RawTextReplace"
+ ],
+ {
+ "title_aux": "m957ymj75urz/ComfyUI-Custom-Nodes"
+ }
],
"https://github.com/melMass/comfy_mtb": [
- "Animation Builder (mtb)",
- "Any To String (mtb)",
- "Bbox (mtb)",
- "Bbox From Mask (mtb)",
- "Blur (mtb)",
- "Color Correct (mtb)",
- "Colored Image (mtb)",
- "Concat Images (mtb)",
- "Crop (mtb)",
- "Debug (mtb)",
- "Deep Bump (mtb)",
- "Export With Ffmpeg (mtb)",
- "Face Swap (mtb)",
- "Film Interpolation (mtb)",
- "Fit Number (mtb)",
- "Float To Number (mtb)",
- "Get Batch From History (mtb)",
- "Image Compare (mtb)",
- "Image Premultiply (mtb)",
- "Image Remove Background Rembg (mtb)",
- "Image Resize Factor (mtb)",
- "Int To Bool (mtb)",
- "Int To Number (mtb)",
- "Latent Lerp (mtb)",
- "Load Face Analysis Model (mtb)",
- "Load Face Enhance Model (mtb)",
- "Load Face Swap Model (mtb)",
- "Load Film Model (mtb)",
- "Load Image From Url (mtb)",
- "Load Image Sequence (mtb)",
- "Mask To Image (mtb)",
- "Qr Code (mtb)",
- "Restore Face (mtb)",
- "Save Gif (mtb)",
- "Save Image Grid (mtb)",
- "Save Image Sequence (mtb)",
- "Save Tensors (mtb)",
- "Smart Step (mtb)",
- "String Replace (mtb)",
- "Styles Loader (mtb)",
- "Text To Image (mtb)",
- "Transform Image (mtb)",
- "Uncrop (mtb)",
- "Unsplash Image (mtb)"
+ [
+ "Animation Builder (mtb)",
+ "Any To String (mtb)",
+ "Bbox (mtb)",
+ "Bbox From Mask (mtb)",
+ "Blur (mtb)",
+ "Color Correct (mtb)",
+ "Colored Image (mtb)",
+ "Concat Images (mtb)",
+ "Crop (mtb)",
+ "Debug (mtb)",
+ "Deep Bump (mtb)",
+ "Export With Ffmpeg (mtb)",
+ "Face Swap (mtb)",
+ "Film Interpolation (mtb)",
+ "Fit Number (mtb)",
+ "Float To Number (mtb)",
+ "Get Batch From History (mtb)",
+ "Image Compare (mtb)",
+ "Image Premultiply (mtb)",
+ "Image Remove Background Rembg (mtb)",
+ "Image Resize Factor (mtb)",
+ "Int To Bool (mtb)",
+ "Int To Number (mtb)",
+ "Latent Lerp (mtb)",
+ "Load Face Analysis Model (mtb)",
+ "Load Face Enhance Model (mtb)",
+ "Load Face Swap Model (mtb)",
+ "Load Film Model (mtb)",
+ "Load Image From Url (mtb)",
+ "Load Image Sequence (mtb)",
+ "Mask To Image (mtb)",
+ "Qr Code (mtb)",
+ "Restore Face (mtb)",
+ "Save Gif (mtb)",
+ "Save Image Grid (mtb)",
+ "Save Image Sequence (mtb)",
+ "Save Tensors (mtb)",
+ "Smart Step (mtb)",
+ "String Replace (mtb)",
+ "Styles Loader (mtb)",
+ "Text To Image (mtb)",
+ "Transform Image (mtb)",
+ "Uncrop (mtb)",
+ "Unsplash Image (mtb)"
+ ],
+ {
+ "title_aux": "MTB Nodes"
+ }
],
"https://github.com/mihaiiancu/ComfyUI_Inpaint": [
- "InpaintMediapipe"
+ [
+ "InpaintMediapipe"
+ ],
+ {
+ "title_aux": "mihaiiancu/Inpaint"
+ }
],
"https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt": [
- "Save IMG Prompt"
+ [
+ "Save IMG Prompt"
+ ],
+ {
+ "title_aux": "SaveImgPrompt"
+ }
],
"https://github.com/omar92/ComfyUI-QualityOfLifeSuit_Omar92": [
- "CLIPStringEncode _O",
- "Chat completion _O",
- "ChatGPT Simple _O",
- "ChatGPT _O",
- "ChatGPT compact _O",
- "Chat_Completion _O",
- "Chat_Message _O",
- "Chat_Message_fromString _O",
- "Concat Text _O",
- "ConcatRandomNSP_O",
- "Debug String _O",
- "Debug Text _O",
- "Debug Text route _O",
- "Edit_image _O",
- "Equation1param _O",
- "Equation2params _O",
- "GetImage_(Width&Height) _O",
- "GetLatent_(Width&Height) _O",
- "ImageScaleFactor _O",
- "ImageScaleFactorSimple _O",
- "LatentUpscaleFactor _O",
- "LatentUpscaleFactorSimple _O",
- "LatentUpscaleMultiply",
- "Note _O",
- "RandomNSP _O",
- "Replace Text _O",
- "String _O",
- "Text _O",
- "Text2Image _O",
- "Trim Text _O",
- "VAEDecodeParallel _O",
- "combine_chat_messages _O",
- "compine_chat_messages _O",
- "concat Strings _O",
- "create image _O",
- "create_image _O",
- "debug Completeion _O",
- "debug messages_O",
- "float _O",
- "floatToInt _O",
- "floatToText _O",
- "int _O",
- "intToFloat _O",
- "load_openAI _O",
- "replace String _O",
- "replace String advanced _O",
- "saveTextToFile _O",
- "seed _O",
- "selectLatentFromBatch _O",
- "string2Image _O",
- "trim String _O",
- "variation_image _O"
+ [
+ "CLIPStringEncode _O",
+ "Chat completion _O",
+ "ChatGPT Simple _O",
+ "ChatGPT _O",
+ "ChatGPT compact _O",
+ "Chat_Completion _O",
+ "Chat_Message _O",
+ "Chat_Message_fromString _O",
+ "Concat Text _O",
+ "ConcatRandomNSP_O",
+ "Debug String _O",
+ "Debug Text _O",
+ "Debug Text route _O",
+ "Edit_image _O",
+ "Equation1param _O",
+ "Equation2params _O",
+ "GetImage_(Width&Height) _O",
+ "GetLatent_(Width&Height) _O",
+ "ImageScaleFactor _O",
+ "ImageScaleFactorSimple _O",
+ "LatentUpscaleFactor _O",
+ "LatentUpscaleFactorSimple _O",
+ "LatentUpscaleMultiply",
+ "Note _O",
+ "RandomNSP _O",
+ "Replace Text _O",
+ "String _O",
+ "Text _O",
+ "Text2Image _O",
+ "Trim Text _O",
+ "VAEDecodeParallel _O",
+ "combine_chat_messages _O",
+ "compine_chat_messages _O",
+ "concat Strings _O",
+ "create image _O",
+ "create_image _O",
+ "debug Completeion _O",
+ "debug messages_O",
+ "float _O",
+ "floatToInt _O",
+ "floatToText _O",
+ "int _O",
+ "intToFloat _O",
+ "load_openAI _O",
+ "replace String _O",
+ "replace String advanced _O",
+ "saveTextToFile _O",
+ "seed _O",
+ "selectLatentFromBatch _O",
+ "string2Image _O",
+ "trim String _O",
+ "variation_image _O"
+ ],
+ {
+ "title_aux": "Quality of life Suit:V2"
+ }
],
"https://github.com/pants007/comfy-pants": [
- "CLIPTextEncodeAIO",
- "Image Make Square"
+ [
+ "CLIPTextEncodeAIO",
+ "Image Make Square"
+ ],
+ {
+ "title_aux": "pants"
+ }
],
"https://github.com/paulo-coronado/comfy_clip_blip_node": [
- "CLIPTextEncodeBLIP",
- "CLIPTextEncodeBLIP-2",
- "Example"
+ [
+ "CLIPTextEncodeBLIP",
+ "CLIPTextEncodeBLIP-2",
+ "Example"
+ ],
+ {
+ "title_aux": "comfy_clip_blip_node"
+ }
],
"https://github.com/pythongosssss/ComfyUI-Custom-Scripts": [
- "CheckpointLoader|pysssss",
- "ConstrainImage|pysssss",
- "LoraLoader|pysssss",
- "MathExpression|pysssss",
- "MultiPrimitive|pysssss",
- "PlaySound|pysssss",
- "ReroutePrimitive|pysssss",
- "ShowText|pysssss",
- "StringFunction|pysssss"
+ [
+ "CheckpointLoader|pysssss",
+ "ConstrainImage|pysssss",
+ "LoraLoader|pysssss",
+ "MathExpression|pysssss",
+ "MultiPrimitive|pysssss",
+ "PlaySound|pysssss",
+ "ReroutePrimitive|pysssss",
+ "ShowText|pysssss",
+ "StringFunction|pysssss"
+ ],
+ {
+ "title_aux": "pythongosssss/ComfyUI-Custom-Scripts"
+ }
],
"https://github.com/pythongosssss/ComfyUI-WD14-Tagger": [
- "WD14Tagger|pysssss"
+ [
+ "WD14Tagger|pysssss"
+ ],
+ {
+ "title_aux": "ComfyUI WD 1.4 Tagger"
+ }
],
"https://github.com/s1dlx/comfy_meh/raw/main/meh.py": [
- "MergingExecutionHelper"
+ [
+ "MergingExecutionHelper"
+ ],
+ {
+ "title_aux": "comfy_meh"
+ }
],
"https://github.com/shiimizu/ComfyUI_smZNodes": [
- "smZ CLIPTextEncode"
+ [
+ "smZ CLIPTextEncode"
+ ],
+ {
+ "title_aux": "smZNodes"
+ }
],
"https://github.com/shockz0rz/ComfyUI_InterpolateEverything": [
- "OpenposePreprocessorInterpolate"
+ [
+ "OpenposePreprocessorInterpolate"
+ ],
+ {
+ "title_aux": "InterpolateEverything"
+ }
],
"https://github.com/sipherxyz/comfyui-art-venture": [
- "AV_CheckpointModelsToParametersPipe",
- "AV_ParametersPipeToCheckpointModels",
- "AV_ParametersPipeToPrompts",
- "AV_PromptsToParametersPipe",
- "AV_UploadImage",
- "LoadImageFromUrl"
+ [
+ "AV_CheckpointModelsToParametersPipe",
+ "AV_ParametersPipeToCheckpointModels",
+ "AV_ParametersPipeToPrompts",
+ "AV_PromptsToParametersPipe",
+ "AV_UploadImage",
+ "ImageMuxer",
+ "LoadImageFromUrl",
+ "StringToInt"
+ ],
+ {
+ "title_aux": "comfyui-art-venture"
+ }
],
"https://github.com/space-nuko/ComfyUI-Disco-Diffusion": [
- "DiscoDiffusion_DiscoDiffusion",
- "DiscoDiffusion_DiscoDiffusionExtraSettings",
- "DiscoDiffusion_GuidedDiffusionLoader",
- "DiscoDiffusion_OpenAICLIPLoader"
+ [
+ "DiscoDiffusion_DiscoDiffusion",
+ "DiscoDiffusion_DiscoDiffusionExtraSettings",
+ "DiscoDiffusion_GuidedDiffusionLoader",
+ "DiscoDiffusion_OpenAICLIPLoader"
+ ],
+ {
+ "title_aux": "Disco Diffusion"
+ }
],
"https://github.com/space-nuko/ComfyUI-OpenPose-Editor": [
- "Nui.OpenPoseEditor"
+ [
+ "Nui.OpenPoseEditor"
+ ],
+ {
+ "title_aux": "OpenPose Editor"
+ }
],
"https://github.com/space-nuko/nui-suite": [
- "Nui.DynamicPromptsTextGen",
- "Nui.FeelingLuckyTextGen",
- "Nui.OutputString"
+ [
+ "Nui.DynamicPromptsTextGen",
+ "Nui.FeelingLuckyTextGen",
+ "Nui.OutputString"
+ ],
+ {
+ "title_aux": "nui suite"
+ }
],
"https://github.com/ssitu/ComfyUI_UltimateSDUpscale": [
- "UltimateSDUpscale",
- "UltimateSDUpscaleNoUpscale"
+ [
+ "UltimateSDUpscale",
+ "UltimateSDUpscaleNoUpscale"
+ ],
+ {
+ "title_aux": "UltimateSDUpscale"
+ }
],
"https://github.com/ssitu/ComfyUI_restart_sampling": [
- "KRestartSampler",
- "KRestartSamplerSimple"
+ [
+ "KRestartSampler",
+ "KRestartSamplerSimple"
+ ],
+ {
+ "title_aux": "Restart Sampling"
+ }
],
"https://github.com/ssitu/ComfyUI_roop": [
- "roop"
+ [
+ "roop"
+ ],
+ {
+ "title_aux": "ComfyUI roop"
+ }
],
"https://github.com/strimmlarn/ComfyUI_Strimmlarns_aesthetic_score": [
- "AesthetlcScoreSorter",
- "CalculateAestheticScore",
- "LoadAesteticModel",
- "ScoreToNumber"
+ [
+ "AesthetlcScoreSorter",
+ "CalculateAestheticScore",
+ "LoadAesteticModel",
+ "ScoreToNumber"
+ ],
+ {
+ "title_aux": "ComfyUI_Strimmlarns_aesthetic_score"
+ }
],
"https://github.com/sylym/comfy_vid2vid": [
- "CheckpointLoaderSimpleSequence",
- "DdimInversionSequence",
- "KSamplerSequence",
- "LoadImageMaskSequence",
- "LoadImageSequence",
- "LoraLoaderSequence",
- "SetLatentNoiseSequence",
- "TrainUnetSequence",
- "VAEEncodeForInpaintSequence"
+ [
+ "CheckpointLoaderSimpleSequence",
+ "DdimInversionSequence",
+ "KSamplerSequence",
+ "LoadImageMaskSequence",
+ "LoadImageSequence",
+ "LoraLoaderSequence",
+ "SetLatentNoiseSequence",
+ "TrainUnetSequence",
+ "VAEEncodeForInpaintSequence"
+ ],
+ {
+ "title_aux": "Vid2vid"
+ }
],
"https://github.com/szhublox/ambw_comfyui": [
- "Auto Merge Block Weighted"
+ [
+ "Auto Merge Block Weighted"
+ ],
+ {
+ "title_aux": "Auto-MBW"
+ }
],
"https://github.com/taabata/Comfy_Syrian_Falcon_Nodes/raw/main/SyrianFalconNodes.py": [
- "CompositeImage",
- "KSamplerAlternate",
- "KSamplerPromptEdit",
- "KSamplerPromptEditAndAlternate",
- "LoopBack",
- "QRGenerate",
- "WordAsImage"
+ [
+ "CompositeImage",
+ "KSamplerAlternate",
+ "KSamplerPromptEdit",
+ "KSamplerPromptEditAndAlternate",
+ "LoopBack",
+ "QRGenerate",
+ "WordAsImage"
+ ],
+ {
+ "title_aux": "Syrian Falcon Nodes"
+ }
],
"https://github.com/theUpsider/ComfyUI-Logic": [
- "Compare",
- "DebugPrint",
- "If ANY execute A else B",
- "Int",
- "String"
+ [
+ "Compare",
+ "DebugPrint",
+ "If ANY execute A else B",
+ "Int",
+ "String"
+ ],
+ {
+ "title_aux": "ComfyUI-Logic"
+ }
],
"https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader": [
- "Load Styles CSV"
+ [
+ "Load Styles CSV"
+ ],
+ {
+ "title_aux": "Styles CSV Loader Extension for ComfyUI"
+ }
],
"https://github.com/tkoenig89/ComfyUI_Load_Image_With_Metadata": [
- "LoadImageWithMetadata"
+ [
+ "LoadImageWithMetadata"
+ ],
+ {
+ "title_aux": "Load Image with metadata"
+ }
],
"https://github.com/trojblue/trNodes": [
- "JpgConvertNode",
- "trColorCorrection",
- "trLayering",
- "trRouter",
- "trRouterLonger"
+ [
+ "JpgConvertNode",
+ "trColorCorrection",
+ "trLayering",
+ "trRouter",
+ "trRouterLonger"
+ ],
+ {
+ "title_aux": "trNodes"
+ }
],
"https://github.com/tudal/Hakkun-ComfyUI-nodes/raw/main/hakkun_nodes.py": [
- "Any Converter",
- "Calculate Upscale",
- "Image size to string",
- "Multi Text Merge",
- "Prompt Parser",
- "Random Line",
- "Random Line 4"
+ [
+ "Any Converter",
+ "Calculate Upscale",
+ "Image size to string",
+ "Multi Text Merge",
+ "Prompt Parser",
+ "Random Line",
+ "Random Line 4"
+ ],
+ {
+ "title_aux": "Hakkun-ComfyUI-nodes"
+ }
],
"https://github.com/twri/sdxl_prompt_styler": [
- "SDXLPromptStyler"
+ [
+ "SDXLPromptStyler"
+ ],
+ {
+ "title_aux": "SDXL Prompt Styler"
+ }
],
"https://github.com/uarefans/ComfyUI-Fans": [
- "Fans Prompt Styler Negative",
- "Fans Prompt Styler Positive",
- "Fans Styler",
- "Fans Text Concatenate"
+ [
+ "Fans Prompt Styler Negative",
+ "Fans Prompt Styler Positive",
+ "Fans Styler",
+ "Fans Text Concatenate"
+ ],
+ {
+ "title_aux": "ComfyUI-Fans"
+ }
],
"https://github.com/wallish77/wlsh_nodes": [
- "Alternating KSampler (WLSH)",
- "Build Filename String (WLSH)",
- "CLIP Positive-Negative (WLSH)",
- "CLIP Positive-Negative w/Text (WLSH)",
- "Checkpoint Loader w/Name (WLSH)",
- "Empty Latent by Ratio (WLSH)",
- "Generate Edge Mask (WLSH)",
- "Generate Face Mask (WLSH)",
- "Image Save with Prompt Data (WLSH)",
- "Image Save with Prompt File (WLSH)",
- "Image Scale By Factor (WLSH)",
- "KSamplerAdvanced (WLSH)",
- "Multiply Integer (WLSH)",
- "Outpaint to Image (WLSH)",
- "Resolutions by Ratio (WLSH)",
- "SDXL Quick Empty Latent (WLSH)",
- "SDXL Quick Image Scale (WLSH)",
- "SDXL Resolutions (WLSH)",
- "SDXL Steps (WLSH)",
- "Save Positive Prompt File (WLSH)",
- "Save Prompt Info (WLSH)",
- "Seed and Int (WLSH)",
- "Seed to Number (WLSH)",
- "Time String (WLSH)",
- "Upscale by Factor with Model (WLSH)",
- "VAE Encode for Inpaint Padding (WLSH)"
+ [
+ "Alternating KSampler (WLSH)",
+ "Build Filename String (WLSH)",
+ "CLIP Positive-Negative (WLSH)",
+ "CLIP Positive-Negative w/Text (WLSH)",
+ "Checkpoint Loader w/Name (WLSH)",
+ "Empty Latent by Ratio (WLSH)",
+ "Generate Edge Mask (WLSH)",
+ "Generate Face Mask (WLSH)",
+ "Image Save with Prompt Data (WLSH)",
+ "Image Save with Prompt File (WLSH)",
+ "Image Scale By Factor (WLSH)",
+ "KSamplerAdvanced (WLSH)",
+ "Multiply Integer (WLSH)",
+ "Outpaint to Image (WLSH)",
+ "Resolutions by Ratio (WLSH)",
+ "SDXL Quick Empty Latent (WLSH)",
+ "SDXL Quick Image Scale (WLSH)",
+ "SDXL Resolutions (WLSH)",
+ "SDXL Steps (WLSH)",
+ "Save Positive Prompt File (WLSH)",
+ "Save Prompt Info (WLSH)",
+ "Seed and Int (WLSH)",
+ "Seed to Number (WLSH)",
+ "Time String (WLSH)",
+ "Upscale by Factor with Model (WLSH)",
+ "VAE Encode for Inpaint Padding (WLSH)"
+ ],
+ {
+ "title_aux": "wlsh_nodes"
+ }
],
"https://github.com/wsippel/comfyui_ws/raw/main/sdxl_utility.py": [
- "SDXLResolutionPresets"
+ [
+ "SDXLResolutionPresets"
+ ],
+ {
+ "title_aux": "SDXLResolutionPresets"
+ }
],
"https://github.com/xXAdonesXx/NodeGPT/raw/main/Textnode.py": [
- "CombineInput",
- "CostumeAgent_1",
- "CostumeAgent_2",
- "CostumeMaster_1",
- "Image_generation_Conditioning",
- "Memory_Excel",
- "Model_1",
- "TextCombine",
- "TextGenerator",
- "TextInput",
- "TextOutput"
+ [
+ "CombineInput",
+ "CostumeAgent_1",
+ "CostumeAgent_2",
+ "CostumeMaster_1",
+ "Image_generation_Conditioning",
+ "Memory_Excel",
+ "Model_1",
+ "TextCombine",
+ "TextGenerator",
+ "TextInput",
+ "TextOutput"
+ ],
+ {
+ "title_aux": "NodeGPT"
+ }
],
"https://github.com/yolanother/DTAIComfyPromptAgent": [
- "DTPromptAgent",
- "DTPromptAgentString"
+ [
+ "DTPromptAgent",
+ "DTPromptAgentString"
+ ],
+ {
+ "title_aux": "DTAIComfyPromptAgent"
+ }
],
"https://raw.githubusercontent.com/throttlekitty/SDXLCustomAspectRatio/main/SDXLAspectRatio.py": [
- "SDXLAspectRatio"
+ [
+ "SDXLAspectRatio"
+ ],
+ {
+ "title_aux": "SDXLCustomAspectRatio"
+ }
]
}
\ No newline at end of file
diff --git a/js/comfyui-manager.js b/js/comfyui-manager.js
index c8fe8ae..574ca24 100644
--- a/js/comfyui-manager.js
+++ b/js/comfyui-manager.js
@@ -5,6 +5,15 @@ import {ComfyWidgets} from "../../scripts/widgets.js";
var update_comfyui_button = null;
var fetch_updates_button = null;
+var badge_mode = "none";
+
+async function init_badge_mode() {
+ api.fetchApi('/manager/badge_mode')
+ .then(response => response.text())
+ .then(data => { badge_mode = data; })
+}
+
+await init_badge_mode();
async function getCustomnodeMappings() {
var mode = "url";
@@ -48,6 +57,32 @@ async function getCustomNodes() {
return data;
}
+async function fetchNicknames() {
+ const response1 = await api.fetchApi(`/customnode/getmappings?mode=local`);
+ const mappings = await response1.json();
+
+ let result = {};
+
+ for(let i in mappings) {
+ let item = mappings[i];
+ var nickname;
+ if(item[1].title) {
+ nickname = item[1].title;
+ }
+ else {
+ nickname = item[1].title_aux;
+ }
+
+ for(let j in item[0]) {
+ result[item[0][j]] = nickname;
+ }
+ }
+
+ return result;
+}
+
+let nicknames = await fetchNicknames();
+
async function getAlterList() {
var mode = "url";
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
@@ -89,7 +124,7 @@ async function install_custom_node(target, caller, mode) {
app.ui.dialog.show(`${mode} failed: ${target.title}`);
app.ui.dialog.element.style.zIndex = 9999;
return false;
- }
+ }
const status = await response.json();
app.ui.dialog.close();
@@ -238,7 +273,7 @@ class CustomNodesInstaller extends ComfyDialog {
startInstall(target) {
const self = CustomNodesInstaller.instance;
-
+
self.updateMessage(`
Installing '${target.title}'`);
for(let i in self.install_buttons) {
@@ -335,8 +370,8 @@ class CustomNodesInstaller extends ComfyDialog {
this.element.removeChild(this.element.children[0]);
}
- const msg = $el('div', {id:'custom-message'},
- [$el('br'),
+ const msg = $el('div', {id:'custom-message'},
+ [$el('br'),
'The custom node DB is currently being updated, and updates to custom nodes are being checked for.',
$el('br'),
'NOTE: Update only checks for extensions that have been fetched.',
@@ -1368,11 +1403,12 @@ class ManagerMenuDialog extends ComfyDialog {
() => fetchUpdates(this.update_check_checkbox)
});
+ // preview method
let preview_combo = document.createElement("select");
preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, []));
- preview_combo.appendChild($el('option', {value:'taesd', text:'Preview method: TAESD'}, []));
- preview_combo.appendChild($el('option', {value:'latent2rgb', text:'Preview method: Latent2RGB'}, []));
- preview_combo.appendChild($el('option', {value:'none', text:'Preview method: None'}, []));
+ preview_combo.appendChild($el('option', {value:'taesd', text:'Preview method: TAESD (slow)'}, []));
+ preview_combo.appendChild($el('option', {value:'latent2rgb', text:'Preview method: Latent2RGB (fast)'}, []));
+ preview_combo.appendChild($el('option', {value:'none', text:'Preview method: None (very fast)'}, []));
api.fetchApi('/manager/preview_method')
.then(response => response.text())
@@ -1382,6 +1418,22 @@ class ManagerMenuDialog extends ComfyDialog {
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
});
+ // nickname
+ let badge_combo = document.createElement("select");
+ badge_combo.appendChild($el('option', {value:'none', text:'Badge: None'}, []));
+ badge_combo.appendChild($el('option', {value:'nick', text:'Badge: Nickname'}, []));
+ badge_combo.appendChild($el('option', {value:'id_nick', text:'Badge: #ID Nickname'}, []));
+
+ api.fetchApi('/manager/badge_mode')
+ .then(response => response.text())
+ .then(data => { badge_combo.value = data; badge_mode = data; })
+
+ badge_combo.addEventListener('change', function(event) {
+ api.fetchApi(`/manager/badge_mode?value=${event.target.value}`);
+ badge_mode = event.target.value;
+ app.graph.setDirtyCanvas(true);
+ });
+
const res =
[
$el("tr.td", {width:"100%"}, [$el("font", {size:6, color:"white"}, [`ComfyUI Manager Menu`])]),
@@ -1447,6 +1499,7 @@ class ManagerMenuDialog extends ComfyDialog {
$el("br", {}, []),
$el("hr", {width: "100%"}, []),
preview_combo,
+ badge_combo,
$el("hr", {width: "100%"}, []),
$el("br", {}, []),
@@ -1497,5 +1550,82 @@ app.registerExtension({
ManagerMenuDialog.instance.show();
}
menu.append(managerButton);
+ },
+
+ async beforeRegisterNodeDef(nodeType, nodeData, app) {
+ if(nicknames[nodeData.name.trim()]) {
+ const onDrawForeground = nodeType.prototype.onDrawForeground;
+ nodeType.prototype.onDrawForeground = function (ctx) {
+ const r = onDrawForeground?.apply?.(this, arguments);
+
+ if(badge_mode != 'none') {
+ let text = nicknames[nodeData.name.trim()];
+ if(text.length > 18) {
+ text = text.substring(0,17)+"..";
+ }
+
+ if(badge_mode == 'id_nick')
+ text = `#${this.id} ${text}`;
+
+ let fgColor = "white";
+ let bgColor = "#0F1F0F";
+ let visible = true;
+
+ ctx.save();
+ ctx.font = "12px sans-serif";
+ const sz = ctx.measureText(text);
+ ctx.fillStyle = bgColor;
+ ctx.beginPath();
+ ctx.roundRect(this.size[0]-sz.width-12, -LiteGraph.NODE_TITLE_HEIGHT - 20, sz.width + 12, 20, 5);
+ ctx.fill();
+
+ ctx.fillStyle = fgColor;
+ ctx.fillText(text, this.size[0]-sz.width-6, -LiteGraph.NODE_TITLE_HEIGHT - 6);
+ ctx.restore();
+ }
+
+ return r;
+ };
+ }
+ },
+
+ async loadedGraphNode(node, app) {
+ if(node.has_errors) {
+ if(nicknames[node.type.trim()]) {
+ const onDrawForeground = node.onDrawForeground;
+ node.onDrawForeground = function (ctx) {
+ const r = onDrawForeground?.apply?.(this, arguments);
+
+ if(badge_mode != 'none') {
+ let text = nicknames[node.type.trim()];
+
+ if(text.length > 18) {
+ text = text.substring(0,17)+"..";
+ }
+
+ if(badge_mode == 'id_nick')
+ text = `#${this.id} ${text}`;
+
+ let fgColor = "white";
+ let bgColor = "#0F1F0F";
+ let visible = true;
+
+ ctx.save();
+ ctx.font = "12px sans-serif";
+ const sz = ctx.measureText(text);
+ ctx.fillStyle = bgColor;
+ ctx.beginPath();
+ ctx.roundRect(this.size[0]-sz.width-12, -LiteGraph.NODE_TITLE_HEIGHT - 20, sz.width + 12, 20, 5);
+ ctx.fill();
+
+ ctx.fillStyle = fgColor;
+ ctx.fillText(text, this.size[0]-sz.width-6, -LiteGraph.NODE_TITLE_HEIGHT - 6);
+ ctx.restore();
+ }
+
+ return r;
+ };
+ }
+ }
}
});
diff --git a/misc/menu.jpg b/misc/menu.jpg
index 797ca4f..64c816e 100644
Binary files a/misc/menu.jpg and b/misc/menu.jpg differ
diff --git a/misc/nickname.jpg b/misc/nickname.jpg
new file mode 100644
index 0000000..e3cfdca
Binary files /dev/null and b/misc/nickname.jpg differ
diff --git a/scanner.py b/scanner.py
index 0f84425..67b379d 100644
--- a/scanner.py
+++ b/scanner.py
@@ -53,7 +53,15 @@ def scan_in_file(filename):
class_dict[key.strip()] = value.strip()
nodes.add(key.strip())
- return nodes
+ metadata = {}
+ lines = code.strip().split('\n')
+ for line in lines:
+ if line.startswith('@'):
+ if line.startswith("@author:") or line.startswith("@title:") or line.startswith("@nickname:") or line.startswith("@description:"):
+ key, value = line[1:].strip().split(':')
+ metadata[key.strip()] = value.strip()
+
+ return nodes, metadata
def get_py_file_paths(dirname):
file_paths = []
@@ -98,7 +106,7 @@ def get_git_urls_from_json(json_file):
if node.get('install_type') == 'git-clone':
files = node.get('files', [])
if files:
- git_clone_files.append(files[0])
+ git_clone_files.append((files[0],node.get('title')))
return git_clone_files
@@ -113,7 +121,7 @@ def get_py_urls_from_json(json_file):
if node.get('install_type') == 'copy':
files = node.get('files', [])
if files:
- py_files.append(files[0])
+ py_files.append((files[0],node.get('title')))
return py_files
@@ -146,22 +154,22 @@ def update_custom_nodes():
node_info = {}
- git_urls = get_git_urls_from_json('custom-node-list.json')
+ git_url_titles = get_git_urls_from_json('custom-node-list.json')
- for url in git_urls:
+ for url, title in git_url_titles:
name = os.path.basename(url)
if name.endswith(".git"):
name = name[:-4]
- node_info[name] = url
+ node_info[name] = (url, title)
clone_or_pull_git_repository(url)
- py_urls = get_py_urls_from_json('custom-node-list.json')
+ py_url_titles = get_py_urls_from_json('custom-node-list.json')
- for url in py_urls:
+ for url, title in py_url_titles:
name = os.path.basename(url)
if name.endswith(".py"):
- node_info[name] = url
+ node_info[name] = (url, title)
try:
download_url(url, ".tmp")
@@ -178,10 +186,13 @@ def gen_json(node_info):
data = {}
for dirname in node_dirs:
py_files = get_py_file_paths(dirname)
+ metadata = {}
nodes = set()
for py in py_files:
- nodes.update(scan_in_file(py))
+ nodes_in_file, metadata_in_file = scan_in_file(py)
+ nodes.update(nodes_in_file)
+ metadata.update(metadata_in_file)
dirname = os.path.basename(dirname)
@@ -190,13 +201,14 @@ def gen_json(node_info):
nodes.sort()
if dirname in node_info:
- git_url = node_info[dirname]
- data[git_url] = nodes
+ git_url, title = node_info[dirname]
+ metadata['title_aux'] = title
+ data[git_url] = (nodes, metadata)
else:
print(f"WARN: {dirname} is removed from custom-node-list.json")
for file in node_files:
- nodes = scan_in_file(file)
+ nodes, metadata = scan_in_file(file)
if len(nodes) > 0:
nodes = list(nodes)
@@ -205,8 +217,9 @@ def gen_json(node_info):
file = os.path.basename(file)
if file in node_info:
- url = node_info[file]
- data[url] = nodes
+ url, title = node_info[file]
+ metadata['title_aux'] = title
+ data[url] = (nodes, metadata)
else:
print(f"Missing info: {url}")
@@ -216,22 +229,25 @@ def gen_json(node_info):
for extension in extensions:
node_list_json_path = os.path.join('.tmp', extension, 'node_list.json')
if os.path.exists(node_list_json_path):
- git_url = node_info[extension]
+ git_url, title = node_info[extension]
with open(node_list_json_path, 'r') as f:
node_list_json = json.load(f)
+ metadata_in_url = {}
if git_url not in data:
nodes = set()
else:
- nodes = set(data[git_url])
+ nodes_in_url, metadata_in_url = data[git_url]
+ nodes = set(nodes_in_url)
for x, desc in node_list_json.items():
nodes.add(x.strip())
+ metadata_in_url['title_aux'] = title
nodes = list(nodes)
nodes.sort()
- data[git_url] = nodes
+ data[git_url] = (nodes, metadata_in_url)
json_path = f"extension-node-map.json"
with open(json_path, "w") as file:
@@ -244,4 +260,4 @@ print("\n# Updating extensions\n")
updated_node_info = update_custom_nodes()
print("\n# 'extension-node-map.json' file is generated.\n")
-gen_json(updated_node_info)
\ No newline at end of file
+gen_json(updated_node_info)