Merge branch 'ltdrdata:main' into dev

This commit is contained in:
John Qiao 2023-11-22 13:23:12 -07:00 committed by GitHub
commit 7cadf87eef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 487 additions and 192 deletions

View File

@ -14,7 +14,7 @@ import concurrent
import ssl import ssl
from urllib.parse import urlparse from urllib.parse import urlparse
version = "V1.1" version = "V1.2.1"
print(f"### Loading: ComfyUI-Manager ({version})") print(f"### Loading: ComfyUI-Manager ({version})")

View File

@ -1473,7 +1473,7 @@
"files": [ "files": [
"https://github.com/rgthree/rgthree-comfy" "https://github.com/rgthree/rgthree-comfy"
], ],
"nodename_pattern": " (rgthree)$", "nodename_pattern": " \\(rgthree\\)$",
"install_type": "git-clone", "install_type": "git-clone",
"description": "Nodes: Seed, Reroute, Context, Lora Loader Stack, Context Switch, Fast Muter. These custom nodes helps organize the building of complex workflows." "description": "Nodes: Seed, Reroute, Context, Lora Loader Stack, Context Switch, Fast Muter. These custom nodes helps organize the building of complex workflows."
}, },
@ -1688,14 +1688,14 @@
"description": "Input your desired output final resolution, it will automaticaly set the initial recommended SDXL ratio/size and its Upscale Factor to reach that output final resolution, also there's an option for 2x/4x reverse Upscale Factor. These all to avoid using bad/arbitary initial ratio/resolution." "description": "Input your desired output final resolution, it will automaticaly set the initial recommended SDXL ratio/size and its Upscale Factor to reach that output final resolution, also there's an option for 2x/4x reverse Upscale Factor. These all to avoid using bad/arbitary initial ratio/resolution."
}, },
{ {
"author": "Nuked88", "author": "Nuked",
"title": "ComfyUI-N-Nodes", "title": "ComfyUI-N-Nodes",
"reference": "https://github.com/Nuked88/ComfyUI-N-Nodes", "reference": "https://github.com/Nuked88/ComfyUI-N-Nodes",
"files": [ "files": [
"https://github.com/Nuked88/ComfyUI-N-Nodes" "https://github.com/Nuked88/ComfyUI-N-Nodes"
], ],
"install_type": "git-clone", "install_type": "git-clone",
"description": "A suite of custom nodes for ComfyUI, for now i just put Integer, string and float variable nodes." "description": "A suite of custom nodes for ConfyUI that includes GPT text-prompt generation, LoadVideo,SaveVideo,LoadFramesFromFolder and FrameInterpolator"
}, },
{ {
"author": "Extraltodeus", "author": "Extraltodeus",
@ -2452,9 +2452,9 @@
"title": "noEmbryo nodes", "title": "noEmbryo nodes",
"reference": "https://github.com/noembryo/ComfyUI-noEmbryo", "reference": "https://github.com/noembryo/ComfyUI-noEmbryo",
"files": [ "files": [
"https://raw.githubusercontent.com/noembryo/ComfyUI-noEmbryo/master/nodes.py" "https://github.com/noembryo/ComfyUI-noEmbryo"
], ],
"install_type": "copy", "install_type": "git-clone",
"description": "PromptTermList (1-6): are some nodes that help with the creation of Prompts inside ComfyUI. Resolution Scale outputs image dimensions using a scale factor. Regex Text Chopper outputs the chopped parts of a text using RegEx." "description": "PromptTermList (1-6): are some nodes that help with the creation of Prompts inside ComfyUI. Resolution Scale outputs image dimensions using a scale factor. Regex Text Chopper outputs the chopped parts of a text using RegEx."
}, },
{ {
@ -2677,6 +2677,97 @@
"install_type": "git-clone", "install_type": "git-clone",
"description": "Nodes:GradientPatchModelAddDownscale (Kohya Deep Shrink)." "description": "Nodes:GradientPatchModelAddDownscale (Kohya Deep Shrink)."
}, },
{
"author": "Feidorian",
"title": "feidorian-ComfyNodes",
"reference": "https://github.com/Feidorian/feidorian-ComfyNodes",
"nodename_pattern": "^Feidorian_",
"files": [
"https://github.com/Feidorian/feidorian-ComfyNodes"
],
"install_type": "git-clone",
"description": "This extension provides various custom nodes. literals, loaders, logic, output, switches"
},
{
"author": "wutipong",
"title": "ComfyUI-TextUtils",
"reference": "https://github.com/wutipong/ComfyUI-TextUtils",
"files": [
"https://github.com/wutipong/ComfyUI-TextUtils"
],
"install_type": "git-clone",
"description": "Nodes:Create N-Token String"
},
{
"author": "natto-maki",
"title": "ComfyUI-NegiTools",
"reference": "https://github.com/natto-maki/ComfyUI-NegiTools",
"files": [
"https://github.com/natto-maki/ComfyUI-NegiTools"
],
"install_type": "git-clone",
"description": "Nodes:OpenAI DALLe3"
},
{
"author": "LonicaMewinsky",
"title": "ComfyUI-RawSaver",
"reference": "https://github.com/LonicaMewinsky/ComfyUI-RawSaver",
"files": [
"https://github.com/LonicaMewinsky/ComfyUI-RawSaver"
],
"install_type": "git-clone",
"description": "Nodes:SaveTifImage. ComfyUI custom node for purpose of saving image as uint16 tif file."
},
{
"author": "jojkaart",
"title": "ComfyUI-sampler-lcm-alternative",
"reference": "https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative",
"files": [
"https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative"
],
"install_type": "git-clone",
"description": "Nodes:LCMScheduler, SamplerLCMAlternative, SamplerLCMCycle. ComfyUI Custom Sampler nodes that add a new improved LCM sampler functions"
},
{
"author": "GTSuya-Studio",
"title": "ComfyUI-GTSuya-Nodes",
"reference": "https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes",
"files": [
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes"
],
"install_type": "git-clone",
"description": "ComfyUI-GTSuya-Nodes is a ComyUI extension designed to add several wildcards supports into ComfyUI. Wildcards allow you to use __name__ syntax in your prompt to get a random line from a file named name.txt in a wildcards directory."
},
{
"author": "oyvindg",
"title": "ComfyUI-TrollSuite",
"reference": "https://github.com/oyvindg/ComfyUI-TrollSuite",
"files": [
"https://github.com/oyvindg/ComfyUI-TrollSuite"
],
"install_type": "git-clone",
"description": "Nodes: BinaryImageMask, ImagePadding, LoadLastCreatedImage, RandomMask, TransparentImage."
},
{
"author": "drago87",
"title": "ComfyUI_Dragos_Nodes",
"reference": "https://github.com/drago87/ComfyUI_Dragos_Nodes",
"files": [
"https://github.com/drago87/ComfyUI_Dragos_Nodes"
],
"install_type": "git-clone",
"description": "Nodes:File Padding, Image Info, VAE Loader With Name"
},
{
"author": "ansonkao",
"title": "comfyui-geometry",
"reference": "https://github.com/ansonkao/comfyui-geometry",
"files": [
"https://github.com/ansonkao/comfyui-geometry"
],
"install_type": "git-clone",
"description": "Nodes: Mask to Centroid, Mask to Eigenvector. A small collection of custom nodes for use with ComfyUI, for geometry calculations"
},
{ {
"author": "Off-Live", "author": "Off-Live",
"title": "ComfyUI-off-suite", "title": "ComfyUI-off-suite",
@ -2685,7 +2776,7 @@
"https://github.com/Off-Live/ComfyUI-off-suite" "https://github.com/Off-Live/ComfyUI-off-suite"
], ],
"install_type": "copy", "install_type": "copy",
"description": "Nodes:Image Crop Fit Node, OFF SEGS to Image, Crop Center wigh SEGS, GW Number Formatting Node." "description": "Nodes:Image Crop Fit Node, OFF SEGS to Image, Crop Center wigh SEGS, Watermarking, GW Number Formatting Node."
}, },
{ {
"author": "Ser-Hilary", "author": "Ser-Hilary",

View File

@ -59,22 +59,26 @@
"https://github.com/Amorano/Jovimetrix": [ "https://github.com/Amorano/Jovimetrix": [
[ [
"\u2697\ufe0f Blend (jov)", "\u2697\ufe0f Blend (jov)",
"\u2697\ufe0f Blend Mask (jov)",
"\u2728 Shape Generator (jov)", "\u2728 Shape Generator (jov)",
"\ud83c\udf08 HSV (jov)", "\ud83c\udf08 HSV (jov)",
"\ud83c\udf31 Transform (jov)", "\ud83c\udf31 Transform (jov)",
"\ud83c\udf87 Expand (jov)", "\ud83c\udf69 GLSL (jov)",
"\ud83c\udf87 Extend (jov)",
"\ud83d\udcc9 Threshold (jov)",
"\ud83d\udcf7 WebCam (jov)",
"\ud83d\udd06 Pixel Shader (jov)", "\ud83d\udd06 Pixel Shader (jov)",
"\ud83d\udd06 Pixel Shader Image (jov)", "\ud83d\udd06 Pixel Shader Image (jov)",
"\ud83d\udd30 Mirror (jov)", "\ud83d\udd30 Mirror (jov)",
"\ud83d\udd33 Tile (jov)", "\ud83d\udd33 Tile (jov)",
"\ud83d\udd78\ufe0f Adjust (jov)", "\ud83d\udd78\ufe0f Adjust (jov)",
"\ud83d\uddfa\ufe0f Projection (jov)", "\ud83d\uddfa\ufe0f Projection (jov)",
"\ud83d\ude8c Route (jov)",
"\ud83d\udfea Constant (jov)" "\ud83d\udfea Constant (jov)"
], ],
{ {
"author": "amorano", "author": "amorano",
"description": "", "description": "Procedural & Compositing. Includes a Webcam node.",
"nickname": "Jovimetrix",
"title": "Jovimetrix Composition Pack", "title": "Jovimetrix Composition Pack",
"title_aux": "Jovimetrix Composition Nodes" "title_aux": "Jovimetrix Composition Nodes"
} }
@ -491,8 +495,11 @@
], ],
"https://github.com/Fictiverse/ComfyUI_Fictiverse": [ "https://github.com/Fictiverse/ComfyUI_Fictiverse": [
[ [
"Add Noise to Image with Mask",
"Color correction", "Color correction",
"Displace Images with Mask" "Displace Image with Depth",
"Displace Images with Mask",
"Zoom Image with Depth"
], ],
{ {
"title_aux": "ComfyUI Fictiverse Nodes" "title_aux": "ComfyUI Fictiverse Nodes"
@ -567,6 +574,17 @@
"title_aux": "ezXY scripts and nodes" "title_aux": "ezXY scripts and nodes"
} }
], ],
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
[
"Get From Danbooru",
"Simple Wildcards",
"Simple Wildcards (Dir.)",
"Wildcards"
],
{
"title_aux": "ComfyUI-GTSuya-Nodes"
}
],
"https://github.com/Gourieff/comfyui-reactor-node": [ "https://github.com/Gourieff/comfyui-reactor-node": [
[ [
"ReActorFaceSwap", "ReActorFaceSwap",
@ -766,11 +784,20 @@
"title_aux": "ComfyBreakAnim" "title_aux": "ComfyBreakAnim"
} }
], ],
"https://github.com/LonicaMewinsky/ComfyUI-RawSaver": [
[
"SaveTifImage"
],
{
"title_aux": "ComfyUI-RawSaver"
}
],
"https://github.com/M1kep/ComfyLiterals": [ "https://github.com/M1kep/ComfyLiterals": [
[ [
"Checkpoint", "Checkpoint",
"Float", "Float",
"Int", "Int",
"KepStringLiteral",
"Lora", "Lora",
"Operation", "Operation",
"String" "String"
@ -1402,10 +1429,15 @@
], ],
"https://github.com/THtianhao/ComfyUI-FaceChain": [ "https://github.com/THtianhao/ComfyUI-FaceChain": [
[ [
"FCStyleLoraLoad",
"FC_CropAndPaste",
"FC_CropBottom",
"FC_CropFace",
"FC_CropMask", "FC_CropMask",
"FC_FaceDetection", "FC_FaceDetection",
"FC_FaceFusion", "FC_FaceFusion",
"FC_LoraMerge", "FC_MaskOP",
"FC_ReplaceImage",
"FC_Segment", "FC_Segment",
"FC_StyleLoraLoad" "FC_StyleLoraLoad"
], ],
@ -1445,10 +1477,14 @@
"tri3d-atr-parse-batch", "tri3d-atr-parse-batch",
"tri3d-extract-hand", "tri3d-extract-hand",
"tri3d-extract-parts-batch", "tri3d-extract-parts-batch",
"tri3d-extract-parts-batch2",
"tri3d-extract-parts-mask-batch", "tri3d-extract-parts-mask-batch",
"tri3d-fuzzification", "tri3d-fuzzification",
"tri3d-interaction-canny",
"tri3d-position-hands", "tri3d-position-hands",
"tri3d-position-parts-batch" "tri3d-position-parts-batch",
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels"
], ],
{ {
"title_aux": "tri3d-comfyui-nodes" "title_aux": "tri3d-comfyui-nodes"
@ -1619,9 +1655,11 @@
[ [
"BLVAEEncode", "BLVAEEncode",
"CLIPTextEncodeList", "CLIPTextEncodeList",
"CLIPTextEncodeSequence2",
"ConditioningBlend", "ConditioningBlend",
"DebugInput", "DebugInput",
"KSamplerSeq", "KSamplerSeq",
"KSamplerSeq2",
"VAEEncodeForInpaint (WAS)", "VAEEncodeForInpaint (WAS)",
"VividSharpen" "VividSharpen"
], ],
@ -2394,6 +2432,7 @@
"Loader", "Loader",
"Prompts", "Prompts",
"SaveImages", "SaveImages",
"Textbox",
"Wildcards" "Wildcards"
], ],
{ {
@ -2649,6 +2688,16 @@
"title_aux": "ComfyUI-Vextra-Nodes" "title_aux": "ComfyUI-Vextra-Nodes"
} }
], ],
"https://github.com/drago87/ComfyUI_Dragos_Nodes": [
[
"file_padding",
"image_info",
"vae_loader"
],
{
"title_aux": "ComfyUI_Dragos_Nodes"
}
],
"https://github.com/drustan-hawk/primitive-types": [ "https://github.com/drustan-hawk/primitive-types": [
[ [
"float", "float",
@ -2971,6 +3020,16 @@
"title_aux": "ComfyUI-Jjk-Nodes" "title_aux": "ComfyUI-Jjk-Nodes"
} }
], ],
"https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative": [
[
"LCMScheduler",
"SamplerLCMAlternative",
"SamplerLCMCycle"
],
{
"title_aux": "ComfyUI-sampler-lcm-alternative"
}
],
"https://github.com/ka-puna/comfyui-yanc": [ "https://github.com/ka-puna/comfyui-yanc": [
[ [
"YANC.ConcatStrings", "YANC.ConcatStrings",
@ -2991,6 +3050,7 @@
"BatchCropFromMaskAdvanced", "BatchCropFromMaskAdvanced",
"BatchUncrop", "BatchUncrop",
"BatchUncropAdvanced", "BatchUncropAdvanced",
"BboxToInt",
"ColorMatch", "ColorMatch",
"ColorToMask", "ColorToMask",
"ConditioningMultiCombine", "ConditioningMultiCombine",
@ -3000,8 +3060,10 @@
"ConditioningSetMaskAndCombine5", "ConditioningSetMaskAndCombine5",
"CreateAudioMask", "CreateAudioMask",
"CreateFadeMask", "CreateFadeMask",
"CreateFadeMaskAdvanced",
"CreateFluidMask", "CreateFluidMask",
"CreateGradientMask", "CreateGradientMask",
"CreateMagicMask",
"CreateShapeMask", "CreateShapeMask",
"CreateTextMask", "CreateTextMask",
"CreateVoronoiMask", "CreateVoronoiMask",
@ -3571,6 +3633,17 @@
"title_aux": "ComfyUI_FastVAEDecorder_SDXL" "title_aux": "ComfyUI_FastVAEDecorder_SDXL"
} }
], ],
"https://github.com/natto-maki/ComfyUI-NegiTools": [
[
"NegiTools_OpenAiDalle3",
"NegiTools_OpenAiTranslate",
"NegiTools_SeedGenerator",
"NegiTools_StringFunction"
],
{
"title_aux": "ComfyUI-NegiTools"
}
],
"https://github.com/nicolai256/comfyUI_Nodes_nicolai256/raw/main/yugioh-presets.py": [ "https://github.com/nicolai256/comfyUI_Nodes_nicolai256/raw/main/yugioh-presets.py": [
[ [
"yugioh_Presets" "yugioh_Presets"
@ -3579,6 +3652,23 @@
"title_aux": "comfyUI_Nodes_nicolai256" "title_aux": "comfyUI_Nodes_nicolai256"
} }
], ],
"https://github.com/noembryo/ComfyUI-noEmbryo": [
[
"PromptTermList1",
"PromptTermList2",
"PromptTermList3",
"PromptTermList4",
"PromptTermList5",
"PromptTermList6"
],
{
"author": "noEmbryo",
"description": "Some useful nodes for ComfyUI",
"nickname": "noEmbryo",
"title": "noEmbryo nodes for ComfyUI",
"title_aux": "noEmbryo nodes"
}
],
"https://github.com/noxinias/ComfyUI_NoxinNodes": [ "https://github.com/noxinias/ComfyUI_NoxinNodes": [
[ [
"NoxinChime", "NoxinChime",
@ -3670,6 +3760,18 @@
"title_aux": "Ostris Nodes ComfyUI" "title_aux": "Ostris Nodes ComfyUI"
} }
], ],
"https://github.com/oyvindg/ComfyUI-TrollSuite": [
[
"BinaryImageMask",
"ImagePadding",
"LoadLastImage",
"RandomMask",
"TransparentImage"
],
{
"title_aux": "ComfyUI-TrollSuite"
}
],
"https://github.com/palant/extended-saveimage-comfyui": [ "https://github.com/palant/extended-saveimage-comfyui": [
[ [
"SaveImageExtended" "SaveImageExtended"
@ -3924,7 +4026,6 @@
"AV_ParametersPipeToPrompts", "AV_ParametersPipeToPrompts",
"AV_PromptsToParametersPipe", "AV_PromptsToParametersPipe",
"AV_SAMLoader", "AV_SAMLoader",
"AV_UploadImage",
"AV_VAELoader", "AV_VAELoader",
"AspectRatioSelector", "AspectRatioSelector",
"BLIPCaption", "BLIPCaption",
@ -4340,6 +4441,7 @@
"Image Save with Prompt/Info (WLSH)", "Image Save with Prompt/Info (WLSH)",
"Image Save with Prompt/Info File (WLSH)", "Image Save with Prompt/Info File (WLSH)",
"Image Scale By Factor (WLSH)", "Image Scale By Factor (WLSH)",
"Image Scale by Shortside (WLSH)",
"KSamplerAdvanced (WLSH)", "KSamplerAdvanced (WLSH)",
"Multiply Integer (WLSH)", "Multiply Integer (WLSH)",
"Outpaint to Image (WLSH)", "Outpaint to Image (WLSH)",
@ -4443,6 +4545,17 @@
"title_aux": "SDXLResolutionPresets" "title_aux": "SDXLResolutionPresets"
} }
], ],
"https://github.com/wutipong/ComfyUI-TextUtils": [
[
"Text Utils - Join N-Elements of String List",
"Text Utils - Join String List",
"Text Utils - Join Strings",
"Text Utils - Split String to List"
],
{
"title_aux": "ComfyUI-TextUtils"
}
],
"https://github.com/xXAdonesXx/NodeGPT": [ "https://github.com/xXAdonesXx/NodeGPT": [
[ [
"AppendAgent", "AppendAgent",
@ -4585,19 +4698,6 @@
"title_aux": "Cute Comfy" "title_aux": "Cute Comfy"
} }
], ],
"https://raw.githubusercontent.com/noembryo/ComfyUI-noEmbryo/master/nodes.py": [
[
"PromptTermList1",
"PromptTermList2",
"PromptTermList3",
"PromptTermList4",
"PromptTermList5",
"PromptTermList6"
],
{
"title_aux": "noEmbryo nodes"
}
],
"https://raw.githubusercontent.com/throttlekitty/SDXLCustomAspectRatio/main/SDXLAspectRatio.py": [ "https://raw.githubusercontent.com/throttlekitty/SDXLCustomAspectRatio/main/SDXLAspectRatio.py": [
[ [
"SDXLAspectRatio" "SDXLAspectRatio"

View File

@ -48,7 +48,7 @@
"https://github.com/dnl13/ComfyUI-dnl13-seg" "https://github.com/dnl13/ComfyUI-dnl13-seg"
], ],
"install_type": "git-clone", "install_type": "git-clone",
"description": "Nodes: Automatic Segmentation (dnl13), RGB (dnl13)" "description": "After discovering @storyicon implementation here of Segment Anything, I realized its potential as a powerful tool for ComfyUI if implemented correctly. I delved into the SAM and Dino models. The following is my own adaptation of sam_hq for ComfyUI."
}, },
{ {
"author": "phineas-pta", "author": "phineas-pta",
@ -120,16 +120,6 @@
"install_type": "git-clone", "install_type": "git-clone",
"description": "Experimental node for SSD-1B. This node is not need for latest comfyui." "description": "Experimental node for SSD-1B. This node is not need for latest comfyui."
}, },
{
"author": "Feidorian",
"title": "feidorian-nodes",
"reference": "https://github.com/Feidorian/feidorian-ComfyNodes",
"files": [
"https://github.com/Feidorian/feidorian-ComfyNodes"
],
"install_type": "git-clone",
"description": "Nodes: Feidorian_WorkflowImageLoader"
},
{ {
"author": "flowtyone", "author": "flowtyone",
"title": "comfyui-flowty-lcm", "title": "comfyui-flowty-lcm",

View File

@ -1,5 +1,86 @@
{ {
"custom_nodes": [ "custom_nodes": [
{
"author": "drago87",
"title": "ComfyUI_Dragos_Nodes",
"reference": "https://github.com/drago87/ComfyUI_Dragos_Nodes",
"files": [
"https://github.com/drago87/ComfyUI_Dragos_Nodes"
],
"install_type": "git-clone",
"description": "Nodes:File Padding, Image Info, VAE Loader With Name"
},
{
"author": "ansonkao",
"title": "comfyui-geometry",
"reference": "https://github.com/ansonkao/comfyui-geometry",
"files": [
"https://github.com/ansonkao/comfyui-geometry"
],
"install_type": "git-clone",
"description": "Nodes: Mask to Centroid, Mask to Eigenvector. A small collection of custom nodes for use with ComfyUI, for geometry calculations"
},
{
"author": "GTSuya-Studio",
"title": "ComfyUI-GTSuya-Nodes",
"reference": "https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes",
"files": [
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes"
],
"install_type": "git-clone",
"description": "ComfyUI-GTSuya-Nodes is a ComyUI extension designed to add several wildcards supports into ComfyUI. Wildcards allow you to use __name__ syntax in your prompt to get a random line from a file named name.txt in a wildcards directory."
},
{
"author": "jojkaart",
"title": "ComfyUI-sampler-lcm-alternative",
"reference": "https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative",
"files": [
"https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative"
],
"install_type": "git-clone",
"description": "Nodes:LCMScheduler, SamplerLCMAlternative, SamplerLCMCycle. ComfyUI Custom Sampler nodes that add a new improved LCM sampler functions"
},
{
"author": "LonicaMewinsky",
"title": "ComfyUI-RawSaver",
"reference": "https://github.com/LonicaMewinsky/ComfyUI-RawSaver",
"files": [
"https://github.com/LonicaMewinsky/ComfyUI-RawSaver"
],
"install_type": "git-clone",
"description": "Nodes:SaveTifImage. ComfyUI custom node for purpose of saving image as uint16 tif file."
},
{
"author": "natto-maki",
"title": "ComfyUI-NegiTools",
"reference": "https://github.com/natto-maki/ComfyUI-NegiTools",
"files": [
"https://github.com/natto-maki/ComfyUI-NegiTools"
],
"install_type": "git-clone",
"description": "Nodes:OpenAI DALLe3"
},
{
"author": "wutipong",
"title": "ComfyUI-TextUtils",
"reference": "https://github.com/wutipong/ComfyUI-TextUtils",
"files": [
"https://github.com/wutipong/ComfyUI-TextUtils"
],
"install_type": "git-clone",
"description": "Nodes:Create N-Token String"
},
{
"author": "Feidorian",
"title": "feidorian-ComfyNodes",
"reference": "https://github.com/Feidorian/feidorian-ComfyNodes",
"nodename_pattern": "^Feidorian_",
"files": [
"https://github.com/Feidorian/feidorian-ComfyNodes"
],
"install_type": "git-clone",
"description": "This extension provides various custom nodes. literals, loaders, logic, output, switches"
},
{ {
"author": "kinfolk0117", "author": "kinfolk0117",
"title": "ComfyUI_GradientDeepShrink", "title": "ComfyUI_GradientDeepShrink",
@ -138,7 +219,7 @@
"https://github.com/Off-Live/ComfyUI-off-suite" "https://github.com/Off-Live/ComfyUI-off-suite"
], ],
"install_type": "copy", "install_type": "copy",
"description": "Nodes:Image Crop Fit Node, OFF SEGS to Image, Crop Center wigh SEGS, GW Number Formatting Node." "description": "Nodes:Image Crop Fit Node, OFF SEGS to Image, Crop Center wigh SEGS, Watermarking, GW Number Formatting Node."
}, },
{ {
"author": "laksjdjf", "author": "laksjdjf",
@ -295,9 +376,9 @@
"title": "noEmbryo nodes", "title": "noEmbryo nodes",
"reference": "https://github.com/noembryo/ComfyUI-noEmbryo", "reference": "https://github.com/noembryo/ComfyUI-noEmbryo",
"files": [ "files": [
"https://raw.githubusercontent.com/noembryo/ComfyUI-noEmbryo/master/nodes.py" "https://github.com/noembryo/ComfyUI-noEmbryo"
], ],
"install_type": "copy", "install_type": "git-clone",
"description": "PromptTermList (1-6): are some nodes that help with the creation of Prompts inside ComfyUI. Resolution Scale outputs image dimensions using a scale factor. Regex Text Chopper outputs the chopped parts of a text using RegEx." "description": "PromptTermList (1-6): are some nodes that help with the creation of Prompts inside ComfyUI. Resolution Scale outputs image dimensions using a scale factor. Regex Text Chopper outputs the chopped parts of a text using RegEx."
}, },
{ {
@ -710,117 +791,6 @@
], ],
"install_type": "git-clone", "install_type": "git-clone",
"description": "Nodes:Conditioning (Blend), Inpainting VAE Encode (WAS), VividSharpen. Experimental nodes, or other random extra helper nodes." "description": "Nodes:Conditioning (Blend), Inpainting VAE Encode (WAS), VividSharpen. Experimental nodes, or other random extra helper nodes."
}, }
{
"author": "yolanother",
"title": "Image to Text Node",
"reference": "https://github.com/yolanother/DTAIImageToTextNode",
"files": [
"https://github.com/yolanother/DTAIImageToTextNode"
],
"install_type": "git-clone",
"description": "Nodes: Image URL to Text, Image to Text."
},
{
"author": "yolanother",
"title": "Comfy UI Online Loaders",
"reference": "https://github.com/yolanother/DTAIComfyLoaders",
"files": [
"https://github.com/yolanother/DTAIComfyLoaders"
],
"install_type": "git-clone",
"description": "Nodes: Submit Image (Parameters), Submit Image. A collection of loaders that use a shared common online data source rather than relying on the files to be present locally."
},
{
"author": "yolanother",
"title": "Comfy AI DoubTech.ai Image Sumission Node",
"reference": "https://github.com/yolanother/DTAIComfyImageSubmit",
"files": [
"https://github.com/yolanother/DTAIComfyImageSubmit"
],
"install_type": "git-clone",
"description": "A ComfyAI submit node to upload images to DoubTech.ai"
},
{
"author": "yolanother",
"title": "Comfy UI QR Codes",
"reference": "https://github.com/yolanother/DTAIComfyQRCodes",
"files": [
"https://github.com/yolanother/DTAIComfyQRCodes"
],
"install_type": "git-clone",
"description": "This extension introduces QR code nodes for the Comfy UI stable diffusion client. NOTE: ComfyUI qrcode extension required."
},
{
"author": "yolanother",
"title": "Variables for Comfy UI",
"reference": "https://github.com/yolanother/DTAIComfyVariables",
"files": [
"https://github.com/yolanother/DTAIComfyVariables"
],
"install_type": "git-clone",
"description": "Nodes: String, Int, Float, Short String, CLIP Text Encode (With Variables), String Format, Short String Format. This extension introduces quality of life improvements by providing variable nodes and shared global variables."
},
{
"author": "kijai",
"title": "KJNodes for ComfyUI",
"reference": "https://github.com/kijai/ComfyUI-KJNodes",
"files": [
"https://github.com/kijai/ComfyUI-KJNodes"
],
"install_type": "git-clone",
"description": "Various quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability."
},
{
"author": "WASasquatch",
"title": "ASTERR",
"reference": "https://github.com/WASasquatch/ASTERR",
"files": [
"https://github.com/WASasquatch/ASTERR"
],
"install_type": "git-clone",
"description": "Abstract Syntax Trees Evaluated Restricted Run (ASTERR) is a Python Script executor for ComfyUI. <p style='background-color: black; color: red;'>Warning:ASTERR runs Python Code from a Web Interface! It is highly recommended to run this in a closed-off environment, as it could have potential security risks.</p>"
},
{
"author": "Zuellni",
"title": "ComfyUI PickScore Nodes",
"reference": "https://github.com/Zuellni/ComfyUI-PickScore-Nodes",
"files": [
"https://github.com/Zuellni/ComfyUI-PickScore-Nodes"
],
"install_type": "git-clone",
"description": "Image scoring nodes for ComfyUI using PickScore with a batch of images to predict which ones fit a given prompt the best."
},
{
"author": "chrisgoringe",
"title": "Use Everywhere (UE Nodes)",
"reference": "https://github.com/chrisgoringe/cg-use-everywhere",
"files": [
"https://github.com/chrisgoringe/cg-use-everywhere"
],
"install_type": "git-clone",
"nodename_pattern": "^(UE\\? |UE )",
"description": "A set of nodes that allow data to be 'broadcast' to some or all unconnected inputs. Greatly reduces link spaghetti."
},
{
"author": "azazeal04",
"title": "ComfyUI-Styles",
"reference": "https://github.com/azazeal04/ComfyUI-Styles",
"files": [
"https://github.com/azazeal04/ComfyUI-Styles"
],
"install_type": "git-clone",
"description": "Nodes:Anime_Styler, Fantasy_Styler, Gothic_Styler, Line_Art_Styler, Movie_Poster_Styler, Punk_Styler, Travel_Poster_Styler. This extension offers 8 art style nodes, each of which includes approximately 50 individual style variations."
},
{
"author": "city96",
"title": "ComfyUI_ColorMod",
"reference": "https://github.com/city96/ComfyUI_ColorMod",
"files": [
"https://github.com/city96/ComfyUI_ColorMod"
],
"install_type": "git-clone",
"description": "This extension currently has two sets of nodes - one set for editing the contrast/color of images and another set for saving images as 16 bit PNG files."
}
] ]
} }

