Browse Source

improve: badge

update scanner
pull/224/head
Dr.Lt.Data 12 months ago committed by dr.lt.data
parent
commit
61514612f8
  1. 20
      __init__.py
  2. 2
      custom-node-list.json
  3. 111
      extension-node-map.json
  4. 11
      js/comfyui-manager.js
  5. 20
      node_db/dev/custom-node-list.json
  6. 111
      node_db/new/extension-node-map.json
  7. 40
      scanner.py

20
__init__.py

@ -16,8 +16,9 @@ from urllib.parse import urlparse
import http.client import http.client
import re import re
import signal import signal
import nodes
version = "V1.8.3" version = "V1.9"
print(f"### Loading: ComfyUI-Manager ({version})") print(f"### Loading: ComfyUI-Manager ({version})")
required_comfyui_revision = 1793 required_comfyui_revision = 1793
@ -614,8 +615,23 @@ async def fetch_customnode_mappings(request):
uri = local_db_extension_node_mappings uri = local_db_extension_node_mappings
else: else:
uri = get_config()['channel_url'] + '/extension-node-map.json' uri = get_config()['channel_url'] + '/extension-node-map.json'
json_obj = await get_data(uri) json_obj = await get_data(uri)
all_nodes = set()
patterns = []
for k, x in json_obj.items():
all_nodes.update(set(x[0]))
if 'nodename_pattern' in x[1]:
patterns.append((x[1]['nodename_pattern'], x[0]))
missing_nodes = set(nodes.NODE_CLASS_MAPPINGS.keys()) - all_nodes
for x in missing_nodes:
for pat, item in patterns:
if re.match(pat, x):
item.append(x)
return web.json_response(json_obj, content_type='application/json') return web.json_response(json_obj, content_type='application/json')

2
custom-node-list.json

