mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2025-12-16 10:02:28 +08:00
improve: badge
update scanner
This commit is contained in:
parent
8307d4495d
commit
61514612f8
18
__init__.py
18
__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
|
||||||
@ -617,6 +618,21 @@ async def fetch_customnode_mappings(request):
|
|||||||
|
|
||||||
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')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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
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…
Reference in New Issue
Block a user