View File

@ -59,22 +59,26 @@
"https://github.com/Amorano/Jovimetrix": [ "https://github.com/Amorano/Jovimetrix": [
[ [
"\u2697\ufe0f Blend (jov)", "\u2697\ufe0f Blend (jov)",
"\u2697\ufe0f Blend Mask (jov)",
"\u2728 Shape Generator (jov)", "\u2728 Shape Generator (jov)",
"\ud83c\udf08 HSV (jov)", "\ud83c\udf08 HSV (jov)",
"\ud83c\udf31 Transform (jov)", "\ud83c\udf31 Transform (jov)",
"\ud83c\udf87 Expand (jov)", "\ud83c\udf69 GLSL (jov)",
"\ud83c\udf87 Extend (jov)",
"\ud83d\udcc9 Threshold (jov)",
"\ud83d\udcf7 WebCam (jov)",
"\ud83d\udd06 Pixel Shader (jov)", "\ud83d\udd06 Pixel Shader (jov)",
"\ud83d\udd06 Pixel Shader Image (jov)", "\ud83d\udd06 Pixel Shader Image (jov)",
"\ud83d\udd30 Mirror (jov)", "\ud83d\udd30 Mirror (jov)",
"\ud83d\udd33 Tile (jov)", "\ud83d\udd33 Tile (jov)",
"\ud83d\udd78\ufe0f Adjust (jov)", "\ud83d\udd78\ufe0f Adjust (jov)",
"\ud83d\uddfa\ufe0f Projection (jov)", "\ud83d\uddfa\ufe0f Projection (jov)",
"\ud83d\ude8c Route (jov)",
"\ud83d\udfea Constant (jov)" "\ud83d\udfea Constant (jov)"
], ],
{ {
"author": "amorano", "author": "amorano",
"description": "", "description": "Procedural & Compositing. Includes a Webcam node.",
"nickname": "Jovimetrix",
"title": "Jovimetrix Composition Pack", "title": "Jovimetrix Composition Pack",
"title_aux": "Jovimetrix Composition Nodes" "title_aux": "Jovimetrix Composition Nodes"
} }
@ -491,8 +495,11 @@
], ],
"https://github.com/Fictiverse/ComfyUI_Fictiverse": [ "https://github.com/Fictiverse/ComfyUI_Fictiverse": [
[ [
"Add Noise to Image with Mask",
"Color correction", "Color correction",
"Displace Images with Mask" "Displace Image with Depth",
"Displace Images with Mask",
"Zoom Image with Depth"
], ],
{ {
"title_aux": "ComfyUI Fictiverse Nodes" "title_aux": "ComfyUI Fictiverse Nodes"
@ -567,6 +574,17 @@
"title_aux": "ezXY scripts and nodes" "title_aux": "ezXY scripts and nodes"
} }
], ],
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
[
"Get From Danbooru",
"Simple Wildcards",
"Simple Wildcards (Dir.)",
"Wildcards"
],
{
"title_aux": "ComfyUI-GTSuya-Nodes"
}
],
"https://github.com/Gourieff/comfyui-reactor-node": [ "https://github.com/Gourieff/comfyui-reactor-node": [
[ [
"ReActorFaceSwap", "ReActorFaceSwap",
@ -766,11 +784,20 @@
"title_aux": "ComfyBreakAnim" "title_aux": "ComfyBreakAnim"
} }
], ],
"https://github.com/LonicaMewinsky/ComfyUI-RawSaver": [
[
"SaveTifImage"
],
{
"title_aux": "ComfyUI-RawSaver"
}
],
"https://github.com/M1kep/ComfyLiterals": [ "https://github.com/M1kep/ComfyLiterals": [
[ [
"Checkpoint", "Checkpoint",
"Float", "Float",
"Int", "Int",
"KepStringLiteral",
"Lora", "Lora",
"Operation", "Operation",
"String" "String"
@ -1402,10 +1429,15 @@
], ],
"https://github.com/THtianhao/ComfyUI-FaceChain": [ "https://github.com/THtianhao/ComfyUI-FaceChain": [
[ [
"FCStyleLoraLoad",
"FC_CropAndPaste",
"FC_CropBottom",
"FC_CropFace",
"FC_CropMask", "FC_CropMask",
"FC_FaceDetection", "FC_FaceDetection",
"FC_FaceFusion", "FC_FaceFusion",
"FC_LoraMerge", "FC_MaskOP",
"FC_ReplaceImage",
"FC_Segment", "FC_Segment",
"FC_StyleLoraLoad" "FC_StyleLoraLoad"
], ],
@ -1445,10 +1477,14 @@
"tri3d-atr-parse-batch", "tri3d-atr-parse-batch",
"tri3d-extract-hand", "tri3d-extract-hand",
"tri3d-extract-parts-batch", "tri3d-extract-parts-batch",
"tri3d-extract-parts-batch2",
"tri3d-extract-parts-mask-batch", "tri3d-extract-parts-mask-batch",
"tri3d-fuzzification", "tri3d-fuzzification",
"tri3d-interaction-canny",
"tri3d-position-hands", "tri3d-position-hands",
"tri3d-position-parts-batch" "tri3d-position-parts-batch",
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels"
], ],
{ {
"title_aux": "tri3d-comfyui-nodes" "title_aux": "tri3d-comfyui-nodes"
@ -1619,9 +1655,11 @@
[ [
"BLVAEEncode", "BLVAEEncode",
"CLIPTextEncodeList", "CLIPTextEncodeList",
"CLIPTextEncodeSequence2",
"ConditioningBlend", "ConditioningBlend",
"DebugInput", "DebugInput",
"KSamplerSeq", "KSamplerSeq",
"KSamplerSeq2",
"VAEEncodeForInpaint (WAS)", "VAEEncodeForInpaint (WAS)",
"VividSharpen" "VividSharpen"
], ],
@ -2394,6 +2432,7 @@
"Loader", "Loader",
"Prompts", "Prompts",
"SaveImages", "SaveImages",
"Textbox",
"Wildcards" "Wildcards"
], ],
{ {
@ -2649,6 +2688,16 @@
"title_aux": "ComfyUI-Vextra-Nodes" "title_aux": "ComfyUI-Vextra-Nodes"
} }
], ],
"https://github.com/drago87/ComfyUI_Dragos_Nodes": [
[
"file_padding",
"image_info",
"vae_loader"
],
{
"title_aux": "ComfyUI_Dragos_Nodes"
}
],
"https://github.com/drustan-hawk/primitive-types": [ "https://github.com/drustan-hawk/primitive-types": [
[ [
"float", "float",
@ -2971,6 +3020,16 @@
"title_aux": "ComfyUI-Jjk-Nodes" "title_aux": "ComfyUI-Jjk-Nodes"
} }
], ],
"https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative": [
[
"LCMScheduler",
"SamplerLCMAlternative",
"SamplerLCMCycle"
],
{
"title_aux": "ComfyUI-sampler-lcm-alternative"
}
],
"https://github.com/ka-puna/comfyui-yanc": [ "https://github.com/ka-puna/comfyui-yanc": [
[ [
"YANC.ConcatStrings", "YANC.ConcatStrings",
@ -2991,6 +3050,7 @@
"BatchCropFromMaskAdvanced", "BatchCropFromMaskAdvanced",
"BatchUncrop", "BatchUncrop",
"BatchUncropAdvanced", "BatchUncropAdvanced",
"BboxToInt",
"ColorMatch", "ColorMatch",
"ColorToMask", "ColorToMask",
"ConditioningMultiCombine", "ConditioningMultiCombine",
@ -3000,8 +3060,10 @@
"ConditioningSetMaskAndCombine5", "ConditioningSetMaskAndCombine5",
"CreateAudioMask", "CreateAudioMask",
"CreateFadeMask", "CreateFadeMask",
"CreateFadeMaskAdvanced",
"CreateFluidMask", "CreateFluidMask",
"CreateGradientMask", "CreateGradientMask",
"CreateMagicMask",
"CreateShapeMask", "CreateShapeMask",
"CreateTextMask", "CreateTextMask",
"CreateVoronoiMask", "CreateVoronoiMask",
@ -3571,6 +3633,17 @@
"title_aux": "ComfyUI_FastVAEDecorder_SDXL" "title_aux": "ComfyUI_FastVAEDecorder_SDXL"
} }
], ],
"https://github.com/natto-maki/ComfyUI-NegiTools": [
[
"NegiTools_OpenAiDalle3",
"NegiTools_OpenAiTranslate",
"NegiTools_SeedGenerator",
"NegiTools_StringFunction"
],
{
"title_aux": "ComfyUI-NegiTools"
}
],
"https://github.com/nicolai256/comfyUI_Nodes_nicolai256/raw/main/yugioh-presets.py": [ "https://github.com/nicolai256/comfyUI_Nodes_nicolai256/raw/main/yugioh-presets.py": [
[ [
"yugioh_Presets" "yugioh_Presets"
@ -3579,6 +3652,23 @@
"title_aux": "comfyUI_Nodes_nicolai256" "title_aux": "comfyUI_Nodes_nicolai256"
} }
], ],
"https://github.com/noembryo/ComfyUI-noEmbryo": [
[
"PromptTermList1",
"PromptTermList2",
"PromptTermList3",
"PromptTermList4",
"PromptTermList5",
"PromptTermList6"
],
{
"author": "noEmbryo",
"description": "Some useful nodes for ComfyUI",
"nickname": "noEmbryo",
"title": "noEmbryo nodes for ComfyUI",
"title_aux": "noEmbryo nodes"
}
],
"https://github.com/noxinias/ComfyUI_NoxinNodes": [ "https://github.com/noxinias/ComfyUI_NoxinNodes": [
[ [
"NoxinChime", "NoxinChime",
@ -3670,6 +3760,18 @@
"title_aux": "Ostris Nodes ComfyUI" "title_aux": "Ostris Nodes ComfyUI"
} }
], ],
"https://github.com/oyvindg/ComfyUI-TrollSuite": [
[
"BinaryImageMask",
"ImagePadding",
"LoadLastImage",
"RandomMask",
"TransparentImage"
],
{
"title_aux": "ComfyUI-TrollSuite"
}
],
"https://github.com/palant/extended-saveimage-comfyui": [ "https://github.com/palant/extended-saveimage-comfyui": [
[ [
"SaveImageExtended" "SaveImageExtended"
@ -3924,7 +4026,6 @@
"AV_ParametersPipeToPrompts", "AV_ParametersPipeToPrompts",
"AV_PromptsToParametersPipe", "AV_PromptsToParametersPipe",
"AV_SAMLoader", "AV_SAMLoader",
"AV_UploadImage",
"AV_VAELoader", "AV_VAELoader",
"AspectRatioSelector", "AspectRatioSelector",
"BLIPCaption", "BLIPCaption",
@ -4340,6 +4441,7 @@
"Image Save with Prompt/Info (WLSH)", "Image Save with Prompt/Info (WLSH)",
"Image Save with Prompt/Info File (WLSH)", "Image Save with Prompt/Info File (WLSH)",
"Image Scale By Factor (WLSH)", "Image Scale By Factor (WLSH)",
"Image Scale by Shortside (WLSH)",
"KSamplerAdvanced (WLSH)", "KSamplerAdvanced (WLSH)",
"Multiply Integer (WLSH)", "Multiply Integer (WLSH)",
"Outpaint to Image (WLSH)", "Outpaint to Image (WLSH)",
@ -4443,6 +4545,17 @@
"title_aux": "SDXLResolutionPresets" "title_aux": "SDXLResolutionPresets"
} }
], ],
"https://github.com/wutipong/ComfyUI-TextUtils": [
[
"Text Utils - Join N-Elements of String List",
"Text Utils - Join String List",
"Text Utils - Join Strings",
"Text Utils - Split String to List"
],
{
"title_aux": "ComfyUI-TextUtils"
}
],
"https://github.com/xXAdonesXx/NodeGPT": [ "https://github.com/xXAdonesXx/NodeGPT": [
[ [
"AppendAgent", "AppendAgent",
@ -4585,19 +4698,6 @@
"title_aux": "Cute Comfy" "title_aux": "Cute Comfy"
} }
], ],
"https://raw.githubusercontent.com/noembryo/ComfyUI-noEmbryo/master/nodes.py": [
[
"PromptTermList1",
"PromptTermList2",
"PromptTermList3",
"PromptTermList4",
"PromptTermList5",
"PromptTermList6"
],
{
"title_aux": "noEmbryo nodes"
}
],
"https://raw.githubusercontent.com/throttlekitty/SDXLCustomAspectRatio/main/SDXLAspectRatio.py": [ "https://raw.githubusercontent.com/throttlekitty/SDXLCustomAspectRatio/main/SDXLAspectRatio.py": [
[ [
"SDXLAspectRatio" "SDXLAspectRatio"

View File

@ -83,9 +83,10 @@ try:
log_file = open(f"comfyui{postfix}.log", "w", encoding="utf-8") log_file = open(f"comfyui{postfix}.log", "w", encoding="utf-8")
log_lock = threading.Lock() log_lock = threading.Lock()
class Logger: class ComfyUIManagerLogger:
def __init__(self, is_stdout): def __init__(self, is_stdout):
self.is_stdout = is_stdout self.is_stdout = is_stdout
self.encoding = "utf-8"
def fileno(self): def fileno(self):
try: try:
@ -135,16 +136,19 @@ try:
else: else:
original_stderr.flush() original_stderr.flush()
def reconfigure(self, *args, **kwargs): def close(self):
self.flush()
pass pass
def reconfigure(self, *args, **kwargs):
pass
def close_log(): def close_log():
log_file.close() log_file.close()
sys.stdout = Logger(True) sys.stdout = ComfyUIManagerLogger(True)
sys.stderr = Logger(False) sys.stderr = ComfyUIManagerLogger(False)
atexit.register(close_log) atexit.register(close_log)
except Exception as e: except Exception as e:
@ -164,7 +168,7 @@ def check_bypass_ssl():
default_conf = config['default'] default_conf = config['default']
if 'bypass_ssl' in default_conf and default_conf['bypass_ssl'].lower() == 'true': if 'bypass_ssl' in default_conf and default_conf['bypass_ssl'].lower() == 'true':
print(f"[ComfyUI-Manager] WARN: Unsafe - SSL verification option is Enabled. (see ComfyUI-Manager/config.ini)") print(f"[ComfyUI-Manager] WARN: Unsafe - SSL verification bypass option is Enabled. (see ComfyUI-Manager/config.ini)")
ssl._create_default_https_context = ssl._create_unverified_context # SSL certificate error fix. ssl._create_default_https_context = ssl._create_unverified_context # SSL certificate error fix.
except Exception: except Exception:
pass pass
@ -173,6 +177,41 @@ def check_bypass_ssl():
check_bypass_ssl() check_bypass_ssl()
# Perform install
processed_install = set()
script_list_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "startup-scripts", "install-scripts.txt")
pip_list = None
def get_installed_packages():
global pip_list
if pip_list is None:
try:
result = subprocess.check_output([sys.executable, '-m', 'pip', 'list'], universal_newlines=True)
pip_list = set([line.split()[0].lower() for line in result.split('\n') if line.strip()])
except subprocess.CalledProcessError as e:
print(f"[ComfyUI-Manager] Failed to retrieve the information of installed pip packages.")
return set()
return pip_list
def is_installed(name):
name = name.strip()
if name.startswith('#'):
return True
pattern = r'([^<>!=]+)([<>!=]=?)'
match = re.search(pattern, name)
if match:
name = match.group(1)
return name.lower() in get_installed_packages()
if os.path.exists(restore_snapshot_path): if os.path.exists(restore_snapshot_path):
try: try:
import json import json
@ -221,11 +260,12 @@ if os.path.exists(restore_snapshot_path):
with open(requirements_path, 'r', encoding="UTF-8") as file: with open(requirements_path, 'r', encoding="UTF-8") as file:
for line in file: for line in file:
package_name = line.strip() package_name = line.strip()
if package_name: if package_name and not is_installed(package_name):
install_cmd = [sys.executable, "-m", "pip", "install", package_name] install_cmd = [sys.executable, "-m", "pip", "install", package_name]
this_exit_code += process_wrap(install_cmd, repo_path) this_exit_code += process_wrap(install_cmd, repo_path)
if os.path.exists(install_script_path): if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in processed_install:
processed_install.add(f'{repo_path}/install.py')
install_cmd = [sys.executable, install_script_path] install_cmd = [sys.executable, install_script_path]
print(f">>> {install_cmd} / {repo_path}") print(f">>> {install_cmd} / {repo_path}")
this_exit_code += process_wrap(install_cmd, repo_path) this_exit_code += process_wrap(install_cmd, repo_path)
@ -249,26 +289,25 @@ if os.path.exists(restore_snapshot_path):
os.remove(restore_snapshot_path) os.remove(restore_snapshot_path)
# Perform install
script_list_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "startup-scripts", "install-scripts.txt")
def execute_lazy_install_script(repo_path, executable): def execute_lazy_install_script(repo_path, executable):
global processed_install
install_script_path = os.path.join(repo_path, "install.py") install_script_path = os.path.join(repo_path, "install.py")
requirements_path = os.path.join(repo_path, "requirements.txt") requirements_path = os.path.join(repo_path, "requirements.txt")
if os.path.exists(requirements_path): if os.path.exists(requirements_path):
print("Install: pip packages") print(f"Install: pip packages for '{repo_path}'")
with open(requirements_path, "r") as requirements_file: with open(requirements_path, "r") as requirements_file:
for line in requirements_file: for line in requirements_file:
package_name = line.strip() package_name = line.strip()
if package_name: if package_name and not is_installed(package_name):
install_cmd = [sys.executable, "-m", "pip", "install", package_name] install_cmd = [executable, "-m", "pip", "install", package_name]
process_wrap(install_cmd, repo_path) process_wrap(install_cmd, repo_path)
if os.path.exists(install_script_path): if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in processed_install:
print(f"Install: install script") processed_install.add(f'{repo_path}/install.py')
install_cmd = [sys.executable, "install.py"] print(f"Install: install script for '{repo_path}'")
install_cmd = [executable, "install.py"]
process_wrap(install_cmd, repo_path) process_wrap(install_cmd, repo_path)
@ -294,9 +333,12 @@ if os.path.exists(script_list_path):
execute_lazy_install_script(script[0], script[2]) execute_lazy_install_script(script[0], script[2])
elif os.path.exists(script[0]): elif os.path.exists(script[0]):
print(f"\n## ComfyUI-Manager: EXECUTE => {script[1:]}") if 'pip' in script[1:] and 'install' in script[1:] and is_installed(script[-1]):
continue
print(f"\n## ComfyUI-Manager: EXECUTE => {script[1:]}")
print(f"\n## Execute install/(de)activation script for '{script[0]}'") print(f"\n## Execute install/(de)activation script for '{script[0]}'")
exit_code = process_wrap(script[1:], script[0]) exit_code = process_wrap(script[1:], script[0])
if exit_code != 0: if exit_code != 0:
@ -314,3 +356,5 @@ if os.path.exists(script_list_path):
print("\n[ComfyUI-Manager] Startup script completed.") print("\n[ComfyUI-Manager] Startup script completed.")
print("#######################################################################\n") print("#######################################################################\n")
del processed_install
del pip_list