@ -2113,7 +2113,7 @@
"https://github.com/chrisgoringe/cg-use-everywhere" "https://github.com/chrisgoringe/cg-use-everywhere"
], ],
"install_type": "git-clone", "install_type": "git-clone",
"nodename_pattern": "^(UE\\? |UE )", "nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)",
"description": "A set of nodes that allow data to be 'broadcast' to some or all unconnected inputs. Greatly reduces link spaghetti." "description": "A set of nodes that allow data to be 'broadcast' to some or all unconnected inputs. Greatly reduces link spaghetti."
}, },
{ {

111
extension-node-map.json

@ -94,6 +94,16 @@
"title_aux": "ComfyUI Nodes for External Tooling" "title_aux": "ComfyUI Nodes for External Tooling"
} }
], ],
"https://github.com/Amorano/Jovimetrix": [
[],
{
"author": "amorano",
"description": "Procedural & Compositing. Includes a Webcam node.",
"nodename_pattern": " \\(jov\\)$",
"title": "Jovimetrix Composition Pack",
"title_aux": "Jovimetrix Composition Nodes"
}
],
"https://github.com/ArtBot2023/CharacterFaceSwap": [ "https://github.com/ArtBot2023/CharacterFaceSwap": [
[ [
"Color Blend", "Color Blend",
@ -130,7 +140,8 @@
[ [
"LogSigmas", "LogSigmas",
"SpliceDenoised", "SpliceDenoised",
"SpliceLatents" "SpliceLatents",
"TemporalSplice"
], ],
{ {
"title_aux": "SpliceTools" "title_aux": "SpliceTools"
@ -546,6 +557,13 @@
"title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors"
} }
], ],
"https://github.com/Feidorian/feidorian-ComfyNodes": [
[],
{
"nodename_pattern": "^Feidorian_",
"title_aux": "feidorian-ComfyNodes"
}
],
"https://github.com/Fictiverse/ComfyUI_Fictiverse": [ "https://github.com/Fictiverse/ComfyUI_Fictiverse": [
[ [
"Add Noise to Image with Mask", "Add Noise to Image with Mask",
@ -652,11 +670,12 @@
], ],
"https://github.com/Haoming02/comfyui-diffusion-cg": [ "https://github.com/Haoming02/comfyui-diffusion-cg": [
[ [
"Center Sampler", "Hook Recenter",
"Center Sampler XL", "Hook Recenter XL",
"Normalization", "Normalization",
"NormalizationXL", "NormalizationXL",
"Tensor Debug" "Tensor Debug",
"Unhook Recenter"
], ],
{ {
"title_aux": "ComfyUI Diffusion Color Grading" "title_aux": "ComfyUI Diffusion Color Grading"
@ -1104,7 +1123,9 @@
], ],
"https://github.com/Off-Live/ComfyUI-off-suite": [ "https://github.com/Off-Live/ComfyUI-off-suite": [
[ [
"Cached Image Load From URL",
"Crop Center wigh SEGS", "Crop Center wigh SEGS",
"Crop Center with SEGS",
"GW Number Formatting", "GW Number Formatting",
"Image Crop Fit", "Image Crop Fit",
"Image Resize Fit", "Image Resize Fit",
@ -1704,6 +1725,7 @@
"author": "tinyterra", "author": "tinyterra",
"description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.",
"nickname": "ttNodes", "nickname": "ttNodes",
"nodename_pattern": "^ttN ",
"title": "tinyterraNodes", "title": "tinyterraNodes",
"title_aux": "tinyterraNodes" "title_aux": "tinyterraNodes"
} }
@ -2707,7 +2729,8 @@
], ],
"https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [ "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [
[ [
"MicorsoftSpeech_TTS" "MicorsoftSpeech_TTS",
"Play Sound"
], ],
{ {
"title_aux": "ComfyUI_MSSpeech_TTS" "title_aux": "ComfyUI_MSSpeech_TTS"
@ -2766,6 +2789,7 @@
"Seed Everywhere" "Seed Everywhere"
], ],
{ {
"nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)",
"title_aux": "Use Everywhere (UE Nodes)" "title_aux": "Use Everywhere (UE Nodes)"
} }
], ],
@ -3089,12 +3113,12 @@
"title_aux": "KSampler GPU" "title_aux": "KSampler GPU"
} }
], ],
"https://github.com/daxthin/facedetailer": [ "https://github.com/daxthin/DZ-FaceDetailer": [
[ [
"DZ_Face_Detailer" "DZ_Face_Detailer"
], ],
{ {
"title_aux": "facedetailer" "title_aux": "DZ-FaceDetailer"
} }
], ],
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [ "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [
@ -3246,6 +3270,14 @@
"title_aux": "Pixelization" "title_aux": "Pixelization"
} }
], ],
"https://github.com/filliptm/ComfyUI_Fill-Nodes": [
[
"FL_ImageRandomizer"
],
{
"title_aux": "ComfyUI_Fill-Nodes"
}
],
"https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [ "https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [
[ [
"fcFloat", "fcFloat",
@ -3534,6 +3566,13 @@
"title_aux": "Efficiency Nodes for ComfyUI Version 2.0+" "title_aux": "Efficiency Nodes for ComfyUI Version 2.0+"
} }
], ],
"https://github.com/jamesWalker55/comfyui-various": [
[],
{
"nodename_pattern": "^JW",
"title_aux": "Various ComfyUI Nodes by Type"
}
],
"https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [ "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [
[ [
"JjkConcat", "JjkConcat",
@ -3555,6 +3594,22 @@
"title_aux": "ComfyUI-sampler-lcm-alternative" "title_aux": "ComfyUI-sampler-lcm-alternative"
} }
], ],
"https://github.com/jtrue/ComfyUI-JaRue": [
[
"ConcatStringWithDelimiter_jru",
"ConcatString_jru",
"Float2Int_jru",
"Float2String_jru",
"ImageSizer_jru",
"Int2FloatMultiply_jru",
"Int2String_jru",
"String2Int_jru",
"YouTube2Prompt_jru"
],
{
"title_aux": "ComfyUI-JaRue"
}
],
"https://github.com/ka-puna/comfyui-yanc": [ "https://github.com/ka-puna/comfyui-yanc": [
[ [
"YANC.ConcatStrings", "YANC.ConcatStrings",
@ -3677,7 +3732,9 @@
], ],
"https://github.com/knuknX/ComfyUI-Image-Tools": [ "https://github.com/knuknX/ComfyUI-Image-Tools": [
[ [
"BatchImageResizeProcessor", "ImageBatchSqueezeProcessor",
"ImageBgRemoveProcessor",
"ImageStandardResizeProcessor",
"SingleImagePathLoader", "SingleImagePathLoader",
"SingleImageUrlLoader" "SingleImageUrlLoader"
], ],
@ -4022,6 +4079,7 @@
"author": "Dr.Lt.Data", "author": "Dr.Lt.Data",
"description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.", "description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.",
"nickname": "Inspire Pack", "nickname": "Inspire Pack",
"nodename_pattern": "Inspire$",
"title": "Inspire Pack", "title": "Inspire Pack",
"title_aux": "ComfyUI Inspire Pack" "title_aux": "ComfyUI Inspire Pack"
} }
@ -4174,6 +4232,7 @@
"Vae Decode (mtb)" "Vae Decode (mtb)"
], ],
{ {
"nodename_pattern": "\\(mtb\\)$",
"title_aux": "MTB Nodes" "title_aux": "MTB Nodes"
} }
], ],
@ -4363,6 +4422,7 @@
"Text Box - Ostris" "Text Box - Ostris"
], ],
{ {
"nodename_pattern": "- Ostris$",
"title_aux": "Ostris Nodes ComfyUI" "title_aux": "Ostris Nodes ComfyUI"
} }
], ],
@ -4415,23 +4475,7 @@
], ],
"https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [ "https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [
[ [
"ACN_AdvancedControlNetApplyImport", "BatchCreativeInterpolation"
"BatchCreativeInterpolation",
"ControlNetLoaderAdvancedImport",
"CustomControlNetWeights",
"CustomT2IAdapterWeights",
"DiffControlNetLoaderAdvancedImport",
"FILMVFIImport",
"LatentKeyframeBatchedGroupImport",
"LatentKeyframeGroupImport",
"LatentKeyframeImport",
"LatentKeyframeTiming",
"LoadImagesFromDirectory",
"MaskGenerator",
"ScaledSoftControlNetWeightsImport",
"SoftControlNetWeights",
"SoftT2IAdapterWeights",
"TimestepKeyframe"
], ],
{ {
"title_aux": "ComfyUI-Creative-Interpolation [Beta]" "title_aux": "ComfyUI-Creative-Interpolation [Beta]"
@ -4506,6 +4550,17 @@
"title_aux": "comfyui-prompt-reader-node" "title_aux": "comfyui-prompt-reader-node"
} }
], ],
"https://github.com/rgthree/rgthree-comfy": [
[],
{
"author": "rgthree",
"description": "A bunch of nodes I created that I also find useful.",
"nickname": "rgthree",
"nodename_pattern": " \\(rgthree\\)$",
"title": "Comfy Nodes",
"title_aux": "rgthree's ComfyUi Nodes"
}
],
"https://github.com/richinsley/Comfy-LFO": [ "https://github.com/richinsley/Comfy-LFO": [
[ [
"LFO_Pulse", "LFO_Pulse",
@ -4583,6 +4638,7 @@
"ChatGPTOpenAI", "ChatGPTOpenAI",
"CombineMasks_", "CombineMasks_",
"CombineSegMasks", "CombineSegMasks",
"EditLayer",
"EmptyLayer", "EmptyLayer",
"EnhanceImage", "EnhanceImage",
"FaceToMask", "FaceToMask",
@ -4597,6 +4653,8 @@
"ShowTextForGPT", "ShowTextForGPT",
"SmoothMask", "SmoothMask",
"SplitLongMask", "SplitLongMask",
"SvgImage",
"TextImage",
"TransparentImage", "TransparentImage",
"VAEDecodeConsistencyDecoder", "VAEDecodeConsistencyDecoder",
"VAELoaderConsistencyDecoder" "VAELoaderConsistencyDecoder"
@ -4906,6 +4964,7 @@
"ImageShuffle", "ImageShuffle",
"LCMGenerate", "LCMGenerate",
"LCMGenerate_ReferenceOnly", "LCMGenerate_ReferenceOnly",
"LCMGenerate_SDTurbo",
"LCMGenerate_img2img", "LCMGenerate_img2img",
"LCMGenerate_img2img_IPAdapter", "LCMGenerate_img2img_IPAdapter",
"LCMGenerate_img2img_controlnet", "LCMGenerate_img2img_controlnet",
@ -4914,6 +4973,7 @@
"LCMLoader", "LCMLoader",
"LCMLoader_RefInpaint", "LCMLoader_RefInpaint",
"LCMLoader_ReferenceOnly", "LCMLoader_ReferenceOnly",
"LCMLoader_SDTurbo",
"LCMLoader_controlnet", "LCMLoader_controlnet",
"LCMLoader_controlnet_inpaint", "LCMLoader_controlnet_inpaint",
"LCMLoader_img2img", "LCMLoader_img2img",
@ -5017,6 +5077,7 @@
"Random Line 4" "Random Line 4"
], ],
{ {
"nodename_pattern": "\\(mtb\\)$",
"title_aux": "Hakkun-ComfyUI-nodes" "title_aux": "Hakkun-ComfyUI-nodes"
} }
], ],

