mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2025-12-17 02:12:58 +08:00
Merge branch 'ltdrdata:main' into dev
This commit is contained in:
commit
7cadf87eef
@ -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})")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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."
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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
|
||||||
Loading…
Reference in New Issue
Block a user