mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2025-12-15 01:27:05 +08:00
improve: badge
update scanner
This commit is contained in:
parent
8307d4495d
commit
61514612f8
20
__init__.py
20
__init__.py
@ -16,8 +16,9 @@ from urllib.parse import urlparse
|
||||
import http.client
|
||||
import re
|
||||
import signal
|
||||
import nodes
|
||||
|
||||
version = "V1.8.3"
|
||||
version = "V1.9"
|
||||
print(f"### Loading: ComfyUI-Manager ({version})")
|
||||
|
||||
required_comfyui_revision = 1793
|
||||
@ -614,8 +615,23 @@ async def fetch_customnode_mappings(request):
|
||||
uri = local_db_extension_node_mappings
|
||||
else:
|
||||
uri = get_config()['channel_url'] + '/extension-node-map.json'
|
||||
|
||||
|
||||
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')
|
||||
|
||||
|
||||
@ -2113,7 +2113,7 @@
|
||||
"https://github.com/chrisgoringe/cg-use-everywhere"
|
||||
],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
|
||||
@ -94,6 +94,16 @@
|
||||
"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": [
|
||||
[
|
||||
"Color Blend",
|
||||
@ -130,7 +140,8 @@
|
||||
[
|
||||
"LogSigmas",
|
||||
"SpliceDenoised",
|
||||
"SpliceLatents"
|
||||
"SpliceLatents",
|
||||
"TemporalSplice"
|
||||
],
|
||||
{
|
||||
"title_aux": "SpliceTools"
|
||||
@ -546,6 +557,13 @@
|
||||
"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": [
|
||||
[
|
||||
"Add Noise to Image with Mask",
|
||||
@ -652,11 +670,12 @@
|
||||
],
|
||||
"https://github.com/Haoming02/comfyui-diffusion-cg": [
|
||||
[
|
||||
"Center Sampler",
|
||||
"Center Sampler XL",
|
||||
"Hook Recenter",
|
||||
"Hook Recenter XL",
|
||||
"Normalization",
|
||||
"NormalizationXL",
|
||||
"Tensor Debug"
|
||||
"Tensor Debug",
|
||||
"Unhook Recenter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Diffusion Color Grading"
|
||||
@ -1104,7 +1123,9 @@
|
||||
],
|
||||
"https://github.com/Off-Live/ComfyUI-off-suite": [
|
||||
[
|
||||
"Cached Image Load From URL",
|
||||
"Crop Center wigh SEGS",
|
||||
"Crop Center with SEGS",
|
||||
"GW Number Formatting",
|
||||
"Image Crop Fit",
|
||||
"Image Resize Fit",
|
||||
@ -1704,6 +1725,7 @@
|
||||
"author": "tinyterra",
|
||||
"description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.",
|
||||
"nickname": "ttNodes",
|
||||
"nodename_pattern": "^ttN ",
|
||||
"title": "tinyterraNodes",
|
||||
"title_aux": "tinyterraNodes"
|
||||
}
|
||||
@ -2707,7 +2729,8 @@
|
||||
],
|
||||
"https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [
|
||||
[
|
||||
"MicorsoftSpeech_TTS"
|
||||
"MicorsoftSpeech_TTS",
|
||||
"Play Sound"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_MSSpeech_TTS"
|
||||
@ -2766,6 +2789,7 @@
|
||||
"Seed Everywhere"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)",
|
||||
"title_aux": "Use Everywhere (UE Nodes)"
|
||||
}
|
||||
],
|
||||
@ -3089,12 +3113,12 @@
|
||||
"title_aux": "KSampler GPU"
|
||||
}
|
||||
],
|
||||
"https://github.com/daxthin/facedetailer": [
|
||||
"https://github.com/daxthin/DZ-FaceDetailer": [
|
||||
[
|
||||
"DZ_Face_Detailer"
|
||||
],
|
||||
{
|
||||
"title_aux": "facedetailer"
|
||||
"title_aux": "DZ-FaceDetailer"
|
||||
}
|
||||
],
|
||||
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [
|
||||
@ -3246,6 +3270,14 @@
|
||||
"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": [
|
||||
[
|
||||
"fcFloat",
|
||||
@ -3534,6 +3566,13 @@
|
||||
"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": [
|
||||
[
|
||||
"JjkConcat",
|
||||
@ -3555,6 +3594,22 @@
|
||||
"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": [
|
||||
[
|
||||
"YANC.ConcatStrings",
|
||||
@ -3677,7 +3732,9 @@
|
||||
],
|
||||
"https://github.com/knuknX/ComfyUI-Image-Tools": [
|
||||
[
|
||||
"BatchImageResizeProcessor",
|
||||
"ImageBatchSqueezeProcessor",
|
||||
"ImageBgRemoveProcessor",
|
||||
"ImageStandardResizeProcessor",
|
||||
"SingleImagePathLoader",
|
||||
"SingleImageUrlLoader"
|
||||
],
|
||||
@ -4022,6 +4079,7 @@
|
||||
"author": "Dr.Lt.Data",
|
||||
"description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.",
|
||||
"nickname": "Inspire Pack",
|
||||
"nodename_pattern": "Inspire$",
|
||||
"title": "Inspire Pack",
|
||||
"title_aux": "ComfyUI Inspire Pack"
|
||||
}
|
||||
@ -4174,6 +4232,7 @@
|
||||
"Vae Decode (mtb)"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "\\(mtb\\)$",
|
||||
"title_aux": "MTB Nodes"
|
||||
}
|
||||
],
|
||||
@ -4363,6 +4422,7 @@
|
||||
"Text Box - Ostris"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "- Ostris$",
|
||||
"title_aux": "Ostris Nodes ComfyUI"
|
||||
}
|
||||
],
|
||||
@ -4415,23 +4475,7 @@
|
||||
],
|
||||
"https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [
|
||||
[
|
||||
"ACN_AdvancedControlNetApplyImport",
|
||||
"BatchCreativeInterpolation",
|
||||
"ControlNetLoaderAdvancedImport",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
"DiffControlNetLoaderAdvancedImport",
|
||||
"FILMVFIImport",
|
||||
"LatentKeyframeBatchedGroupImport",
|
||||
"LatentKeyframeGroupImport",
|
||||
"LatentKeyframeImport",
|
||||
"LatentKeyframeTiming",
|
||||
"LoadImagesFromDirectory",
|
||||
"MaskGenerator",
|
||||
"ScaledSoftControlNetWeightsImport",
|
||||
"SoftControlNetWeights",
|
||||
"SoftT2IAdapterWeights",
|
||||
"TimestepKeyframe"
|
||||
"BatchCreativeInterpolation"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Creative-Interpolation [Beta]"
|
||||
@ -4506,6 +4550,17 @@
|
||||
"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": [
|
||||
[
|
||||
"LFO_Pulse",
|
||||
@ -4583,6 +4638,7 @@
|
||||
"ChatGPTOpenAI",
|
||||
"CombineMasks_",
|
||||
"CombineSegMasks",
|
||||
"EditLayer",
|
||||
"EmptyLayer",
|
||||
"EnhanceImage",
|
||||
"FaceToMask",
|
||||
@ -4597,6 +4653,8 @@
|
||||
"ShowTextForGPT",
|
||||
"SmoothMask",
|
||||
"SplitLongMask",
|
||||
"SvgImage",
|
||||
"TextImage",
|
||||
"TransparentImage",
|
||||
"VAEDecodeConsistencyDecoder",
|
||||
"VAELoaderConsistencyDecoder"
|
||||
@ -4906,6 +4964,7 @@
|
||||
"ImageShuffle",
|
||||
"LCMGenerate",
|
||||
"LCMGenerate_ReferenceOnly",
|
||||
"LCMGenerate_SDTurbo",
|
||||
"LCMGenerate_img2img",
|
||||
"LCMGenerate_img2img_IPAdapter",
|
||||
"LCMGenerate_img2img_controlnet",
|
||||
@ -4914,6 +4973,7 @@
|
||||
"LCMLoader",
|
||||
"LCMLoader_RefInpaint",
|
||||
"LCMLoader_ReferenceOnly",
|
||||
"LCMLoader_SDTurbo",
|
||||
"LCMLoader_controlnet",
|
||||
"LCMLoader_controlnet_inpaint",
|
||||
"LCMLoader_img2img",
|
||||
@ -5017,6 +5077,7 @@
|
||||
"Random Line 4"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "\\(mtb\\)$",
|
||||
"title_aux": "Hakkun-ComfyUI-nodes"
|
||||
}
|
||||
],
|
||||
|
||||
@ -230,6 +230,7 @@ async function fetchNicknames() {
|
||||
const mappings = await response1.json();
|
||||
|
||||
let result = {};
|
||||
let nickname_patterns = [];
|
||||
|
||||
for (let i in mappings) {
|
||||
let item = mappings[i];
|
||||
@ -244,12 +245,16 @@ async function fetchNicknames() {
|
||||
for (let j in item[0]) {
|
||||
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() {
|
||||
@ -917,7 +922,9 @@ app.registerExtension({
|
||||
|
||||
this._addExtraNodeContextMenu(nodeType, app);
|
||||
},
|
||||
async nodeCreated(node, app) {
|
||||
|
||||
},
|
||||
async loadedGraphNode(node, app) {
|
||||
if (node.has_errors) {
|
||||
const onDrawForeground = node.onDrawForeground;
|
||||
|
||||
@ -1,5 +1,25 @@
|
||||
{
|
||||
"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",
|
||||
"title": "ComfyUI-audio",
|
||||
|
||||
@ -94,6 +94,16 @@
|
||||
"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": [
|
||||
[
|
||||
"Color Blend",
|
||||
@ -130,7 +140,8 @@
|
||||
[
|
||||
"LogSigmas",
|
||||
"SpliceDenoised",
|
||||
"SpliceLatents"
|
||||
"SpliceLatents",
|
||||
"TemporalSplice"
|
||||
],
|
||||
{
|
||||
"title_aux": "SpliceTools"
|
||||
@ -546,6 +557,13 @@
|
||||
"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": [
|
||||
[
|
||||
"Add Noise to Image with Mask",
|
||||
@ -652,11 +670,12 @@
|
||||
],
|
||||
"https://github.com/Haoming02/comfyui-diffusion-cg": [
|
||||
[
|
||||
"Center Sampler",
|
||||
"Center Sampler XL",
|
||||
"Hook Recenter",
|
||||
"Hook Recenter XL",
|
||||
"Normalization",
|
||||
"NormalizationXL",
|
||||
"Tensor Debug"
|
||||
"Tensor Debug",
|
||||
"Unhook Recenter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Diffusion Color Grading"
|
||||
@ -1104,7 +1123,9 @@
|
||||
],
|
||||
"https://github.com/Off-Live/ComfyUI-off-suite": [
|
||||
[
|
||||
"Cached Image Load From URL",
|
||||
"Crop Center wigh SEGS",
|
||||
"Crop Center with SEGS",
|
||||
"GW Number Formatting",
|
||||
"Image Crop Fit",
|
||||
"Image Resize Fit",
|
||||
@ -1704,6 +1725,7 @@
|
||||
"author": "tinyterra",
|
||||
"description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.",
|
||||
"nickname": "ttNodes",
|
||||
"nodename_pattern": "^ttN ",
|
||||
"title": "tinyterraNodes",
|
||||
"title_aux": "tinyterraNodes"
|
||||
}
|
||||
@ -2707,7 +2729,8 @@
|
||||
],
|
||||
"https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [
|
||||
[
|
||||
"MicorsoftSpeech_TTS"
|
||||
"MicorsoftSpeech_TTS",
|
||||
"Play Sound"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_MSSpeech_TTS"
|
||||
@ -2766,6 +2789,7 @@
|
||||
"Seed Everywhere"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)",
|
||||
"title_aux": "Use Everywhere (UE Nodes)"
|
||||
}
|
||||
],
|
||||
@ -3089,12 +3113,12 @@
|
||||
"title_aux": "KSampler GPU"
|
||||
}
|
||||
],
|
||||
"https://github.com/daxthin/facedetailer": [
|
||||
"https://github.com/daxthin/DZ-FaceDetailer": [
|
||||
[
|
||||
"DZ_Face_Detailer"
|
||||
],
|
||||
{
|
||||
"title_aux": "facedetailer"
|
||||
"title_aux": "DZ-FaceDetailer"
|
||||
}
|
||||
],
|
||||
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [
|
||||
@ -3246,6 +3270,14 @@
|
||||
"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": [
|
||||
[
|
||||
"fcFloat",
|
||||
@ -3534,6 +3566,13 @@
|
||||
"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": [
|
||||
[
|
||||
"JjkConcat",
|
||||
@ -3555,6 +3594,22 @@
|
||||
"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": [
|
||||
[
|
||||
"YANC.ConcatStrings",
|
||||
@ -3677,7 +3732,9 @@
|
||||
],
|
||||
"https://github.com/knuknX/ComfyUI-Image-Tools": [
|
||||
[
|
||||
"BatchImageResizeProcessor",
|
||||
"ImageBatchSqueezeProcessor",
|
||||
"ImageBgRemoveProcessor",
|
||||
"ImageStandardResizeProcessor",
|
||||
"SingleImagePathLoader",
|
||||
"SingleImageUrlLoader"
|
||||
],
|
||||
@ -4022,6 +4079,7 @@
|
||||
"author": "Dr.Lt.Data",
|
||||
"description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.",
|
||||
"nickname": "Inspire Pack",
|
||||
"nodename_pattern": "Inspire$",
|
||||
"title": "Inspire Pack",
|
||||
"title_aux": "ComfyUI Inspire Pack"
|
||||
}
|
||||
@ -4174,6 +4232,7 @@
|
||||
"Vae Decode (mtb)"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "\\(mtb\\)$",
|
||||
"title_aux": "MTB Nodes"
|
||||
}
|
||||
],
|
||||
@ -4363,6 +4422,7 @@
|
||||
"Text Box - Ostris"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "- Ostris$",
|
||||
"title_aux": "Ostris Nodes ComfyUI"
|
||||
}
|
||||
],
|
||||
@ -4415,23 +4475,7 @@
|
||||
],
|
||||
"https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [
|
||||
[
|
||||
"ACN_AdvancedControlNetApplyImport",
|
||||
"BatchCreativeInterpolation",
|
||||
"ControlNetLoaderAdvancedImport",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
"DiffControlNetLoaderAdvancedImport",
|
||||
"FILMVFIImport",
|
||||
"LatentKeyframeBatchedGroupImport",
|
||||
"LatentKeyframeGroupImport",
|
||||
"LatentKeyframeImport",
|
||||
"LatentKeyframeTiming",
|
||||
"LoadImagesFromDirectory",
|
||||
"MaskGenerator",
|
||||
"ScaledSoftControlNetWeightsImport",
|
||||
"SoftControlNetWeights",
|
||||
"SoftT2IAdapterWeights",
|
||||
"TimestepKeyframe"
|
||||
"BatchCreativeInterpolation"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Creative-Interpolation [Beta]"
|
||||
@ -4506,6 +4550,17 @@
|
||||
"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": [
|
||||
[
|
||||
"LFO_Pulse",
|
||||
@ -4583,6 +4638,7 @@
|
||||
"ChatGPTOpenAI",
|
||||
"CombineMasks_",
|
||||
"CombineSegMasks",
|
||||
"EditLayer",
|
||||
"EmptyLayer",
|
||||
"EnhanceImage",
|
||||
"FaceToMask",
|
||||
@ -4597,6 +4653,8 @@
|
||||
"ShowTextForGPT",
|
||||
"SmoothMask",
|
||||
"SplitLongMask",
|
||||
"SvgImage",
|
||||
"TextImage",
|
||||
"TransparentImage",
|
||||
"VAEDecodeConsistencyDecoder",
|
||||
"VAELoaderConsistencyDecoder"
|
||||
@ -4906,6 +4964,7 @@
|
||||
"ImageShuffle",
|
||||
"LCMGenerate",
|
||||
"LCMGenerate_ReferenceOnly",
|
||||
"LCMGenerate_SDTurbo",
|
||||
"LCMGenerate_img2img",
|
||||
"LCMGenerate_img2img_IPAdapter",
|
||||
"LCMGenerate_img2img_controlnet",
|
||||
@ -4914,6 +4973,7 @@
|
||||
"LCMLoader",
|
||||
"LCMLoader_RefInpaint",
|
||||
"LCMLoader_ReferenceOnly",
|
||||
"LCMLoader_SDTurbo",
|
||||
"LCMLoader_controlnet",
|
||||
"LCMLoader_controlnet_inpaint",
|
||||
"LCMLoader_img2img",
|
||||
@ -5017,6 +5077,7 @@
|
||||
"Random Line 4"
|
||||
],
|
||||
{
|
||||
"nodename_pattern": "\\(mtb\\)$",
|
||||
"title_aux": "Hakkun-ComfyUI-nodes"
|
||||
}
|
||||
],
|
||||
|
||||
40
scanner.py
40
scanner.py
@ -119,9 +119,9 @@ 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], 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
|
||||
|
||||
@ -136,7 +136,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],node.get('title')))
|
||||
py_files.append((files[0], node.get('title'), node.get('nodename_pattern')))
|
||||
|
||||
return py_files
|
||||
|
||||
@ -171,25 +171,25 @@ def update_custom_nodes():
|
||||
|
||||
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)
|
||||
if name.endswith(".git"):
|
||||
name = name[:-4]
|
||||
|
||||
node_info[name] = (url, title)
|
||||
node_info[name] = (url, title, node_pattern)
|
||||
clone_or_pull_git_repository(url)
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor(10) as executor:
|
||||
for url, title in git_url_titles:
|
||||
executor.submit(process_git_url_title, url, title)
|
||||
for url, title, node_pattern in git_url_titles:
|
||||
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):
|
||||
url, title = url_title
|
||||
def download_and_store_info(url_title_and_pattern):
|
||||
url, title, node_pattern = url_title_and_pattern
|
||||
name = os.path.basename(url)
|
||||
if name.endswith(".py"):
|
||||
node_info[name] = (url, title)
|
||||
node_info[name] = (url, title, node_pattern)
|
||||
|
||||
try:
|
||||
download_url(url, ".tmp")
|
||||
@ -197,7 +197,7 @@ def update_custom_nodes():
|
||||
print(f"[ERROR] Cannot download '{url}'")
|
||||
|
||||
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
|
||||
|
||||
@ -223,13 +223,15 @@ def gen_json(node_info):
|
||||
|
||||
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.sort()
|
||||
|
||||
if dirname in node_info:
|
||||
git_url, title = node_info[dirname]
|
||||
git_url, title, node_pattern = node_info[dirname]
|
||||
metadata['title_aux'] = title
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
data[git_url] = (nodes, metadata)
|
||||
else:
|
||||
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:
|
||||
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.sort()
|
||||
|
||||
file = os.path.basename(file)
|
||||
|
||||
if file in node_info:
|
||||
url, title = node_info[file]
|
||||
url, title, node_pattern = node_info[file]
|
||||
metadata['title_aux'] = title
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
data[url] = (nodes, metadata)
|
||||
else:
|
||||
print(f"Missing info: {url}")
|
||||
@ -256,7 +260,7 @@ 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, title = node_info[extension]
|
||||
git_url, title, node_pattern = node_info[extension]
|
||||
|
||||
with open(node_list_json_path, 'r', encoding='utf-8') as f:
|
||||
node_list_json = json.load(f)
|
||||
@ -272,6 +276,8 @@ def gen_json(node_info):
|
||||
nodes.add(x.strip())
|
||||
|
||||
metadata_in_url['title_aux'] = title
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
nodes = list(nodes)
|
||||
nodes.sort()
|
||||
data[git_url] = (nodes, metadata_in_url)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user