11
js/comfyui-manager.js vendored

@ -230,6 +230,7 @@ async function fetchNicknames() {
const mappings = await response1.json(); const mappings = await response1.json();
let result = {}; let result = {};
let nickname_patterns = [];
for (let i in mappings) { for (let i in mappings) {
let item = mappings[i]; let item = mappings[i];
@ -244,12 +245,16 @@ async function fetchNicknames() {
for (let j in item[0]) { for (let j in item[0]) {
result[item[0][j]] = nickname; result[item[0][j]] = nickname;
} }
if(item[1].nodename_pattern) {
nickname_patterns.push([item[1].nodename_pattern, nickname]);
}
} }
return result; return [result, nickname_patterns];
} }
let nicknames = await fetchNicknames(); const [nicknames, nickname_patterns] = await fetchNicknames();
async function updateComfyUI() { async function updateComfyUI() {
@ -917,7 +922,9 @@ app.registerExtension({
this._addExtraNodeContextMenu(nodeType, app); this._addExtraNodeContextMenu(nodeType, app);
}, },
async nodeCreated(node, app) {
},
async loadedGraphNode(node, app) { async loadedGraphNode(node, app) {
if (node.has_errors) { if (node.has_errors) {
const onDrawForeground = node.onDrawForeground; const onDrawForeground = node.onDrawForeground;

20
node_db/dev/custom-node-list.json

@ -1,5 +1,25 @@
{ {
"custom_nodes": [ "custom_nodes": [
{
"author": "talesofai",
"title": "comfyui-supersave [WIP]",
"reference": "https://github.com/talesofai/comfyui-supersave",
"files": [
"https://github.com/talesofai/comfyui-supersave"
],
"install_type": "git-clone",
"description": "WIP"
},
{
"author": "Sai-ComfyUI",
"title": "ComfyUI-MS-Nodes [WIP]",
"reference": "https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes",
"files": [
"https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes"
],
"install_type": "git-clone",
"description": "WIP"
},
{ {
"author": "eigenpunk", "author": "eigenpunk",
"title": "ComfyUI-audio", "title": "ComfyUI-audio",

111
node_db/new/extension-node-map.json

@ -94,6 +94,16 @@
"title_aux": "ComfyUI Nodes for External Tooling" "title_aux": "ComfyUI Nodes for External Tooling"
} }
], ],
"https://github.com/Amorano/Jovimetrix": [
[],
{
"author": "amorano",
"description": "Procedural & Compositing. Includes a Webcam node.",
"nodename_pattern": " \\(jov\\)$",
"title": "Jovimetrix Composition Pack",
"title_aux": "Jovimetrix Composition Nodes"
}
],
"https://github.com/ArtBot2023/CharacterFaceSwap": [ "https://github.com/ArtBot2023/CharacterFaceSwap": [
[ [
"Color Blend", "Color Blend",
@ -130,7 +140,8 @@
[ [
"LogSigmas", "LogSigmas",
"SpliceDenoised", "SpliceDenoised",
"SpliceLatents" "SpliceLatents",
"TemporalSplice"
], ],
{ {
"title_aux": "SpliceTools" "title_aux": "SpliceTools"
@ -546,6 +557,13 @@
"title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors"
} }
], ],
"https://github.com/Feidorian/feidorian-ComfyNodes": [
[],
{
"nodename_pattern": "^Feidorian_",
"title_aux": "feidorian-ComfyNodes"
}
],
"https://github.com/Fictiverse/ComfyUI_Fictiverse": [ "https://github.com/Fictiverse/ComfyUI_Fictiverse": [
[ [
"Add Noise to Image with Mask", "Add Noise to Image with Mask",
@ -652,11 +670,12 @@
], ],
"https://github.com/Haoming02/comfyui-diffusion-cg": [ "https://github.com/Haoming02/comfyui-diffusion-cg": [
[ [
"Center Sampler", "Hook Recenter",
"Center Sampler XL", "Hook Recenter XL",
"Normalization", "Normalization",
"NormalizationXL", "NormalizationXL",
"Tensor Debug" "Tensor Debug",
"Unhook Recenter"
], ],
{ {
"title_aux": "ComfyUI Diffusion Color Grading" "title_aux": "ComfyUI Diffusion Color Grading"
@ -1104,7 +1123,9 @@
], ],
"https://github.com/Off-Live/ComfyUI-off-suite": [ "https://github.com/Off-Live/ComfyUI-off-suite": [
[ [
"Cached Image Load From URL",
"Crop Center wigh SEGS", "Crop Center wigh SEGS",
"Crop Center with SEGS",
"GW Number Formatting", "GW Number Formatting",
"Image Crop Fit", "Image Crop Fit",
"Image Resize Fit", "Image Resize Fit",
@ -1704,6 +1725,7 @@
"author": "tinyterra", "author": "tinyterra",
"description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.",
"nickname": "ttNodes", "nickname": "ttNodes",
"nodename_pattern": "^ttN ",
"title": "tinyterraNodes", "title": "tinyterraNodes",
"title_aux": "tinyterraNodes" "title_aux": "tinyterraNodes"
} }
@ -2707,7 +2729,8 @@
], ],
"https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [ "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [
[ [
"MicorsoftSpeech_TTS" "MicorsoftSpeech_TTS",
"Play Sound"
], ],
{ {
"title_aux": "ComfyUI_MSSpeech_TTS" "title_aux": "ComfyUI_MSSpeech_TTS"
@ -2766,6 +2789,7 @@
"Seed Everywhere" "Seed Everywhere"
], ],
{ {
"nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)",
"title_aux": "Use Everywhere (UE Nodes)" "title_aux": "Use Everywhere (UE Nodes)"
} }
], ],
@ -3089,12 +3113,12 @@
"title_aux": "KSampler GPU" "title_aux": "KSampler GPU"
} }
], ],
"https://github.com/daxthin/facedetailer": [ "https://github.com/daxthin/DZ-FaceDetailer": [
[ [
"DZ_Face_Detailer" "DZ_Face_Detailer"
], ],
{ {
"title_aux": "facedetailer" "title_aux": "DZ-FaceDetailer"
} }
], ],
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [ "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [
@ -3246,6 +3270,14 @@
"title_aux": "Pixelization" "title_aux": "Pixelization"
} }
], ],
"https://github.com/filliptm/ComfyUI_Fill-Nodes": [
[
"FL_ImageRandomizer"
],
{
"title_aux": "ComfyUI_Fill-Nodes"
}
],
"https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [ "https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [
[ [
"fcFloat", "fcFloat",
@ -3534,6 +3566,13 @@
"title_aux": "Efficiency Nodes for ComfyUI Version 2.0+" "title_aux": "Efficiency Nodes for ComfyUI Version 2.0+"
} }
], ],
"https://github.com/jamesWalker55/comfyui-various": [
[],
{
"nodename_pattern": "^JW",
"title_aux": "Various ComfyUI Nodes by Type"
}
],
"https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [ "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [
[ [
"JjkConcat", "JjkConcat",
@ -3555,6 +3594,22 @@
"title_aux": "ComfyUI-sampler-lcm-alternative" "title_aux": "ComfyUI-sampler-lcm-alternative"
} }
], ],
"https://github.com/jtrue/ComfyUI-JaRue": [
[
"ConcatStringWithDelimiter_jru",
"ConcatString_jru",
"Float2Int_jru",
"Float2String_jru",
"ImageSizer_jru",
"Int2FloatMultiply_jru",
"Int2String_jru",
"String2Int_jru",
"YouTube2Prompt_jru"
],
{
"title_aux": "ComfyUI-JaRue"
}
],
"https://github.com/ka-puna/comfyui-yanc": [ "https://github.com/ka-puna/comfyui-yanc": [
[ [
"YANC.ConcatStrings", "YANC.ConcatStrings",
@ -3677,7 +3732,9 @@
], ],
"https://github.com/knuknX/ComfyUI-Image-Tools": [ "https://github.com/knuknX/ComfyUI-Image-Tools": [
[ [
"BatchImageResizeProcessor", "ImageBatchSqueezeProcessor",
"ImageBgRemoveProcessor",
"ImageStandardResizeProcessor",
"SingleImagePathLoader", "SingleImagePathLoader",
"SingleImageUrlLoader" "SingleImageUrlLoader"
], ],
@ -4022,6 +4079,7 @@
"author": "Dr.Lt.Data", "author": "Dr.Lt.Data",
"description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.", "description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.",
"nickname": "Inspire Pack", "nickname": "Inspire Pack",
"nodename_pattern": "Inspire$",
"title": "Inspire Pack", "title": "Inspire Pack",
"title_aux": "ComfyUI Inspire Pack" "title_aux": "ComfyUI Inspire Pack"
} }
@ -4174,6 +4232,7 @@
"Vae Decode (mtb)" "Vae Decode (mtb)"
], ],
{ {
"nodename_pattern": "\\(mtb\\)$",
"title_aux": "MTB Nodes" "title_aux": "MTB Nodes"
} }
], ],
@ -4363,6 +4422,7 @@
"Text Box - Ostris" "Text Box - Ostris"
], ],
{ {
"nodename_pattern": "- Ostris$",
"title_aux": "Ostris Nodes ComfyUI" "title_aux": "Ostris Nodes ComfyUI"
} }
], ],
@ -4415,23 +4475,7 @@
], ],
"https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [ "https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [
[ [
"ACN_AdvancedControlNetApplyImport", "BatchCreativeInterpolation"
"BatchCreativeInterpolation",
"ControlNetLoaderAdvancedImport",
"CustomControlNetWeights",
"CustomT2IAdapterWeights",
"DiffControlNetLoaderAdvancedImport",
"FILMVFIImport",
"LatentKeyframeBatchedGroupImport",
"LatentKeyframeGroupImport",
"LatentKeyframeImport",
"LatentKeyframeTiming",
"LoadImagesFromDirectory",
"MaskGenerator",
"ScaledSoftControlNetWeightsImport",
"SoftControlNetWeights",
"SoftT2IAdapterWeights",
"TimestepKeyframe"
], ],
{ {
"title_aux": "ComfyUI-Creative-Interpolation [Beta]" "title_aux": "ComfyUI-Creative-Interpolation [Beta]"
@ -4506,6 +4550,17 @@
"title_aux": "comfyui-prompt-reader-node" "title_aux": "comfyui-prompt-reader-node"
} }
], ],
"https://github.com/rgthree/rgthree-comfy": [
[],
{
"author": "rgthree",
"description": "A bunch of nodes I created that I also find useful.",
"nickname": "rgthree",
"nodename_pattern": " \\(rgthree\\)$",
"title": "Comfy Nodes",
"title_aux": "rgthree's ComfyUi Nodes"
}
],
"https://github.com/richinsley/Comfy-LFO": [ "https://github.com/richinsley/Comfy-LFO": [
[ [
"LFO_Pulse", "LFO_Pulse",
@ -4583,6 +4638,7 @@
"ChatGPTOpenAI", "ChatGPTOpenAI",
"CombineMasks_", "CombineMasks_",
"CombineSegMasks", "CombineSegMasks",
"EditLayer",
"EmptyLayer", "EmptyLayer",
"EnhanceImage", "EnhanceImage",
"FaceToMask", "FaceToMask",
@ -4597,6 +4653,8 @@
"ShowTextForGPT", "ShowTextForGPT",
"SmoothMask", "SmoothMask",
"SplitLongMask", "SplitLongMask",
"SvgImage",
"TextImage",
"TransparentImage", "TransparentImage",
"VAEDecodeConsistencyDecoder", "VAEDecodeConsistencyDecoder",
"VAELoaderConsistencyDecoder" "VAELoaderConsistencyDecoder"
@ -4906,6 +4964,7 @@
"ImageShuffle", "ImageShuffle",
"LCMGenerate", "LCMGenerate",
"LCMGenerate_ReferenceOnly", "LCMGenerate_ReferenceOnly",
"LCMGenerate_SDTurbo",
"LCMGenerate_img2img", "LCMGenerate_img2img",
"LCMGenerate_img2img_IPAdapter", "LCMGenerate_img2img_IPAdapter",
"LCMGenerate_img2img_controlnet", "LCMGenerate_img2img_controlnet",
@ -4914,6 +4973,7 @@
"LCMLoader", "LCMLoader",
"LCMLoader_RefInpaint", "LCMLoader_RefInpaint",
"LCMLoader_ReferenceOnly", "LCMLoader_ReferenceOnly",
"LCMLoader_SDTurbo",
"LCMLoader_controlnet", "LCMLoader_controlnet",
"LCMLoader_controlnet_inpaint", "LCMLoader_controlnet_inpaint",
"LCMLoader_img2img", "LCMLoader_img2img",
@ -5017,6 +5077,7 @@
"Random Line 4" "Random Line 4"
], ],
{ {
"nodename_pattern": "\\(mtb\\)$",
"title_aux": "Hakkun-ComfyUI-nodes" "title_aux": "Hakkun-ComfyUI-nodes"
} }
], ],

