Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4760deaf9c | ||
|
|
0f7b9d02a0 | ||
|
|
adc86c7945 | ||
|
|
12969eda07 | ||
|
|
e07952455f | ||
|
|
4494230854 | ||
|
|
e8dd21c0c3 | ||
|
|
36ef1b2fd6 | ||
|
|
c3d2bd8ed1 | ||
|
|
da2b4be539 | ||
|
|
b5e11f85d5 | ||
|
|
9e1b2f8912 | ||
|
|
1e5f4b0267 | ||
|
|
4fedd03074 | ||
|
|
f6feaeea85 | ||
|
|
c8743c0ab7 | ||
|
|
3d80ed95ca | ||
|
|
0a28bfa9c2 | ||
|
|
6d771f77e6 | ||
|
|
717ca1bb18 |
@@ -3231,6 +3231,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "ComfyUI diffusers wrapper nodes for [a/HunyuanVideo](https://github.com/Tencent/HunyuanVideo)"
|
"description": "ComfyUI diffusers wrapper nodes for [a/HunyuanVideo](https://github.com/Tencent/HunyuanVideo)"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "kijai",
|
||||||
|
"title": "ComfyUI-StableXWrapper",
|
||||||
|
"reference": "https://github.com/kijai/ComfyUI-StableXWrapper",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI wrapper for [a/StableX normal](https://github.com/Stable-X/StableNormal)/[a/delight](https://github.com/Stable-X/StableDelight) models"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "hhhzzyang",
|
"author": "hhhzzyang",
|
||||||
"title": "Comfyui-Lama",
|
"title": "Comfyui-Lama",
|
||||||
@@ -4488,6 +4498,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Unofficial implementation of [a/UltraEdit](https://github.com/HaozheZhao/UltraEdit) (Diffusers) for ComfyUI"
|
"description": "Unofficial implementation of [a/UltraEdit](https://github.com/HaozheZhao/UltraEdit) (Diffusers) for ComfyUI"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "ZHO-ZHO-ZHO",
|
||||||
|
"title": "ComfyUI-DeepSeek-JanusPro",
|
||||||
|
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "kenjiqq",
|
"author": "kenjiqq",
|
||||||
"title": "qq-nodes-comfyui",
|
"title": "qq-nodes-comfyui",
|
||||||
@@ -5056,7 +5076,7 @@
|
|||||||
"https://github.com/glibsonoran/Plush-for-ComfyUI"
|
"https://github.com/glibsonoran/Plush-for-ComfyUI"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Nodes: Style Prompt, OAI Dall_e Image. Plush contains two OpenAI enabled nodes: Style Prompt: Takes your prompt and the art style you specify and generates a prompt from ChatGPT3 or 4 that Stable Diffusion can use to generate an image in that style. OAI Dall_e 3: Takes your prompt and parameters and produces a Dall_e3 image in ComfyUI."
|
"description": "A suite of nodes that includes: - Prompt enhancers/generators that employ remote AI services and local front-ends like: ChatGPT, Anthropic Claude, Groq, LM Studio, Oobabooga, etc. - An Image Generator that uses Dall_e 3. - An image metadata extractor that extracts seed, prompt, cfg, size, denoise, etc from existing AI generated images and photo metadata (from exif data) from jpeg photographs. A tagger that appends text (tags) to the beginning, end and/or middle of a text block. Image and text multiplexer utili"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "vienteck",
|
"author": "vienteck",
|
||||||
@@ -7532,6 +7552,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A custom node for ComfyUI that integrates DeepSeek's powerful chat and instruction API, enabling seamless AI interactions within your ComfyUI workflows."
|
"description": "A custom node for ComfyUI that integrates DeepSeek's powerful chat and instruction API, enabling seamless AI interactions within your ComfyUI workflows."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "ShmuelRonen",
|
||||||
|
"title": "ComfyUI Janus Pro Vision",
|
||||||
|
"reference": "https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI custom node extension that integrates the Janus-Pro-7B vision-language model from DeepSeek AI on your's local computer, enabling powerful image understanding and multi-turn conversation capabilities."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "redhottensors",
|
"author": "redhottensors",
|
||||||
"title": "ComfyUI-Prediction",
|
"title": "ComfyUI-Prediction",
|
||||||
@@ -7636,7 +7666,7 @@
|
|||||||
"https://github.com/1038lab/ComfyUI-WildPromptor"
|
"https://github.com/1038lab/ComfyUI-WildPromptor"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Create dynamic prompts with wildcard list."
|
"description": "WildPromptor simplifies prompt creation, organization, and customization in ComfyUI, turning chaotic workflows into an efficient, intuitive process."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "1038lab",
|
"author": "1038lab",
|
||||||
@@ -12300,6 +12330,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A custom node for ComfyUI that calculates CLIP and LPIPS similarity scores between two images."
|
"description": "A custom node for ComfyUI that calculates CLIP and LPIPS similarity scores between two images."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "risunobushi",
|
||||||
|
"title": "ComfyUI_DisplacementMapTools",
|
||||||
|
"reference": "https://github.com/risunobushi/ComfyUI_DisplacementMapTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Extract Displacement Map Node, Displace Logo"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "zohac",
|
"author": "zohac",
|
||||||
"title": "ComfyUI_ZC_DrawShape",
|
"title": "ComfyUI_ZC_DrawShape",
|
||||||
@@ -14603,10 +14643,10 @@
|
|||||||
{
|
{
|
||||||
"author": "RyanOnTheInside",
|
"author": "RyanOnTheInside",
|
||||||
"title": "Nodes for use with real-time applications of ComfyUI",
|
"title": "Nodes for use with real-time applications of ComfyUI",
|
||||||
"id": "realtimenodes",
|
"id": "comfyui_realtimenodes",
|
||||||
"reference": "https://github.com/ryanontheinside/ComfyUI_RealTimeNodes",
|
"reference": "https://github.com/ryanontheinside/ComfyUI_RealtimeNodes",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes"
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "These nodes are for real-time applications of ComfyUI."
|
"description": "These nodes are for real-time applications of ComfyUI."
|
||||||
@@ -14857,7 +14897,7 @@
|
|||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm"
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Auto prompt by LLM and LLM-Vision. (Trigger more details hiding in model)"
|
"description": "NODES: Auto-LLM-Text-Vision, Auto-LLM-Text, Auto-LLM-Vision"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "xlinx",
|
"author": "xlinx",
|
||||||
@@ -15428,7 +15468,7 @@
|
|||||||
"https://github.com/SeanScripts/ComfyUI-PixtralLlamaMolmoVision"
|
"https://github.com/SeanScripts/ComfyUI-PixtralLlamaMolmoVision"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "For loading and running Pixtral, Llama 3.2 Vision, and Molmo models. Put models in the models/LLM folder.\n[w/Renamed from ComfyUI-PixtralLlamaVision. Please reinstall.]"
|
"description": "For loading and running Pixtral, Llama 3.2 Vision, and Molmo models. Put models in the models/LLM folder."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "ExterminanzHS",
|
"author": "ExterminanzHS",
|
||||||
@@ -19887,14 +19927,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "asutermo",
|
"author": "asutermo",
|
||||||
"title": "Try Off w/ Flux and CatVTON",
|
"title": "ComfyUI-Flux-TryOff",
|
||||||
"id": "tryoffflux",
|
"id": "tryoffflux",
|
||||||
"reference": "https://github.com/asutermo/ComfyUI-Flux-TryOff",
|
"reference": "https://github.com/asutermo/ComfyUI-Flux-TryOff",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/asutermo/ComfyUI-Flux-TryOff"
|
"https://github.com/asutermo/ComfyUI-Flux-TryOff"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This is a set of nodes to make it possible to extract garments/clothing from models to apply elsewhere."
|
"description": "Try Off for ComfyUI using Flux and CatVTON."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "bugltd",
|
"author": "bugltd",
|
||||||
@@ -20144,13 +20184,13 @@
|
|||||||
{
|
{
|
||||||
"author": "ProGamerGov",
|
"author": "ProGamerGov",
|
||||||
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
||||||
"id": "pytorch360convert",
|
"id": "comfyui-pytorch360convert",
|
||||||
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A collection of custom nodes for working and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as 'VR photography', 'image sphere', and 360 pano."
|
"description": "A collection of custom nodes for working with and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "burnsbert",
|
"author": "burnsbert",
|
||||||
@@ -20273,6 +20313,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "gmorks",
|
||||||
|
"title": "ComfyUI Animagine prompt",
|
||||||
|
"reference": "https://github.com/gmorks/ComfyUI-Animagine-Prompt",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Comfy UI node to prompt build for [a/https://huggingface.co/cagliostrolab/animagine-xl-4.0](https://huggingface.co/cagliostrolab/animagine-xl-4.0) model"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "jinanlongen",
|
"author": "jinanlongen",
|
||||||
"title": "ComfyUI Prompt Expander Node",
|
"title": "ComfyUI Prompt Expander Node",
|
||||||
@@ -20293,6 +20343,28 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A ComfyUI node that integrates DINO-X API for object detection and segmentation. This node allows you to detect and segment objects in images using text prompts."
|
"description": "A ComfyUI node that integrates DINO-X API for object detection and segmentation. This node allows you to detect and segment objects in images using text prompts."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "checkbins",
|
||||||
|
"title": "checkbin-comfy",
|
||||||
|
"id": "checkbin",
|
||||||
|
"reference": "https://github.com/checkbins/checkbin-comfy",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/checkbins/checkbin-comfy"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "These nodes allow you to make Checkbin comparisons."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "GHOSTLXH",
|
||||||
|
"title": "ComfyUI-Counternodes",
|
||||||
|
"reference": "https://github.com/GHOSTLXH/ComfyUI-Counternodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node group contains a series of ComfyUI nodes with built-in counters and specific output results based on the counter's output, aimed at implementing folder traversal functionality in the ComfyUI frontend. For specific examples, please refer to the sample workflow. Of course, you can also use your imagination to create other interesting things."
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -20770,6 +20842,17 @@
|
|||||||
"install_type": "copy",
|
"install_type": "copy",
|
||||||
"description": "NODES: OverrideLoadedDiffusionDevice.\nI happen to have two graphics cards, and I want to load models into another graphics card in Comfyui, so I designed this small node."
|
"description": "NODES: OverrideLoadedDiffusionDevice.\nI happen to have two graphics cards, and I want to load models into another graphics card in Comfyui, so I designed this small node."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "Kayarte",
|
||||||
|
"title": "GeoNodes",
|
||||||
|
"reference": "https://github.com/Kayarte/GeoNodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py"
|
||||||
|
],
|
||||||
|
"install_type": "copy",
|
||||||
|
"description": "GIS Processing Nodes for ComfyUI"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2164,7 +2164,11 @@
|
|||||||
"BriaEraser",
|
"BriaEraser",
|
||||||
"BriaGenFill",
|
"BriaGenFill",
|
||||||
"BriaTailoredGen",
|
"BriaTailoredGen",
|
||||||
|
"ImageExpansionNode",
|
||||||
"ReimagineNode",
|
"ReimagineNode",
|
||||||
|
"RemoveForegroundNode",
|
||||||
|
"ReplaceBgNode",
|
||||||
|
"RmbgNode",
|
||||||
"ShotByImageNode",
|
"ShotByImageNode",
|
||||||
"ShotByTextNode",
|
"ShotByTextNode",
|
||||||
"TailoredModelInfoNode",
|
"TailoredModelInfoNode",
|
||||||
@@ -2375,7 +2379,9 @@
|
|||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
|
"ClownsharKSamplerGuide_Beta",
|
||||||
"ClownsharKSamplerGuides",
|
"ClownsharKSamplerGuides",
|
||||||
|
"ClownsharKSamplerGuides_Beta",
|
||||||
"ClownsharKSamplerOptions",
|
"ClownsharKSamplerOptions",
|
||||||
"ClownsharKSamplerOptions_SDE_Noise",
|
"ClownsharKSamplerOptions_SDE_Noise",
|
||||||
"ClownsharkSamplerOptions_FrameWeights",
|
"ClownsharkSamplerOptions_FrameWeights",
|
||||||
@@ -2986,6 +2992,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
"FluxPro11_TOGETHER",
|
||||||
"FluxPro_TOGETHER",
|
"FluxPro_TOGETHER",
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
@@ -3854,6 +3861,19 @@
|
|||||||
"title_aux": "ComfyUI-SD3-Powerlab"
|
"title_aux": "ComfyUI-SD3-Powerlab"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes": [
|
||||||
|
[
|
||||||
|
"AlternatingOutput",
|
||||||
|
"AlternatingOutputB",
|
||||||
|
"ImageCounter",
|
||||||
|
"IntervalCounter",
|
||||||
|
"IntervalCounterB",
|
||||||
|
"LoadPromptFromTXT"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
||||||
[
|
[
|
||||||
"ConcatenateString",
|
"ConcatenateString",
|
||||||
@@ -4694,7 +4714,9 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
||||||
[
|
[
|
||||||
"LatentNormalizedLanczosResize"
|
"LatentNormalizedLanczosResize",
|
||||||
|
"RescaledPAG",
|
||||||
|
"RescaledSEG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Comfy Latent Tools"
|
"title_aux": "Comfy Latent Tools"
|
||||||
@@ -5023,6 +5045,14 @@
|
|||||||
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py": [
|
||||||
|
[
|
||||||
|
"GISDetectionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "GeoNodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
||||||
[
|
[
|
||||||
"list_filter_FilterImageListByIndexList",
|
"list_filter_FilterImageListByIndexList",
|
||||||
@@ -5165,6 +5195,7 @@
|
|||||||
"ADE_AdjustWeightIndivAttnAdd",
|
"ADE_AdjustWeightIndivAttnAdd",
|
||||||
"ADE_AdjustWeightIndivAttnMult",
|
"ADE_AdjustWeightIndivAttnMult",
|
||||||
"ADE_AdjustWeightIndivMult",
|
"ADE_AdjustWeightIndivMult",
|
||||||
|
"ADE_AncestralOptions",
|
||||||
"ADE_AnimateDiffCombine",
|
"ADE_AnimateDiffCombine",
|
||||||
"ADE_AnimateDiffKeyframe",
|
"ADE_AnimateDiffKeyframe",
|
||||||
"ADE_AnimateDiffLoRALoader",
|
"ADE_AnimateDiffLoRALoader",
|
||||||
@@ -5959,7 +5990,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
||||||
[
|
[
|
||||||
"SecureAPI-SecureAPI"
|
"SecureAPI-SecureAPI",
|
||||||
|
"SecureAPI-SecureAPI-AWS"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Secure API Call"
|
"title_aux": "ComfyUI Secure API Call"
|
||||||
@@ -6291,6 +6323,7 @@
|
|||||||
"DJZDatamoshV2",
|
"DJZDatamoshV2",
|
||||||
"DatasetWordcloud",
|
"DatasetWordcloud",
|
||||||
"DeadPixelEffect",
|
"DeadPixelEffect",
|
||||||
|
"DepthBasedPixelization",
|
||||||
"DinskyPlus",
|
"DinskyPlus",
|
||||||
"DinskyPlusV2",
|
"DinskyPlusV2",
|
||||||
"DjzDatabendingV1",
|
"DjzDatabendingV1",
|
||||||
@@ -6339,11 +6372,13 @@
|
|||||||
"RetroVideoText",
|
"RetroVideoText",
|
||||||
"ScreensaverGenerator",
|
"ScreensaverGenerator",
|
||||||
"ScreensaverGeneratorV2",
|
"ScreensaverGeneratorV2",
|
||||||
|
"ScreensaverGeneratorV3",
|
||||||
"SequentialNumberGenerator",
|
"SequentialNumberGenerator",
|
||||||
"StringChaos",
|
"StringChaos",
|
||||||
"StringWeights",
|
"StringWeights",
|
||||||
"Technicolor3Strip_v1",
|
"Technicolor3Strip_v1",
|
||||||
"Technicolor3Strip_v2",
|
"Technicolor3Strip_v2",
|
||||||
|
"ThinkSeeker",
|
||||||
"ThreeToneStyler",
|
"ThreeToneStyler",
|
||||||
"TrianglesPlus",
|
"TrianglesPlus",
|
||||||
"TrianglesPlusV2",
|
"TrianglesPlusV2",
|
||||||
@@ -6364,6 +6399,7 @@
|
|||||||
"VideoMazeV1",
|
"VideoMazeV1",
|
||||||
"VideoMazeV2",
|
"VideoMazeV2",
|
||||||
"VideoNoiseFactory",
|
"VideoNoiseFactory",
|
||||||
|
"VideoPyramidV1",
|
||||||
"VideoRingPainter",
|
"VideoRingPainter",
|
||||||
"VideoTemperatureV1",
|
"VideoTemperatureV1",
|
||||||
"VideoTimecode",
|
"VideoTimecode",
|
||||||
@@ -7905,7 +7941,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -7947,6 +7984,15 @@
|
|||||||
"title_aux": "ComfyUI-ImageMotionGuider"
|
"title_aux": "ComfyUI-ImageMotionGuider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision": [
|
||||||
|
[
|
||||||
|
"UnifiedVisionAnalyzer",
|
||||||
|
"VisionModelLoader"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Janus Pro Vision"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||||
[
|
[
|
||||||
"D_LatentSyncNode",
|
"D_LatentSyncNode",
|
||||||
@@ -8407,6 +8453,7 @@
|
|||||||
"StarFiveWildcards",
|
"StarFiveWildcards",
|
||||||
"StarImageSwitch",
|
"StarImageSwitch",
|
||||||
"StarTextFilter",
|
"StarTextFilter",
|
||||||
|
"StarTextInput",
|
||||||
"Starupscale"
|
"Starupscale"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -8948,6 +8995,7 @@
|
|||||||
"tri3d-skin-feathered-padded-mask",
|
"tri3d-skin-feathered-padded-mask",
|
||||||
"tri3d-swap-pixels",
|
"tri3d-swap-pixels",
|
||||||
"tri3d_H_Stack_Images",
|
"tri3d_H_Stack_Images",
|
||||||
|
"tri3d_Image_extend",
|
||||||
"tri3d_NSFWFilter",
|
"tri3d_NSFWFilter",
|
||||||
"tri3d_SaveImage_absolute",
|
"tri3d_SaveImage_absolute",
|
||||||
"tri3d_SaveText_absolute",
|
"tri3d_SaveText_absolute",
|
||||||
@@ -9461,6 +9509,7 @@
|
|||||||
"VrchAudioGenresNode",
|
"VrchAudioGenresNode",
|
||||||
"VrchAudioRecorderNode",
|
"VrchAudioRecorderNode",
|
||||||
"VrchAudioSaverNode",
|
"VrchAudioSaverNode",
|
||||||
|
"VrchAudioWebViewerNode",
|
||||||
"VrchBooleanKeyControlNode",
|
"VrchBooleanKeyControlNode",
|
||||||
"VrchChannelOSCControlNode",
|
"VrchChannelOSCControlNode",
|
||||||
"VrchChannelX4OSCControlNode",
|
"VrchChannelX4OSCControlNode",
|
||||||
@@ -10176,6 +10225,16 @@
|
|||||||
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro": [
|
||||||
|
[
|
||||||
|
"Janus_ImageGeneration",
|
||||||
|
"Janus_ModelLoader",
|
||||||
|
"Janus_MultimodalUnderstanding"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
||||||
[
|
[
|
||||||
"DepthFM_Literative_Zho",
|
"DepthFM_Literative_Zho",
|
||||||
@@ -10664,6 +10723,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
|
"ImageQueueProcessor",
|
||||||
"TextBatch",
|
"TextBatch",
|
||||||
"TextQueueProcessor",
|
"TextQueueProcessor",
|
||||||
"TextSplitCounter"
|
"TextSplitCounter"
|
||||||
@@ -11300,8 +11360,10 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/asagi4/comfyui-utility-nodes": [
|
"https://github.com/asagi4/comfyui-utility-nodes": [
|
||||||
[
|
[
|
||||||
|
"MUConditioningCutoff",
|
||||||
"MUForceCacheClear",
|
"MUForceCacheClear",
|
||||||
"MUJinjaRender",
|
"MUJinjaRender",
|
||||||
|
"MURemoveControlNet",
|
||||||
"MUReplaceModelWeights",
|
"MUReplaceModelWeights",
|
||||||
"MUSimpleWildcard"
|
"MUSimpleWildcard"
|
||||||
],
|
],
|
||||||
@@ -11313,10 +11375,11 @@
|
|||||||
[
|
[
|
||||||
"TryOffFluxFillModelNode",
|
"TryOffFluxFillModelNode",
|
||||||
"TryOffModelNode",
|
"TryOffModelNode",
|
||||||
|
"TryOffQuantizerNode",
|
||||||
"TryOffRunNode"
|
"TryOffRunNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Try Off w/ Flux and CatVTON"
|
"title_aux": "ComfyUI-Flux-TryOff"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/aszc-dev/ComfyUI-CoreMLSuite": [
|
"https://github.com/aszc-dev/ComfyUI-CoreMLSuite": [
|
||||||
@@ -11630,6 +11693,7 @@
|
|||||||
"Range Float",
|
"Range Float",
|
||||||
"Range Integer",
|
"Range Integer",
|
||||||
"Ratio Advanced",
|
"Ratio Advanced",
|
||||||
|
"RemoveTextBetween",
|
||||||
"Resize Image for SDXL",
|
"Resize Image for SDXL",
|
||||||
"SD3TextConditioningWithOptionsOnePrompt",
|
"SD3TextConditioningWithOptionsOnePrompt",
|
||||||
"SRFloatPromptInput",
|
"SRFloatPromptInput",
|
||||||
@@ -12149,9 +12213,13 @@
|
|||||||
"Input: Integer (lab)",
|
"Input: Integer (lab)",
|
||||||
"Input: Multiline (lab)",
|
"Input: Multiline (lab)",
|
||||||
"Input: String (lab)",
|
"Input: String (lab)",
|
||||||
|
"List: Checkpoints (lab)",
|
||||||
"List: Limit (lab)",
|
"List: Limit (lab)",
|
||||||
|
"List: LoRAs (lab)",
|
||||||
"List: Merge (lab)",
|
"List: Merge (lab)",
|
||||||
"List: Random Seeds (lab)",
|
"List: Random Seeds (lab)",
|
||||||
|
"List: Samplers (lab)",
|
||||||
|
"List: Schedulers (lab)",
|
||||||
"List: from Elements (lab)",
|
"List: from Elements (lab)",
|
||||||
"List: from File (backend) (lab)",
|
"List: from File (backend) (lab)",
|
||||||
"List: from Multiline (lab)",
|
"List: from Multiline (lab)",
|
||||||
@@ -12875,6 +12943,7 @@
|
|||||||
"chaosaiart_controlnet_weidgth",
|
"chaosaiart_controlnet_weidgth",
|
||||||
"chaosaiart_convert",
|
"chaosaiart_convert",
|
||||||
"chaosaiart_convert_Prompt",
|
"chaosaiart_convert_Prompt",
|
||||||
|
"chaosaiart_deepseek_fix",
|
||||||
"chaosaiart_forPreview",
|
"chaosaiart_forPreview",
|
||||||
"chaosaiart_image_loop",
|
"chaosaiart_image_loop",
|
||||||
"chaosaiart_img2gif",
|
"chaosaiart_img2gif",
|
||||||
@@ -12898,6 +12967,19 @@
|
|||||||
"title_aux": "Chaosaiart-Nodes"
|
"title_aux": "Chaosaiart-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/checkbins/checkbin-comfy": [
|
||||||
|
[
|
||||||
|
"Checkbin Get Image Bin",
|
||||||
|
"Checkbin Get String Bin",
|
||||||
|
"Checkbin Save Image Bin",
|
||||||
|
"Checkbin Save String Bin",
|
||||||
|
"Checkbin Start Run",
|
||||||
|
"Checkbin Submit Bin"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "checkbin-comfy"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
||||||
[
|
[
|
||||||
"CombineStrings",
|
"CombineStrings",
|
||||||
@@ -15357,10 +15439,14 @@
|
|||||||
"RecoursePolar",
|
"RecoursePolar",
|
||||||
"RecourseStrings",
|
"RecourseStrings",
|
||||||
"SelInClip",
|
"SelInClip",
|
||||||
|
"SelInFloat",
|
||||||
"SelInGuider",
|
"SelInGuider",
|
||||||
|
"SelInInt",
|
||||||
"SelInLatent",
|
"SelInLatent",
|
||||||
"SelInModel",
|
"SelInModel",
|
||||||
"SelInPolar",
|
"SelInPolar",
|
||||||
|
"SelInSampler",
|
||||||
|
"SelInSigmas",
|
||||||
"SelInVae",
|
"SelInVae",
|
||||||
"SelOutCLIP",
|
"SelOutCLIP",
|
||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
@@ -15624,6 +15710,7 @@
|
|||||||
[
|
[
|
||||||
"FL_API_Base64_ImageLoader",
|
"FL_API_Base64_ImageLoader",
|
||||||
"FL_API_ImageSaver",
|
"FL_API_ImageSaver",
|
||||||
|
"FL_AnimeLineExtractor",
|
||||||
"FL_ApplyMask",
|
"FL_ApplyMask",
|
||||||
"FL_Ascii",
|
"FL_Ascii",
|
||||||
"FL_BatchAlign",
|
"FL_BatchAlign",
|
||||||
@@ -15640,6 +15727,7 @@
|
|||||||
"FL_GPT_Vision",
|
"FL_GPT_Vision",
|
||||||
"FL_Glitch",
|
"FL_Glitch",
|
||||||
"FL_GoogleDriveDownloader",
|
"FL_GoogleDriveDownloader",
|
||||||
|
"FL_GoogleDriveImageDownloader",
|
||||||
"FL_GradGenerator",
|
"FL_GradGenerator",
|
||||||
"FL_HFHubModelUploader",
|
"FL_HFHubModelUploader",
|
||||||
"FL_HF_Character",
|
"FL_HF_Character",
|
||||||
@@ -16212,6 +16300,7 @@
|
|||||||
"Random Image Output",
|
"Random Image Output",
|
||||||
"Random Mixer",
|
"Random Mixer",
|
||||||
"Random Output",
|
"Random Output",
|
||||||
|
"Remove Text",
|
||||||
"SaveText|plush",
|
"SaveText|plush",
|
||||||
"Tagger",
|
"Tagger",
|
||||||
"Text (Any)",
|
"Text (Any)",
|
||||||
@@ -16257,6 +16346,14 @@
|
|||||||
"title_aux": "String Converter"
|
"title_aux": "String Converter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
|
||||||
|
[
|
||||||
|
"AnimaginePrompt"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Animagine prompt"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
||||||
[
|
[
|
||||||
"PreviewImageWithDiscord"
|
"PreviewImageWithDiscord"
|
||||||
@@ -19468,6 +19565,16 @@
|
|||||||
"title_aux": "ComfyUI-SUPIR"
|
"title_aux": "ComfyUI-SUPIR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper": [
|
||||||
|
[
|
||||||
|
"DifferenceExtractorNode",
|
||||||
|
"DownloadAndLoadStableXModel",
|
||||||
|
"StableXProcessImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-StableXWrapper"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/kijai/ComfyUI-depth-fm": [
|
"https://github.com/kijai/ComfyUI-depth-fm": [
|
||||||
[
|
[
|
||||||
"Depth_fm"
|
"Depth_fm"
|
||||||
@@ -21707,7 +21814,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -21715,7 +21821,8 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
@@ -22409,6 +22516,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nilor-corp/nilor-nodes": [
|
"https://github.com/nilor-corp/nilor-nodes": [
|
||||||
[
|
[
|
||||||
|
"Nilor Categorize String",
|
||||||
"Nilor Count Images In Directory",
|
"Nilor Count Images In Directory",
|
||||||
"Nilor Int To List Of Bools",
|
"Nilor Int To List Of Bools",
|
||||||
"Nilor Interpolated Float List",
|
"Nilor Interpolated Float List",
|
||||||
@@ -22574,7 +22682,8 @@
|
|||||||
"LayeredInfiniteZoom",
|
"LayeredInfiniteZoom",
|
||||||
"Replicate flux 1.1 pro ultra",
|
"Replicate flux 1.1 pro ultra",
|
||||||
"ReplicateAPI_flux_1_1_pro_ultra",
|
"ReplicateAPI_flux_1_1_pro_ultra",
|
||||||
"ReplicateAPI_flux_fill_pro"
|
"ReplicateAPI_flux_fill_pro",
|
||||||
|
"WebViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Node_Fun_ComfyUI"
|
"title_aux": "Node_Fun_ComfyUI"
|
||||||
@@ -23147,7 +23256,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
||||||
[
|
[
|
||||||
"DeviceSelectorMultiGPU"
|
"DeviceSelectorMultiGPU",
|
||||||
|
"HunyuanVideoEmbeddingsAdapter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-MultiGPU"
|
"title_aux": "ComfyUI-MultiGPU"
|
||||||
@@ -23679,6 +23789,15 @@
|
|||||||
"title_aux": "ComfyUI-Similarity-Score"
|
"title_aux": "ComfyUI-Similarity-Score"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools": [
|
||||||
|
[
|
||||||
|
"DisplaceLogo",
|
||||||
|
"ExtractDisplacementMap"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_DisplacementMapTools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
||||||
[
|
[
|
||||||
"FrequencyCombination",
|
"FrequencyCombination",
|
||||||
@@ -23939,7 +24058,7 @@
|
|||||||
"title_aux": "ComfyUI_ProfilerX"
|
"title_aux": "ComfyUI_ProfilerX"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
"DeltaControl",
|
||||||
@@ -23951,13 +24070,17 @@
|
|||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
"IntervalControl",
|
||||||
|
"LazyCondition",
|
||||||
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"SimilarityFilter",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TAESDVaeDecode",
|
"TextRenderer",
|
||||||
"TAESDVaeEncode"
|
"YOLOSimilarityCompare"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
||||||
@@ -24156,12 +24279,27 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
||||||
[
|
[
|
||||||
"FlipStreamLoader",
|
"FlipStreamBatchPrompt",
|
||||||
"FlipStreamOption",
|
"FlipStreamFileSelect_AnimateDiffModel",
|
||||||
"FlipStreamPrompt",
|
"FlipStreamFileSelect_Checkpoints",
|
||||||
"FlipStreamSource",
|
"FlipStreamFileSelect_TensorRT",
|
||||||
"FlipStreamSwitchVFI",
|
"FlipStreamFileSelect_VAE",
|
||||||
"FlipStreamUpdate",
|
"FlipStreamFileSelect_VideoSrc",
|
||||||
|
"FlipStreamFilmVfi",
|
||||||
|
"FlipStreamGetParam",
|
||||||
|
"FlipStreamImageSize",
|
||||||
|
"FlipStreamInputBox",
|
||||||
|
"FlipStreamPreviewBox",
|
||||||
|
"FlipStreamSegMask",
|
||||||
|
"FlipStreamSelectBox_Samplers",
|
||||||
|
"FlipStreamSelectBox_Scheduler",
|
||||||
|
"FlipStreamSetParam",
|
||||||
|
"FlipStreamSlider",
|
||||||
|
"FlipStreamSwitchImage",
|
||||||
|
"FlipStreamSwitchLatent",
|
||||||
|
"FlipStreamTextBox",
|
||||||
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25229,9 +25367,12 @@
|
|||||||
[
|
[
|
||||||
"LoadEXR",
|
"LoadEXR",
|
||||||
"LoadEXRFrames",
|
"LoadEXRFrames",
|
||||||
|
"LoadImageAndPrompt",
|
||||||
"LoadLatentEXR",
|
"LoadLatentEXR",
|
||||||
"SaveEXR",
|
"SaveEXR",
|
||||||
"SaveEXRFrames",
|
"SaveEXRFrames",
|
||||||
|
"SaveImageAndPromptExact",
|
||||||
|
"SaveImageAndPromptIncremental",
|
||||||
"SaveLatentEXR",
|
"SaveLatentEXR",
|
||||||
"SaveTiff"
|
"SaveTiff"
|
||||||
],
|
],
|
||||||
@@ -26665,7 +26806,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
||||||
[
|
[
|
||||||
"LorasEndpoint"
|
"LoRAGateway"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Lora-Manager"
|
"title_aux": "ComfyUI-Lora-Manager"
|
||||||
@@ -27208,6 +27349,7 @@
|
|||||||
[
|
[
|
||||||
"ImageAnalyzer",
|
"ImageAnalyzer",
|
||||||
"JanusChatAnalyzer",
|
"JanusChatAnalyzer",
|
||||||
|
"JanusImageGenerator",
|
||||||
"JanusProLoader"
|
"JanusProLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
4620
github-stats.json
4620
github-stats.json
File diff suppressed because it is too large
Load Diff
@@ -41,7 +41,7 @@ import manager_downloader
|
|||||||
from node_package import InstalledNodePackage
|
from node_package import InstalledNodePackage
|
||||||
|
|
||||||
|
|
||||||
version_code = [3, 9, 5]
|
version_code = [3, 12]
|
||||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import manager_core as core
|
|||||||
import manager_util
|
import manager_util
|
||||||
import cm_global
|
import cm_global
|
||||||
import logging
|
import logging
|
||||||
|
import asyncio
|
||||||
|
import queue
|
||||||
|
|
||||||
|
|
||||||
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
|
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
|
||||||
@@ -31,7 +33,6 @@ SECURITY_MESSAGE_GENERAL = "ERROR: This installation is not allowed in this secu
|
|||||||
|
|
||||||
routes = PromptServer.instance.routes
|
routes = PromptServer.instance.routes
|
||||||
|
|
||||||
|
|
||||||
def handle_stream(stream, prefix):
|
def handle_stream(stream, prefix):
|
||||||
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
||||||
for msg in stream:
|
for msg in stream:
|
||||||
@@ -54,6 +55,27 @@ import latent_preview
|
|||||||
is_local_mode = args.listen.startswith('127.') or args.listen.startswith('local.')
|
is_local_mode = args.listen.startswith('127.') or args.listen.startswith('local.')
|
||||||
|
|
||||||
|
|
||||||
|
model_dir_name_map = {
|
||||||
|
"checkpoints": "checkpoints",
|
||||||
|
"checkpoint": "checkpoints",
|
||||||
|
"unclip": "checkpoints",
|
||||||
|
"text_encoders": "text_encoders",
|
||||||
|
"clip": "text_encoders",
|
||||||
|
"vae": "vae",
|
||||||
|
"lora": "loras",
|
||||||
|
"t2i-adapter": "controlnet",
|
||||||
|
"t2i-style": "controlnet",
|
||||||
|
"controlnet": "controlnet",
|
||||||
|
"clip_vision": "clip_vision",
|
||||||
|
"gligen": "gligen",
|
||||||
|
"upscale": "upscale_models",
|
||||||
|
"embedding": "embeddings",
|
||||||
|
"embeddings": "embeddings",
|
||||||
|
"unet": "diffusion_models",
|
||||||
|
"diffusion_model": "diffusion_models",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def is_allowed_security_level(level):
|
def is_allowed_security_level(level):
|
||||||
if level == 'block':
|
if level == 'block':
|
||||||
return False
|
return False
|
||||||
@@ -274,43 +296,9 @@ def get_model_dir(data, show_log=False):
|
|||||||
else:
|
else:
|
||||||
base_model = os.path.join(models_base, data['save_path'])
|
base_model = os.path.join(models_base, data['save_path'])
|
||||||
else:
|
else:
|
||||||
model_type = data['type']
|
model_dir_name = model_dir_name_map.get(data['type'].lower())
|
||||||
if model_type == "checkpoints" or model_type == "checkpoint":
|
if model_dir_name is not None:
|
||||||
base_model = folder_paths.folder_names_and_paths["checkpoints"][0][0]
|
base_model = folder_paths.folder_names_and_paths[model_dir_name][0][0]
|
||||||
elif model_type == "unclip":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["checkpoints"][0][0]
|
|
||||||
elif model_type == "clip" or model_type == "text_encoders":
|
|
||||||
if folder_paths.folder_names_and_paths.get("text_encoders"):
|
|
||||||
base_model = folder_paths.folder_names_and_paths["text_encoders"][0][0]
|
|
||||||
else:
|
|
||||||
if show_log:
|
|
||||||
logging.info("[ComfyUI-Manager] Your ComfyUI is outdated version.")
|
|
||||||
base_model = folder_paths.folder_names_and_paths["clip"][0][0] # outdated version
|
|
||||||
elif model_type == "VAE":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["vae"][0][0]
|
|
||||||
elif model_type == "lora":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["loras"][0][0]
|
|
||||||
elif model_type == "T2I-Adapter":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["controlnet"][0][0]
|
|
||||||
elif model_type == "T2I-Style":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["controlnet"][0][0]
|
|
||||||
elif model_type == "controlnet":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["controlnet"][0][0]
|
|
||||||
elif model_type == "clip_vision":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["clip_vision"][0][0]
|
|
||||||
elif model_type == "gligen":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["gligen"][0][0]
|
|
||||||
elif model_type == "upscale":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["upscale_models"][0][0]
|
|
||||||
elif model_type == "embeddings":
|
|
||||||
base_model = folder_paths.folder_names_and_paths["embeddings"][0][0]
|
|
||||||
elif model_type == "unet" or model_type == "diffusion_model":
|
|
||||||
if folder_paths.folder_names_and_paths.get("diffusion_models"):
|
|
||||||
base_model = folder_paths.folder_names_and_paths["diffusion_models"][0][1]
|
|
||||||
else:
|
|
||||||
if show_log:
|
|
||||||
logging.info("[ComfyUI-Manager] Your ComfyUI is outdated version.")
|
|
||||||
base_model = folder_paths.folder_names_and_paths["unet"][0][0] # outdated version
|
|
||||||
else:
|
else:
|
||||||
base_model = os.path.join(models_base, "etc")
|
base_model = os.path.join(models_base, "etc")
|
||||||
|
|
||||||
@@ -381,6 +369,147 @@ def nickname_filter(json_obj):
|
|||||||
return json_obj
|
return json_obj
|
||||||
|
|
||||||
|
|
||||||
|
install_queue = queue.Queue()
|
||||||
|
install_result = {}
|
||||||
|
|
||||||
|
async def install_worker():
|
||||||
|
global install_result
|
||||||
|
global install_queue
|
||||||
|
|
||||||
|
async def do_install(item):
|
||||||
|
ui_id, node_spec_str, channel, mode, skip_post_install = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
node_spec = core.unified_manager.resolve_node_spec(node_spec_str)
|
||||||
|
|
||||||
|
if node_spec is None:
|
||||||
|
logging.error(f"Cannot resolve install target: '{node_spec_str}'")
|
||||||
|
install_result[ui_id] = f"Cannot resolve install target: '{node_spec_str}'"
|
||||||
|
return
|
||||||
|
|
||||||
|
node_name, version_spec, is_specified = node_spec
|
||||||
|
res = await core.unified_manager.install_by_id(node_name, version_spec, channel, mode, return_postinstall=skip_post_install)
|
||||||
|
# discard post install if skip_post_install mode
|
||||||
|
|
||||||
|
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
|
install_result[ui_id] = res.msg
|
||||||
|
return
|
||||||
|
|
||||||
|
elif not res.result:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
|
install_result[ui_id] = res.msg
|
||||||
|
return
|
||||||
|
|
||||||
|
install_result[ui_id] = 'success'
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
install_result[ui_id] = f"Installation failed:\n{node_spec_str}"
|
||||||
|
|
||||||
|
async def do_update(item):
|
||||||
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_update(node_name, node_ver)
|
||||||
|
|
||||||
|
manager_util.clear_pip_cache()
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
install_result[ui_id] = 'success'
|
||||||
|
return
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
||||||
|
install_result[ui_id] = f"An error occurred while updating '{node_name}'."
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
install_result[ui_id] = f"An error occurred while updating '{node_name}'."
|
||||||
|
|
||||||
|
async def do_fix(item):
|
||||||
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_fix(node_name, node_ver)
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
install_result[ui_id] = 'success'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
logging.error(res.msg)
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
||||||
|
install_result[ui_id] = f"An error occurred while fixing '{node_name}@{node_ver}'."
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
install_result[ui_id] = f"An error occurred while fixing '{node_name}@{node_ver}'."
|
||||||
|
|
||||||
|
async def do_uninstall(item):
|
||||||
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
install_result[ui_id] = 'success'
|
||||||
|
return
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
||||||
|
install_result[ui_id] = f"An error occurred while uninstalling '{node_name}'."
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
install_result[ui_id] = f"An error occurred while uninstalling '{node_name}'."
|
||||||
|
|
||||||
|
async def do_disable(item):
|
||||||
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
||||||
|
|
||||||
|
if res:
|
||||||
|
install_result[ui_id] = 'success'
|
||||||
|
return
|
||||||
|
|
||||||
|
install_result[ui_id] = f"Failed to disable: '{node_name}'"
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
install_result[ui_id] = f"Failed to disable: '{node_name}'"
|
||||||
|
|
||||||
|
stats = {}
|
||||||
|
|
||||||
|
while True:
|
||||||
|
done_count = len(install_result)
|
||||||
|
total_count = done_count + install_queue.qsize()
|
||||||
|
|
||||||
|
if install_queue.empty():
|
||||||
|
logging.info(f"\n[ComfyUI-Manager] Queued works are completed.\n{stats}")
|
||||||
|
|
||||||
|
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
||||||
|
PromptServer.instance.send_sync("cm-install-status",
|
||||||
|
{'status': 'done', 'result': install_result,
|
||||||
|
'total_count': total_count, 'done_count': done_count})
|
||||||
|
install_result = {}
|
||||||
|
install_queue = queue.Queue()
|
||||||
|
return
|
||||||
|
|
||||||
|
kind, item = install_queue.get()
|
||||||
|
|
||||||
|
if kind == 'install':
|
||||||
|
await do_install(item)
|
||||||
|
elif kind == 'update':
|
||||||
|
await do_update(item)
|
||||||
|
elif kind == 'fix':
|
||||||
|
await do_fix(item)
|
||||||
|
elif kind == 'uninstall':
|
||||||
|
await do_uninstall(item)
|
||||||
|
elif kind == 'disable':
|
||||||
|
await do_disable(item)
|
||||||
|
|
||||||
|
stats[kind] = stats.get(kind, 0) + 1
|
||||||
|
|
||||||
|
PromptServer.instance.send_sync("cm-install-status",
|
||||||
|
{'status': 'in_progress', 'target': item[0],
|
||||||
|
'total_count': total_count, 'done_count': done_count})
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/customnode/getmappings")
|
@routes.get("/customnode/getmappings")
|
||||||
async def fetch_customnode_mappings(request):
|
async def fetch_customnode_mappings(request):
|
||||||
"""
|
"""
|
||||||
@@ -605,25 +734,50 @@ async def fetch_customnode_alternatives(request):
|
|||||||
|
|
||||||
|
|
||||||
def check_model_installed(json_obj):
|
def check_model_installed(json_obj):
|
||||||
def process_model(item):
|
def is_exists(model_dir_name, file_name):
|
||||||
model_path = get_model_path(item, False)
|
dirs = folder_paths.get_folder_paths(model_dir_name)
|
||||||
item['installed'] = 'None'
|
for x in dirs:
|
||||||
|
if os.path.exists(os.path.join(x, file_name)):
|
||||||
|
return True
|
||||||
|
|
||||||
if model_path is not None:
|
return False
|
||||||
if model_path.endswith('.zip'):
|
|
||||||
if os.path.exists(model_path[:-4]):
|
|
||||||
item['installed'] = 'True'
|
model_dir_names = ['checkpoints', 'loras', 'vae', 'text_encoders', 'diffusion_models', 'clip_vision', 'embeddings',
|
||||||
else:
|
'diffusers', 'vae_approx', 'controlnet', 'gligen', 'upscale_models', 'hypernetworks',
|
||||||
item['installed'] = 'False'
|
'photomaker', 'classifiers']
|
||||||
elif os.path.exists(model_path):
|
|
||||||
|
total_models_files = set()
|
||||||
|
for x in model_dir_names:
|
||||||
|
for y in folder_paths.get_filename_list(x):
|
||||||
|
total_models_files.add(y)
|
||||||
|
|
||||||
|
def process_model_phase(item):
|
||||||
|
if 'diffusion' not in item['filename'] and 'pytorch' not in item['filename'] and 'model' not in item['filename']:
|
||||||
|
# non-general name case
|
||||||
|
if item['filename'] in total_models_files:
|
||||||
item['installed'] = 'True'
|
item['installed'] = 'True'
|
||||||
|
return
|
||||||
|
|
||||||
|
if item['save_path'] == 'default':
|
||||||
|
model_dir_name = model_dir_name_map.get(item['type'].lower())
|
||||||
|
if model_dir_name is not None:
|
||||||
|
item['installed'] = str(is_exists(model_dir_name, item['filename']))
|
||||||
else:
|
else:
|
||||||
item['installed'] = 'False'
|
item['installed'] = 'False'
|
||||||
|
else:
|
||||||
|
model_dir_name = item['save_path'].split('/')[0]
|
||||||
|
if model_dir_name in folder_paths.folder_names_and_paths:
|
||||||
|
if is_exists(model_dir_name, item['filename']):
|
||||||
|
item['installed'] = 'True'
|
||||||
|
|
||||||
|
if 'installed' not in item:
|
||||||
|
fullpath = os.path.join(folder_paths.models_dir, item['save_path'], item['filename'])
|
||||||
|
item['installed'] = 'True' if os.path.exists(fullpath) else 'False'
|
||||||
|
|
||||||
with concurrent.futures.ThreadPoolExecutor(8) as executor:
|
with concurrent.futures.ThreadPoolExecutor(8) as executor:
|
||||||
for item in json_obj['models']:
|
for item in json_obj['models']:
|
||||||
executor.submit(process_model, item)
|
executor.submit(process_model_phase, item)
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/externalmodel/getlist")
|
@routes.get("/externalmodel/getlist")
|
||||||
async def fetch_externalmodel_list(request):
|
async def fetch_externalmodel_list(request):
|
||||||
@@ -858,7 +1012,24 @@ async def reinstall_custom_node(request):
|
|||||||
await install_custom_node(request)
|
await install_custom_node(request)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/install")
|
@routes.get("/customnode/queue/reset")
|
||||||
|
async def reset_queue(request):
|
||||||
|
global install_queue
|
||||||
|
install_queue = queue.Queue()
|
||||||
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
|
@routes.get("/customnode/queue/count")
|
||||||
|
async def reset_queue(request):
|
||||||
|
global install_queue
|
||||||
|
|
||||||
|
done_count = len(install_result)
|
||||||
|
total_count = done_count + install_queue.qsize()
|
||||||
|
|
||||||
|
return web.json_response({'total_count': total_count, 'done_count': done_count})
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/customnode/queue/install")
|
||||||
async def install_custom_node(request):
|
async def install_custom_node(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||||
@@ -901,26 +1072,23 @@ async def install_custom_node(request):
|
|||||||
logging.error(SECURITY_MESSAGE_GENERAL)
|
logging.error(SECURITY_MESSAGE_GENERAL)
|
||||||
return web.Response(status=404, text="A security error has occurred. Please check the terminal logs")
|
return web.Response(status=404, text="A security error has occurred. Please check the terminal logs")
|
||||||
|
|
||||||
node_spec = core.unified_manager.resolve_node_spec(node_spec_str)
|
install_item = json_data.get('ui_id'), node_spec_str, json_data['channel'], json_data['mode'], skip_post_install
|
||||||
|
install_queue.put(("install", install_item))
|
||||||
|
|
||||||
if node_spec is None:
|
return web.Response(status=200)
|
||||||
return web.Response(status=400, text=f"Cannot resolve install target: '{node_spec_str}'")
|
|
||||||
|
|
||||||
node_name, version_spec, is_specified = node_spec
|
|
||||||
res = await core.unified_manager.install_by_id(node_name, version_spec, json_data['channel'], json_data['mode'], return_postinstall=skip_post_install)
|
|
||||||
# discard post install if skip_post_install mode
|
|
||||||
|
|
||||||
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
|
||||||
return web.Response(status=400, text=res.msg)
|
|
||||||
elif not res.result:
|
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
|
||||||
return web.Response(status=400, text=res.msg)
|
|
||||||
|
|
||||||
return web.Response(status=200, text="Installation success.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/fix")
|
@routes.get("/customnode/queue/start")
|
||||||
|
async def queue_start(request):
|
||||||
|
global install_result
|
||||||
|
install_result = {}
|
||||||
|
|
||||||
|
threading.Thread(target=lambda: asyncio.run(install_worker())).start()
|
||||||
|
|
||||||
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/customnode/queue/fix")
|
||||||
async def fix_custom_node(request):
|
async def fix_custom_node(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_GENERAL)
|
logging.error(SECURITY_MESSAGE_GENERAL)
|
||||||
@@ -936,16 +1104,10 @@ async def fix_custom_node(request):
|
|||||||
# unknown
|
# unknown
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_fix(node_name, node_ver)
|
update_item = json_data.get('ui_id'), node_name, json_data['version']
|
||||||
|
install_queue.put(("fix", update_item))
|
||||||
|
|
||||||
if res.result:
|
return web.Response(status=200)
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
else:
|
|
||||||
logging.error(res.msg)
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while fixing '{node_name}@{node_ver}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/install/git_url")
|
@routes.post("/customnode/install/git_url")
|
||||||
@@ -980,7 +1142,7 @@ async def install_custom_node_pip(request):
|
|||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/uninstall")
|
@routes.post("/customnode/queue/uninstall")
|
||||||
async def uninstall_custom_node(request):
|
async def uninstall_custom_node(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||||
@@ -997,17 +1159,13 @@ async def uninstall_custom_node(request):
|
|||||||
is_unknown = True
|
is_unknown = True
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
uninstall_item = json_data.get('ui_id'), node_name, is_unknown
|
||||||
|
install_queue.put(("uninstall", uninstall_item))
|
||||||
|
|
||||||
if res.result:
|
return web.Response(status=200)
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while uninstalling '{node_name}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/update")
|
@routes.post("/customnode/queue/update")
|
||||||
async def update_custom_node(request):
|
async def update_custom_node(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||||
@@ -1022,16 +1180,10 @@ async def update_custom_node(request):
|
|||||||
# unknown
|
# unknown
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_update(node_name, json_data['version'])
|
update_item = json_data.get('ui_id'), node_name, json_data['version']
|
||||||
|
install_queue.put(("update", update_item))
|
||||||
|
|
||||||
manager_util.clear_pip_cache()
|
return web.Response(status=200)
|
||||||
|
|
||||||
if res.result:
|
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while updating '{node_name}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/comfyui_manager/update_comfyui")
|
@routes.get("/comfyui_manager/update_comfyui")
|
||||||
@@ -1045,8 +1197,10 @@ async def update_comfyui(request):
|
|||||||
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
elif res == "updated":
|
elif res == "updated":
|
||||||
|
logging.info("ComfyUI is updated.")
|
||||||
return web.Response(status=201)
|
return web.Response(status=201)
|
||||||
else: # skipped
|
else: # skipped
|
||||||
|
logging.info("ComfyUI is up-to-date.")
|
||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
||||||
@@ -1078,7 +1232,7 @@ async def comfyui_switch_version(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/disable")
|
@routes.post("/customnode/queue/disable")
|
||||||
async def disable_node(request):
|
async def disable_node(request):
|
||||||
json_data = await request.json()
|
json_data = await request.json()
|
||||||
|
|
||||||
@@ -1091,12 +1245,10 @@ async def disable_node(request):
|
|||||||
is_unknown = True
|
is_unknown = True
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
update_item = json_data.get('ui_id'), node_name, is_unknown
|
||||||
|
install_queue.put(("disable", update_item))
|
||||||
|
|
||||||
if res:
|
return web.Response(status=200)
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
return web.Response(status=400, text="Failed to disable")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/manager/migrate_unmanaged_nodes")
|
@routes.get("/manager/migrate_unmanaged_nodes")
|
||||||
@@ -1135,37 +1287,44 @@ async def install_model(request):
|
|||||||
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
|
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
|
||||||
return web.Response(status=403)
|
return web.Response(status=403)
|
||||||
|
|
||||||
res = False
|
def do_install():
|
||||||
|
res = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if model_path is not None:
|
if model_path is not None:
|
||||||
|
|
||||||
model_url = json_data['url']
|
model_url = json_data['url']
|
||||||
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
|
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
|
||||||
if not core.get_config()['model_download_by_agent'] and (
|
if not core.get_config()['model_download_by_agent'] and (
|
||||||
model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de')):
|
model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de')):
|
||||||
model_dir = get_model_dir(json_data, True)
|
model_dir = get_model_dir(json_data, True)
|
||||||
download_url(model_url, model_dir, filename=json_data['filename'])
|
download_url(model_url, model_dir, filename=json_data['filename'])
|
||||||
if model_path.endswith('.zip'):
|
if model_path.endswith('.zip'):
|
||||||
res = core.unzip(model_path)
|
res = core.unzip(model_path)
|
||||||
|
else:
|
||||||
|
res = True
|
||||||
|
|
||||||
|
if res:
|
||||||
|
return web.json_response({}, content_type='application/json')
|
||||||
else:
|
else:
|
||||||
res = True
|
res = download_url_with_agent(model_url, model_path)
|
||||||
|
if res and model_path.endswith('.zip'):
|
||||||
if res:
|
res = core.unzip(model_path)
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
else:
|
else:
|
||||||
res = download_url_with_agent(model_url, model_path)
|
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
||||||
if res and model_path.endswith('.zip'):
|
|
||||||
res = core.unzip(model_path)
|
|
||||||
else:
|
|
||||||
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
return web.json_response({}, content_type='application/json')
|
return web.json_response({}, content_type='application/json')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
||||||
|
return web.Response(status=400)
|
||||||
|
|
||||||
return web.Response(status=400)
|
# Run the installation in a thread pool
|
||||||
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
|
|
||||||
|
asyncio.get_event_loop().run_in_executor(executor, do_install)
|
||||||
|
|
||||||
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/manager/preview_method")
|
@routes.get("/manager/preview_method")
|
||||||
@@ -1394,8 +1553,6 @@ def confirm_try_install(sender, custom_node_url, msg):
|
|||||||
|
|
||||||
cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
|
cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
|
||||||
|
|
||||||
import asyncio
|
|
||||||
|
|
||||||
|
|
||||||
async def default_cache_update():
|
async def default_cache_update():
|
||||||
async def get_cache(filename):
|
async def get_cache(filename):
|
||||||
@@ -1422,6 +1579,8 @@ async def default_cache_update():
|
|||||||
await core.unified_manager.reload('remote', dont_wait=False)
|
await core.unified_manager.reload('remote', dont_wait=False)
|
||||||
await core.unified_manager.get_custom_nodes('default', 'remote')
|
await core.unified_manager.get_custom_nodes('default', 'remote')
|
||||||
|
|
||||||
|
logging.info("[ComfyUI-Manager] All startup tasks have been completed.")
|
||||||
|
|
||||||
# NOTE: hide migration button temporarily.
|
# NOTE: hide migration button temporarily.
|
||||||
# if not core.get_config()['skip_migration_check']:
|
# if not core.get_config()['skip_migration_check']:
|
||||||
# await core.check_need_to_migrate()
|
# await core.check_need_to_migrate()
|
||||||
|
|||||||
@@ -232,21 +232,22 @@ def clear_pip_cache():
|
|||||||
pip_map = None
|
pip_map = None
|
||||||
|
|
||||||
|
|
||||||
torch_torchvision_version_map = {
|
torch_torchvision_torchaudio_version_map = {
|
||||||
'2.5.1': '0.20.1',
|
'2.6.0': ('0.21.0', '2.6.0'),
|
||||||
'2.5.0': '0.20.0',
|
'2.5.1': ('0.20.0', '2.5.0'),
|
||||||
'2.4.1': '0.19.1',
|
'2.5.0': ('0.20.0', '2.5.0'),
|
||||||
'2.4.0': '0.19.0',
|
'2.4.1': ('0.19.1', '2.4.1'),
|
||||||
'2.3.1': '0.18.1',
|
'2.4.0': ('0.19.0', '2.4.0'),
|
||||||
'2.3.0': '0.18.0',
|
'2.3.1': ('0.18.1', '2.3.1'),
|
||||||
'2.2.2': '0.17.2',
|
'2.3.0': ('0.18.0', '2.3.0'),
|
||||||
'2.2.1': '0.17.1',
|
'2.2.2': ('0.17.2', '2.2.2'),
|
||||||
'2.2.0': '0.17.0',
|
'2.2.1': ('0.17.1', '2.2.1'),
|
||||||
'2.1.2': '0.16.2',
|
'2.2.0': ('0.17.0', '2.2.0'),
|
||||||
'2.1.1': '0.16.1',
|
'2.1.2': ('0.16.2', '2.1.2'),
|
||||||
'2.1.0': '0.16.0',
|
'2.1.1': ('0.16.1', '2.1.1'),
|
||||||
'2.0.1': '0.15.2',
|
'2.1.0': ('0.16.0', '2.1.0'),
|
||||||
'2.0.0': '0.15.1',
|
'2.0.1': ('0.15.2', '2.0.1'),
|
||||||
|
'2.0.0': ('0.15.1', '2.0.0'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -266,16 +267,17 @@ class PIPFixer:
|
|||||||
|
|
||||||
torch_ver = StrictVersion(spec[0])
|
torch_ver = StrictVersion(spec[0])
|
||||||
torch_ver = f"{torch_ver.major}.{torch_ver.minor}.{torch_ver.patch}"
|
torch_ver = f"{torch_ver.major}.{torch_ver.minor}.{torch_ver.patch}"
|
||||||
torchvision_ver = torch_torchvision_version_map.get(torch_ver)
|
torch_torchvision_torchaudio_ver = torch_torchvision_torchaudio_version_map.get(torch_ver)
|
||||||
|
|
||||||
if torchvision_ver is None:
|
if torch_torchvision_torchaudio_ver is None:
|
||||||
cmd = [sys.executable, '-m', 'pip', 'install', '--pre',
|
cmd = [sys.executable, '-m', 'pip', 'install', '--pre',
|
||||||
'torch', 'torchvision', 'torchaudio',
|
'torch', 'torchvision', 'torchaudio',
|
||||||
'--index-url', f"https://download.pytorch.org/whl/nightly/{platform}"]
|
'--index-url', f"https://download.pytorch.org/whl/nightly/{platform}"]
|
||||||
logging.info("[ComfyUI-Manager] restore PyTorch to nightly version")
|
logging.info("[ComfyUI-Manager] restore PyTorch to nightly version")
|
||||||
else:
|
else:
|
||||||
|
torchvision_ver, torchaudio_ver = torch_torchvision_torchaudio_ver
|
||||||
cmd = [sys.executable, '-m', 'pip', 'install',
|
cmd = [sys.executable, '-m', 'pip', 'install',
|
||||||
f'torch=={torch_ver}', f'torchvision=={torchvision_ver}', f"torchaudio=={torch_ver}",
|
f'torch=={torch_ver}', f'torchvision=={torchvision_ver}', f"torchaudio=={torchaudio_ver}",
|
||||||
'--index-url', f"https://download.pytorch.org/whl/{platform}"]
|
'--index-url', f"https://download.pytorch.org/whl/{platform}"]
|
||||||
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")
|
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import {
|
|||||||
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
|
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
|
||||||
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
||||||
import { ModelManager } from "./model-manager.js";
|
import { ModelManager } from "./model-manager.js";
|
||||||
import { set_double_click_policy } from "./node_fixer.js";
|
|
||||||
import { SnapshotManager } from "./snapshot.js";
|
import { SnapshotManager } from "./snapshot.js";
|
||||||
|
|
||||||
var docStyle = document.createElement('style');
|
var docStyle = document.createElement('style');
|
||||||
|
|||||||
14
js/common.js
14
js/common.js
@@ -130,6 +130,20 @@ export function customAlert(message) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function infoToast(summary, message) {
|
||||||
|
try {
|
||||||
|
app.extensionManager.toast.add({
|
||||||
|
severity: 'info',
|
||||||
|
summary: summary,
|
||||||
|
detail: message,
|
||||||
|
life: 3000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function customPrompt(title, message) {
|
export async function customPrompt(title, message) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { api } from "../../scripts/api.js";
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
manager_instance, rebootAPI, install_via_git_url,
|
manager_instance, rebootAPI, install_via_git_url,
|
||||||
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt, sanitizeHTML
|
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt, sanitizeHTML, infoToast
|
||||||
} from "./common.js";
|
} from "./common.js";
|
||||||
|
|
||||||
// https://cenfun.github.io/turbogrid/api.html
|
// https://cenfun.github.io/turbogrid/api.html
|
||||||
@@ -391,6 +391,8 @@ export class CustomNodesManager {
|
|||||||
this.restartMap = {};
|
this.restartMap = {};
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
|
|
||||||
|
api.addEventListener("cm-install-status", this.onInstallStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@@ -1204,7 +1206,7 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
focusInstall(item, mode) {
|
focusInstall(item, mode) {
|
||||||
const cellNode = this.grid.getCellNode(item, "installed");
|
const cellNode = this.grid.getCellNode(item, "action");
|
||||||
if (cellNode) {
|
if (cellNode) {
|
||||||
const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`);
|
const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`);
|
||||||
if (cellBtn) {
|
if (cellBtn) {
|
||||||
@@ -1269,6 +1271,13 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async installNodes(list, btn, title, selected_version) {
|
async installNodes(list, btn, title, selected_version) {
|
||||||
|
let stats = await api.fetchApi('/customnode/queue/count');
|
||||||
|
stats = await stats.json();
|
||||||
|
if(stats.total_count > 0) {
|
||||||
|
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const { target, label, mode} = btn;
|
const { target, label, mode} = btn;
|
||||||
|
|
||||||
if(mode === "uninstall") {
|
if(mode === "uninstall") {
|
||||||
@@ -1294,8 +1303,13 @@ export class CustomNodesManager {
|
|||||||
|
|
||||||
let needRestart = false;
|
let needRestart = false;
|
||||||
let errorMsg = "";
|
let errorMsg = "";
|
||||||
|
|
||||||
|
await api.fetchApi('/customnode/queue/reset');
|
||||||
|
this.install_context = btn;
|
||||||
|
|
||||||
for (const hash of list) {
|
for (const hash of list) {
|
||||||
const item = this.grid.getRowItemBy("hash", hash);
|
const item = this.grid.getRowItemBy("hash", hash);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
errorMsg = `Not found custom node: ${hash}`;
|
errorMsg = `Not found custom node: ${hash}`;
|
||||||
break;
|
break;
|
||||||
@@ -1315,6 +1329,7 @@ export class CustomNodesManager {
|
|||||||
data.selected_version = selected_version;
|
data.selected_version = selected_version;
|
||||||
data.channel = this.channel;
|
data.channel = this.channel;
|
||||||
data.mode = this.mode;
|
data.mode = this.mode;
|
||||||
|
data.ui_id = hash;
|
||||||
|
|
||||||
let install_mode = mode;
|
let install_mode = mode;
|
||||||
if(mode == 'switch') {
|
if(mode == 'switch') {
|
||||||
@@ -1332,14 +1347,14 @@ export class CustomNodesManager {
|
|||||||
api_mode = 'reinstall';
|
api_mode = 'reinstall';
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await api.fetchApi(`/customnode/${api_mode}`, {
|
const res = await api.fetchApi(`/customnode/queue/${api_mode}`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status != 200) {
|
if (res.status != 200) {
|
||||||
|
|
||||||
errorMsg = `${item.title} ${mode} failed: `;
|
errorMsg = `${item.title} ${mode} failed: `;
|
||||||
|
|
||||||
if(res.status == 403) {
|
if(res.status == 403) {
|
||||||
errorMsg += `This action is not allowed with this security level configuration.`;
|
errorMsg += `This action is not allowed with this security level configuration.`;
|
||||||
} else if(res.status == 404) {
|
} else if(res.status == 404) {
|
||||||
@@ -1350,32 +1365,69 @@ export class CustomNodesManager {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
needRestart = true;
|
|
||||||
|
|
||||||
this.grid.setRowSelected(item, false);
|
|
||||||
item.restart = true;
|
|
||||||
this.restartMap[item.hash] = true;
|
|
||||||
this.grid.updateCell(item, "action");
|
|
||||||
|
|
||||||
//console.log(res.data);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
target.classList.remove("cn-btn-loading");
|
if(errorMsg) {
|
||||||
|
|
||||||
if (errorMsg) {
|
|
||||||
this.showError(errorMsg);
|
this.showError(errorMsg);
|
||||||
show_message("Installation Error:\n"+errorMsg);
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await api.fetchApi('/customnode/queue/start');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onInstallStatus(event) {
|
||||||
|
let self = CustomNodesManager.instance;
|
||||||
|
if(event.detail.status == 'in_progress') {
|
||||||
|
const hash = event.detail.target;
|
||||||
|
|
||||||
|
const item = self.grid.getRowItemBy("hash", hash);
|
||||||
|
|
||||||
|
item.restart = true;
|
||||||
|
self.restartMap[item.hash] = true;
|
||||||
|
self.grid.updateCell(item, "action");
|
||||||
|
}
|
||||||
|
else if(event.detail.status == 'done') {
|
||||||
|
self.onInstallCompleted(event.detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onInstallCompleted(info) {
|
||||||
|
let result = info.result;
|
||||||
|
|
||||||
|
let self = CustomNodesManager.instance;
|
||||||
|
|
||||||
|
if(!self.install_context) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { target, label, mode } = self.install_context;
|
||||||
|
target.classList.remove("cn-btn-loading");
|
||||||
|
|
||||||
|
let errorMsg = "";
|
||||||
|
|
||||||
|
for(let hash in result){
|
||||||
|
let v = result[hash];
|
||||||
|
|
||||||
|
const item = self.grid.getRowItemBy("hash", hash);
|
||||||
|
self.grid.setRowSelected(item, false);
|
||||||
|
|
||||||
|
if(v != 'success')
|
||||||
|
errorMsg += v;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorMsg) {
|
||||||
|
self.showError(errorMsg);
|
||||||
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
} else {
|
} else {
|
||||||
this.showStatus(`${label} ${list.length} custom node(s) successfully`);
|
self.showStatus(`${label} ${result.length} custom node(s) successfully`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needRestart) {
|
self.showRestart();
|
||||||
this.showRestart();
|
self.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red");
|
||||||
this.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
infoToast(`[ComfyUI-Manager] All tasks in the queue have been completed.\n${info.done_count}/${info.total_count}`);
|
||||||
|
self.install_context = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================================
|
// ===========================================================================================
|
||||||
|
|||||||
@@ -1,16 +1,6 @@
|
|||||||
import { app } from "../../scripts/app.js";
|
import { app } from "../../scripts/app.js";
|
||||||
import { api } from "../../scripts/api.js";
|
import { api } from "../../scripts/api.js";
|
||||||
|
|
||||||
let double_click_policy = "copy-all";
|
|
||||||
|
|
||||||
api.fetchApi('/manager/dbl_click/policy')
|
|
||||||
.then(response => response.text())
|
|
||||||
.then(data => set_double_click_policy(data));
|
|
||||||
|
|
||||||
export function set_double_click_policy(mode) {
|
|
||||||
double_click_policy = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
function addMenuHandler(nodeType, cb) {
|
function addMenuHandler(nodeType, cb) {
|
||||||
const getOpts = nodeType.prototype.getExtraMenuOptions;
|
const getOpts = nodeType.prototype.getExtraMenuOptions;
|
||||||
nodeType.prototype.getExtraMenuOptions = function () {
|
nodeType.prototype.getExtraMenuOptions = function () {
|
||||||
@@ -153,62 +143,6 @@ function node_info_copy(src, dest, connect_both, copy_shape) {
|
|||||||
|
|
||||||
app.registerExtension({
|
app.registerExtension({
|
||||||
name: "Comfy.Manager.NodeFixer",
|
name: "Comfy.Manager.NodeFixer",
|
||||||
|
|
||||||
async nodeCreated(node, app) {
|
|
||||||
let orig_dblClick = node.onDblClick;
|
|
||||||
node.onDblClick = function (e, pos, self) {
|
|
||||||
orig_dblClick?.apply?.(this, arguments);
|
|
||||||
|
|
||||||
if((!node.inputs && !node.outputs) || pos[1] > 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch(double_click_policy) {
|
|
||||||
case "copy-all":
|
|
||||||
case "copy-full":
|
|
||||||
case "copy-input":
|
|
||||||
{
|
|
||||||
if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
let src_node = lookup_nearest_nodes(node);
|
|
||||||
if(src_node)
|
|
||||||
{
|
|
||||||
let both_connection = double_click_policy != "copy-input";
|
|
||||||
let copy_shape = double_click_policy == "copy-full";
|
|
||||||
node_info_copy(src_node, node, both_connection, copy_shape);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "possible-input":
|
|
||||||
{
|
|
||||||
let nearest_inputs = lookup_nearest_inputs(node);
|
|
||||||
if(nearest_inputs)
|
|
||||||
connect_inputs(nearest_inputs, node);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "dual":
|
|
||||||
{
|
|
||||||
if(pos[0] < node.size[0]/2) {
|
|
||||||
// left: possible-input
|
|
||||||
let nearest_inputs = lookup_nearest_inputs(node);
|
|
||||||
if(nearest_inputs)
|
|
||||||
connect_inputs(nearest_inputs, node);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// right: copy-all
|
|
||||||
if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
let src_node = lookup_nearest_nodes(node);
|
|
||||||
if(src_node)
|
|
||||||
node_info_copy(src_node, node, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeRegisterNodeDef(nodeType, nodeData, app) {
|
beforeRegisterNodeDef(nodeType, nodeData, app) {
|
||||||
addMenuHandler(nodeType, function (_, options) {
|
addMenuHandler(nodeType, function (_, options) {
|
||||||
options.push({
|
options.push({
|
||||||
|
|||||||
243
model-list.json
243
model-list.json
@@ -310,7 +310,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "negative_hand Negative Embedding",
|
"name": "negative_hand Negative Embedding",
|
||||||
"type": "embeddings",
|
"type": "embedding",
|
||||||
"base": "SD1.5",
|
"base": "SD1.5",
|
||||||
"save_path": "embeddings/SD1.5",
|
"save_path": "embeddings/SD1.5",
|
||||||
"description": "If you use this embedding with negatives, you can solve the issue of damaging your hands.",
|
"description": "If you use this embedding with negatives, you can solve the issue of damaging your hands.",
|
||||||
@@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bad_prompt Negative Embedding",
|
"name": "bad_prompt Negative Embedding",
|
||||||
"type": "embeddings",
|
"type": "embedding",
|
||||||
"base": "SD1.5",
|
"base": "SD1.5",
|
||||||
"save_path": "embeddings/SD1.5",
|
"save_path": "embeddings/SD1.5",
|
||||||
"description": "The idea behind this embedding was to somehow train the negative prompt as an embedding, thus unifying the basis of the negative prompt into one word or embedding.",
|
"description": "The idea behind this embedding was to somehow train the negative prompt as an embedding, thus unifying the basis of the negative prompt into one word or embedding.",
|
||||||
@@ -332,7 +332,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Deep Negative V1.75",
|
"name": "Deep Negative V1.75",
|
||||||
"type": "embeddings",
|
"type": "embedding",
|
||||||
"base": "SD1.5",
|
"base": "SD1.5",
|
||||||
"save_path": "embeddings/SD1.5",
|
"save_path": "embeddings/SD1.5",
|
||||||
"description": "These embedding learn what disgusting compositions and color patterns are, including faulty human anatomy, offensive color schemes, upside-down spatial structures, and more. Placing it in the negative can go a long way to avoiding these things.",
|
"description": "These embedding learn what disgusting compositions and color patterns are, including faulty human anatomy, offensive color schemes, upside-down spatial structures, and more. Placing it in the negative can go a long way to avoiding these things.",
|
||||||
@@ -343,7 +343,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "EasyNegative",
|
"name": "EasyNegative",
|
||||||
"type": "embeddings",
|
"type": "embedding",
|
||||||
"base": "SD1.5",
|
"base": "SD1.5",
|
||||||
"save_path": "embeddings/SD1.5",
|
"save_path": "embeddings/SD1.5",
|
||||||
"description": "This embedding should be used in your NEGATIVE prompt. Adjust the strength as desired (seems to scale well without any distortions), the strength required may vary based on positive and negative prompts.",
|
"description": "This embedding should be used in your NEGATIVE prompt. Adjust the strength as desired (seems to scale well without any distortions), the strength required may vary based on positive and negative prompts.",
|
||||||
@@ -488,7 +488,7 @@
|
|||||||
"name": "stabilityai/Stable Cascade: text_encoder (CLIP)",
|
"name": "stabilityai/Stable Cascade: text_encoder (CLIP)",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "Stable Cascade",
|
"base": "Stable Cascade",
|
||||||
"save_path": "clip/Stable-Cascade",
|
"save_path": "text_encoders/Stable-Cascade",
|
||||||
"description": "Stable Cascade: text_encoder",
|
"description": "Stable Cascade: text_encoder",
|
||||||
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
"filename": "model.safetensors",
|
"filename": "model.safetensors",
|
||||||
@@ -937,7 +937,7 @@
|
|||||||
"name": "google-t5/t5-base",
|
"name": "google-t5/t5-base",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5-base",
|
"base": "t5-base",
|
||||||
"save_path": "clip/t5-base",
|
"save_path": "text_encoders/t5-base",
|
||||||
"description": "T5 Base: Text-To-Text Transfer Transformer. This model can be loaded via CLIPLoader for Stable Audio workflow.",
|
"description": "T5 Base: Text-To-Text Transfer Transformer. This model can be loaded via CLIPLoader for Stable Audio workflow.",
|
||||||
"reference": "https://huggingface.co/google-t5/t5-base",
|
"reference": "https://huggingface.co/google-t5/t5-base",
|
||||||
"filename": "model.safetensors",
|
"filename": "model.safetensors",
|
||||||
@@ -948,7 +948,7 @@
|
|||||||
"name": "google-t5/t5-v1_1-xxl_encoderonly-fp16",
|
"name": "google-t5/t5-v1_1-xxl_encoderonly-fp16",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "The encoder part of https://huggingface.co/google/t5-v1_1-xxl, used with SD3 and Flux1",
|
"description": "The encoder part of https://huggingface.co/google/t5-v1_1-xxl, used with SD3 and Flux1",
|
||||||
"reference": "https://huggingface.co/mcmonkey/google_t5-v1_1-xxl_encoderonly",
|
"reference": "https://huggingface.co/mcmonkey/google_t5-v1_1-xxl_encoderonly",
|
||||||
"filename": "google_t5-v1_1-xxl_encoderonly-fp16.safetensors",
|
"filename": "google_t5-v1_1-xxl_encoderonly-fp16.safetensors",
|
||||||
@@ -959,7 +959,7 @@
|
|||||||
"name": "google-t5/t5-v1_1-xxl_encoderonly-fp8_e4m3fn",
|
"name": "google-t5/t5-v1_1-xxl_encoderonly-fp8_e4m3fn",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "The encoder part of https://huggingface.co/google/t5-v1_1-xxl, used with SD3 and Flux1",
|
"description": "The encoder part of https://huggingface.co/google/t5-v1_1-xxl, used with SD3 and Flux1",
|
||||||
"reference": "https://huggingface.co/mcmonkey/google_t5-v1_1-xxl_encoderonly",
|
"reference": "https://huggingface.co/mcmonkey/google_t5-v1_1-xxl_encoderonly",
|
||||||
"filename": "google_t5-v1_1-xxl_encoderonly-fp8_e4m3fn.safetensors",
|
"filename": "google_t5-v1_1-xxl_encoderonly-fp8_e4m3fn.safetensors",
|
||||||
@@ -972,7 +972,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_L.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_L.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q3_K_L quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q3_K_L quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q3_K_L.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q3_K_L.gguf",
|
||||||
@@ -983,7 +983,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_M.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_M.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q3_K_M quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q3_K_M quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q3_K_M.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q3_K_M.gguf",
|
||||||
@@ -994,7 +994,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_S.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q3_K_S.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q3_K_S quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q3_K_S quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q3_K_S.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q3_K_S.gguf",
|
||||||
@@ -1005,7 +1005,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q4_K_M.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q4_K_M.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q4_K_M quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q4_K_M quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q4_K_M.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q4_K_M.gguf",
|
||||||
@@ -1016,7 +1016,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q4_K_S.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q4_K_S.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q4_K_S quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q4_K_S quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q4_K_S.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q4_K_S.gguf",
|
||||||
@@ -1027,7 +1027,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q5_K_M.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q5_K_M.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q5_K_M quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q5_K_M quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q5_K_M.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q5_K_M.gguf",
|
||||||
@@ -1038,7 +1038,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q5_K_S.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q5_K_S.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q5_K_S quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q5_K_S quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q5_K_S.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q5_K_S.gguf",
|
||||||
@@ -1049,7 +1049,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q6_K.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q6_K.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q6_K quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q6_K quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q6_K.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q6_K.gguf",
|
||||||
@@ -1060,7 +1060,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-Q8_0.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-Q8_0.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (Q8_0 quantized)",
|
"description": "t5xxl Text Encoder GGUF model. (Q8_0 quantized)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-Q8_0.gguf",
|
"filename": "t5-v1_1-xxl-encoder-Q8_0.gguf",
|
||||||
@@ -1071,7 +1071,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-f16.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-f16.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (float 16)",
|
"description": "t5xxl Text Encoder GGUF model. (float 16)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-f16.gguf",
|
"filename": "t5-v1_1-xxl-encoder-f16.gguf",
|
||||||
@@ -1082,7 +1082,7 @@
|
|||||||
"name": "city96/t5-v1_1-xxl-encoder-f32.gguf",
|
"name": "city96/t5-v1_1-xxl-encoder-f32.gguf",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "t5",
|
"base": "t5",
|
||||||
"save_path": "clip/t5",
|
"save_path": "text_encoders/t5",
|
||||||
"description": "t5xxl Text Encoder GGUF model. (float 32)",
|
"description": "t5xxl Text Encoder GGUF model. (float 32)",
|
||||||
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
"reference": "https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf",
|
||||||
"filename": "t5-v1_1-xxl-encoder-f32.gguf",
|
"filename": "t5-v1_1-xxl-encoder-f32.gguf",
|
||||||
@@ -1721,17 +1721,6 @@
|
|||||||
"url": "https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors",
|
"url": "https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors",
|
||||||
"size": "774.5MB"
|
"size": "774.5MB"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "kohya-ss/ControlNet-LLLite: SDXL Canny Anime",
|
|
||||||
"type": "controlnet",
|
|
||||||
"base": "SDXL",
|
|
||||||
"save_path": "custom_nodes/ControlNet-LLLite-ComfyUI/models",
|
|
||||||
"description": "An extremely compactly designed controlnet model (a.k.a. ControlNet-LLLite). Note: The model structure is highly experimental and may be subject to change in the future.",
|
|
||||||
"reference": "https://huggingface.co/kohya-ss/controlnet-lllite",
|
|
||||||
"filename": "controllllite_v01032064e_sdxl_canny_anime.safetensors",
|
|
||||||
"url": "https://huggingface.co/kohya-ss/controlnet-lllite/resolve/main/controllllite_v01032064e_sdxl_canny_anime.safetensors",
|
|
||||||
"size": "46.2MB"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "SDXL-controlnet: OpenPose (v2)",
|
"name": "SDXL-controlnet: OpenPose (v2)",
|
||||||
"type": "controlnet",
|
"type": "controlnet",
|
||||||
@@ -2814,39 +2803,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "pfg-novel-n10.pt",
|
|
||||||
"type": "PFG",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
|
||||||
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
|
||||||
"reference": "https://huggingface.co/furusu/PFG",
|
|
||||||
"filename": "pfg-novel-n10.pt",
|
|
||||||
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-novel-n10.pt",
|
|
||||||
"size": "23.6MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pfg-wd14-n10.pt",
|
|
||||||
"type": "PFG",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
|
||||||
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
|
||||||
"reference": "https://huggingface.co/furusu/PFG",
|
|
||||||
"filename": "pfg-wd14-n10.pt",
|
|
||||||
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-wd14-n10.pt",
|
|
||||||
"size": "31.5MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pfg-wd15beta2-n10.pt",
|
|
||||||
"type": "PFG",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
|
||||||
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
|
||||||
"reference": "https://huggingface.co/furusu/PFG",
|
|
||||||
"filename": "pfg-wd15beta2-n10.pt",
|
|
||||||
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-wd15beta2-n10.pt",
|
|
||||||
"size": "31.5MB"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "GFPGANv1.4.pth",
|
"name": "GFPGANv1.4.pth",
|
||||||
"type": "GFPGAN",
|
"type": "GFPGAN",
|
||||||
@@ -3012,50 +2968,6 @@
|
|||||||
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ControlNetModel/diffusion_pytorch_model.safetensors",
|
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ControlNetModel/diffusion_pytorch_model.safetensors",
|
||||||
"size": "2.50GB"
|
"size": "2.50GB"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "efficient_sam_s_cpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
|
||||||
"type": "efficient_sam",
|
|
||||||
"base": "efficient_sam",
|
|
||||||
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
|
||||||
"description": "Install efficient_sam_s_cpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
|
||||||
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
|
||||||
"filename": "efficient_sam_s_cpu.jit",
|
|
||||||
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_cpu.jit",
|
|
||||||
"size": "106.0MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "efficient_sam_s_gpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
|
||||||
"type": "efficient_sam",
|
|
||||||
"base": "efficient_sam",
|
|
||||||
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
|
||||||
"description": "Install efficient_sam_s_gpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
|
||||||
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
|
||||||
"filename": "efficient_sam_s_gpu.jit",
|
|
||||||
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_gpu.jit",
|
|
||||||
"size": "106.0MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shape_predictor_68_face_landmarks.dat [Face Analysis]",
|
|
||||||
"type": "Shape Predictor",
|
|
||||||
"base": "DLIB",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
|
||||||
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
|
||||||
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
|
||||||
"filename": "shape_predictor_68_face_landmarks.dat",
|
|
||||||
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/shape_predictor_68_face_landmarks.dat",
|
|
||||||
"size": "99.7MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "dlib_face_recognition_resnet_model_v1.dat [Face Analysis]",
|
|
||||||
"type": "Face Recognition",
|
|
||||||
"base": "DLIB",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
|
||||||
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
|
||||||
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
|
||||||
"filename": "dlib_face_recognition_resnet_model_v1.dat",
|
|
||||||
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/dlib_face_recognition_resnet_model_v1.dat",
|
|
||||||
"size": "22.5MB"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "InstanceDiffusion/fusers",
|
"name": "InstanceDiffusion/fusers",
|
||||||
"type": "InstanceDiffusion",
|
"type": "InstanceDiffusion",
|
||||||
@@ -3430,50 +3342,6 @@
|
|||||||
"url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fcon.safetensors",
|
"url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fcon.safetensors",
|
||||||
"size": "1.72GB"
|
"size": "1.72GB"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ID-Animator/animator.ckpt",
|
|
||||||
"type": "ID-Animator",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_ID_Animator/models",
|
|
||||||
"description": "ID-Animator checkpoint",
|
|
||||||
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
|
||||||
"filename": "animator.ckpt",
|
|
||||||
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/animator.ckpt",
|
|
||||||
"size": "247.3MB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ID-Animator/mm_sd_v15_v2.ckpt",
|
|
||||||
"type": "ID-Animator",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_ID_Animator/models/animatediff_models",
|
|
||||||
"description": "AnimateDiff checkpoint for ID-Animator",
|
|
||||||
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
|
||||||
"filename": "mm_sd_v15_v2.ckpt",
|
|
||||||
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/mm_sd_v15_v2.ckpt",
|
|
||||||
"size": "1.82GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ID-Animator/image_encoder",
|
|
||||||
"type": "ID-Animator",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_ID_Animator/models/image_encoder",
|
|
||||||
"description": "CLIP Image encoder for ID-Animator",
|
|
||||||
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
|
||||||
"filename": "model.safetensors",
|
|
||||||
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/image_encoder/model.safetensors",
|
|
||||||
"size": "2.53GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "TencentARC/CustomNet",
|
|
||||||
"type": "CustomNet",
|
|
||||||
"base": "CustomNet",
|
|
||||||
"save_path": "custom_nodes/ComfyUI_CustomNet/pretrain",
|
|
||||||
"description": "CustomNet pretrained model for ComfyUI_CustomNet",
|
|
||||||
"reference": "https://huggingface.co/TencentARC/CustomNet/tree/main",
|
|
||||||
"filename": "customnet_v1.pt",
|
|
||||||
"url": "https://huggingface.co/TencentARC/CustomNet/resolve/main/customnet_v1.pt",
|
|
||||||
"size": "5.71GB"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (fp16)",
|
"name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (fp16)",
|
||||||
"type": "controlnet",
|
"type": "controlnet",
|
||||||
@@ -3562,17 +3430,6 @@
|
|||||||
"url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x4.pth",
|
"url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x4.pth",
|
||||||
"size": "136.0MB"
|
"size": "136.0MB"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Doubiiu/ToonCrafter model checkpoint",
|
|
||||||
"type": "checkpoint",
|
|
||||||
"base": "ToonCrafter",
|
|
||||||
"save_path": "custom_nodes/ComfyUI-ToonCrafter/ToonCrafter/checkpoints/tooncrafter_512_interp_v1",
|
|
||||||
"description": "ToonCrafter checkpoint model for ComfyUI-ToonCrafter",
|
|
||||||
"reference": "https://huggingface.co/Doubiiu/ToonCrafter/tree/main",
|
|
||||||
"filename": "model.ckpt",
|
|
||||||
"url": "https://huggingface.co/Doubiiu/ToonCrafter/resolve/main/model.ckpt",
|
|
||||||
"size": "10.5GB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "InstantX/FLUX.1-dev Controlnet (Union)",
|
"name": "InstantX/FLUX.1-dev Controlnet (Union)",
|
||||||
@@ -4465,23 +4322,11 @@
|
|||||||
"size": "12.7GB"
|
"size": "12.7GB"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"name": "BAAI/SegGPT",
|
|
||||||
"type": "SegGPT",
|
|
||||||
"base": "SegGPT",
|
|
||||||
"save_path": "custom_nodes/comfyui-SegGPT",
|
|
||||||
"description": "SegGPT",
|
|
||||||
"reference": "https://huggingface.co/BAAI/SegGPT",
|
|
||||||
"filename": "seggpt_vit_large.pth",
|
|
||||||
"url": "https://huggingface.co/BAAI/SegGPT/resolve/main/seggpt_vit_large.pth",
|
|
||||||
"size": "1.48GB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "clip",
|
"base": "clip",
|
||||||
"save_path": "clip/long_clip",
|
"save_path": "text_encoders/long_clip",
|
||||||
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
||||||
"reference": "https://huggingface.co/zer0int",
|
"reference": "https://huggingface.co/zer0int",
|
||||||
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
|
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
|
||||||
@@ -4492,7 +4337,7 @@
|
|||||||
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "clip",
|
"base": "clip",
|
||||||
"save_path": "clip/long_clip",
|
"save_path": "text_encoders/long_clip",
|
||||||
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
||||||
"reference": "https://huggingface.co/zer0int",
|
"reference": "https://huggingface.co/zer0int",
|
||||||
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-TE-only-HF.safetensors",
|
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-TE-only-HF.safetensors",
|
||||||
@@ -4793,6 +4638,52 @@
|
|||||||
"filename": "ip_adapter.safetensors",
|
"filename": "ip_adapter.safetensors",
|
||||||
"url": "https://huggingface.co/XLabs-AI/flux-ip-adapter/resolve/main/ip_adapter.safetensors",
|
"url": "https://huggingface.co/XLabs-AI/flux-ip-adapter/resolve/main/ip_adapter.safetensors",
|
||||||
"size": "982MB"
|
"size": "982MB"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_cpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "yolo_world",
|
||||||
|
"description": "Install efficient_sam_s_cpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_cpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_cpu.jit",
|
||||||
|
"size": "106.0MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_gpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "yolo_world",
|
||||||
|
"description": "Install efficient_sam_s_gpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_gpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_gpu.jit",
|
||||||
|
"size": "106.0MB"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "TencentARC/CustomNet V1",
|
||||||
|
"type": "CustomNet",
|
||||||
|
"base": "CustomNet",
|
||||||
|
"save_path": "checkpoints/customnet",
|
||||||
|
"description": "CustomNet pretrained model for ComfyUI_CustomNet",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/CustomNet/tree/main",
|
||||||
|
"filename": "customnet_v1.pt",
|
||||||
|
"url": "https://huggingface.co/TencentARC/CustomNet/resolve/main/customnet_v1.pt",
|
||||||
|
"size": "5.71GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TencentARC/CustomNet Inpaint V1",
|
||||||
|
"type": "CustomNet",
|
||||||
|
"base": "CustomNet",
|
||||||
|
"save_path": "checkpoints/customnet",
|
||||||
|
"description": "CustomNet Inpaint pretrained model for ComfyUI_CustomNet",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/CustomNet/tree/main",
|
||||||
|
"filename": "customnet_inpaint_v1.pt",
|
||||||
|
"url": "https://huggingface.co/TencentARC/CustomNet/resolve/main/customnet_inpaint_v1.pt",
|
||||||
|
"size": "5.71GB"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,56 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "neverbiasu",
|
||||||
|
"title": "ComfyUI-DeepSeek",
|
||||||
|
"reference": "https://github.com/neverbiasu/ComfyUI-DeepSeek",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/neverbiasu/ComfyUI-DeepSeek"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: DeepSeek Caller"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Krish-701",
|
||||||
|
"title": "RK_Comfyui",
|
||||||
|
"reference": "https://github.com/Krish-701/RK_Comfyui",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Krish-701/RK_Comfyui"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: RK Excel File State Looper, RK Accumulate Text, RK Advanced Script Finder, RK CSV File State Looper, RK Read Excel Row, RK Sequential Image Viewer, RK Concatenate Text, RK Write Text, RK Save Image, RK Seed Loop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "mikebilly",
|
||||||
|
"title": "transparent-background-comfyui",
|
||||||
|
"reference": "https://github.com/mikebilly/Transparent-background-comfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mikebilly/Transparent-background-comfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Transparentbackground RemBg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "UD1sto",
|
||||||
|
"title": "plugin-utils-nodes",
|
||||||
|
"reference": "https://github.com/UD1sto/plugin-utils-nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/UD1sto/plugin-utils-nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Compare Images (SimHash), Image Selector, Temporal Consistency, Update Image Reference, Frame Blend."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Kayarte",
|
||||||
|
"title": "Time Series Nodes for ComfyUI [Experimental]",
|
||||||
|
"reference": "https://github.com/Kayarte/Time-Series-Nodes-for-ComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Kayarte/Time-Series-Nodes-for-ComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Basic nodes for time series analysis in ComfyUI. Currently in early development."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "HuangYuChuh",
|
"author": "HuangYuChuh",
|
||||||
"title": "ComfyUI-DeepSeek_Toolkit [WIP]",
|
"title": "ComfyUI-DeepSeek_Toolkit [WIP]",
|
||||||
@@ -791,7 +841,7 @@
|
|||||||
"https://github.com/jonnydolake/ComfyUI-AIR-Nodes"
|
"https://github.com/jonnydolake/ComfyUI-AIR-Nodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "NODES: String List To Prompt Schedule, Force Minimum Batch Size, Target Location (Crop), Target Location (Paste)"
|
"description": "NODES: String List To Prompt Schedule, Force Minimum Batch Size, Target Location (Crop), Target Location (Paste), Image Composite Chained, Match Image Count To Mask Count, Random Character Prompts, Parallax Test, Easy Parallax, Parallax GPU Test"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "watarika",
|
"author": "watarika",
|
||||||
|
|||||||
@@ -923,7 +923,8 @@
|
|||||||
[
|
[
|
||||||
"DeepSeekImageGeneration",
|
"DeepSeekImageGeneration",
|
||||||
"DeepSeekImageUnderstanding",
|
"DeepSeekImageUnderstanding",
|
||||||
"DeepSeekModelLoader"
|
"DeepSeekModelLoader",
|
||||||
|
"OpenAICompatibleLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
||||||
@@ -1047,6 +1048,16 @@
|
|||||||
"title_aux": "ComfyUI-PNG2SVG2PNG"
|
"title_aux": "ComfyUI-PNG2SVG2PNG"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Kayarte/Time-Series-Nodes-for-ComfyUI": [
|
||||||
|
[
|
||||||
|
"DomainTimeSeriesPrep",
|
||||||
|
"TimeSeriesLoader",
|
||||||
|
"TimeSeriesPredictor"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Time Series Nodes for ComfyUI [Experimental]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/KihongK/comfyui-roysnodes": [
|
"https://github.com/KihongK/comfyui-roysnodes": [
|
||||||
[
|
[
|
||||||
"CLIPMultiTextEncode",
|
"CLIPMultiTextEncode",
|
||||||
@@ -1081,6 +1092,26 @@
|
|||||||
"title_aux": "ComfyUI Production Nodes Pack [WIP]"
|
"title_aux": "ComfyUI Production Nodes Pack [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Krish-701/RK_Comfyui": [
|
||||||
|
[
|
||||||
|
"RK_Accumulate_Text_Multiline",
|
||||||
|
"RK_Accumulate_Text_Multiline_Numbered",
|
||||||
|
"RK_Advanced_Script_Finder",
|
||||||
|
"RK_CSV_File_State_Looper_v01",
|
||||||
|
"RK_Calc",
|
||||||
|
"RK_Concatenate_Text",
|
||||||
|
"RK_Excel_File_State_Looper",
|
||||||
|
"RK_ImageViewer",
|
||||||
|
"RK_Read_Excel_Row",
|
||||||
|
"RK_Write_Text",
|
||||||
|
"RK_seed",
|
||||||
|
"rk_save_image",
|
||||||
|
"rk_save_image_v01"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "RK_Comfyui"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/LZpenguin/ComfyUI-Text": [
|
"https://github.com/LZpenguin/ComfyUI-Text": [
|
||||||
[
|
[
|
||||||
"Add_text_by_mask"
|
"Add_text_by_mask"
|
||||||
@@ -1466,7 +1497,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -1591,6 +1623,18 @@
|
|||||||
"title_aux": "ComfyUI Instructor Ollama"
|
"title_aux": "ComfyUI Instructor Ollama"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/UD1sto/plugin-utils-nodes": [
|
||||||
|
[
|
||||||
|
"FrameBlend",
|
||||||
|
"ImageReferenceUpdate",
|
||||||
|
"ImageSelector",
|
||||||
|
"SimHashCompare",
|
||||||
|
"TemporalConsistency"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "plugin-utils-nodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Video3DGenResearch/comfyui-batch-input-node": [
|
"https://github.com/Video3DGenResearch/comfyui-batch-input-node": [
|
||||||
[
|
[
|
||||||
"BatchImageAndPrompt",
|
"BatchImageAndPrompt",
|
||||||
@@ -3273,11 +3317,15 @@
|
|||||||
[
|
[
|
||||||
"ForceMinimumBatchSize",
|
"ForceMinimumBatchSize",
|
||||||
"ImageCompositeChained",
|
"ImageCompositeChained",
|
||||||
|
"MangaPanelSegmentationNode",
|
||||||
|
"Mask_Fill_Region",
|
||||||
"MatchImageCountToMaskCount",
|
"MatchImageCountToMaskCount",
|
||||||
|
"ParallaxGPUTest",
|
||||||
"ParallaxTest",
|
"ParallaxTest",
|
||||||
"RandomCharacterPrompts",
|
"RandomCharacterPrompts",
|
||||||
"TargetLocationCrop",
|
"TargetLocationCrop",
|
||||||
"TargetLocationPaste",
|
"TargetLocationPaste",
|
||||||
|
"easy_parallax",
|
||||||
"string_list_to_prompt_schedule"
|
"string_list_to_prompt_schedule"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -3434,6 +3482,7 @@
|
|||||||
"Hy3DDelightImage",
|
"Hy3DDelightImage",
|
||||||
"Hy3DDiffusersSchedulerConfig",
|
"Hy3DDiffusersSchedulerConfig",
|
||||||
"Hy3DExportMesh",
|
"Hy3DExportMesh",
|
||||||
|
"Hy3DFastSimplifyMesh",
|
||||||
"Hy3DGenerateMesh",
|
"Hy3DGenerateMesh",
|
||||||
"Hy3DGetMeshPBRTextures",
|
"Hy3DGetMeshPBRTextures",
|
||||||
"Hy3DIMRemesh",
|
"Hy3DIMRemesh",
|
||||||
@@ -3442,6 +3491,7 @@
|
|||||||
"Hy3DMeshUVWrap",
|
"Hy3DMeshUVWrap",
|
||||||
"Hy3DMeshVerticeInpaintTexture",
|
"Hy3DMeshVerticeInpaintTexture",
|
||||||
"Hy3DModelLoader",
|
"Hy3DModelLoader",
|
||||||
|
"Hy3DNvdiffrastRenderer",
|
||||||
"Hy3DPostprocessMesh",
|
"Hy3DPostprocessMesh",
|
||||||
"Hy3DRenderMultiView",
|
"Hy3DRenderMultiView",
|
||||||
"Hy3DRenderMultiViewDepth",
|
"Hy3DRenderMultiViewDepth",
|
||||||
@@ -3933,7 +3983,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -3941,12 +3990,21 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mikebilly/Transparent-background-comfyUI": [
|
||||||
|
[
|
||||||
|
"Transparentbackground RemBg"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "transparent-background-comfyui"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/mikeymcfish/FishTools": [
|
"https://github.com/mikeymcfish/FishTools": [
|
||||||
[
|
[
|
||||||
"AnaglyphCreator",
|
"AnaglyphCreator",
|
||||||
@@ -4113,6 +4171,14 @@
|
|||||||
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/neverbiasu/ComfyUI-DeepSeek": [
|
||||||
|
[
|
||||||
|
"DeepSeekCaller"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/neverbiasu/ComfyUI-StereoCrafter": [
|
"https://github.com/neverbiasu/ComfyUI-StereoCrafter": [
|
||||||
[
|
[
|
||||||
"DepthSplattingModelLoader",
|
"DepthSplattingModelLoader",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,16 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "ryanontheinside",
|
||||||
|
"title": "ComfyUI_ScavengerHunt [REMOVED]",
|
||||||
|
"reference": "https://github.com/ryanontheinside/ComfyUI_ScavengerHunt",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ryanontheinside/ComfyUI_ScavengerHunt"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Compare Image Similarity (ResNet), Compare Image Similarity (CLIP), Compare Image Types\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "vpakarinen",
|
"author": "vpakarinen",
|
||||||
"title": "ComfyUI-GenerationTimer [REMOVED]",
|
"title": "ComfyUI-GenerationTimer [REMOVED]",
|
||||||
|
|||||||
@@ -1,3 +1,126 @@
|
|||||||
{
|
{
|
||||||
"models": []
|
"models": [
|
||||||
|
{
|
||||||
|
"name": "pfg-novel-n10.pt",
|
||||||
|
"type": "PFG",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
||||||
|
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
||||||
|
"reference": "https://huggingface.co/furusu/PFG",
|
||||||
|
"filename": "pfg-novel-n10.pt",
|
||||||
|
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-novel-n10.pt",
|
||||||
|
"size": "23.6MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pfg-wd14-n10.pt",
|
||||||
|
"type": "PFG",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
||||||
|
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
||||||
|
"reference": "https://huggingface.co/furusu/PFG",
|
||||||
|
"filename": "pfg-wd14-n10.pt",
|
||||||
|
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-wd14-n10.pt",
|
||||||
|
"size": "31.5MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pfg-wd15beta2-n10.pt",
|
||||||
|
"type": "PFG",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/pfg-ComfyUI/models",
|
||||||
|
"description": "Pressing 'install' directly downloads the model from the pfg-ComfyUI/models extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
||||||
|
"reference": "https://huggingface.co/furusu/PFG",
|
||||||
|
"filename": "pfg-wd15beta2-n10.pt",
|
||||||
|
"url": "https://huggingface.co/furusu/PFG/resolve/main/pfg-wd15beta2-n10.pt",
|
||||||
|
"size": "31.5MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shape_predictor_68_face_landmarks.dat [Face Analysis]",
|
||||||
|
"type": "Shape Predictor",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/comfyui_faceanalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "shape_predictor_68_face_landmarks.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/shape_predictor_68_face_landmarks.dat",
|
||||||
|
"size": "99.7MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dlib_face_recognition_resnet_model_v1.dat [Face Analysis]",
|
||||||
|
"type": "Face Recognition",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/comfyui_faceanalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "dlib_face_recognition_resnet_model_v1.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/dlib_face_recognition_resnet_model_v1.dat",
|
||||||
|
"size": "22.5MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ID-Animator/animator.ckpt",
|
||||||
|
"type": "ID-Animator",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/comfyui_id_animator/models",
|
||||||
|
"description": "ID-Animator checkpoint",
|
||||||
|
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
||||||
|
"filename": "animator.ckpt",
|
||||||
|
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/animator.ckpt",
|
||||||
|
"size": "247.3MB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ID-Animator/mm_sd_v15_v2.ckpt",
|
||||||
|
"type": "ID-Animator",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/comfyui_id_animator/models/animatediff_models",
|
||||||
|
"description": "AnimateDiff checkpoint for ID-Animator",
|
||||||
|
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
||||||
|
"filename": "mm_sd_v15_v2.ckpt",
|
||||||
|
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/mm_sd_v15_v2.ckpt",
|
||||||
|
"size": "1.82GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ID-Animator/image_encoder",
|
||||||
|
"type": "ID-Animator",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "custom_nodes/comfyui_id_animator/models/image_encoder",
|
||||||
|
"description": "CLIP Image encoder for ID-Animator",
|
||||||
|
"reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator",
|
||||||
|
"filename": "model.safetensors",
|
||||||
|
"url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/image_encoder/model.safetensors",
|
||||||
|
"size": "2.53GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Doubiiu/ToonCrafter model checkpoint",
|
||||||
|
"type": "checkpoint",
|
||||||
|
"base": "ToonCrafter",
|
||||||
|
"save_path": "custom_nodes/comfyui-tooncrafter/ToonCrafter/checkpoints/tooncrafter_512_interp_v1",
|
||||||
|
"description": "ToonCrafter checkpoint model for ComfyUI-ToonCrafter",
|
||||||
|
"reference": "https://huggingface.co/Doubiiu/ToonCrafter/tree/main",
|
||||||
|
"filename": "model.ckpt",
|
||||||
|
"url": "https://huggingface.co/Doubiiu/ToonCrafter/resolve/main/model.ckpt",
|
||||||
|
"size": "10.5GB"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "BAAI/SegGPT",
|
||||||
|
"type": "SegGPT",
|
||||||
|
"base": "SegGPT",
|
||||||
|
"save_path": "custom_nodes/comfyui-seggpt",
|
||||||
|
"description": "SegGPT",
|
||||||
|
"reference": "https://huggingface.co/BAAI/SegGPT",
|
||||||
|
"filename": "seggpt_vit_large.pth",
|
||||||
|
"url": "https://huggingface.co/BAAI/SegGPT/resolve/main/seggpt_vit_large.pth",
|
||||||
|
"size": "1.48GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kohya-ss/ControlNet-LLLite: SDXL Canny Anime",
|
||||||
|
"type": "controlnet",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "custom_nodes/ControlNet-LLLite-ComfyUI/models",
|
||||||
|
"description": "An extremely compactly designed controlnet model (a.k.a. ControlNet-LLLite). Note: The model structure is highly experimental and may be subject to change in the future.",
|
||||||
|
"reference": "https://huggingface.co/kohya-ss/controlnet-lllite",
|
||||||
|
"filename": "controllllite_v01032064e_sdxl_canny_anime.safetensors",
|
||||||
|
"url": "https://huggingface.co/kohya-ss/controlnet-lllite/resolve/main/controllllite_v01032064e_sdxl_canny_anime.safetensors",
|
||||||
|
"size": "46.2MB"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,87 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "kijai",
|
||||||
|
"title": "ComfyUI-StableXWrapper",
|
||||||
|
"reference": "https://github.com/kijai/ComfyUI-StableXWrapper",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI wrapper for [a/StableX normal](https://github.com/Stable-X/StableNormal)/[a/delight](https://github.com/Stable-X/StableDelight) models"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "GHOSTLXH",
|
||||||
|
"title": "ComfyUI-Counternodes",
|
||||||
|
"reference": "https://github.com/GHOSTLXH/ComfyUI-Counternodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node group contains a series of ComfyUI nodes with built-in counters and specific output results based on the counter's output, aimed at implementing folder traversal functionality in the ComfyUI frontend. For specific examples, please refer to the sample workflow. Of course, you can also use your imagination to create other interesting things."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "gmorks",
|
||||||
|
"title": "ComfyUI Animagine prompt",
|
||||||
|
"reference": "https://github.com/gmorks/ComfyUI-Animagine-Prompt",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Comfy UI node to prompt build for [a/https://huggingface.co/cagliostrolab/animagine-xl-4.0](https://huggingface.co/cagliostrolab/animagine-xl-4.0) model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Kayarte",
|
||||||
|
"title": "GeoNodes",
|
||||||
|
"reference": "https://github.com/Kayarte/GeoNodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py"
|
||||||
|
],
|
||||||
|
"install_type": "copy",
|
||||||
|
"description": "GIS Processing Nodes for ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "checkbins",
|
||||||
|
"title": "checkbin-comfy",
|
||||||
|
"id": "checkbin",
|
||||||
|
"reference": "https://github.com/checkbins/checkbin-comfy",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/checkbins/checkbin-comfy"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "These nodes allow you to make Checkbin comparisons."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ShmuelRonen",
|
||||||
|
"title": "ComfyUI Janus Pro Vision",
|
||||||
|
"reference": "https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI custom node extension that integrates the Janus-Pro-7B vision-language model from DeepSeek AI on your's local computer, enabling powerful image understanding and multi-turn conversation capabilities."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ZHO-ZHO-ZHO",
|
||||||
|
"title": "ComfyUI-DeepSeek-JanusPro",
|
||||||
|
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "risunobushi",
|
||||||
|
"title": "ComfyUI_DisplacementMapTools",
|
||||||
|
"reference": "https://github.com/risunobushi/ComfyUI_DisplacementMapTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Extract Displacement Map Node, Displace Logo"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "Dr.Lt.Data",
|
"author": "Dr.Lt.Data",
|
||||||
"title": "ComfyUI Connection Helper",
|
"title": "ComfyUI Connection Helper",
|
||||||
@@ -148,13 +228,13 @@
|
|||||||
{
|
{
|
||||||
"author": "ProGamerGov",
|
"author": "ProGamerGov",
|
||||||
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
||||||
"id": "pytorch360convert",
|
"id": "comfyui-pytorch360convert",
|
||||||
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A collection of custom nodes for working and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as 'VR photography', 'image sphere', and 360 pano."
|
"description": "A collection of custom nodes for working with and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "Conor-Collins",
|
"author": "Conor-Collins",
|
||||||
@@ -607,89 +687,6 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This collection provides four additional nodes for loading and managing Hunyuan Video LoRAs in ComfyUI"
|
"description": "This collection provides four additional nodes for loading and managing Hunyuan Video LoRAs in ComfyUI"
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Kidev",
|
|
||||||
"title": "ComfyUI Fisheye Effects Nodes",
|
|
||||||
"reference": "https://github.com/Kidev/ComfyUI-Fisheye-effects",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Kidev/ComfyUI-Fisheye-effects"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Provides tools for applying and removing fisheye lens effects from images."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "feixuetuba",
|
|
||||||
"title": "Spleeter",
|
|
||||||
"reference": "https://github.com/feixuetuba/Spleeter",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/feixuetuba/Spleeter"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a ComfyUI plugin based on [a/Spleeter](https://github.com/deezer/spleete). The model files are available on BaiduNetDisk. After downloading the model, place it in the checkpoints directory."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "aidec",
|
|
||||||
"title": "Comfyui_TextBatch_aidec",
|
|
||||||
"reference": "https://github.com/aidec/Comfyui_TextBatch_aidec",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "The Text Queue Processor can split text into groups line by line for batch processing (unfinished, with noticeable bugs still being fixed). Currently, on the first run, it may only process one item. Once that is completed, running it again usually works fine. After each run, the `start_index` needs to be manually reset. Occasionally, strange issues occur, such as multiple queues being added at once, while other times it works perfectly fine. The potential causes are still under investigation."
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"author": "hellercommaa",
|
|
||||||
"title": "Hunyuan Video Resolutions",
|
|
||||||
"id": "hunyuanvideoresolutions",
|
|
||||||
"reference": "https://github.com/HellerCommaA/ComfyUI-VideoResolutions",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/HellerCommaA/ComfyUI-VideoResolutions"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A super simple node that outputs common video resolutions as 2 integers for Hunyuan and others!"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Gourieff",
|
|
||||||
"title": "comfyui-reactor-node",
|
|
||||||
"reference": "https://github.com/Gourieff/ComfyUI-ReActor",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Gourieff/ComfyUI-ReActor"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "The Fast and Simple Face Swap Extension Node for ComfyUI, based on ReActor SD-WebUI Face Swap Extension"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author" : "strand1",
|
|
||||||
"title": "ComfyUI-Autogen",
|
|
||||||
"reference": "https://github.com/strand1/ComfyUI-Autogen",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/strand1/ComfyUI-Autogen"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A collection of nodes for using Autogen with ComfyUI\n[a/AutoGen](https://github.com/microsoft/AutoGen): assistant agents, group chats, code executor, etc."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "BoyuanJiang",
|
|
||||||
"title": "FitDiT[official] - High-fidelity Virtual Try-on",
|
|
||||||
"id": "fitdit",
|
|
||||||
"reference": "https://github.com/BoyuanJiang/FitDiT/tree/FitDiT-ComfyUI",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/BoyuanJiang/FitDiT-ComfyUI"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "FitDiT is designed for high-fidelity virtual try-on using Diffusion Transformers (DiT)."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ryanontheinside",
|
|
||||||
"title": "ComfyUI_ProfilerX",
|
|
||||||
"reference": "https://github.com/ryanontheinside/ComfyUI_ProfilerX",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ryanontheinside/ComfyUI_ProfilerX"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Node and workflow profiling. Find bottlenecks in your workflows. See trends over time."
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2164,7 +2164,11 @@
|
|||||||
"BriaEraser",
|
"BriaEraser",
|
||||||
"BriaGenFill",
|
"BriaGenFill",
|
||||||
"BriaTailoredGen",
|
"BriaTailoredGen",
|
||||||
|
"ImageExpansionNode",
|
||||||
"ReimagineNode",
|
"ReimagineNode",
|
||||||
|
"RemoveForegroundNode",
|
||||||
|
"ReplaceBgNode",
|
||||||
|
"RmbgNode",
|
||||||
"ShotByImageNode",
|
"ShotByImageNode",
|
||||||
"ShotByTextNode",
|
"ShotByTextNode",
|
||||||
"TailoredModelInfoNode",
|
"TailoredModelInfoNode",
|
||||||
@@ -2375,7 +2379,9 @@
|
|||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
|
"ClownsharKSamplerGuide_Beta",
|
||||||
"ClownsharKSamplerGuides",
|
"ClownsharKSamplerGuides",
|
||||||
|
"ClownsharKSamplerGuides_Beta",
|
||||||
"ClownsharKSamplerOptions",
|
"ClownsharKSamplerOptions",
|
||||||
"ClownsharKSamplerOptions_SDE_Noise",
|
"ClownsharKSamplerOptions_SDE_Noise",
|
||||||
"ClownsharkSamplerOptions_FrameWeights",
|
"ClownsharkSamplerOptions_FrameWeights",
|
||||||
@@ -2986,6 +2992,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
"FluxPro11_TOGETHER",
|
||||||
"FluxPro_TOGETHER",
|
"FluxPro_TOGETHER",
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
@@ -3854,6 +3861,19 @@
|
|||||||
"title_aux": "ComfyUI-SD3-Powerlab"
|
"title_aux": "ComfyUI-SD3-Powerlab"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes": [
|
||||||
|
[
|
||||||
|
"AlternatingOutput",
|
||||||
|
"AlternatingOutputB",
|
||||||
|
"ImageCounter",
|
||||||
|
"IntervalCounter",
|
||||||
|
"IntervalCounterB",
|
||||||
|
"LoadPromptFromTXT"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
||||||
[
|
[
|
||||||
"ConcatenateString",
|
"ConcatenateString",
|
||||||
@@ -4694,7 +4714,9 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
||||||
[
|
[
|
||||||
"LatentNormalizedLanczosResize"
|
"LatentNormalizedLanczosResize",
|
||||||
|
"RescaledPAG",
|
||||||
|
"RescaledSEG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Comfy Latent Tools"
|
"title_aux": "Comfy Latent Tools"
|
||||||
@@ -5023,6 +5045,14 @@
|
|||||||
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py": [
|
||||||
|
[
|
||||||
|
"GISDetectionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "GeoNodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
||||||
[
|
[
|
||||||
"list_filter_FilterImageListByIndexList",
|
"list_filter_FilterImageListByIndexList",
|
||||||
@@ -5165,6 +5195,7 @@
|
|||||||
"ADE_AdjustWeightIndivAttnAdd",
|
"ADE_AdjustWeightIndivAttnAdd",
|
||||||
"ADE_AdjustWeightIndivAttnMult",
|
"ADE_AdjustWeightIndivAttnMult",
|
||||||
"ADE_AdjustWeightIndivMult",
|
"ADE_AdjustWeightIndivMult",
|
||||||
|
"ADE_AncestralOptions",
|
||||||
"ADE_AnimateDiffCombine",
|
"ADE_AnimateDiffCombine",
|
||||||
"ADE_AnimateDiffKeyframe",
|
"ADE_AnimateDiffKeyframe",
|
||||||
"ADE_AnimateDiffLoRALoader",
|
"ADE_AnimateDiffLoRALoader",
|
||||||
@@ -5959,7 +5990,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
||||||
[
|
[
|
||||||
"SecureAPI-SecureAPI"
|
"SecureAPI-SecureAPI",
|
||||||
|
"SecureAPI-SecureAPI-AWS"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Secure API Call"
|
"title_aux": "ComfyUI Secure API Call"
|
||||||
@@ -6291,6 +6323,7 @@
|
|||||||
"DJZDatamoshV2",
|
"DJZDatamoshV2",
|
||||||
"DatasetWordcloud",
|
"DatasetWordcloud",
|
||||||
"DeadPixelEffect",
|
"DeadPixelEffect",
|
||||||
|
"DepthBasedPixelization",
|
||||||
"DinskyPlus",
|
"DinskyPlus",
|
||||||
"DinskyPlusV2",
|
"DinskyPlusV2",
|
||||||
"DjzDatabendingV1",
|
"DjzDatabendingV1",
|
||||||
@@ -6339,11 +6372,13 @@
|
|||||||
"RetroVideoText",
|
"RetroVideoText",
|
||||||
"ScreensaverGenerator",
|
"ScreensaverGenerator",
|
||||||
"ScreensaverGeneratorV2",
|
"ScreensaverGeneratorV2",
|
||||||
|
"ScreensaverGeneratorV3",
|
||||||
"SequentialNumberGenerator",
|
"SequentialNumberGenerator",
|
||||||
"StringChaos",
|
"StringChaos",
|
||||||
"StringWeights",
|
"StringWeights",
|
||||||
"Technicolor3Strip_v1",
|
"Technicolor3Strip_v1",
|
||||||
"Technicolor3Strip_v2",
|
"Technicolor3Strip_v2",
|
||||||
|
"ThinkSeeker",
|
||||||
"ThreeToneStyler",
|
"ThreeToneStyler",
|
||||||
"TrianglesPlus",
|
"TrianglesPlus",
|
||||||
"TrianglesPlusV2",
|
"TrianglesPlusV2",
|
||||||
@@ -6364,6 +6399,7 @@
|
|||||||
"VideoMazeV1",
|
"VideoMazeV1",
|
||||||
"VideoMazeV2",
|
"VideoMazeV2",
|
||||||
"VideoNoiseFactory",
|
"VideoNoiseFactory",
|
||||||
|
"VideoPyramidV1",
|
||||||
"VideoRingPainter",
|
"VideoRingPainter",
|
||||||
"VideoTemperatureV1",
|
"VideoTemperatureV1",
|
||||||
"VideoTimecode",
|
"VideoTimecode",
|
||||||
@@ -7905,7 +7941,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -7947,6 +7984,15 @@
|
|||||||
"title_aux": "ComfyUI-ImageMotionGuider"
|
"title_aux": "ComfyUI-ImageMotionGuider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision": [
|
||||||
|
[
|
||||||
|
"UnifiedVisionAnalyzer",
|
||||||
|
"VisionModelLoader"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Janus Pro Vision"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||||
[
|
[
|
||||||
"D_LatentSyncNode",
|
"D_LatentSyncNode",
|
||||||
@@ -8407,6 +8453,7 @@
|
|||||||
"StarFiveWildcards",
|
"StarFiveWildcards",
|
||||||
"StarImageSwitch",
|
"StarImageSwitch",
|
||||||
"StarTextFilter",
|
"StarTextFilter",
|
||||||
|
"StarTextInput",
|
||||||
"Starupscale"
|
"Starupscale"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -8948,6 +8995,7 @@
|
|||||||
"tri3d-skin-feathered-padded-mask",
|
"tri3d-skin-feathered-padded-mask",
|
||||||
"tri3d-swap-pixels",
|
"tri3d-swap-pixels",
|
||||||
"tri3d_H_Stack_Images",
|
"tri3d_H_Stack_Images",
|
||||||
|
"tri3d_Image_extend",
|
||||||
"tri3d_NSFWFilter",
|
"tri3d_NSFWFilter",
|
||||||
"tri3d_SaveImage_absolute",
|
"tri3d_SaveImage_absolute",
|
||||||
"tri3d_SaveText_absolute",
|
"tri3d_SaveText_absolute",
|
||||||
@@ -9461,6 +9509,7 @@
|
|||||||
"VrchAudioGenresNode",
|
"VrchAudioGenresNode",
|
||||||
"VrchAudioRecorderNode",
|
"VrchAudioRecorderNode",
|
||||||
"VrchAudioSaverNode",
|
"VrchAudioSaverNode",
|
||||||
|
"VrchAudioWebViewerNode",
|
||||||
"VrchBooleanKeyControlNode",
|
"VrchBooleanKeyControlNode",
|
||||||
"VrchChannelOSCControlNode",
|
"VrchChannelOSCControlNode",
|
||||||
"VrchChannelX4OSCControlNode",
|
"VrchChannelX4OSCControlNode",
|
||||||
@@ -10176,6 +10225,16 @@
|
|||||||
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro": [
|
||||||
|
[
|
||||||
|
"Janus_ImageGeneration",
|
||||||
|
"Janus_ModelLoader",
|
||||||
|
"Janus_MultimodalUnderstanding"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
||||||
[
|
[
|
||||||
"DepthFM_Literative_Zho",
|
"DepthFM_Literative_Zho",
|
||||||
@@ -10664,6 +10723,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
|
"ImageQueueProcessor",
|
||||||
"TextBatch",
|
"TextBatch",
|
||||||
"TextQueueProcessor",
|
"TextQueueProcessor",
|
||||||
"TextSplitCounter"
|
"TextSplitCounter"
|
||||||
@@ -11300,8 +11360,10 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/asagi4/comfyui-utility-nodes": [
|
"https://github.com/asagi4/comfyui-utility-nodes": [
|
||||||
[
|
[
|
||||||
|
"MUConditioningCutoff",
|
||||||
"MUForceCacheClear",
|
"MUForceCacheClear",
|
||||||
"MUJinjaRender",
|
"MUJinjaRender",
|
||||||
|
"MURemoveControlNet",
|
||||||
"MUReplaceModelWeights",
|
"MUReplaceModelWeights",
|
||||||
"MUSimpleWildcard"
|
"MUSimpleWildcard"
|
||||||
],
|
],
|
||||||
@@ -11313,10 +11375,11 @@
|
|||||||
[
|
[
|
||||||
"TryOffFluxFillModelNode",
|
"TryOffFluxFillModelNode",
|
||||||
"TryOffModelNode",
|
"TryOffModelNode",
|
||||||
|
"TryOffQuantizerNode",
|
||||||
"TryOffRunNode"
|
"TryOffRunNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Try Off w/ Flux and CatVTON"
|
"title_aux": "ComfyUI-Flux-TryOff"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/aszc-dev/ComfyUI-CoreMLSuite": [
|
"https://github.com/aszc-dev/ComfyUI-CoreMLSuite": [
|
||||||
@@ -11630,6 +11693,7 @@
|
|||||||
"Range Float",
|
"Range Float",
|
||||||
"Range Integer",
|
"Range Integer",
|
||||||
"Ratio Advanced",
|
"Ratio Advanced",
|
||||||
|
"RemoveTextBetween",
|
||||||
"Resize Image for SDXL",
|
"Resize Image for SDXL",
|
||||||
"SD3TextConditioningWithOptionsOnePrompt",
|
"SD3TextConditioningWithOptionsOnePrompt",
|
||||||
"SRFloatPromptInput",
|
"SRFloatPromptInput",
|
||||||
@@ -12149,9 +12213,13 @@
|
|||||||
"Input: Integer (lab)",
|
"Input: Integer (lab)",
|
||||||
"Input: Multiline (lab)",
|
"Input: Multiline (lab)",
|
||||||
"Input: String (lab)",
|
"Input: String (lab)",
|
||||||
|
"List: Checkpoints (lab)",
|
||||||
"List: Limit (lab)",
|
"List: Limit (lab)",
|
||||||
|
"List: LoRAs (lab)",
|
||||||
"List: Merge (lab)",
|
"List: Merge (lab)",
|
||||||
"List: Random Seeds (lab)",
|
"List: Random Seeds (lab)",
|
||||||
|
"List: Samplers (lab)",
|
||||||
|
"List: Schedulers (lab)",
|
||||||
"List: from Elements (lab)",
|
"List: from Elements (lab)",
|
||||||
"List: from File (backend) (lab)",
|
"List: from File (backend) (lab)",
|
||||||
"List: from Multiline (lab)",
|
"List: from Multiline (lab)",
|
||||||
@@ -12875,6 +12943,7 @@
|
|||||||
"chaosaiart_controlnet_weidgth",
|
"chaosaiart_controlnet_weidgth",
|
||||||
"chaosaiart_convert",
|
"chaosaiart_convert",
|
||||||
"chaosaiart_convert_Prompt",
|
"chaosaiart_convert_Prompt",
|
||||||
|
"chaosaiart_deepseek_fix",
|
||||||
"chaosaiart_forPreview",
|
"chaosaiart_forPreview",
|
||||||
"chaosaiart_image_loop",
|
"chaosaiart_image_loop",
|
||||||
"chaosaiart_img2gif",
|
"chaosaiart_img2gif",
|
||||||
@@ -12898,6 +12967,19 @@
|
|||||||
"title_aux": "Chaosaiart-Nodes"
|
"title_aux": "Chaosaiart-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/checkbins/checkbin-comfy": [
|
||||||
|
[
|
||||||
|
"Checkbin Get Image Bin",
|
||||||
|
"Checkbin Get String Bin",
|
||||||
|
"Checkbin Save Image Bin",
|
||||||
|
"Checkbin Save String Bin",
|
||||||
|
"Checkbin Start Run",
|
||||||
|
"Checkbin Submit Bin"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "checkbin-comfy"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
||||||
[
|
[
|
||||||
"CombineStrings",
|
"CombineStrings",
|
||||||
@@ -15357,10 +15439,14 @@
|
|||||||
"RecoursePolar",
|
"RecoursePolar",
|
||||||
"RecourseStrings",
|
"RecourseStrings",
|
||||||
"SelInClip",
|
"SelInClip",
|
||||||
|
"SelInFloat",
|
||||||
"SelInGuider",
|
"SelInGuider",
|
||||||
|
"SelInInt",
|
||||||
"SelInLatent",
|
"SelInLatent",
|
||||||
"SelInModel",
|
"SelInModel",
|
||||||
"SelInPolar",
|
"SelInPolar",
|
||||||
|
"SelInSampler",
|
||||||
|
"SelInSigmas",
|
||||||
"SelInVae",
|
"SelInVae",
|
||||||
"SelOutCLIP",
|
"SelOutCLIP",
|
||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
@@ -15624,6 +15710,7 @@
|
|||||||
[
|
[
|
||||||
"FL_API_Base64_ImageLoader",
|
"FL_API_Base64_ImageLoader",
|
||||||
"FL_API_ImageSaver",
|
"FL_API_ImageSaver",
|
||||||
|
"FL_AnimeLineExtractor",
|
||||||
"FL_ApplyMask",
|
"FL_ApplyMask",
|
||||||
"FL_Ascii",
|
"FL_Ascii",
|
||||||
"FL_BatchAlign",
|
"FL_BatchAlign",
|
||||||
@@ -15640,6 +15727,7 @@
|
|||||||
"FL_GPT_Vision",
|
"FL_GPT_Vision",
|
||||||
"FL_Glitch",
|
"FL_Glitch",
|
||||||
"FL_GoogleDriveDownloader",
|
"FL_GoogleDriveDownloader",
|
||||||
|
"FL_GoogleDriveImageDownloader",
|
||||||
"FL_GradGenerator",
|
"FL_GradGenerator",
|
||||||
"FL_HFHubModelUploader",
|
"FL_HFHubModelUploader",
|
||||||
"FL_HF_Character",
|
"FL_HF_Character",
|
||||||
@@ -16212,6 +16300,7 @@
|
|||||||
"Random Image Output",
|
"Random Image Output",
|
||||||
"Random Mixer",
|
"Random Mixer",
|
||||||
"Random Output",
|
"Random Output",
|
||||||
|
"Remove Text",
|
||||||
"SaveText|plush",
|
"SaveText|plush",
|
||||||
"Tagger",
|
"Tagger",
|
||||||
"Text (Any)",
|
"Text (Any)",
|
||||||
@@ -16257,6 +16346,14 @@
|
|||||||
"title_aux": "String Converter"
|
"title_aux": "String Converter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
|
||||||
|
[
|
||||||
|
"AnimaginePrompt"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Animagine prompt"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
||||||
[
|
[
|
||||||
"PreviewImageWithDiscord"
|
"PreviewImageWithDiscord"
|
||||||
@@ -19468,6 +19565,16 @@
|
|||||||
"title_aux": "ComfyUI-SUPIR"
|
"title_aux": "ComfyUI-SUPIR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper": [
|
||||||
|
[
|
||||||
|
"DifferenceExtractorNode",
|
||||||
|
"DownloadAndLoadStableXModel",
|
||||||
|
"StableXProcessImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-StableXWrapper"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/kijai/ComfyUI-depth-fm": [
|
"https://github.com/kijai/ComfyUI-depth-fm": [
|
||||||
[
|
[
|
||||||
"Depth_fm"
|
"Depth_fm"
|
||||||
@@ -21707,7 +21814,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -21715,7 +21821,8 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
@@ -22409,6 +22516,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nilor-corp/nilor-nodes": [
|
"https://github.com/nilor-corp/nilor-nodes": [
|
||||||
[
|
[
|
||||||
|
"Nilor Categorize String",
|
||||||
"Nilor Count Images In Directory",
|
"Nilor Count Images In Directory",
|
||||||
"Nilor Int To List Of Bools",
|
"Nilor Int To List Of Bools",
|
||||||
"Nilor Interpolated Float List",
|
"Nilor Interpolated Float List",
|
||||||
@@ -22574,7 +22682,8 @@
|
|||||||
"LayeredInfiniteZoom",
|
"LayeredInfiniteZoom",
|
||||||
"Replicate flux 1.1 pro ultra",
|
"Replicate flux 1.1 pro ultra",
|
||||||
"ReplicateAPI_flux_1_1_pro_ultra",
|
"ReplicateAPI_flux_1_1_pro_ultra",
|
||||||
"ReplicateAPI_flux_fill_pro"
|
"ReplicateAPI_flux_fill_pro",
|
||||||
|
"WebViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Node_Fun_ComfyUI"
|
"title_aux": "Node_Fun_ComfyUI"
|
||||||
@@ -23147,7 +23256,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
||||||
[
|
[
|
||||||
"DeviceSelectorMultiGPU"
|
"DeviceSelectorMultiGPU",
|
||||||
|
"HunyuanVideoEmbeddingsAdapter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-MultiGPU"
|
"title_aux": "ComfyUI-MultiGPU"
|
||||||
@@ -23679,6 +23789,15 @@
|
|||||||
"title_aux": "ComfyUI-Similarity-Score"
|
"title_aux": "ComfyUI-Similarity-Score"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools": [
|
||||||
|
[
|
||||||
|
"DisplaceLogo",
|
||||||
|
"ExtractDisplacementMap"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_DisplacementMapTools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
||||||
[
|
[
|
||||||
"FrequencyCombination",
|
"FrequencyCombination",
|
||||||
@@ -23939,7 +24058,7 @@
|
|||||||
"title_aux": "ComfyUI_ProfilerX"
|
"title_aux": "ComfyUI_ProfilerX"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
"DeltaControl",
|
||||||
@@ -23951,13 +24070,17 @@
|
|||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
"IntervalControl",
|
||||||
|
"LazyCondition",
|
||||||
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"SimilarityFilter",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TAESDVaeDecode",
|
"TextRenderer",
|
||||||
"TAESDVaeEncode"
|
"YOLOSimilarityCompare"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
||||||
@@ -24156,12 +24279,27 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
||||||
[
|
[
|
||||||
"FlipStreamLoader",
|
"FlipStreamBatchPrompt",
|
||||||
"FlipStreamOption",
|
"FlipStreamFileSelect_AnimateDiffModel",
|
||||||
"FlipStreamPrompt",
|
"FlipStreamFileSelect_Checkpoints",
|
||||||
"FlipStreamSource",
|
"FlipStreamFileSelect_TensorRT",
|
||||||
"FlipStreamSwitchVFI",
|
"FlipStreamFileSelect_VAE",
|
||||||
"FlipStreamUpdate",
|
"FlipStreamFileSelect_VideoSrc",
|
||||||
|
"FlipStreamFilmVfi",
|
||||||
|
"FlipStreamGetParam",
|
||||||
|
"FlipStreamImageSize",
|
||||||
|
"FlipStreamInputBox",
|
||||||
|
"FlipStreamPreviewBox",
|
||||||
|
"FlipStreamSegMask",
|
||||||
|
"FlipStreamSelectBox_Samplers",
|
||||||
|
"FlipStreamSelectBox_Scheduler",
|
||||||
|
"FlipStreamSetParam",
|
||||||
|
"FlipStreamSlider",
|
||||||
|
"FlipStreamSwitchImage",
|
||||||
|
"FlipStreamSwitchLatent",
|
||||||
|
"FlipStreamTextBox",
|
||||||
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25229,9 +25367,12 @@
|
|||||||
[
|
[
|
||||||
"LoadEXR",
|
"LoadEXR",
|
||||||
"LoadEXRFrames",
|
"LoadEXRFrames",
|
||||||
|
"LoadImageAndPrompt",
|
||||||
"LoadLatentEXR",
|
"LoadLatentEXR",
|
||||||
"SaveEXR",
|
"SaveEXR",
|
||||||
"SaveEXRFrames",
|
"SaveEXRFrames",
|
||||||
|
"SaveImageAndPromptExact",
|
||||||
|
"SaveImageAndPromptIncremental",
|
||||||
"SaveLatentEXR",
|
"SaveLatentEXR",
|
||||||
"SaveTiff"
|
"SaveTiff"
|
||||||
],
|
],
|
||||||
@@ -26665,7 +26806,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
||||||
[
|
[
|
||||||
"LorasEndpoint"
|
"LoRAGateway"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Lora-Manager"
|
"title_aux": "ComfyUI-Lora-Manager"
|
||||||
@@ -27208,6 +27349,7 @@
|
|||||||
[
|
[
|
||||||
"ImageAnalyzer",
|
"ImageAnalyzer",
|
||||||
"JanusChatAnalyzer",
|
"JanusChatAnalyzer",
|
||||||
|
"JanusImageGenerator",
|
||||||
"JanusProLoader"
|
"JanusProLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -575,7 +575,7 @@
|
|||||||
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "clip",
|
"base": "clip",
|
||||||
"save_path": "clip/long_clip",
|
"save_path": "text_encoders/long_clip",
|
||||||
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
||||||
"reference": "https://huggingface.co/zer0int",
|
"reference": "https://huggingface.co/zer0int",
|
||||||
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
|
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
|
||||||
@@ -586,7 +586,7 @@
|
|||||||
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
"name": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors [Long CLIP L]",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"base": "clip",
|
"base": "clip",
|
||||||
"save_path": "clip/long_clip",
|
"save_path": "text_encoders/long_clip",
|
||||||
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
"description": "Greatly improved TEXT + Detail (as CLIP-L for Flux.1)",
|
||||||
"reference": "https://huggingface.co/zer0int",
|
"reference": "https://huggingface.co/zer0int",
|
||||||
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-TE-only-HF.safetensors",
|
"filename": "ViT-L-14-TEXT-detail-improved-hiT-GmP-TE-only-HF.safetensors",
|
||||||
@@ -629,18 +629,6 @@
|
|||||||
"size": "1.39GB"
|
"size": "1.39GB"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"name": "BAAI/SegGPT",
|
|
||||||
"type": "SegGPT",
|
|
||||||
"base": "SegGPT",
|
|
||||||
"save_path": "custom_nodes/comfyui-SegGPT",
|
|
||||||
"description": "SegGPT",
|
|
||||||
"reference": "https://huggingface.co/BAAI/SegGPT",
|
|
||||||
"filename": "seggpt_vit_large.pth",
|
|
||||||
"url": "https://huggingface.co/BAAI/SegGPT/resolve/main/seggpt_vit_large.pth",
|
|
||||||
"size": "1.48GB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "DMD2 LoRA (4steps)",
|
"name": "DMD2 LoRA (4steps)",
|
||||||
"type": "lora",
|
"type": "lora",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "comfyui-manager"
|
name = "comfyui-manager"
|
||||||
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||||
version = "3.10"
|
version = "3.12"
|
||||||
license = { file = "LICENSE.txt" }
|
license = { file = "LICENSE.txt" }
|
||||||
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user