Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a67145d80 | ||
|
|
2e55bc470c | ||
|
|
cf0d038978 | ||
|
|
92e7db1082 | ||
|
|
c45c47f935 | ||
|
|
341e27f9a3 | ||
|
|
ab167175c9 | ||
|
|
3c2933338f | ||
|
|
829784fa50 | ||
|
|
3c45f8dc91 | ||
|
|
f8ebf7c6ad |
@@ -4067,6 +4067,17 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Image metrics nodes for ComfyUI"
|
"description": "Image metrics nodes for ComfyUI"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "amorano",
|
||||||
|
"title": "Jovi_MIDI",
|
||||||
|
"id": "jovi_midi",
|
||||||
|
"reference": "https://github.com/Amorano/Jovi_MIDI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Read and Process data from MIDI devices inside of ComfyUI."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "Umikaze-job",
|
"author": "Umikaze-job",
|
||||||
"title": "select_folder_path_easy",
|
"title": "select_folder_path_easy",
|
||||||
@@ -6496,6 +6507,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Add nodes that generates danbooru tags by [a/Dart(Danbooru Tags Transformer)](https://huggingface.co/p1atdev/dart-v1-sft)."
|
"description": "Add nodes that generates danbooru tags by [a/Dart(Danbooru Tags Transformer)](https://huggingface.co/p1atdev/dart-v1-sft)."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "nkchocoai",
|
||||||
|
"title": "ComfyUI-DanbooruPromptQuiz",
|
||||||
|
"reference": "https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node is for playing the game of guessing prompts by looking at images generated from prompts output by TIPO, Tagger, etc.."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "JaredTherriault",
|
"author": "JaredTherriault",
|
||||||
"title": "ComfyUI-JNodes",
|
"title": "ComfyUI-JNodes",
|
||||||
@@ -11042,6 +11063,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Custom node for using Prompt S/R in XY Plot\nAlso includes nodes for listing generic parameters like seed and cfg\nEasy to manipulate as elements are separated by line breaks\nDesigned for use with the XY Plot custom node qq-nodes-comfyui, but may work with other custom nodes as well"
|
"description": "Custom node for using Prompt S/R in XY Plot\nAlso includes nodes for listing generic parameters like seed and cfg\nEasy to manipulate as elements are separated by line breaks\nDesigned for use with the XY Plot custom node qq-nodes-comfyui, but may work with other custom nodes as well"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "da2el-ai",
|
||||||
|
"title": "D2-PromptSelector-comfyUI",
|
||||||
|
"reference": "https://github.com/da2el-ai/D2-PromptSelector-comfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/da2el-ai/D2-PromptSelector-comfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a version of [a/sd-d2-prompt-selector](https://github.com/da2el-ai/sd-d2-prompt-selector) reworked for ComfyUI. It's just a prototype that I've put together for now. The random syntax of sd-d2-prompt-selector cannot be used; instead, the DynamicPrompt syntax is used"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "nat-chan",
|
"author": "nat-chan",
|
||||||
"title": "ComfyUI-Transceiver📡",
|
"title": "ComfyUI-Transceiver📡",
|
||||||
@@ -19966,7 +19997,7 @@
|
|||||||
"https://github.com/DJ-Tribefull/Comfyui_FOCUS_nodes"
|
"https://github.com/DJ-Tribefull/Comfyui_FOCUS_nodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This is a small collection of nodes designed for efficiency and the reduction of screen clutter. I work primarily with a two-stage SDXL workflow, so some of the nodes are tailored to that, but many of the most useful nodes can be used in any context."
|
"description": "A collection of nodes designed for efficiency and the reduction of screen-clutter. Includes a Global Seed controller with boolean toggles, SDXL All-in-One conditioner, a custom SDXL control module, Wildcard processor, Style Injector, and more. [w/WARNING: Updating this node-pack wil overwrite any changes you've made to the included wildcards and styles. Please backup your folders before updating.]"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "KLL535",
|
"author": "KLL535",
|
||||||
@@ -20190,7 +20221,18 @@
|
|||||||
"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 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."
|
"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, and 360 degree photos."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ProGamerGov",
|
||||||
|
"title": "Preview 360 Panorama for ComfyUI",
|
||||||
|
"id": "comfyui-preview360panorama",
|
||||||
|
"reference": "https://github.com/ProGamerGov/ComfyUI_preview360panorama",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A custom ComfyUI node for interactive 360° panorama image previews. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano, and 360 degree photos."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "burnsbert",
|
"author": "burnsbert",
|
||||||
@@ -20251,7 +20293,7 @@
|
|||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager"
|
"https://github.com/willmiao/ComfyUI-Lora-Manager"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "LoRA Manager for ComfyUI - An extension for managing LoRA models with previews and metadata integration."
|
"description": "LoRA Manager for ComfyUI - Access it at http://localhost:8188/loras for managing LoRA models with previews and metadata integration."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "tigeryy2",
|
"author": "tigeryy2",
|
||||||
@@ -20364,6 +20406,28 @@
|
|||||||
"install_type": "git-clone",
|
"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."
|
"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": "agilly1989",
|
||||||
|
"title": "ComfyUI_agilly1989_motorway",
|
||||||
|
"reference": "https://github.com/agilly1989/ComfyUI_agilly1989_motorway",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This my implemenation of a `pipe` in ComfyUI. Is it better or worse than others? No idea."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "A2V Multi Image Composite",
|
||||||
|
"author": "AiartvnTeam",
|
||||||
|
"id": "Aiartvn",
|
||||||
|
"description": "Node for compositing multiple images with interactive preview and layer management",
|
||||||
|
"repository": "https://github.com/aiartvn/A2V_Multi_Image_Composite",
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
"tags": ["image", "composite", "layer", "blend", "transform"]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -493,6 +493,7 @@
|
|||||||
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
||||||
[
|
[
|
||||||
"ColorshiftColor",
|
"ColorshiftColor",
|
||||||
|
"CsCFill",
|
||||||
"CsCPaletteEditor"
|
"CsCPaletteEditor"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1427,6 +1428,18 @@
|
|||||||
"title_aux": "Jovi_GLSL"
|
"title_aux": "Jovi_GLSL"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI": [
|
||||||
|
[
|
||||||
|
"MIDI FILTER (JOV_MIDI)",
|
||||||
|
"MIDI FILTER EZ (JOV_MIDI)",
|
||||||
|
"MIDI LOADER (JOV_MIDI)",
|
||||||
|
"MIDI MESSAGE (JOV_MIDI)",
|
||||||
|
"MIDI READER (JOV_MIDI)"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Jovi_MIDI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Amorano/Jovi_Measure": [
|
"https://github.com/Amorano/Jovi_Measure": [
|
||||||
[
|
[
|
||||||
"BLUR EFFECT (JOV_MEASURE)",
|
"BLUR EFFECT (JOV_MEASURE)",
|
||||||
@@ -5017,6 +5030,7 @@
|
|||||||
[
|
[
|
||||||
"Simple Extract Lora From Text",
|
"Simple Extract Lora From Text",
|
||||||
"Simple Image Saver (as Forge)",
|
"Simple Image Saver (as Forge)",
|
||||||
|
"Simple Load Image With Metadata",
|
||||||
"Simple Load Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -6433,10 +6447,13 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
||||||
[
|
[
|
||||||
|
"ImageToText",
|
||||||
"KSamplerWithVAE",
|
"KSamplerWithVAE",
|
||||||
"SelectLatentSize1MP",
|
"SelectLatentSize1MP",
|
||||||
"SelectLatentSize2MP",
|
"SelectLatentSize2MP",
|
||||||
"TextEncode3in1",
|
"TextEncode3in1",
|
||||||
|
"TextToText",
|
||||||
|
"UpscaleImageBy1_5x",
|
||||||
"UpscaleLatentBy1_5x"
|
"UpscaleLatentBy1_5x"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -7060,6 +7077,14 @@
|
|||||||
"title_aux": "ComfyUI-StringsAndThings"
|
"title_aux": "ComfyUI-StringsAndThings"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama": [
|
||||||
|
[
|
||||||
|
"PanoramaViewerNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Preview 360 Panorama for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
||||||
[
|
[
|
||||||
"Crop Image with Coords",
|
"Crop Image with Coords",
|
||||||
@@ -10647,6 +10672,18 @@
|
|||||||
"title_aux": "ComfyUI-styles-all"
|
"title_aux": "ComfyUI-styles-all"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway": [
|
||||||
|
[
|
||||||
|
"MotorwayFloat",
|
||||||
|
"MotorwayInt",
|
||||||
|
"MotorwaySeed",
|
||||||
|
"MotorwayStr",
|
||||||
|
"MotorwayStrMulti"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_agilly1989_motorway"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
||||||
[
|
[
|
||||||
"GCPReadImageNode",
|
"GCPReadImageNode",
|
||||||
@@ -10722,6 +10759,14 @@
|
|||||||
"title_aux": "Comfy UI FatLabels"
|
"title_aux": "Comfy UI FatLabels"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite": [
|
||||||
|
[
|
||||||
|
"A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "A2V Multi Image Composite"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
"ImageQueueProcessor",
|
"ImageQueueProcessor",
|
||||||
@@ -15458,7 +15503,8 @@
|
|||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
"SelOutPolar",
|
"SelOutPolar",
|
||||||
"Selector",
|
"Selector",
|
||||||
"Selector Advanced"
|
"Selector Advanced",
|
||||||
|
"Selector Hub"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
||||||
@@ -19314,6 +19360,7 @@
|
|||||||
"GetImageRangeFromBatch",
|
"GetImageRangeFromBatch",
|
||||||
"GetImageSizeAndCount",
|
"GetImageSizeAndCount",
|
||||||
"GetImagesFromBatchIndexed",
|
"GetImagesFromBatchIndexed",
|
||||||
|
"GetLatentRangeFromBatch",
|
||||||
"GetLatentsFromBatchIndexed",
|
"GetLatentsFromBatchIndexed",
|
||||||
"GetMaskSizeAndCount",
|
"GetMaskSizeAndCount",
|
||||||
"GradientToFloat",
|
"GradientToFloat",
|
||||||
@@ -19332,6 +19379,7 @@
|
|||||||
"ImageGridComposite2x2",
|
"ImageGridComposite2x2",
|
||||||
"ImageGridComposite3x3",
|
"ImageGridComposite3x3",
|
||||||
"ImageGridtoBatch",
|
"ImageGridtoBatch",
|
||||||
|
"ImageNoiseAugmentation",
|
||||||
"ImageNormalize_Neg1_To_1",
|
"ImageNormalize_Neg1_To_1",
|
||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
@@ -19347,6 +19395,7 @@
|
|||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
"JoinStrings",
|
"JoinStrings",
|
||||||
|
"LeapfusionHunyuanI2VPatcher",
|
||||||
"LoadAndResizeImage",
|
"LoadAndResizeImage",
|
||||||
"LoadImagesFromFolderKJ",
|
"LoadImagesFromFolderKJ",
|
||||||
"LoadResAdapterNormalization",
|
"LoadResAdapterNormalization",
|
||||||
@@ -22582,6 +22631,15 @@
|
|||||||
"title_aux": "ComfyUI OpenAI Prompter"
|
"title_aux": "ComfyUI OpenAI Prompter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz": [
|
||||||
|
[
|
||||||
|
"DanbooruPromptComparison",
|
||||||
|
"DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DanbooruPromptQuiz"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
||||||
[
|
[
|
||||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||||
@@ -22687,6 +22745,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
||||||
[
|
[
|
||||||
|
"IframeView",
|
||||||
"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",
|
||||||
@@ -26170,6 +26229,7 @@
|
|||||||
"quadmoonChangeBackground",
|
"quadmoonChangeBackground",
|
||||||
"quadmoonConvertBoolToString",
|
"quadmoonConvertBoolToString",
|
||||||
"quadmoonConvertFloatToString",
|
"quadmoonConvertFloatToString",
|
||||||
|
"quadmoonConvertImageToPrompt",
|
||||||
"quadmoonConvertIntToString",
|
"quadmoonConvertIntToString",
|
||||||
"quadmoonConvertNormalizeHW",
|
"quadmoonConvertNormalizeHW",
|
||||||
"quadmoonConvertNumberToString",
|
"quadmoonConvertNumberToString",
|
||||||
@@ -27146,6 +27206,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
||||||
[
|
[
|
||||||
|
"Auto-LLM-Chat",
|
||||||
"Auto-LLM-Text",
|
"Auto-LLM-Text",
|
||||||
"Auto-LLM-Text-Vision",
|
"Auto-LLM-Text-Vision",
|
||||||
"Auto-LLM-Vision"
|
"Auto-LLM-Vision"
|
||||||
|
|||||||
4109
github-stats.json
4109
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, 13]
|
version_code = [3, 14]
|
||||||
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 '')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -372,13 +372,16 @@ def nickname_filter(json_obj):
|
|||||||
task_queue = queue.Queue()
|
task_queue = queue.Queue()
|
||||||
nodepack_result = {}
|
nodepack_result = {}
|
||||||
model_result = {}
|
model_result = {}
|
||||||
|
tasks_in_progress = set()
|
||||||
|
task_worker_lock = threading.Lock()
|
||||||
|
|
||||||
async def task_worker():
|
async def task_worker():
|
||||||
global task_queue
|
global task_queue
|
||||||
global nodepack_result
|
global nodepack_result
|
||||||
global model_result
|
global model_result
|
||||||
|
global tasks_in_progress
|
||||||
|
|
||||||
async def do_install(item):
|
async def do_install(item) -> str:
|
||||||
ui_id, node_spec_str, channel, mode, skip_post_install = item
|
ui_id, node_spec_str, channel, mode, skip_post_install = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -386,8 +389,7 @@ async def task_worker():
|
|||||||
|
|
||||||
if node_spec is None:
|
if node_spec is None:
|
||||||
logging.error(f"Cannot resolve install target: '{node_spec_str}'")
|
logging.error(f"Cannot resolve install target: '{node_spec_str}'")
|
||||||
nodepack_result[ui_id] = f"Cannot resolve install target: '{node_spec_str}'"
|
return f"Cannot resolve install target: '{node_spec_str}'"
|
||||||
return
|
|
||||||
|
|
||||||
node_name, version_spec, is_specified = node_spec
|
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)
|
res = await core.unified_manager.install_by_id(node_name, version_spec, channel, mode, return_postinstall=skip_post_install)
|
||||||
@@ -395,20 +397,18 @@ async def task_worker():
|
|||||||
|
|
||||||
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
nodepack_result[ui_id] = res.msg
|
return res.msg
|
||||||
return
|
|
||||||
|
|
||||||
elif not res.result:
|
elif not res.result:
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
nodepack_result[ui_id] = res.msg
|
return res.msg
|
||||||
return
|
|
||||||
|
|
||||||
nodepack_result[ui_id] = 'success'
|
return 'success'
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
nodepack_result[ui_id] = f"Installation failed:\n{node_spec_str}"
|
return f"Installation failed:\n{node_spec_str}"
|
||||||
|
|
||||||
async def do_update(item):
|
async def do_update(item) -> str:
|
||||||
ui_id, node_name, node_ver = item
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -417,70 +417,68 @@ async def task_worker():
|
|||||||
manager_util.clear_pip_cache()
|
manager_util.clear_pip_cache()
|
||||||
|
|
||||||
if res.result:
|
if res.result:
|
||||||
nodepack_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
||||||
nodepack_result[ui_id] = f"An error occurred while updating '{node_name}'."
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
nodepack_result[ui_id] = f"An error occurred while updating '{node_name}'."
|
|
||||||
|
|
||||||
async def do_fix(item):
|
return f"An error occurred while updating '{node_name}'."
|
||||||
|
|
||||||
|
async def do_fix(item) -> str:
|
||||||
ui_id, node_name, node_ver = item
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
res = core.unified_manager.unified_fix(node_name, node_ver)
|
res = core.unified_manager.unified_fix(node_name, node_ver)
|
||||||
|
|
||||||
if res.result:
|
if res.result:
|
||||||
nodepack_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
else:
|
else:
|
||||||
logging.error(res.msg)
|
logging.error(res.msg)
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
||||||
nodepack_result[ui_id] = f"An error occurred while fixing '{node_name}@{node_ver}'."
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
nodepack_result[ui_id] = f"An error occurred while fixing '{node_name}@{node_ver}'."
|
|
||||||
|
|
||||||
async def do_uninstall(item):
|
return f"An error occurred while fixing '{node_name}@{node_ver}'."
|
||||||
|
|
||||||
|
async def do_uninstall(item) -> str:
|
||||||
ui_id, node_name, is_unknown = item
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
||||||
|
|
||||||
if res.result:
|
if res.result:
|
||||||
nodepack_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
||||||
nodepack_result[ui_id] = f"An error occurred while uninstalling '{node_name}'."
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
nodepack_result[ui_id] = f"An error occurred while uninstalling '{node_name}'."
|
|
||||||
|
|
||||||
async def do_disable(item):
|
return f"An error occurred while uninstalling '{node_name}'."
|
||||||
|
|
||||||
|
async def do_disable(item) -> str:
|
||||||
ui_id, node_name, is_unknown = item
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
nodepack_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
|
|
||||||
nodepack_result[ui_id] = f"Failed to disable: '{node_name}'"
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
nodepack_result[ui_id] = f"Failed to disable: '{node_name}'"
|
|
||||||
|
|
||||||
async def do_install_model(item):
|
return f"Failed to disable: '{node_name}'"
|
||||||
|
|
||||||
|
async def do_install_model(item) -> str:
|
||||||
ui_id, json_data = item
|
ui_id, json_data = item
|
||||||
|
|
||||||
model_path = get_model_path(json_data)
|
model_path = get_model_path(json_data)
|
||||||
model_url = json_data['url']
|
model_url = json_data['url']
|
||||||
|
|
||||||
|
res = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if model_path is not None:
|
if model_path is not None:
|
||||||
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}'")
|
||||||
@@ -494,24 +492,21 @@ async def task_worker():
|
|||||||
res = True
|
res = True
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
model_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
else:
|
else:
|
||||||
res = download_url_with_agent(model_url, model_path)
|
res = download_url_with_agent(model_url, model_path)
|
||||||
if res and model_path.endswith('.zip'):
|
if res and model_path.endswith('.zip'):
|
||||||
res = core.unzip(model_path)
|
res = core.unzip(model_path)
|
||||||
else:
|
else:
|
||||||
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
||||||
return
|
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
model_result[ui_id] = 'success'
|
return 'success'
|
||||||
return
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
||||||
|
|
||||||
model_result[ui_id] = f"Model installation error: {model_url}"
|
return f"Model installation error: {model_url}"
|
||||||
|
|
||||||
stats = {}
|
stats = {}
|
||||||
|
|
||||||
@@ -529,32 +524,44 @@ async def task_worker():
|
|||||||
'total_count': total_count, 'done_count': done_count})
|
'total_count': total_count, 'done_count': done_count})
|
||||||
nodepack_result = {}
|
nodepack_result = {}
|
||||||
task_queue = queue.Queue()
|
task_queue = queue.Queue()
|
||||||
return
|
return # terminate worker thread
|
||||||
|
|
||||||
kind, item = task_queue.get()
|
with task_worker_lock:
|
||||||
|
kind, item = task_queue.get()
|
||||||
|
tasks_in_progress.add((kind, item[0]))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if kind == 'install':
|
if kind == 'install':
|
||||||
await do_install(item)
|
msg = await do_install(item)
|
||||||
if kind == 'install-model':
|
elif kind == 'install-model':
|
||||||
await do_install_model(item)
|
msg = await do_install_model(item)
|
||||||
elif kind == 'update':
|
elif kind == 'update':
|
||||||
await do_update(item)
|
msg = await do_update(item)
|
||||||
elif kind == 'fix':
|
elif kind == 'fix':
|
||||||
await do_fix(item)
|
msg = await do_fix(item)
|
||||||
elif kind == 'uninstall':
|
elif kind == 'uninstall':
|
||||||
await do_uninstall(item)
|
msg = await do_uninstall(item)
|
||||||
elif kind == 'disable':
|
elif kind == 'disable':
|
||||||
await do_disable(item)
|
msg = await do_disable(item)
|
||||||
|
else:
|
||||||
|
msg = "Unexpected kind: " + kind
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
msg = f"Exception: {(kind, item)}"
|
||||||
|
|
||||||
|
with task_worker_lock:
|
||||||
|
tasks_in_progress.remove((kind, item[0]))
|
||||||
|
|
||||||
|
ui_id = item[0]
|
||||||
|
if kind == 'install-model':
|
||||||
|
model_result[ui_id] = msg
|
||||||
|
ui_target = "model_manager"
|
||||||
|
else:
|
||||||
|
nodepack_result[ui_id] = msg
|
||||||
|
ui_target = "nodepack_manager"
|
||||||
|
|
||||||
stats[kind] = stats.get(kind, 0) + 1
|
stats[kind] = stats.get(kind, 0) + 1
|
||||||
|
|
||||||
ui_target = "model_manager" if kind == 'install-model' else 'nodepack_manager'
|
|
||||||
|
|
||||||
print(f"kind: {kind} / ui_target: {ui_target}")
|
|
||||||
|
|
||||||
PromptServer.instance.send_sync("cm-queue-status",
|
PromptServer.instance.send_sync("cm-queue-status",
|
||||||
{'status': 'in_progress', 'target': item[0], 'ui_target': ui_target,
|
{'status': 'in_progress', 'target': item[0], 'ui_target': ui_target,
|
||||||
'total_count': total_count, 'done_count': done_count})
|
'total_count': total_count, 'done_count': done_count})
|
||||||
@@ -1073,11 +1080,15 @@ async def reset_queue(request):
|
|||||||
async def queue_count(request):
|
async def queue_count(request):
|
||||||
global task_queue
|
global task_queue
|
||||||
|
|
||||||
done_count = len(nodepack_result) + len(model_result)
|
with task_worker_lock:
|
||||||
total_count = done_count + task_queue.qsize()
|
done_count = len(nodepack_result) + len(model_result)
|
||||||
in_progress = task_worker_thread is not None and task_worker_thread.is_alive()
|
in_progress_count = len(tasks_in_progress)
|
||||||
|
total_count = done_count + in_progress_count + task_queue.qsize()
|
||||||
|
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
|
||||||
|
|
||||||
return web.json_response({'total_count': total_count, 'done_count': done_count, 'in_progress': in_progress})
|
return web.json_response({
|
||||||
|
'total_count': total_count, 'done_count': done_count, 'in_progress_count': in_progress_count,
|
||||||
|
'is_processing': is_processing})
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/manager/queue/install")
|
@routes.post("/manager/queue/install")
|
||||||
@@ -1129,7 +1140,7 @@ async def install_custom_node(request):
|
|||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
task_worker_thread = None
|
task_worker_thread:threading.Thread = None
|
||||||
|
|
||||||
@routes.get("/manager/queue/start")
|
@routes.get("/manager/queue/start")
|
||||||
async def queue_start(request):
|
async def queue_start(request):
|
||||||
|
|||||||
@@ -811,11 +811,15 @@ const isOutputNode = (node) => {
|
|||||||
class ManagerMenuDialog extends ComfyDialog {
|
class ManagerMenuDialog extends ComfyDialog {
|
||||||
createControlsMid() {
|
createControlsMid() {
|
||||||
let self = this;
|
let self = this;
|
||||||
|
const isElectron = 'electronAPI' in window;
|
||||||
|
|
||||||
update_comfyui_button =
|
update_comfyui_button =
|
||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
type: "button",
|
type: "button",
|
||||||
textContent: "Update ComfyUI",
|
textContent: "Update ComfyUI",
|
||||||
|
style: {
|
||||||
|
display: isElectron ? 'none' : 'block'
|
||||||
|
},
|
||||||
onclick:
|
onclick:
|
||||||
() => updateComfyUI()
|
() => updateComfyUI()
|
||||||
});
|
});
|
||||||
@@ -824,6 +828,9 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
type: "button",
|
type: "button",
|
||||||
textContent: "Switch ComfyUI",
|
textContent: "Switch ComfyUI",
|
||||||
|
style: {
|
||||||
|
display: isElectron ? 'none' : 'block'
|
||||||
|
},
|
||||||
onclick:
|
onclick:
|
||||||
() => switchComfyUI()
|
() => switchComfyUI()
|
||||||
});
|
});
|
||||||
@@ -1268,10 +1275,22 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
|
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isVisible() {
|
||||||
|
return this.element?.style?.display !== "none";
|
||||||
|
}
|
||||||
|
|
||||||
show() {
|
show() {
|
||||||
this.element.style.display = "block";
|
this.element.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleVisibility() {
|
||||||
|
if (this.isVisible) {
|
||||||
|
this.close();
|
||||||
|
} else {
|
||||||
|
this.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleWorkflowGalleryButtonClick(e) {
|
handleWorkflowGalleryButtonClick(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -1389,6 +1408,41 @@ app.registerExtension({
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
commands: [
|
||||||
|
{
|
||||||
|
id: "Comfy.Manager.Menu.ToggleVisibility",
|
||||||
|
label: "Toggle Manager Menu Visibility",
|
||||||
|
icon: "mdi mdi-puzzle",
|
||||||
|
function: () => {
|
||||||
|
if (!manager_instance) {
|
||||||
|
setManagerInstance(new ManagerMenuDialog());
|
||||||
|
manager_instance.show();
|
||||||
|
} else {
|
||||||
|
manager_instance.toggleVisibility();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "Comfy.Manager.CustomNodesManager.ToggleVisibility",
|
||||||
|
label: "Toggle Custom Nodes Manager Visibility",
|
||||||
|
icon: "pi pi-server",
|
||||||
|
function: () => {
|
||||||
|
if (CustomNodesManager.instance?.isVisible) {
|
||||||
|
CustomNodesManager.instance.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!manager_instance) {
|
||||||
|
setManagerInstance(new ManagerMenuDialog());
|
||||||
|
}
|
||||||
|
if (!CustomNodesManager.instance) {
|
||||||
|
CustomNodesManager.instance = new CustomNodesManager(app, self);
|
||||||
|
}
|
||||||
|
CustomNodesManager.instance.show(CustomNodesManager.ShowMode.NORMAL);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
$el("style", {
|
$el("style", {
|
||||||
textContent: style,
|
textContent: style,
|
||||||
@@ -1606,4 +1660,4 @@ async function set_default_ui()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_default_ui();
|
set_default_ui();
|
||||||
|
|||||||
@@ -1287,7 +1287,7 @@ export class CustomNodesManager {
|
|||||||
async installNodes(list, btn, title, selected_version) {
|
async installNodes(list, btn, title, selected_version) {
|
||||||
let stats = await api.fetchApi('/manager/queue/status');
|
let stats = await api.fetchApi('/manager/queue/status');
|
||||||
stats = await stats.json();
|
stats = await stats.json();
|
||||||
if(stats.in_progress) {
|
if(stats.is_processing) {
|
||||||
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1916,4 +1916,8 @@ export class CustomNodesManager {
|
|||||||
close() {
|
close() {
|
||||||
this.element.style.display = "none";
|
this.element.style.display = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isVisible() {
|
||||||
|
return this.element?.style?.display !== "none";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -634,7 +634,7 @@ export class ModelManager {
|
|||||||
let stats = await api.fetchApi('/manager/queue/status');
|
let stats = await api.fetchApi('/manager/queue/status');
|
||||||
|
|
||||||
stats = await stats.json();
|
stats = await stats.json();
|
||||||
if(stats.in_progress) {
|
if(stats.is_processing) {
|
||||||
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,36 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "molbal",
|
||||||
|
"title": "comfy-url-fetcher [WIP]",
|
||||||
|
"reference": "https://github.com/molbal/comfy-url-fetcher",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/molbal/comfy-url-fetcher"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Fetches URLs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "myAiLemon",
|
||||||
|
"title": "MagicAutomaticPicture [WIP]",
|
||||||
|
"reference": "https://github.com/myAiLemon/MagicAutomaticPicture",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/myAiLemon/MagicAutomaticPicture"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A comfyui node package that can generate pictures and automatically save positive prompts and eliminate unwanted prompts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "neverbiasu",
|
||||||
|
"title": "ComfyUI_Output_as_Input",
|
||||||
|
"reference": "https://github.com/a-und-b/ComfyUI_Output_as_Input",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/a-und-b/ComfyUI_Output_as_Input"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a simple custom ComfyUI node that allows you to easily use recent output images as input in your workflows. It does not allow image uploads on purpose and does not require any additional dependencies.\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "neverbiasu",
|
"author": "neverbiasu",
|
||||||
"title": "ComfyUI-DeepSeek",
|
"title": "ComfyUI-DeepSeek",
|
||||||
|
|||||||
@@ -1629,7 +1629,9 @@
|
|||||||
"FrameBlend",
|
"FrameBlend",
|
||||||
"ImageReferenceUpdate",
|
"ImageReferenceUpdate",
|
||||||
"ImageSelector",
|
"ImageSelector",
|
||||||
|
"KeypointsInput",
|
||||||
"KeypointsInputNode",
|
"KeypointsInputNode",
|
||||||
|
"KeypointsToPose",
|
||||||
"KeypointsToPoseNode",
|
"KeypointsToPoseNode",
|
||||||
"SimHashCompare",
|
"SimHashCompare",
|
||||||
"TemporalConsistency"
|
"TemporalConsistency"
|
||||||
@@ -1762,6 +1764,14 @@
|
|||||||
"title_aux": "ComfyUI-Blenderesque-Nodes [WIP]"
|
"title_aux": "ComfyUI-Blenderesque-Nodes [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/a-und-b/ComfyUI_Output_as_Input": [
|
||||||
|
[
|
||||||
|
"OutputAsInput"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_Output_as_Input"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aiden1020/ComfyUI_Artcoder": [
|
"https://github.com/aiden1020/ComfyUI_Artcoder": [
|
||||||
[
|
[
|
||||||
"ArtCoder"
|
"ArtCoder"
|
||||||
@@ -3325,7 +3335,6 @@
|
|||||||
"MangaPanelSegmentationNode",
|
"MangaPanelSegmentationNode",
|
||||||
"Mask_Fill_Region",
|
"Mask_Fill_Region",
|
||||||
"MatchImageCountToMaskCount",
|
"MatchImageCountToMaskCount",
|
||||||
"ParallaxGPUTest",
|
|
||||||
"ParallaxTest",
|
"ParallaxTest",
|
||||||
"RandomCharacterPrompts",
|
"RandomCharacterPrompts",
|
||||||
"TargetLocationCrop",
|
"TargetLocationCrop",
|
||||||
@@ -4082,6 +4091,14 @@
|
|||||||
"title_aux": "ComfyUI-FramerComfy [WIP]"
|
"title_aux": "ComfyUI-FramerComfy [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/molbal/comfy-url-fetcher": [
|
||||||
|
[
|
||||||
|
"URL Fetcher"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfy-url-fetcher [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/monate0615/ComfyUI-Affine-Transform": [
|
"https://github.com/monate0615/ComfyUI-Affine-Transform": [
|
||||||
[
|
[
|
||||||
"AffineTransform"
|
"AffineTransform"
|
||||||
@@ -4115,6 +4132,17 @@
|
|||||||
"title_aux": "ComfyUI-Claude-I2T"
|
"title_aux": "ComfyUI-Claude-I2T"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/myAiLemon/MagicAutomaticPicture": [
|
||||||
|
[
|
||||||
|
"EditableStringNode",
|
||||||
|
"IntegratedCLIPTextEncodeWithExtract",
|
||||||
|
"ProcessAndSave",
|
||||||
|
"StringConcat"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "MagicAutomaticPicture [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/naderzare/comfyui-inodes": [
|
"https://github.com/naderzare/comfyui-inodes": [
|
||||||
[
|
[
|
||||||
"IAzureAiApi",
|
"IAzureAiApi",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
|
{
|
||||||
|
"author": "PramaLLC",
|
||||||
|
"title": "ComfyUI BEN - Background Erase Network",
|
||||||
|
"reference": "https://github.com/PramaLLC/BEN2_ComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/PramaLLC/BEN2_ComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Remove backgrounds from images with [a/BEN2](https://huggingface.co/PramaLLC/BEN2) in ComfyUI\nOriginal repo: [a/https://github.com/DoctorDiffusion/ComfyUI-BEN](https://github.com/DoctorDiffusion/ComfyUI-BEN)"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "BlenderNeko",
|
"author": "BlenderNeko",
|
||||||
"title": "ltdrdata/ComfyUI_TiledKSampler",
|
"title": "ltdrdata/ComfyUI_TiledKSampler",
|
||||||
|
|||||||
@@ -11,6 +11,16 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "myAiLemon",
|
||||||
|
"title": "MagicGetPromptAutomatically",
|
||||||
|
"reference": "https://github.com/myAiLemon/MagicGetPromptAutomatically",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/myAiLemon/MagicGetPromptAutomatically"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A plug-in that can automatically generate pictures and save txt files in comfyui"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "ryanontheinside",
|
"author": "ryanontheinside",
|
||||||
"title": "ComfyUI_ScavengerHunt [REMOVED]",
|
"title": "ComfyUI_ScavengerHunt [REMOVED]",
|
||||||
|
|||||||
@@ -8,7 +8,72 @@
|
|||||||
"description": "If you see this message, your ComfyUI-Manager is outdated.\nRecent channel provides only the list of the latest nodes. If you want to find the complete node list, please go to the Default channel.\nMaking LoRA has never been easier!"
|
"description": "If you see this message, your ComfyUI-Manager is outdated.\nRecent channel provides only the list of the latest nodes. If you want to find the complete node list, please go to the Default channel.\nMaking LoRA has never been easier!"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"title": "A2V Multi Image Composite",
|
||||||
|
"author": "AiartvnTeam",
|
||||||
|
"id": "Aiartvn",
|
||||||
|
"description": "Node for compositing multiple images with interactive preview and layer management",
|
||||||
|
"repository": "https://github.com/aiartvn/A2V_Multi_Image_Composite",
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
"tags": ["image", "composite", "layer", "blend", "transform"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ProGamerGov",
|
||||||
|
"title": "Preview 360 Panorama for ComfyUI",
|
||||||
|
"id": "comfyui-preview360panorama",
|
||||||
|
"reference": "https://github.com/ProGamerGov/ComfyUI_preview360panorama",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A custom ComfyUI node for interactive 360° panorama image previews. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano, and 360 degree photos."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "amorano",
|
||||||
|
"title": "Jovi_MIDI",
|
||||||
|
"id": "jovi_midi",
|
||||||
|
"reference": "https://github.com/Amorano/Jovi_MIDI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Read and Process data from MIDI devices inside of ComfyUI."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "nkchocoai",
|
||||||
|
"title": "ComfyUI-DanbooruPromptQuiz",
|
||||||
|
"reference": "https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node is for playing the game of guessing prompts by looking at images generated from prompts output by TIPO, Tagger, etc.."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "agilly1989",
|
||||||
|
"title": "ComfyUI_agilly1989_motorway",
|
||||||
|
"reference": "https://github.com/agilly1989/ComfyUI_agilly1989_motorway",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This my implemenation of a `pipe` in ComfyUI. Is it better or worse than others? No idea."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "da2el-ai",
|
||||||
|
"title": "D2-PromptSelector-comfyUI",
|
||||||
|
"reference": "https://github.com/da2el-ai/D2-PromptSelector-comfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/da2el-ai/D2-PromptSelector-comfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a version of [a/sd-d2-prompt-selector](https://github.com/da2el-ai/sd-d2-prompt-selector) reworked for ComfyUI. It's just a prototype that I've put together for now. The random syntax of sd-d2-prompt-selector cannot be used; instead, the DynamicPrompt syntax is used"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "kijai",
|
"author": "kijai",
|
||||||
"title": "ComfyUI-StableXWrapper",
|
"title": "ComfyUI-StableXWrapper",
|
||||||
@@ -667,26 +732,6 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A Text To Speech node using Kokoro TTS in ComfyUI."
|
"description": "A Text To Speech node using Kokoro TTS in ComfyUI."
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "WangPengxing",
|
|
||||||
"title": "ComfyUI WPX Nodes",
|
|
||||||
"reference": "https://github.com/WangPengxing/ComfyUI_WPX_Node",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/WangPengxing/ComfyUI_WPX_Node"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A custom node collection for ComfyUI, offering enhanced image processing features."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "PixelFunAI",
|
|
||||||
"title": "Hunyuan LoRA Loader Nodes",
|
|
||||||
"reference": "https://github.com/PixelFunAI/ComfyUI_PixelFun",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/PixelFunAI/ComfyUI_PixelFun"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This collection provides four additional nodes for loading and managing Hunyuan Video LoRAs in ComfyUI"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -493,6 +493,7 @@
|
|||||||
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
||||||
[
|
[
|
||||||
"ColorshiftColor",
|
"ColorshiftColor",
|
||||||
|
"CsCFill",
|
||||||
"CsCPaletteEditor"
|
"CsCPaletteEditor"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1427,6 +1428,18 @@
|
|||||||
"title_aux": "Jovi_GLSL"
|
"title_aux": "Jovi_GLSL"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI": [
|
||||||
|
[
|
||||||
|
"MIDI FILTER (JOV_MIDI)",
|
||||||
|
"MIDI FILTER EZ (JOV_MIDI)",
|
||||||
|
"MIDI LOADER (JOV_MIDI)",
|
||||||
|
"MIDI MESSAGE (JOV_MIDI)",
|
||||||
|
"MIDI READER (JOV_MIDI)"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Jovi_MIDI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Amorano/Jovi_Measure": [
|
"https://github.com/Amorano/Jovi_Measure": [
|
||||||
[
|
[
|
||||||
"BLUR EFFECT (JOV_MEASURE)",
|
"BLUR EFFECT (JOV_MEASURE)",
|
||||||
@@ -5017,6 +5030,7 @@
|
|||||||
[
|
[
|
||||||
"Simple Extract Lora From Text",
|
"Simple Extract Lora From Text",
|
||||||
"Simple Image Saver (as Forge)",
|
"Simple Image Saver (as Forge)",
|
||||||
|
"Simple Load Image With Metadata",
|
||||||
"Simple Load Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -6433,10 +6447,13 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
||||||
[
|
[
|
||||||
|
"ImageToText",
|
||||||
"KSamplerWithVAE",
|
"KSamplerWithVAE",
|
||||||
"SelectLatentSize1MP",
|
"SelectLatentSize1MP",
|
||||||
"SelectLatentSize2MP",
|
"SelectLatentSize2MP",
|
||||||
"TextEncode3in1",
|
"TextEncode3in1",
|
||||||
|
"TextToText",
|
||||||
|
"UpscaleImageBy1_5x",
|
||||||
"UpscaleLatentBy1_5x"
|
"UpscaleLatentBy1_5x"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -7060,6 +7077,14 @@
|
|||||||
"title_aux": "ComfyUI-StringsAndThings"
|
"title_aux": "ComfyUI-StringsAndThings"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama": [
|
||||||
|
[
|
||||||
|
"PanoramaViewerNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Preview 360 Panorama for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
||||||
[
|
[
|
||||||
"Crop Image with Coords",
|
"Crop Image with Coords",
|
||||||
@@ -10647,6 +10672,18 @@
|
|||||||
"title_aux": "ComfyUI-styles-all"
|
"title_aux": "ComfyUI-styles-all"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway": [
|
||||||
|
[
|
||||||
|
"MotorwayFloat",
|
||||||
|
"MotorwayInt",
|
||||||
|
"MotorwaySeed",
|
||||||
|
"MotorwayStr",
|
||||||
|
"MotorwayStrMulti"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_agilly1989_motorway"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
||||||
[
|
[
|
||||||
"GCPReadImageNode",
|
"GCPReadImageNode",
|
||||||
@@ -10722,6 +10759,14 @@
|
|||||||
"title_aux": "Comfy UI FatLabels"
|
"title_aux": "Comfy UI FatLabels"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite": [
|
||||||
|
[
|
||||||
|
"A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "A2V Multi Image Composite"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
"ImageQueueProcessor",
|
"ImageQueueProcessor",
|
||||||
@@ -15458,7 +15503,8 @@
|
|||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
"SelOutPolar",
|
"SelOutPolar",
|
||||||
"Selector",
|
"Selector",
|
||||||
"Selector Advanced"
|
"Selector Advanced",
|
||||||
|
"Selector Hub"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
||||||
@@ -19314,6 +19360,7 @@
|
|||||||
"GetImageRangeFromBatch",
|
"GetImageRangeFromBatch",
|
||||||
"GetImageSizeAndCount",
|
"GetImageSizeAndCount",
|
||||||
"GetImagesFromBatchIndexed",
|
"GetImagesFromBatchIndexed",
|
||||||
|
"GetLatentRangeFromBatch",
|
||||||
"GetLatentsFromBatchIndexed",
|
"GetLatentsFromBatchIndexed",
|
||||||
"GetMaskSizeAndCount",
|
"GetMaskSizeAndCount",
|
||||||
"GradientToFloat",
|
"GradientToFloat",
|
||||||
@@ -19332,6 +19379,7 @@
|
|||||||
"ImageGridComposite2x2",
|
"ImageGridComposite2x2",
|
||||||
"ImageGridComposite3x3",
|
"ImageGridComposite3x3",
|
||||||
"ImageGridtoBatch",
|
"ImageGridtoBatch",
|
||||||
|
"ImageNoiseAugmentation",
|
||||||
"ImageNormalize_Neg1_To_1",
|
"ImageNormalize_Neg1_To_1",
|
||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
@@ -19347,6 +19395,7 @@
|
|||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
"JoinStrings",
|
"JoinStrings",
|
||||||
|
"LeapfusionHunyuanI2VPatcher",
|
||||||
"LoadAndResizeImage",
|
"LoadAndResizeImage",
|
||||||
"LoadImagesFromFolderKJ",
|
"LoadImagesFromFolderKJ",
|
||||||
"LoadResAdapterNormalization",
|
"LoadResAdapterNormalization",
|
||||||
@@ -22582,6 +22631,15 @@
|
|||||||
"title_aux": "ComfyUI OpenAI Prompter"
|
"title_aux": "ComfyUI OpenAI Prompter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz": [
|
||||||
|
[
|
||||||
|
"DanbooruPromptComparison",
|
||||||
|
"DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DanbooruPromptQuiz"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
||||||
[
|
[
|
||||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||||
@@ -22687,6 +22745,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
||||||
[
|
[
|
||||||
|
"IframeView",
|
||||||
"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",
|
||||||
@@ -26170,6 +26229,7 @@
|
|||||||
"quadmoonChangeBackground",
|
"quadmoonChangeBackground",
|
||||||
"quadmoonConvertBoolToString",
|
"quadmoonConvertBoolToString",
|
||||||
"quadmoonConvertFloatToString",
|
"quadmoonConvertFloatToString",
|
||||||
|
"quadmoonConvertImageToPrompt",
|
||||||
"quadmoonConvertIntToString",
|
"quadmoonConvertIntToString",
|
||||||
"quadmoonConvertNormalizeHW",
|
"quadmoonConvertNormalizeHW",
|
||||||
"quadmoonConvertNumberToString",
|
"quadmoonConvertNumberToString",
|
||||||
@@ -27146,6 +27206,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
||||||
[
|
[
|
||||||
|
"Auto-LLM-Chat",
|
||||||
"Auto-LLM-Text",
|
"Auto-LLM-Text",
|
||||||
"Auto-LLM-Text-Vision",
|
"Auto-LLM-Text-Vision",
|
||||||
"Auto-LLM-Vision"
|
"Auto-LLM-Vision"
|
||||||
|
|||||||
@@ -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.13"
|
version = "3.14"
|
||||||
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