40
scanner.py

@ -119,9 +119,9 @@ def get_git_urls_from_json(json_file):
if node.get('install_type') == 'git-clone': if node.get('install_type') == 'git-clone':
files = node.get('files', []) files = node.get('files', [])
if files: if files:
git_clone_files.append((files[0], node.get('title'))) git_clone_files.append((files[0], node.get('title'), node.get('nodename_pattern')))
git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI")) git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI", None))
return git_clone_files return git_clone_files
@ -136,7 +136,7 @@ def get_py_urls_from_json(json_file):
if node.get('install_type') == 'copy': if node.get('install_type') == 'copy':
files = node.get('files', []) files = node.get('files', [])
if files: if files:
py_files.append((files[0],node.get('title'))) py_files.append((files[0], node.get('title'), node.get('nodename_pattern')))
return py_files return py_files
@ -171,25 +171,25 @@ def update_custom_nodes():
git_url_titles = get_git_urls_from_json('custom-node-list.json') git_url_titles = get_git_urls_from_json('custom-node-list.json')
def process_git_url_title(url, title): def process_git_url_title(url, title, node_pattern):
name = os.path.basename(url) name = os.path.basename(url)
if name.endswith(".git"): if name.endswith(".git"):
name = name[:-4] name = name[:-4]
node_info[name] = (url, title) node_info[name] = (url, title, node_pattern)
clone_or_pull_git_repository(url) clone_or_pull_git_repository(url)
with concurrent.futures.ThreadPoolExecutor(10) as executor: with concurrent.futures.ThreadPoolExecutor(10) as executor:
for url, title in git_url_titles: for url, title, node_pattern in git_url_titles:
executor.submit(process_git_url_title, url, title) executor.submit(process_git_url_title, url, title, node_pattern)
py_url_titles = get_py_urls_from_json('custom-node-list.json') py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
def download_and_store_info(url_title): def download_and_store_info(url_title_and_pattern):
url, title = url_title url, title, node_pattern = url_title_and_pattern
name = os.path.basename(url) name = os.path.basename(url)
if name.endswith(".py"): if name.endswith(".py"):
node_info[name] = (url, title) node_info[name] = (url, title, node_pattern)
try: try:
download_url(url, ".tmp") download_url(url, ".tmp")
@ -197,7 +197,7 @@ def update_custom_nodes():
print(f"[ERROR] Cannot download '{url}'") print(f"[ERROR] Cannot download '{url}'")
with concurrent.futures.ThreadPoolExecutor(10) as executor: with concurrent.futures.ThreadPoolExecutor(10) as executor:
executor.map(download_and_store_info, py_url_titles) executor.map(download_and_store_info, py_url_titles_and_pattern)
return node_info return node_info
@ -223,13 +223,15 @@ def gen_json(node_info):
dirname = os.path.basename(dirname) dirname = os.path.basename(dirname)
if len(nodes) > 0: if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None):
nodes = list(nodes) nodes = list(nodes)
nodes.sort() nodes.sort()
if dirname in node_info: if dirname in node_info:
git_url, title = node_info[dirname] git_url, title, node_pattern = node_info[dirname]
metadata['title_aux'] = title metadata['title_aux'] = title
if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern
data[git_url] = (nodes, metadata) data[git_url] = (nodes, metadata)
else: else:
print(f"WARN: {dirname} is removed from custom-node-list.json") print(f"WARN: {dirname} is removed from custom-node-list.json")
@ -237,15 +239,17 @@ def gen_json(node_info):
for file in node_files: for file in node_files:
nodes, metadata = scan_in_file(file) nodes, metadata = scan_in_file(file)
if len(nodes) > 0: if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None):
nodes = list(nodes) nodes = list(nodes)
nodes.sort() nodes.sort()
file = os.path.basename(file) file = os.path.basename(file)
if file in node_info: if file in node_info:
url, title = node_info[file] url, title, node_pattern = node_info[file]
metadata['title_aux'] = title metadata['title_aux'] = title
if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern
data[url] = (nodes, metadata) data[url] = (nodes, metadata)
else: else:
print(f"Missing info: {url}") print(f"Missing info: {url}")
@ -256,7 +260,7 @@ def gen_json(node_info):
for extension in extensions: for extension in extensions:
node_list_json_path = os.path.join('.tmp', extension, 'node_list.json') node_list_json_path = os.path.join('.tmp', extension, 'node_list.json')
if os.path.exists(node_list_json_path): if os.path.exists(node_list_json_path):
git_url, title = node_info[extension] git_url, title, node_pattern = node_info[extension]
with open(node_list_json_path, 'r', encoding='utf-8') as f: with open(node_list_json_path, 'r', encoding='utf-8') as f:
node_list_json = json.load(f) node_list_json = json.load(f)
@ -272,6 +276,8 @@ def gen_json(node_info):
nodes.add(x.strip()) nodes.add(x.strip())
metadata_in_url['title_aux'] = title metadata_in_url['title_aux'] = title
if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern
nodes = list(nodes) nodes = list(nodes)
nodes.sort() nodes.sort()
data[git_url] = (nodes, metadata_in_url) data[git_url] = (nodes, metadata_in_url)

Loading…
Cancel
Save