Compare commits

...

18 Commits
3.11 ... 3.12

Author SHA1 Message Date
Dr.Lt.Data
4760deaf9c feat: custom-nodes-manager - background tasks(install/update/fix/disable/enable) 2025-02-01 11:22:01 +09:00
Dr.Lt.Data
0f7b9d02a0 improved: more friendly log messages. 2025-01-31 21:42:26 +09:00
Dr.Lt.Data
adc86c7945 update DB 2025-01-31 21:36:24 +09:00
Dr.Lt.Data
12969eda07 version marker 2025-01-31 09:12:05 +09:00
Dr.Lt.Data
e07952455f fixed: PIPFixer - crash if dev was installed. 2025-01-31 09:10:51 +09:00
Dr.Lt.Data
4494230854 improved: PIPFixer - support pytorch 2.6.0 2025-01-31 09:05:31 +09:00
Dr.Lt.Data
e8dd21c0c3 update DB 2025-01-31 08:48:59 +09:00
ProGamerGov
36ef1b2fd6 Fix import collision (#1500)
* Fix import collision

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-01-31 08:32:14 +09:00
Dr.Lt.Data
c3d2bd8ed1 update DB 2025-01-30 21:57:13 +09:00
Dr.Lt.Data
da2b4be539 update DB 2025-01-30 18:21:13 +09:00
Dr.Lt.Data
b5e11f85d5 update DB 2025-01-30 18:17:08 +09:00
Dr.Lt.Data
9e1b2f8912 update DB 2025-01-30 10:09:09 +09:00
Dr.Lt.Data
1e5f4b0267 update DB 2025-01-30 10:01:47 +09:00
ProGamerGov
4fedd03074 Improve extension description (#1496)
* Improve description

* Update extension-node-map.json
2025-01-30 10:01:15 +09:00
RyanOnTheInside
f6feaeea85 Update custom-node-list.json (#1497) 2025-01-30 10:00:49 +09:00
Jay Swanson
c8743c0ab7 Add checkbin custom nodes (#1498) 2025-01-30 10:00:17 +09:00
Dr.Lt.Data
3d80ed95ca update DB 2025-01-29 23:31:59 +09:00
Dr.Lt.Data
0a28bfa9c2 fixed: ruff violation 2025-01-29 23:17:15 +09:00
17 changed files with 3672 additions and 3048 deletions

View File

@@ -3231,6 +3231,16 @@
"install_type": "git-clone",
"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",
"title": "Comfyui-Lama",
@@ -4488,6 +4498,16 @@
"install_type": "git-clone",
"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",
"title": "qq-nodes-comfyui",
@@ -7532,6 +7552,16 @@
"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."
},
{
"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",
"title": "ComfyUI-Prediction",
@@ -12300,6 +12330,16 @@
"install_type": "git-clone",
"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",
"title": "ComfyUI_ZC_DrawShape",
@@ -14603,10 +14643,10 @@
{
"author": "RyanOnTheInside",
"title": "Nodes for use with real-time applications of ComfyUI",
"id": "realtimenodes",
"reference": "https://github.com/ryanontheinside/ComfyUI_RealTimeNodes",
"id": "comfyui_realtimenodes",
"reference": "https://github.com/ryanontheinside/ComfyUI_RealtimeNodes",
"files": [
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes"
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes"
],
"install_type": "git-clone",
"description": "These nodes are for real-time applications of ComfyUI."
@@ -14857,7 +14897,7 @@
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm"
],
"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",
@@ -15428,7 +15468,7 @@
"https://github.com/SeanScripts/ComfyUI-PixtralLlamaMolmoVision"
],
"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",
@@ -20144,13 +20184,13 @@
{
"author": "ProGamerGov",
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
"id": "pytorch360convert",
"id": "comfyui-pytorch360convert",
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
"files": [
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
],
"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",
@@ -20273,6 +20313,16 @@
"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."
},
{
"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",
"title": "ComfyUI Prompt Expander Node",
@@ -20293,6 +20343,28 @@
"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."
},
{
"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",
"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"
},
{

View File

@@ -2164,7 +2164,11 @@
"BriaEraser",
"BriaGenFill",
"BriaTailoredGen",
"ImageExpansionNode",
"ReimagineNode",
"RemoveForegroundNode",
"ReplaceBgNode",
"RmbgNode",
"ShotByImageNode",
"ShotByTextNode",
"TailoredModelInfoNode",
@@ -2375,7 +2379,9 @@
"ClownsharKSamplerAutomation",
"ClownsharKSamplerAutomation_Beta",
"ClownsharKSamplerGuide",
"ClownsharKSamplerGuide_Beta",
"ClownsharKSamplerGuides",
"ClownsharKSamplerGuides_Beta",
"ClownsharKSamplerOptions",
"ClownsharKSamplerOptions_SDE_Noise",
"ClownsharkSamplerOptions_FrameWeights",
@@ -2986,6 +2992,7 @@
],
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
[
"CharCountTextBox",
"FluxPro11_TOGETHER",
"FluxPro_TOGETHER",
"GenerateImage_VENICE",
@@ -3854,6 +3861,19 @@
"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": [
[
"ConcatenateString",
@@ -4695,7 +4715,8 @@
"https://github.com/JTriggerFish/ComfyLatentTools": [
[
"LatentNormalizedLanczosResize",
"RescaledPAG"
"RescaledPAG",
"RescaledSEG"
],
{
"title_aux": "Comfy Latent Tools"
@@ -5024,6 +5045,14 @@
"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": [
[
"list_filter_FilterImageListByIndexList",
@@ -5166,6 +5195,7 @@
"ADE_AdjustWeightIndivAttnAdd",
"ADE_AdjustWeightIndivAttnMult",
"ADE_AdjustWeightIndivMult",
"ADE_AncestralOptions",
"ADE_AnimateDiffCombine",
"ADE_AnimateDiffKeyframe",
"ADE_AnimateDiffLoRALoader",
@@ -5960,7 +5990,8 @@
],
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
[
"SecureAPI-SecureAPI"
"SecureAPI-SecureAPI",
"SecureAPI-SecureAPI-AWS"
],
{
"title_aux": "ComfyUI Secure API Call"
@@ -6292,6 +6323,7 @@
"DJZDatamoshV2",
"DatasetWordcloud",
"DeadPixelEffect",
"DepthBasedPixelization",
"DinskyPlus",
"DinskyPlusV2",
"DjzDatabendingV1",
@@ -6340,11 +6372,13 @@
"RetroVideoText",
"ScreensaverGenerator",
"ScreensaverGeneratorV2",
"ScreensaverGeneratorV3",
"SequentialNumberGenerator",
"StringChaos",
"StringWeights",
"Technicolor3Strip_v1",
"Technicolor3Strip_v2",
"ThinkSeeker",
"ThreeToneStyler",
"TrianglesPlus",
"TrianglesPlusV2",
@@ -6365,6 +6399,7 @@
"VideoMazeV1",
"VideoMazeV2",
"VideoNoiseFactory",
"VideoPyramidV1",
"VideoRingPainter",
"VideoTemperatureV1",
"VideoTimecode",
@@ -7906,7 +7941,8 @@
"FreeMemoryCLIP",
"FreeMemoryImage",
"FreeMemoryLatent",
"FreeMemoryModel"
"FreeMemoryModel",
"FreeMemoryString"
],
{
"title_aux": "ComfyUI-FreeMemory"
@@ -7948,6 +7984,15 @@
"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": [
[
"D_LatentSyncNode",
@@ -8408,6 +8453,7 @@
"StarFiveWildcards",
"StarImageSwitch",
"StarTextFilter",
"StarTextInput",
"Starupscale"
],
{
@@ -8949,6 +8995,7 @@
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels",
"tri3d_H_Stack_Images",
"tri3d_Image_extend",
"tri3d_NSFWFilter",
"tri3d_SaveImage_absolute",
"tri3d_SaveText_absolute",
@@ -9462,6 +9509,7 @@
"VrchAudioGenresNode",
"VrchAudioRecorderNode",
"VrchAudioSaverNode",
"VrchAudioWebViewerNode",
"VrchBooleanKeyControlNode",
"VrchChannelOSCControlNode",
"VrchChannelX4OSCControlNode",
@@ -10177,6 +10225,16 @@
"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": [
[
"DepthFM_Literative_Zho",
@@ -10665,6 +10723,7 @@
],
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
[
"ImageQueueProcessor",
"TextBatch",
"TextQueueProcessor",
"TextSplitCounter"
@@ -11301,8 +11360,10 @@
],
"https://github.com/asagi4/comfyui-utility-nodes": [
[
"MUConditioningCutoff",
"MUForceCacheClear",
"MUJinjaRender",
"MURemoveControlNet",
"MUReplaceModelWeights",
"MUSimpleWildcard"
],
@@ -11314,6 +11375,7 @@
[
"TryOffFluxFillModelNode",
"TryOffModelNode",
"TryOffQuantizerNode",
"TryOffRunNode"
],
{
@@ -11631,6 +11693,7 @@
"Range Float",
"Range Integer",
"Ratio Advanced",
"RemoveTextBetween",
"Resize Image for SDXL",
"SD3TextConditioningWithOptionsOnePrompt",
"SRFloatPromptInput",
@@ -12150,9 +12213,13 @@
"Input: Integer (lab)",
"Input: Multiline (lab)",
"Input: String (lab)",
"List: Checkpoints (lab)",
"List: Limit (lab)",
"List: LoRAs (lab)",
"List: Merge (lab)",
"List: Random Seeds (lab)",
"List: Samplers (lab)",
"List: Schedulers (lab)",
"List: from Elements (lab)",
"List: from File (backend) (lab)",
"List: from Multiline (lab)",
@@ -12876,6 +12943,7 @@
"chaosaiart_controlnet_weidgth",
"chaosaiart_convert",
"chaosaiart_convert_Prompt",
"chaosaiart_deepseek_fix",
"chaosaiart_forPreview",
"chaosaiart_image_loop",
"chaosaiart_img2gif",
@@ -12899,6 +12967,19 @@
"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": [
[
"CombineStrings",
@@ -15358,10 +15439,14 @@
"RecoursePolar",
"RecourseStrings",
"SelInClip",
"SelInFloat",
"SelInGuider",
"SelInInt",
"SelInLatent",
"SelInModel",
"SelInPolar",
"SelInSampler",
"SelInSigmas",
"SelInVae",
"SelOutCLIP",
"SelOutModel",
@@ -15625,6 +15710,7 @@
[
"FL_API_Base64_ImageLoader",
"FL_API_ImageSaver",
"FL_AnimeLineExtractor",
"FL_ApplyMask",
"FL_Ascii",
"FL_BatchAlign",
@@ -15641,6 +15727,7 @@
"FL_GPT_Vision",
"FL_Glitch",
"FL_GoogleDriveDownloader",
"FL_GoogleDriveImageDownloader",
"FL_GradGenerator",
"FL_HFHubModelUploader",
"FL_HF_Character",
@@ -16259,6 +16346,14 @@
"title_aux": "String Converter"
}
],
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
[
"AnimaginePrompt"
],
{
"title_aux": "ComfyUI Animagine prompt"
}
],
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
[
"PreviewImageWithDiscord"
@@ -19470,6 +19565,16 @@
"title_aux": "ComfyUI-SUPIR"
}
],
"https://github.com/kijai/ComfyUI-StableXWrapper": [
[
"DifferenceExtractorNode",
"DownloadAndLoadStableXModel",
"StableXProcessImage"
],
{
"title_aux": "ComfyUI-StableXWrapper"
}
],
"https://github.com/kijai/ComfyUI-depth-fm": [
[
"Depth_fm"
@@ -21709,7 +21814,6 @@
],
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
[
"Add zSNR Sigma max",
"ConcatSigmas",
"CosineScheduler",
"GaussianScheduler",
@@ -21717,7 +21821,8 @@
"LogNormal Scheduler",
"OffsetSigmas",
"PerpNegScheduledCFGGuider",
"ScheduledCFGGuider"
"ScheduledCFGGuider",
"SplitSigmasByValue"
],
{
"title_aux": "ComfyUI-ScheduledGuider-Ext"
@@ -22411,6 +22516,7 @@
],
"https://github.com/nilor-corp/nilor-nodes": [
[
"Nilor Categorize String",
"Nilor Count Images In Directory",
"Nilor Int To List Of Bools",
"Nilor Interpolated Float List",
@@ -22576,7 +22682,8 @@
"LayeredInfiniteZoom",
"Replicate 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"
@@ -23149,7 +23256,8 @@
],
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
[
"DeviceSelectorMultiGPU"
"DeviceSelectorMultiGPU",
"HunyuanVideoEmbeddingsAdapter"
],
{
"title_aux": "ComfyUI-MultiGPU"
@@ -23681,6 +23789,15 @@
"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": [
[
"FrequencyCombination",
@@ -23941,7 +24058,7 @@
"title_aux": "ComfyUI_ProfilerX"
}
],
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
[
"DTypeConverter",
"DeltaControl",
@@ -23953,13 +24070,17 @@
"IntSequence",
"IntegerMotionController",
"IntervalControl",
"LazyCondition",
"LoadImageFromPath_",
"MotionController",
"MultilineText",
"QuickShapeMask",
"ROINode",
"SimilarityFilter",
"StringControl",
"StringSequence",
"TAESDVaeDecode",
"TAESDVaeEncode"
"TextRenderer",
"YOLOSimilarityCompare"
],
{
"title_aux": "Nodes for use with real-time applications of ComfyUI"
@@ -24158,12 +24279,27 @@
],
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
[
"FlipStreamLoader",
"FlipStreamOption",
"FlipStreamPrompt",
"FlipStreamSource",
"FlipStreamSwitchVFI",
"FlipStreamUpdate",
"FlipStreamBatchPrompt",
"FlipStreamFileSelect_AnimateDiffModel",
"FlipStreamFileSelect_Checkpoints",
"FlipStreamFileSelect_TensorRT",
"FlipStreamFileSelect_VAE",
"FlipStreamFileSelect_VideoSrc",
"FlipStreamFilmVfi",
"FlipStreamGetParam",
"FlipStreamImageSize",
"FlipStreamInputBox",
"FlipStreamPreviewBox",
"FlipStreamSegMask",
"FlipStreamSelectBox_Samplers",
"FlipStreamSelectBox_Scheduler",
"FlipStreamSetParam",
"FlipStreamSlider",
"FlipStreamSwitchImage",
"FlipStreamSwitchLatent",
"FlipStreamTextBox",
"FlipStreamTextReplace",
"FlipStreamVideoInput",
"FlipStreamViewer"
],
{
@@ -25231,9 +25367,12 @@
[
"LoadEXR",
"LoadEXRFrames",
"LoadImageAndPrompt",
"LoadLatentEXR",
"SaveEXR",
"SaveEXRFrames",
"SaveImageAndPromptExact",
"SaveImageAndPromptIncremental",
"SaveLatentEXR",
"SaveTiff"
],
@@ -26667,7 +26806,7 @@
],
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
[
"LorasEndpoint"
"LoRAGateway"
],
{
"title_aux": "ComfyUI-Lora-Manager"
@@ -27210,6 +27349,7 @@
[
"ImageAnalyzer",
"JanusChatAnalyzer",
"JanusImageGenerator",
"JanusProLoader"
],
{

View File

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,7 @@ import manager_downloader
from node_package import InstalledNodePackage
version_code = [3, 11]
version_code = [3, 12]
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')

View File

@@ -13,12 +13,13 @@ import shutil
import git
from datetime import datetime
from folder_paths import get_filename_list
from server import PromptServer
import manager_core as core
import manager_util
import cm_global
import logging
import asyncio
import queue
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
@@ -32,7 +33,6 @@ SECURITY_MESSAGE_GENERAL = "ERROR: This installation is not allowed in this secu
routes = PromptServer.instance.routes
def handle_stream(stream, prefix):
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
for msg in stream:
@@ -369,6 +369,147 @@ def nickname_filter(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")
async def fetch_customnode_mappings(request):
"""
@@ -871,7 +1012,24 @@ async def reinstall_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):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
@@ -914,26 +1072,23 @@ async def install_custom_node(request):
logging.error(SECURITY_MESSAGE_GENERAL)
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=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.")
return web.Response(status=200)
@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):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_GENERAL)
@@ -949,16 +1104,10 @@ async def fix_custom_node(request):
# unknown
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:
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}'.")
return web.Response(status=200)
@routes.post("/customnode/install/git_url")
@@ -993,7 +1142,7 @@ async def install_custom_node_pip(request):
return web.Response(status=200)
@routes.post("/customnode/uninstall")
@routes.post("/customnode/queue/uninstall")
async def uninstall_custom_node(request):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
@@ -1010,17 +1159,13 @@ async def uninstall_custom_node(request):
is_unknown = True
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:
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}'.")
return web.Response(status=200)
@routes.post("/customnode/update")
@routes.post("/customnode/queue/update")
async def update_custom_node(request):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
@@ -1035,16 +1180,10 @@ async def update_custom_node(request):
# unknown
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()
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}'.")
return web.Response(status=200)
@routes.get("/comfyui_manager/update_comfyui")
@@ -1058,8 +1197,10 @@ async def update_comfyui(request):
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
return web.Response(status=400)
elif res == "updated":
logging.info("ComfyUI is updated.")
return web.Response(status=201)
else: # skipped
logging.info("ComfyUI is up-to-date.")
return web.Response(status=200)
except Exception as e:
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
@@ -1091,7 +1232,7 @@ async def comfyui_switch_version(request):
return web.Response(status=400)
@routes.post("/customnode/disable")
@routes.post("/customnode/queue/disable")
async def disable_node(request):
json_data = await request.json()
@@ -1104,12 +1245,10 @@ async def disable_node(request):
is_unknown = True
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.json_response({}, content_type='application/json')
return web.Response(status=400, text="Failed to disable")
return web.Response(status=200)
@routes.get("/manager/migrate_unmanaged_nodes")
@@ -1148,37 +1287,44 @@ async def install_model(request):
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
return web.Response(status=403)
res = False
def do_install():
res = False
try:
if model_path is not None:
try:
if model_path is not None:
model_url = json_data['url']
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
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_dir = get_model_dir(json_data, True)
download_url(model_url, model_dir, filename=json_data['filename'])
if model_path.endswith('.zip'):
res = core.unzip(model_path)
model_url = json_data['url']
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
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_dir = get_model_dir(json_data, True)
download_url(model_url, model_dir, filename=json_data['filename'])
if model_path.endswith('.zip'):
res = core.unzip(model_path)
else:
res = True
if res:
return web.json_response({}, content_type='application/json')
else:
res = True
if res:
return web.json_response({}, content_type='application/json')
res = download_url_with_agent(model_url, model_path)
if res and model_path.endswith('.zip'):
res = core.unzip(model_path)
else:
res = download_url_with_agent(model_url, model_path)
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']}")
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
if res:
return web.json_response({}, content_type='application/json')
except Exception as e:
logging.error(f"[ERROR] {e}", file=sys.stderr)
if res:
return web.json_response({}, content_type='application/json')
except Exception as e:
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")
@@ -1407,8 +1553,6 @@ def confirm_try_install(sender, custom_node_url, msg):
cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
import asyncio
async def default_cache_update():
async def get_cache(filename):
@@ -1435,6 +1579,8 @@ async def default_cache_update():
await core.unified_manager.reload('remote', dont_wait=False)
await core.unified_manager.get_custom_nodes('default', 'remote')
logging.info("[ComfyUI-Manager] All startup tasks have been completed.")
# NOTE: hide migration button temporarily.
# if not core.get_config()['skip_migration_check']:
# await core.check_need_to_migrate()

View File

@@ -232,21 +232,22 @@ def clear_pip_cache():
pip_map = None
torch_torchvision_version_map = {
'2.5.1': '0.20.1',
'2.5.0': '0.20.0',
'2.4.1': '0.19.1',
'2.4.0': '0.19.0',
'2.3.1': '0.18.1',
'2.3.0': '0.18.0',
'2.2.2': '0.17.2',
'2.2.1': '0.17.1',
'2.2.0': '0.17.0',
'2.1.2': '0.16.2',
'2.1.1': '0.16.1',
'2.1.0': '0.16.0',
'2.0.1': '0.15.2',
'2.0.0': '0.15.1',
torch_torchvision_torchaudio_version_map = {
'2.6.0': ('0.21.0', '2.6.0'),
'2.5.1': ('0.20.0', '2.5.0'),
'2.5.0': ('0.20.0', '2.5.0'),
'2.4.1': ('0.19.1', '2.4.1'),
'2.4.0': ('0.19.0', '2.4.0'),
'2.3.1': ('0.18.1', '2.3.1'),
'2.3.0': ('0.18.0', '2.3.0'),
'2.2.2': ('0.17.2', '2.2.2'),
'2.2.1': ('0.17.1', '2.2.1'),
'2.2.0': ('0.17.0', '2.2.0'),
'2.1.2': ('0.16.2', '2.1.2'),
'2.1.1': ('0.16.1', '2.1.1'),
'2.1.0': ('0.16.0', '2.1.0'),
'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 = 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',
'torch', 'torchvision', 'torchaudio',
'--index-url', f"https://download.pytorch.org/whl/nightly/{platform}"]
logging.info("[ComfyUI-Manager] restore PyTorch to nightly version")
else:
torchvision_ver, torchaudio_ver = torch_torchvision_torchaudio_ver
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}"]
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")

View File

@@ -17,7 +17,6 @@ import {
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
import { CustomNodesManager } from "./custom-nodes-manager.js";
import { ModelManager } from "./model-manager.js";
import { set_double_click_policy } from "./node_fixer.js";
import { SnapshotManager } from "./snapshot.js";
var docStyle = document.createElement('style');

View File

@@ -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) {
try {

View File

@@ -4,7 +4,7 @@ import { api } from "../../scripts/api.js";
import {
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";
// https://cenfun.github.io/turbogrid/api.html
@@ -391,6 +391,8 @@ export class CustomNodesManager {
this.restartMap = {};
this.init();
api.addEventListener("cm-install-status", this.onInstallStatus);
}
init() {
@@ -1204,7 +1206,7 @@ export class CustomNodesManager {
}
focusInstall(item, mode) {
const cellNode = this.grid.getCellNode(item, "installed");
const cellNode = this.grid.getCellNode(item, "action");
if (cellNode) {
const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`);
if (cellBtn) {
@@ -1269,6 +1271,13 @@ export class CustomNodesManager {
}
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;
if(mode === "uninstall") {
@@ -1294,8 +1303,13 @@ export class CustomNodesManager {
let needRestart = false;
let errorMsg = "";
await api.fetchApi('/customnode/queue/reset');
this.install_context = btn;
for (const hash of list) {
const item = this.grid.getRowItemBy("hash", hash);
if (!item) {
errorMsg = `Not found custom node: ${hash}`;
break;
@@ -1315,6 +1329,7 @@ export class CustomNodesManager {
data.selected_version = selected_version;
data.channel = this.channel;
data.mode = this.mode;
data.ui_id = hash;
let install_mode = mode;
if(mode == 'switch') {
@@ -1332,14 +1347,14 @@ export class CustomNodesManager {
api_mode = 'reinstall';
}
const res = await api.fetchApi(`/customnode/${api_mode}`, {
const res = await api.fetchApi(`/customnode/queue/${api_mode}`, {
method: 'POST',
body: JSON.stringify(data)
});
if (res.status != 200) {
errorMsg = `${item.title} ${mode} failed: `;
if(res.status == 403) {
errorMsg += `This action is not allowed with this security level configuration.`;
} else if(res.status == 404) {
@@ -1350,32 +1365,69 @@ export class CustomNodesManager {
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);
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 {
this.showStatus(`${label} ${list.length} custom node(s) successfully`);
self.showStatus(`${label} ${result.length} custom node(s) successfully`);
}
if (needRestart) {
this.showRestart();
this.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red")
}
self.showRestart();
self.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;
}
// ===========================================================================================

View File

@@ -1,16 +1,6 @@
import { app } from "../../scripts/app.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) {
const getOpts = nodeType.prototype.getExtraMenuOptions;
nodeType.prototype.getExtraMenuOptions = function () {
@@ -153,62 +143,6 @@ function node_info_copy(src, dest, connect_both, copy_shape) {
app.registerExtension({
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) {
addMenuHandler(nodeType, function (_, options) {
options.push({

View File

@@ -11,6 +11,36 @@
{
"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",
@@ -19,17 +49,7 @@
"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": "ryanontheinside",
"title": "ComfyUI_ScavengerHunt",
"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."
"description": "NODES: Compare Images (SimHash), Image Selector, Temporal Consistency, Update Image Reference, Frame Blend."
},
{
"author": "Kayarte",

View File

@@ -923,7 +923,8 @@
[
"DeepSeekImageGeneration",
"DeepSeekImageUnderstanding",
"DeepSeekModelLoader"
"DeepSeekModelLoader",
"OpenAICompatibleLoader"
],
{
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
@@ -1091,6 +1092,26 @@
"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": [
[
"Add_text_by_mask"
@@ -1476,7 +1497,8 @@
"FreeMemoryCLIP",
"FreeMemoryImage",
"FreeMemoryLatent",
"FreeMemoryModel"
"FreeMemoryModel",
"FreeMemoryString"
],
{
"title_aux": "ComfyUI-FreeMemory"
@@ -3295,6 +3317,8 @@
[
"ForceMinimumBatchSize",
"ImageCompositeChained",
"MangaPanelSegmentationNode",
"Mask_Fill_Region",
"MatchImageCountToMaskCount",
"ParallaxGPUTest",
"ParallaxTest",
@@ -3458,6 +3482,7 @@
"Hy3DDelightImage",
"Hy3DDiffusersSchedulerConfig",
"Hy3DExportMesh",
"Hy3DFastSimplifyMesh",
"Hy3DGenerateMesh",
"Hy3DGetMeshPBRTextures",
"Hy3DIMRemesh",
@@ -3466,6 +3491,7 @@
"Hy3DMeshUVWrap",
"Hy3DMeshVerticeInpaintTexture",
"Hy3DModelLoader",
"Hy3DNvdiffrastRenderer",
"Hy3DPostprocessMesh",
"Hy3DRenderMultiView",
"Hy3DRenderMultiViewDepth",
@@ -3957,7 +3983,6 @@
],
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
[
"Add zSNR Sigma max",
"ConcatSigmas",
"CosineScheduler",
"GaussianScheduler",
@@ -3965,12 +3990,21 @@
"LogNormal Scheduler",
"OffsetSigmas",
"PerpNegScheduledCFGGuider",
"ScheduledCFGGuider"
"ScheduledCFGGuider",
"SplitSigmasByValue"
],
{
"title_aux": "ComfyUI-ScheduledGuider-Ext"
}
],
"https://github.com/mikebilly/Transparent-background-comfyUI": [
[
"Transparentbackground RemBg"
],
{
"title_aux": "transparent-background-comfyui"
}
],
"https://github.com/mikeymcfish/FishTools": [
[
"AnaglyphCreator",
@@ -4137,6 +4171,14 @@
"title_aux": "ComfyUI-ControlNeXt [WIP]"
}
],
"https://github.com/neverbiasu/ComfyUI-DeepSeek": [
[
"DeepSeekCaller"
],
{
"title_aux": "ComfyUI-DeepSeek"
}
],
"https://github.com/neverbiasu/ComfyUI-StereoCrafter": [
[
"DepthSplattingModelLoader",
@@ -4440,16 +4482,6 @@
"title_aux": "ComfyUI RukaLib [WIP]"
}
],
"https://github.com/ryanontheinside/ComfyUI_ScavengerHunt": [
[
"CLIPSimilarityCompare",
"ImageSimilarityCompare",
"SemanticSimilarityCompare"
],
{
"title_aux": "ComfyUI_ScavengerHunt"
}
],
"https://github.com/ryanontheinside/ComfyUI_YoloNasObjectDetection_Tensorrt": [
[
"YoloNasDetectionTensorrt"

View File

File diff suppressed because it is too large Load Diff

View File

@@ -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",
"title": "ComfyUI-GenerationTimer [REMOVED]",

View File

@@ -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",
"title": "ComfyUI Connection Helper",
@@ -148,13 +228,13 @@
{
"author": "ProGamerGov",
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
"id": "pytorch360convert",
"id": "comfyui-pytorch360convert",
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
"files": [
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
],
"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",
@@ -607,89 +687,6 @@
],
"install_type": "git-clone",
"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."
}
]
}

View File

@@ -2164,7 +2164,11 @@
"BriaEraser",
"BriaGenFill",
"BriaTailoredGen",
"ImageExpansionNode",
"ReimagineNode",
"RemoveForegroundNode",
"ReplaceBgNode",
"RmbgNode",
"ShotByImageNode",
"ShotByTextNode",
"TailoredModelInfoNode",
@@ -2375,7 +2379,9 @@
"ClownsharKSamplerAutomation",
"ClownsharKSamplerAutomation_Beta",
"ClownsharKSamplerGuide",
"ClownsharKSamplerGuide_Beta",
"ClownsharKSamplerGuides",
"ClownsharKSamplerGuides_Beta",
"ClownsharKSamplerOptions",
"ClownsharKSamplerOptions_SDE_Noise",
"ClownsharkSamplerOptions_FrameWeights",
@@ -2986,6 +2992,7 @@
],
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
[
"CharCountTextBox",
"FluxPro11_TOGETHER",
"FluxPro_TOGETHER",
"GenerateImage_VENICE",
@@ -3854,6 +3861,19 @@
"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": [
[
"ConcatenateString",
@@ -4695,7 +4715,8 @@
"https://github.com/JTriggerFish/ComfyLatentTools": [
[
"LatentNormalizedLanczosResize",
"RescaledPAG"
"RescaledPAG",
"RescaledSEG"
],
{
"title_aux": "Comfy Latent Tools"
@@ -5024,6 +5045,14 @@
"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": [
[
"list_filter_FilterImageListByIndexList",
@@ -5166,6 +5195,7 @@
"ADE_AdjustWeightIndivAttnAdd",
"ADE_AdjustWeightIndivAttnMult",
"ADE_AdjustWeightIndivMult",
"ADE_AncestralOptions",
"ADE_AnimateDiffCombine",
"ADE_AnimateDiffKeyframe",
"ADE_AnimateDiffLoRALoader",
@@ -5960,7 +5990,8 @@
],
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
[
"SecureAPI-SecureAPI"
"SecureAPI-SecureAPI",
"SecureAPI-SecureAPI-AWS"
],
{
"title_aux": "ComfyUI Secure API Call"
@@ -6292,6 +6323,7 @@
"DJZDatamoshV2",
"DatasetWordcloud",
"DeadPixelEffect",
"DepthBasedPixelization",
"DinskyPlus",
"DinskyPlusV2",
"DjzDatabendingV1",
@@ -6340,11 +6372,13 @@
"RetroVideoText",
"ScreensaverGenerator",
"ScreensaverGeneratorV2",
"ScreensaverGeneratorV3",
"SequentialNumberGenerator",
"StringChaos",
"StringWeights",
"Technicolor3Strip_v1",
"Technicolor3Strip_v2",
"ThinkSeeker",
"ThreeToneStyler",
"TrianglesPlus",
"TrianglesPlusV2",
@@ -6365,6 +6399,7 @@
"VideoMazeV1",
"VideoMazeV2",
"VideoNoiseFactory",
"VideoPyramidV1",
"VideoRingPainter",
"VideoTemperatureV1",
"VideoTimecode",
@@ -7906,7 +7941,8 @@
"FreeMemoryCLIP",
"FreeMemoryImage",
"FreeMemoryLatent",
"FreeMemoryModel"
"FreeMemoryModel",
"FreeMemoryString"
],
{
"title_aux": "ComfyUI-FreeMemory"
@@ -7948,6 +7984,15 @@
"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": [
[
"D_LatentSyncNode",
@@ -8408,6 +8453,7 @@
"StarFiveWildcards",
"StarImageSwitch",
"StarTextFilter",
"StarTextInput",
"Starupscale"
],
{
@@ -8949,6 +8995,7 @@
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels",
"tri3d_H_Stack_Images",
"tri3d_Image_extend",
"tri3d_NSFWFilter",
"tri3d_SaveImage_absolute",
"tri3d_SaveText_absolute",
@@ -9462,6 +9509,7 @@
"VrchAudioGenresNode",
"VrchAudioRecorderNode",
"VrchAudioSaverNode",
"VrchAudioWebViewerNode",
"VrchBooleanKeyControlNode",
"VrchChannelOSCControlNode",
"VrchChannelX4OSCControlNode",
@@ -10177,6 +10225,16 @@
"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": [
[
"DepthFM_Literative_Zho",
@@ -10665,6 +10723,7 @@
],
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
[
"ImageQueueProcessor",
"TextBatch",
"TextQueueProcessor",
"TextSplitCounter"
@@ -11301,8 +11360,10 @@
],
"https://github.com/asagi4/comfyui-utility-nodes": [
[
"MUConditioningCutoff",
"MUForceCacheClear",
"MUJinjaRender",
"MURemoveControlNet",
"MUReplaceModelWeights",
"MUSimpleWildcard"
],
@@ -11314,6 +11375,7 @@
[
"TryOffFluxFillModelNode",
"TryOffModelNode",
"TryOffQuantizerNode",
"TryOffRunNode"
],
{
@@ -11631,6 +11693,7 @@
"Range Float",
"Range Integer",
"Ratio Advanced",
"RemoveTextBetween",
"Resize Image for SDXL",
"SD3TextConditioningWithOptionsOnePrompt",
"SRFloatPromptInput",
@@ -12150,9 +12213,13 @@
"Input: Integer (lab)",
"Input: Multiline (lab)",
"Input: String (lab)",
"List: Checkpoints (lab)",
"List: Limit (lab)",
"List: LoRAs (lab)",
"List: Merge (lab)",
"List: Random Seeds (lab)",
"List: Samplers (lab)",
"List: Schedulers (lab)",
"List: from Elements (lab)",
"List: from File (backend) (lab)",
"List: from Multiline (lab)",
@@ -12876,6 +12943,7 @@
"chaosaiart_controlnet_weidgth",
"chaosaiart_convert",
"chaosaiart_convert_Prompt",
"chaosaiart_deepseek_fix",
"chaosaiart_forPreview",
"chaosaiart_image_loop",
"chaosaiart_img2gif",
@@ -12899,6 +12967,19 @@
"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": [
[
"CombineStrings",
@@ -15358,10 +15439,14 @@
"RecoursePolar",
"RecourseStrings",
"SelInClip",
"SelInFloat",
"SelInGuider",
"SelInInt",
"SelInLatent",
"SelInModel",
"SelInPolar",
"SelInSampler",
"SelInSigmas",
"SelInVae",
"SelOutCLIP",
"SelOutModel",
@@ -15625,6 +15710,7 @@
[
"FL_API_Base64_ImageLoader",
"FL_API_ImageSaver",
"FL_AnimeLineExtractor",
"FL_ApplyMask",
"FL_Ascii",
"FL_BatchAlign",
@@ -15641,6 +15727,7 @@
"FL_GPT_Vision",
"FL_Glitch",
"FL_GoogleDriveDownloader",
"FL_GoogleDriveImageDownloader",
"FL_GradGenerator",
"FL_HFHubModelUploader",
"FL_HF_Character",
@@ -16259,6 +16346,14 @@
"title_aux": "String Converter"
}
],
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
[
"AnimaginePrompt"
],
{
"title_aux": "ComfyUI Animagine prompt"
}
],
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
[
"PreviewImageWithDiscord"
@@ -19470,6 +19565,16 @@
"title_aux": "ComfyUI-SUPIR"
}
],
"https://github.com/kijai/ComfyUI-StableXWrapper": [
[
"DifferenceExtractorNode",
"DownloadAndLoadStableXModel",
"StableXProcessImage"
],
{
"title_aux": "ComfyUI-StableXWrapper"
}
],
"https://github.com/kijai/ComfyUI-depth-fm": [
[
"Depth_fm"
@@ -21709,7 +21814,6 @@
],
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
[
"Add zSNR Sigma max",
"ConcatSigmas",
"CosineScheduler",
"GaussianScheduler",
@@ -21717,7 +21821,8 @@
"LogNormal Scheduler",
"OffsetSigmas",
"PerpNegScheduledCFGGuider",
"ScheduledCFGGuider"
"ScheduledCFGGuider",
"SplitSigmasByValue"
],
{
"title_aux": "ComfyUI-ScheduledGuider-Ext"
@@ -22411,6 +22516,7 @@
],
"https://github.com/nilor-corp/nilor-nodes": [
[
"Nilor Categorize String",
"Nilor Count Images In Directory",
"Nilor Int To List Of Bools",
"Nilor Interpolated Float List",
@@ -22576,7 +22682,8 @@
"LayeredInfiniteZoom",
"Replicate 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"
@@ -23149,7 +23256,8 @@
],
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
[
"DeviceSelectorMultiGPU"
"DeviceSelectorMultiGPU",
"HunyuanVideoEmbeddingsAdapter"
],
{
"title_aux": "ComfyUI-MultiGPU"
@@ -23681,6 +23789,15 @@
"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": [
[
"FrequencyCombination",
@@ -23941,7 +24058,7 @@
"title_aux": "ComfyUI_ProfilerX"
}
],
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
[
"DTypeConverter",
"DeltaControl",
@@ -23953,13 +24070,17 @@
"IntSequence",
"IntegerMotionController",
"IntervalControl",
"LazyCondition",
"LoadImageFromPath_",
"MotionController",
"MultilineText",
"QuickShapeMask",
"ROINode",
"SimilarityFilter",
"StringControl",
"StringSequence",
"TAESDVaeDecode",
"TAESDVaeEncode"
"TextRenderer",
"YOLOSimilarityCompare"
],
{
"title_aux": "Nodes for use with real-time applications of ComfyUI"
@@ -24158,12 +24279,27 @@
],
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
[
"FlipStreamLoader",
"FlipStreamOption",
"FlipStreamPrompt",
"FlipStreamSource",
"FlipStreamSwitchVFI",
"FlipStreamUpdate",
"FlipStreamBatchPrompt",
"FlipStreamFileSelect_AnimateDiffModel",
"FlipStreamFileSelect_Checkpoints",
"FlipStreamFileSelect_TensorRT",
"FlipStreamFileSelect_VAE",
"FlipStreamFileSelect_VideoSrc",
"FlipStreamFilmVfi",
"FlipStreamGetParam",
"FlipStreamImageSize",
"FlipStreamInputBox",
"FlipStreamPreviewBox",
"FlipStreamSegMask",
"FlipStreamSelectBox_Samplers",
"FlipStreamSelectBox_Scheduler",
"FlipStreamSetParam",
"FlipStreamSlider",
"FlipStreamSwitchImage",
"FlipStreamSwitchLatent",
"FlipStreamTextBox",
"FlipStreamTextReplace",
"FlipStreamVideoInput",
"FlipStreamViewer"
],
{
@@ -25231,9 +25367,12 @@
[
"LoadEXR",
"LoadEXRFrames",
"LoadImageAndPrompt",
"LoadLatentEXR",
"SaveEXR",
"SaveEXRFrames",
"SaveImageAndPromptExact",
"SaveImageAndPromptIncremental",
"SaveLatentEXR",
"SaveTiff"
],
@@ -26667,7 +26806,7 @@
],
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
[
"LorasEndpoint"
"LoRAGateway"
],
{
"title_aux": "ComfyUI-Lora-Manager"
@@ -27210,6 +27349,7 @@
[
"ImageAnalyzer",
"JanusChatAnalyzer",
"JanusImageGenerator",
"JanusProLoader"
],
{

View File

@@ -1,7 +1,7 @@
[project]
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."
version = "3.11"
version = "3.12"
license = { file = "LICENSE.txt" }
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]