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)