Compare commits

..

316 Commits

Author SHA1 Message Date
Dr.Lt.Data
3425fb7a14 docs: update manager data path to __manager 2025-12-03 02:38:15 +09:00
Dr.Lt.Data
c69e7bcf03 feat(security): use system user directory for manager data
Use folder_paths.get_system_user_directory("manager") to protect manager config and data from HTTP endpoint access.

Ref: comfyanonymous/ComfyUI#10966
2025-12-03 02:34:57 +09:00
Dr.Lt.Data
85ebcd9897 In response to the patch that separates manager_requirements.txt from requirements.txt, this update additionally refreshes manager_requirements.txt when it is present.
79fb96488a
2025-11-26 22:35:03 +09:00
Dr.Lt.Data
69b6f1a66b Merge branch 'main' into manager-v4 2025-11-26 22:14:11 +09:00
Dr.Lt.Data
e4a90089ab fixed: a bug where updating ComfyUI using Update: ComfyUI Stable Version did not updating ComfyUI's dependencies 2025-11-26 21:54:28 +09:00
Dr.Lt.Data
674b9f3705 update DB 2025-11-26 21:41:55 +09:00
Dr.Lt.Data
4941fb8aa0 fixed: scanner.py 2025-11-26 08:58:02 +09:00
Dr.Lt.Data
183af0dfa5 update DB 2025-11-25 12:59:01 +09:00
Dr.Lt.Data
45ac5429f8 "update DB" 2025-11-25 12:46:44 +09:00
Dr.Lt.Data
c771977a95 update DB 2025-11-24 23:10:06 +09:00
Dr.Lt.Data
668d7bbb2c update DB 2025-11-24 22:56:38 +09:00
akawana
926cfabb58 Add Keybinding Extra (keyboard shortcut extension) (#2306)
* Add Keybinding Extra custom node

Added a new custom node for Keybinding Extra with relevant details.

* Enhance description for Keybinding Extra

Updated the description for the Keybinding Extra to provide more detail about its functionality.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-24 22:55:44 +09:00
Dr.Lt.Data
a9a8d05115 update DB 2025-11-24 22:54:26 +09:00
Eric Rollei
e368f4366a Add Download Tools for ComfyUI (#2298)
Added new download tools for ComfyUI with extensive features for media downloading and web scraping.
2025-11-24 22:51:50 +09:00
Dr.Lt.Data
dc5bddbc17 update DB 2025-11-24 02:00:50 +09:00
icekiub-ai
358a480408 IcyHider Nodes (#2304)
* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-24 00:17:22 +09:00
Dr.Lt.Data
c96fdb3c7a update DB 2025-11-22 10:36:00 +09:00
Dr.Lt.Data
c090abcc02 update DB 2025-11-22 09:46:14 +09:00
kjqwer
1ff02be35f add node (#2282)
* add node

* add node
2025-11-22 09:45:21 +09:00
Dr.Lt.Data
10fbfb88f7 update DB 2025-11-22 09:43:20 +09:00
MadiatorLabs
9753df72ed Added ComfyUI-RunpodDirect to node list (#2291) 2025-11-22 09:41:54 +09:00
Dr.Lt.Data
095cc3f792 Merge PR #2297: Add PDF Tools and update AAA Metadata System
Resolved merge conflict with PR #2297 by integrating:
- PDF Tools - Advanced PDF Processing & OCR (new entry)
- AAA Metadata System (updated with enhanced description and metadata)
- HYPIR Image Restoration (preserved from main branch)

All entries use consistent spacing and JSON formatting.
2025-11-22 09:33:58 +09:00
Dr.Lt.Data
656171037b Update custom-node-list.json
HYPIR-ComfyUI was a separated PR.
2025-11-22 09:28:40 +09:00
Dr.Lt.Data
7ac10f9442 update DB 2025-11-22 09:25:07 +09:00
yuanyuan-spec
3925ba27b4 feat: Add HunyuanVideo-1.5 nodes (#2300)
* feat: Add HunyuanVideo-1.5 nodes

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <dr.lt.data@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-22 09:23:18 +09:00
Dr.Lt.Data
44ba79aa31 update DB 2025-11-22 09:15:50 +09:00
Eric Rollei
14d0e31268 Add HYPIR Image Restoration nodes to custom-node-list (#2299)
Added custom ComfyUI nodes for HYPIR image restoration, including details on author, title, reference, and description.
2025-11-22 09:12:27 +09:00
Dr.Lt.Data
033acffad1 update DB 2025-11-22 08:42:06 +09:00
Writili
d29ff808a5 I added my node to the JSON file (#2287)
* Update custom-node-list.json

Added my node to the JSON

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-22 08:40:35 +09:00
Dr.Lt.Data
dc9b6d655b update DB 2025-11-22 08:40:02 +09:00
Casual Gamer
d340c85013 feat: add ComfyUI Text Processor to node list (#2295) 2025-11-22 08:39:00 +09:00
Dr.Lt.Data
e328353664 update DB 2025-11-21 00:33:43 +09:00
Eric Rollei
02785af8fd Merge pull request #2 from EricRollei/EricRollei-patch-1
Add HYPIR Image Restoration entry to custom-node-list
2025-11-20 01:39:02 -08:00
Eric Rollei
736ae5d63e Add HYPIR Image Restoration entry to custom-node-list
Added a new entry for HYPIR Image Restoration including author, title, reference, files, install type, description, and nodename pattern.
2025-11-20 01:38:39 -08:00
Eric Rollei
e1eeb617d2 Merge pull request #1 from EricRollei/EricRollei-patch-1
Add AAA Metadata System entry to custom-node-list
2025-11-20 01:34:27 -08:00
Eric Rollei
23b6c7f0de Add AAA Metadata System entry to custom-node-list
Added a new entry for the AAA Metadata System with detailed features and installation instructions.
2025-11-20 01:34:04 -08:00
Eric Rollei
997f97e1fc Add PDF Tools for advanced PDF processing and OCR
Added a new entry for advanced PDF processing tools, including OCR and image parsing capabilities.
2025-11-20 01:10:01 -08:00
Dr.Lt.Data
ff335ff1a0 update DB 2025-11-19 23:12:01 +09:00
Dr.Lt.Data
cb3036ef81 modified: scanner.py – updated main so it can be imported 2025-11-19 22:43:28 +09:00
Dr.Lt.Data
f762906188 update DB 2025-11-19 22:42:14 +09:00
cellzero
dde7920f8c Add ComfyUI-Animon node (#2293)
* Add ComfyUI-Animon node

* Update custom-node-list.json

* Remove and re-add ComfyUI-Animon entry in JSON

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-19 22:41:13 +09:00
Dr.Lt.Data
1a0d24110a update DB 2025-11-19 22:38:35 +09:00
Devin Garner
e79f6c4471 Add new node for ComfyUI_Make-It-Animatable (#2292)
* Add new node for ComfyUI_Make-It-Animatable

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-19 22:37:20 +09:00
Dr.Lt.Data
a8a7024a84 update DB 2025-11-19 18:46:14 +09:00
Dr.Lt.Data
d93d002da0 improved: scanner.py - bugfix about preemption and support extraction only mode 2025-11-19 13:00:26 +09:00
Dr.Lt.Data
baaa0479e8 update DB 2025-11-19 01:43:47 +09:00
Dr.Lt.Data
cc3bd7a056 update DB 2025-11-18 12:59:21 +09:00
Dr.Lt.Data
4ecefb3b71 improved: scanner.py - supports scanning v3 nodes 2025-11-18 12:48:02 +09:00
Dr.Lt.Data
f24b5aa251 update DB 2025-11-17 12:27:39 +09:00
Dr.Lt.Data
de547da4cd update DB 2025-11-17 00:37:26 +09:00
Dr.Lt.Data
0f884166a6 update DB 2025-11-16 23:03:10 +09:00
Alan Kent
63379f759d Added 360 interactive crop tool. (#2285) 2025-11-16 23:02:22 +09:00
Dr.Lt.Data
8fdff20243 update DB 2025-11-16 23:01:34 +09:00
Grafting Rayman
5dfa07ca03 Updates to the existing details (#2286)
* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-16 23:00:03 +09:00
Dr.Lt.Data
343645be6a update DB 2025-11-16 22:58:58 +09:00
Wei Deng
91bf21d7a8 Add ComfyUI-MiVolo-V2 node details to JSON (#2283) 2025-11-16 22:57:30 +09:00
Dr.Lt.Data
be6516cfd3 update DB 2025-11-15 13:32:22 +09:00
Dr.Lt.Data
61f1e516a3 update DB 2025-11-15 08:27:09 +09:00
Grafting Rayman
73b2278b45 Update custom-node-list.json (#2275)
* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-15 08:25:44 +09:00
Dr.Lt.Data
aa625e30b6 update DB 2025-11-15 08:25:30 +09:00
mercu-lore
29a46fe4ce Update custom-node-list.json (#2279)
* Update custom-node-list.json

* Update custom-node-list.json

* Update BoxBox ID in custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-15 08:22:12 +09:00
Dr.Lt.Data
5b3ee49530 update DB 2025-11-15 08:21:27 +09:00
Owl-V
a9158a101f feat: add ComfyUI-MultiTranslator (replaces ComfyUI-Translator) (#2278)
This PR addresses two issues with the previous ComfyUI-Translator entry:

Missing id field — caused the plugin to be invisible in ComfyUI-Manager's Install tab.
Naming conflict — the original name ComfyUI-Translator overlaps with other translation plugins, leading to user confusion.
The repository has been renamed to ComfyUI-MultiTranslator to better reflect its multi-engine capability and avoid conflicts.

This PR removes the old entry and adds a new, fully compliant one with a unique id.
2025-11-15 08:20:31 +09:00
Carmine Cristallo Scalzi
feed8abb34 Add iamccs annotate node — ComfyUI annotation extension (#2254)
* feat: Add IAMCCS-nodes repository (WANAnimate LoRA Loader Fix)

This repo adds a node fixing LoRA loading in native WANAnimate workflows without using WanVideoWrapper. Critical for FLUX/WAN 2.1 users.

* Update custom-node-list.json

* feat: Add IAMCCS annotate node to the list

* Update custom-node-list.json

---------

Co-authored-by: IAMCCS <info@carminecristalloscalzi.com>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-15 08:16:01 +09:00
Dr.Lt.Data
70decc740f update DB 2025-11-13 00:27:19 +09:00
Dr.Lt.Data
5b5c83f8c5 update DB 2025-11-12 23:52:37 +09:00
Takahiro Yano
773c06f40d Add ComfyUI Fast Mosaic Detector node (#2274)
Added a new custom node for ComfyUI that provides high-speed mosaic detection with multiple modes.
2025-11-12 23:51:34 +09:00
Dr.Lt.Data
737e6ad5ed update DB 2025-11-12 23:50:51 +09:00
Creepybits
81bca9c94e Update custom-node-list.json (#2273)
* Update custom-node-list.json

* Modify 'world weaver' node details in JSON

Updated the 'id' and 'install_type' fields for the 'world weaver' node.

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-12 23:50:10 +09:00
Dr.Lt.Data
eef0654de2 update DB 2025-11-12 23:49:43 +09:00
Dr.Lt.Data
997a00b8a2 update DB 2025-11-12 23:48:24 +09:00
RafaCost3D
4d25232c5f This adds rafacostcomfy nodes DreamOmni2 GGUF (#2272)
* This adds rafacostcomfy nodes, which adds support to DreamOmni2 GGUF VLM models

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-12 23:47:44 +09:00
Dr.Lt.Data
135befa101 update DB 2025-11-12 23:45:41 +09:00
Owl-V
44cac3fc43 Add a set of translator nodes (#2271)
* Add a set of translator nodes

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-12 23:44:49 +09:00
Dr.Lt.Data
449fa3510e update DB 2025-11-12 23:42:29 +09:00
painter890602
d958af8aad Add ComfyUI-Painterl2V to custom-node-list (#2267)
* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-12 23:41:30 +09:00
Dr.Lt.Data
09f8d5cb2d update DB 2025-11-11 01:56:51 +09:00
Dr.Lt.Data
aedc99cefd bump version 2025-11-11 00:42:32 +09:00
unclepomedev
b32cab6e9a Fix: Gracefully handle errors during pip package enumeration (#2266) 2025-11-11 00:41:16 +09:00
Dr.Lt.Data
a95186965e update DB 2025-11-11 00:40:41 +09:00
Bulldog68
7067de1bb2 request to add the node comfyui fmj llm in the manager. (#2265)
* Add FMJ-LLM node for Olama interaction

Added a new node for FMJ-LLM with details about its functionality and installation.

* Add FMJ-LLM node for Olama interaction

Added new node for FMJ-LLM with details for installation and usage.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-11 00:39:36 +09:00
Dr.Lt.Data
f45d878d21 update DB 2025-11-11 00:39:23 +09:00
Usonaki
a0532b938d Update custom-node-list.json to point to Usonaki fork (#2264)
Co-authored-by: Usonaki <you@example.com>
2025-11-11 00:37:32 +09:00
Dr.Lt.Data
6ad12b7652 update DB 2025-11-11 00:37:15 +09:00
Bulldog68
02887c6c9b Add FMJ-speed-Prompt node to custom-node-list (#2263)
* Add FMJ-speed-Prompt node to custom-node-list

Added a new node for FMJ-speed-Prompt with details.

* Fix JSON structure for FMJ-speed-Prompt entry

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-11 00:35:29 +09:00
Dr.Lt.Data
1b645e1cc3 update DB 2025-11-11 00:31:40 +09:00
Uygar
0a4b2a0488 Update custom-node-list.json (#2268)
Added ComfyUI-Artha Nodes
2025-11-11 00:29:52 +09:00
Alex Furer
d4ce6ddc52 Add ComfyUI AF - Enhanced-HTML-Note node (#2269)
Added new ComfyUI custom node for enhanced HTML notes.
2025-11-11 00:28:44 +09:00
Dr.Lt.Data
5a5b989533 update DB 2025-11-11 00:27:17 +09:00
Owl-V
b57cffb0fa feat: add ComfyUI-Owlv_Nodes (#2270)
* feat: add ComfyUI-Owlv_Nodes

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-11 00:25:53 +09:00
Dr.Lt.Data
72aa95cacf update DB 2025-11-10 12:56:58 +09:00
Dr.Lt.Data
14ef448937 update DB 2025-11-08 13:51:59 +09:00
fllywaay
1c10607c06 Add My Comfyui-TextLine-counter node (#2253)
* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Remove 'id' field from Comfyui-TextLine-counter

Removed 'id' field from the Comfyui-TextLine-counter entry.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-08 13:40:13 +09:00
Dr.Lt.Data
41e53a1f2a update DB 2025-11-08 13:40:04 +09:00
mikesimone
cde83e9a38 Add ComfyUI-LinkModeToggle custom node (#2260)
* Update custom-node-list.json

* Update custom-node-list.json

Renamed LinkModeToggle to ComfyUI-LinkModeToggle.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-08 13:36:58 +09:00
Dr.Lt.Data
6c206b1c72 update DB 2025-11-08 13:36:48 +09:00
Hansheng Chen
a474219e7b Add ComfyUI-piFlow node to custom-node-list.json (#2261) 2025-11-08 13:35:57 +09:00
Dr.Lt.Data
3b8d25eb31 update DB 2025-11-08 13:34:23 +09:00
mercu-lore
0faa0aa668 Add multiple angle camera control node (#2262)
* Add multiple angle camera control node

Added a new node for multiple angle camera control with detailed description and installation type.

* Remove duplicate entry for Multiple-Angle-Camera-Control

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-08 13:33:08 +09:00
Dr.Lt.Data
0fcdcc93a2 update DB 2025-11-07 12:37:02 +09:00
Dr.Lt.Data
461d5e72fe update DB 2025-11-07 00:42:18 +09:00
Dr.Lt.Data
3f030a2121 update DB 2025-11-06 00:37:25 +09:00
Dr.Lt.Data
7fb8e8662f update DB 2025-11-05 07:48:33 +09:00
Dr.Lt.Data
dd3ab9cff2 update DB 2025-11-05 00:33:32 +09:00
Dr.Lt.Data
97b518de12 update DB 2025-11-04 23:25:04 +09:00
Dr.Lt.Data
d2a795c866 update DB 2025-11-04 07:54:26 +09:00
Amir Ferdos
8a3d65be20 Add ComfyUI-GRAG-ArchAi3D custom node (#2252)
* Add ComfyUI-ArchAi3d-Qwen custom nodes

* Add new node entry for ComfyUI-GRAG-ArchAi3D

Adding GRAG (Guided Region-Adaptive Guidance) custom node with:
- Simple and Unified controllers
- Advanced sampler
- 54 presets
- Per-layer and adaptive control

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-04 07:32:06 +09:00
Dr.Lt.Data
b2126d8ba5 update DB 2025-11-03 18:23:26 +09:00
Dr.Lt.Data
6386411d21 update DB 2025-11-03 12:33:07 +09:00
Dr.Lt.Data
4250244136 update DB 2025-11-03 07:40:01 +09:00
Dr.Lt.Data
77c4f9993d update DB 2025-11-02 12:26:36 +09:00
Dr.Lt.Data
c7c8417577 update DB 2025-11-02 08:49:24 +09:00
Dr.Lt.Data
9d0985ded8 update DB 2025-11-01 13:39:08 +09:00
方长君
3663e10e33 Change Custom Node github address (#2247)
* Add MultiSaveImage custom node

* feat: change nodes github address and name

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-01 11:55:55 +09:00
Dr.Lt.Data
5f37a82c3c update DB 2025-11-01 11:47:07 +09:00
Dr.Lt.Data
026bf1dfd7 update DB 2025-10-31 12:58:49 +09:00
Dr.Lt.Data
643a6e5080 update DB 2025-10-31 08:01:20 +09:00
Alex Furer
5267502896 Remove AF - Edit Generated Prompt node entry (#2245)
Removed 'AF - Edit Generated Prompt' node entry from the custom node list, as it's being migrated to a node pack and summitted via official registry
2025-10-31 07:41:26 +09:00
Dr.Lt.Data
c3c152122d update DB 2025-10-30 07:53:35 +09:00
Dr.Lt.Data
afeac097e5 update DB 2025-10-29 07:45:00 +09:00
Roberts Slisans
e5cea64132 Add TTS WebUI API nodes (#2243) 2025-10-29 07:44:16 +09:00
Dr.Lt.Data
26da78cf15 update DB 2025-10-27 12:57:21 +09:00
Dr.Lt.Data
179a1e1ca0 update DB 2025-10-26 14:27:17 +09:00
dehypnotic
b379d275d1 Add Dehypnotic Save nodes to custom-node-list.json (#2221)
Added new node entry for Dehypnotic Save nodes with details.
2025-10-26 14:22:22 +09:00
Dr.Lt.Data
133cdfb203 update DB 2025-10-26 13:10:07 +09:00
Dr.Lt.Data
2b79edd9be update DB 2025-10-26 13:03:24 +09:00
WWWEN8
3862a92e04 Add ComfyUI-CCXManager node (#2222)
* Add ComfyUI-CCXManager node

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-26 13:02:01 +09:00
Dr.Lt.Data
f4e3817fcc update DB 2025-10-26 13:01:34 +09:00
Novice_Chen
61f0f5d67c Added ComfyUI-Simple-IndexTTs node (#2236) 2025-10-26 13:00:26 +09:00
Dr.Lt.Data
87f57551ea update DB 2025-10-26 13:00:06 +09:00
BlackSnowSkill
ee51efed69 Update custom-node-list.json (#2238)
* Update custom-node-list.json

* Simplify node entry by removing file links

Removed specific file links and custom installer from the node list entry.

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-26 12:58:30 +09:00
wzgrx
5dab865681 Update requirements.txt (#2242) 2025-10-26 12:57:49 +09:00
Dr.Lt.Data
8c0581eebc update DB 2025-10-26 12:52:31 +09:00
Dr.Lt.Data
a72f9f422c update DB 2025-10-25 11:09:04 +09:00
Dr.Lt.Data
1354a8c970 update DB 2025-10-24 12:25:01 +09:00
Dr.Lt.Data
00a5115267 update DB 2025-10-23 20:45:14 +09:00
Edgerunner
00282eab7b Added ComfyUI Queue Manager node (#2235) 2025-10-23 20:40:11 +09:00
Dr.Lt.Data
bec128de58 update DB 2025-10-23 20:16:27 +09:00
Dr.Lt.Data
9edfa7b4fa update DB 2025-10-23 07:59:17 +09:00
Dr.Lt.Data
a9af70e5f0 update DB 2025-10-23 06:59:38 +09:00
Dr.Lt.Data
910caf593f update DB 2025-10-23 06:59:22 +09:00
LeechKing
02dc072dc7 Add ComfyUI Channel Ops custom node entry (#2239) 2025-10-23 06:58:15 +09:00
Dr.Lt.Data
78fb354452 update DB 2025-10-21 12:32:28 +09:00
Dr.Lt.Data
66f5eca7fa update DB 2025-10-21 07:53:50 +09:00
Dr.Lt.Data
d3906e3cbc bump version 2025-10-21 07:25:56 +09:00
Dr.Lt.Data
079ac254ce fixed: Bug fix in glob/manager_server.py that prevented cache updates when installed via pip. (#2237)
Until the cacheless implementation is fully applied, the cache must always be updated — otherwise, various parts of the system will malfunction.
2025-10-21 07:16:57 +09:00
Dr.Lt.Data
be95396a57 update DB 2025-10-20 18:47:13 +09:00
Dr.Lt.Data
59cbed429f update DB 2025-10-20 12:47:53 +09:00
Dr.Lt.Data
d49df7aebb update DB 2025-10-20 07:43:35 +09:00
Dr.Lt.Data
0aa9faad2e update DB 2025-10-20 06:57:50 +09:00
OmiX
1337def888 Add OmiXDev Custom Nodes collection for Online-Chat ( OpenAI , grok ,.. ) with API Key (#2200)
* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-20 06:08:04 +09:00
Dr.Lt.Data
4b100c558b update DB 2025-10-19 12:01:07 +09:00
Dr.Lt.Data
1425a71ece update DB 2025-10-19 10:49:22 +09:00
Dr.Lt.Data
e0640e7014 fixed: more complete uv support (#2230)
* Previously, only `uv` installed inside a venv was properly handled. Now `uv` installed outside the venv is also supported.
* Even if `use_uv=False`, `uv` is used as a fallback when `pip` is unavailable.
* Even if `use_uv=True`, `pip` is used as a fallback when `uv` is unavailable.

https://github.com/Comfy-Org/ComfyUI-Manager/issues/2125
2025-10-18 08:15:14 +09:00
Dr.Lt.Data
a8524508fe update DB 2025-10-17 23:01:11 +09:00
Dr.Lt.Data
a5ff973d53 update DB 2025-10-17 07:55:16 +09:00
Dr.Lt.Data
337c9aa2c7 update DB 2025-10-16 18:34:03 +09:00
Dr.Lt.Data
f1448403ac update DB 2025-10-16 12:46:10 +09:00
Dr.Lt.Data
d0b5f77ec6 update DB 2025-10-16 12:16:26 +09:00
Dr.Lt.Data
9cb22ffb60 update DB 2025-10-16 07:45:03 +09:00
KarryCharon
f556962d82 Add Blender-IO extension (#2223) 2025-10-16 06:46:16 +09:00
Dr.Lt.Data
d28448d519 update DB 2025-10-15 07:47:45 +09:00
Casual Gamer
c590a88ffd feat: Add ComfyUI-Danbooru-Tags-Upsampler (#2220) 2025-10-15 06:50:07 +09:00
Dr.Lt.Data
a1fc6c817b update DB 2025-10-14 12:30:05 +09:00
Dr.Lt.Data
5554e52799 update DB 2025-10-14 08:39:13 +09:00
Dr.Lt.Data
ca749eb4d2 update DB 2025-10-14 07:22:26 +09:00
Michael
41ceee3d24 Add ML_nodes to ComfyUI Manager registry (#2219)
* Update custom-node-list.json

add ML_nodes

* Update custom-node-list.json

fix imstall_type
2025-10-14 07:21:01 +09:00
Dr.Lt.Data
5acfd52986 update DB 2025-10-14 07:20:45 +09:00
Carmine Cristallo Scalzi
ec4c7b2f6a feat: Add IAMCCS-nodes repository (WANAnimate LoRA Loader Fix) (#2218)
* feat: Add IAMCCS-nodes repository (WANAnimate LoRA Loader Fix)

This repo adds a node fixing LoRA loading in native WANAnimate workflows without using WanVideoWrapper. Critical for FLUX/WAN 2.1 users.

* Update custom-node-list.json

---------

Co-authored-by: IAMCCS <info@carminecristalloscalzi.com>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-14 07:14:33 +09:00
Dr.Lt.Data
22a3d8f95f update DB 2025-10-13 12:48:21 +09:00
Dr.Lt.Data
06b89ca277 update DB 2025-10-13 08:39:08 +09:00
Dr.Lt.Data
9e5ffbd00a update DB 2025-10-13 07:36:15 +09:00
Dr.Lt.Data
39e92ed778 update DB 2025-10-13 06:30:24 +09:00
Hmily
68a3ec567a Add comfy-deploy node to the custom node list and extension note map list (#2215)
* Update custom-node-list.json

* Update extension-node-map.json

* Update extension-node-map.json

* Update extension-node-map.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-13 06:29:38 +09:00
Dr.Lt.Data
28231e81b3 update DB 2025-10-13 06:25:59 +09:00
Chris
b2ee0feeaa Update custom-node-list.json (#2209)
Added comfyui-seedvr2-tilingupscaler
2025-10-13 06:25:23 +09:00
Dr.Lt.Data
5541b6b366 update DB 2025-10-13 06:25:03 +09:00
Amir Ferdos
408a5fe27e Add ComfyUI-ArchAi3d-Qwen custom nodes (#2214) 2025-10-13 06:23:41 +09:00
Dr.Lt.Data
bffc73f976 update DB 2025-10-13 06:23:21 +09:00
heyburns
bd6edfc9dd Add PortraitUtils to custom-node-list.json (#2216)
* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-13 06:21:28 +09:00
Hardly Working
2cb24e8a94 Update custom-node-list.json (#2217) 2025-10-13 06:16:52 +09:00
Dr.Lt.Data
a49779c4d2 update DB 2025-10-13 06:14:21 +09:00
kj863257rc
15a5a5f5df Update custom-node-list.json (#2213)
Add reference information
2025-10-13 06:12:43 +09:00
Sonny Box
b5e0558d6e Update custom-node-list.json (#2212) 2025-10-13 06:12:00 +09:00
scofano
4d683b23fc Include new node (#2211)
* Include New node

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-13 06:11:13 +09:00
SBCODE
c13da606b2 Update custom-node-list.json with a Video Reverse Tool (#2210)
Add a reference to a tool for reversing the image batch tensor of video type files such as MP4, WebM, WebP, Animated Gif.

Also added tags to my other custom nodes Virtual Camera and Image Compare.
2025-10-13 06:09:43 +09:00
Dr.Lt.Data
c792f9277c update DB 2025-10-10 09:03:13 +09:00
Dr.Lt.Data
b430f42622 update DB 2025-10-10 08:27:54 +09:00
shawnawshk
fee822f5ae feat: updated models-list to add support for Qwen Images models (#2204)
* feat: updated models-list to add support for Qwen Images models

* fix: give back orginal spacing

---------

Co-authored-by: remote-dev <you@example.com>
2025-10-10 08:23:26 +09:00
SBCODE
192659ecbd Update custom-node-list.json (#2205)
Added an option for ComfyUI Image Compare.
A no frills image comparing tool. 
Compare two images using ComfyUI. 
Connect images to both image_a and image_b inputs. 
Press RUN. 
Then use the slider to compare.
2025-10-10 08:21:56 +09:00
PiePie
810431b9e2 Adding PiePieTweaks custom nodes (#2206)
Co-authored-by: Imbrium201 <133581634+imbrium201@users.noreply.github.com>
2025-10-10 08:21:42 +09:00
Dr.Lt.Data
02d845adf3 update DB 2025-10-10 08:18:51 +09:00
Dr.Lt.Data
89c7b960fb update scanner.py 2025-10-10 08:03:52 +09:00
Dr.Lt.Data
ed1e399a56 update DB 2025-10-10 01:56:14 +09:00
Dr.Lt.Data
8a3ce1ae57 update DB 2025-10-10 00:41:43 +09:00
sumitchatterjee13
d89ff649f8 Removed HDR Vae Decode node (#2202)
Due to my company policy, my company asked me to remove this node and asked me not to share the codes, so I removed the nodes.
2025-10-10 00:07:01 +09:00
Dr.Lt.Data
24a73b5d1c update DB 2025-10-09 11:56:44 +09:00
Dr.Lt.Data
4d0c40ff8a update DB 2025-10-09 10:57:02 +09:00
Dr.Lt.Data
b5a2bed539 update DB 2025-10-08 12:16:22 +09:00
dehypnotic
0efb79f571 Update custom-node-list.json (#2199) 2025-10-08 11:07:40 +09:00
Seungyong Lee
df944b9a0f Update custom-node-list.json (#2198) 2025-10-08 11:06:50 +09:00
scofano
2c11846430 Add new node - Character and Word counter (#2195)
* Include New node

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-08 11:05:24 +09:00
Dr.Lt.Data
0035c01186 update DB 2025-10-07 14:29:49 +09:00
snicolast
34be3384fe new node: Lightweight ComfyUI wrapper for OVI (#2196) 2025-10-07 13:19:36 +09:00
Dr.Lt.Data
ebbc7b3335 update DB 2025-10-07 13:18:57 +09:00
TEKUA@AITECCAFE
4ccc8c3086 Update custom-node-list.json (#2194)
Add MyCustomNode.
ComfyUI_AITECCAFE_Toolkit
2025-10-07 13:17:35 +09:00
Dr.Lt.Data
af9ebc9568 update DB 2025-10-05 09:15:49 +09:00
Dr.Lt.Data
ca4b61c5f0 update DB 2025-10-04 07:26:25 +09:00
Dr.Lt.Data
393839b3ab update DB 2025-10-03 12:54:02 +09:00
Dr.Lt.Data
dadfc96e00 update DB 2025-10-03 11:10:48 +09:00
u5dev
a0a33aef03 Add: u5 VramFREE to custom-node list (#2191)
Register "u5 VramFREE" (repo: https://github.com/u5dev/comfyUI_u5_VramFREE).
Utility node for freeing VRAM and sequential model loading.
Tags: utility, vram, memory, optimization.
2025-10-03 10:49:12 +09:00
Dr.Lt.Data
99ed81e0f5 update DB 2025-10-02 12:58:04 +09:00
Dr.Lt.Data
5b697db219 update DB 2025-10-02 07:45:30 +09:00
rubyrubyp
8e5bf46e14 Fix spelling in font definition (#2189) 2025-10-02 07:36:57 +09:00
Dr.Lt.Data
9f649b0900 update DB 2025-10-01 12:32:02 +09:00
Dr.Lt.Data
abb15e06d3 update DB 2025-10-01 07:51:07 +09:00
Dr.Lt.Data
11a317493e update DB 2025-10-01 00:35:12 +09:00
Inoland
e8cece0c1b Add ComfyUI Ino nodes (#2187)
https://github.com/nobandegani/comfyui_ino_nodes
2025-10-01 00:10:39 +09:00
Dr.Lt.Data
1ab882f81d update DB 2025-09-30 12:45:40 +09:00
Dr.Lt.Data
b9338186e3 update DB 2025-09-30 07:34:06 +09:00
Dr.Lt.Data
7c3cbff425 update DB 2025-09-29 12:37:31 +09:00
Dr.Lt.Data
1ff0afc633 update DB 2025-09-29 08:12:12 +09:00
Dr.Lt.Data
bfe7ee8fba update DB 2025-09-29 07:48:55 +09:00
Dr.Lt.Data
49c73ed10e update DB 2025-09-29 07:18:46 +09:00
Light-x02
f571baacf9 Add ComfyUI-Lightx02-Nodes and remove duplicates (#2185)
* Update custom-node-list.json

* Update custom-node-list.json
2025-09-29 07:18:20 +09:00
MiuProject
6f02e1114c add VNCCS node to node list (#2184)
* add VNCCS node to node list

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-29 07:16:56 +09:00
Dr.Lt.Data
e230f43565 update DB 2025-09-27 08:11:37 +09:00
Dr.Lt.Data
0d9593e71b update DB 2025-09-27 06:26:28 +09:00
Vérole
20778ecfb0 Add custom node: ComfyUI-VideoCompressor (#2182)
Adds a new unified video compression node. It handles image/video inputs and features 2-pass, CRF, and GPU encoding modes
2025-09-27 05:37:58 +09:00
kj863257rc
2ea991d960 Update custom-node-list.json : add ComfyUI_RC_Image_Compositor to custom-node-list.json (#2180) 2025-09-27 05:37:05 +09:00
Dr.Lt.Data
119c107834 update DB 2025-09-26 12:41:49 +09:00
Dr.Lt.Data
800a0d0449 update DB 2025-09-26 07:20:06 +09:00
Dr.Lt.Data
95c43f0189 update DB 2025-09-26 07:00:07 +09:00
Alex
9c77176c7f updated nodes (#2179)
* Update custom-node-list.json

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-26 06:59:16 +09:00
Dr.Lt.Data
ddb6a55cd6 update DB 2025-09-25 18:12:48 +09:00
Dr.Lt.Data
56a4f6fdd7 update DB 2025-09-25 07:46:13 +09:00
Dr.Lt.Data
8a30f788b5 update DB 2025-09-25 07:21:37 +09:00
ae(seth)tics
380a1c2c8c Update custom-node-list.json (#2177)
Add ComfyUI 3D Model Viewer custom node
2025-09-25 07:18:50 +09:00
Dr.Lt.Data
cd8e8335cf update DB 2025-09-25 07:18:33 +09:00
sumitchatterjee13
6e1beb54a4 Add vae-decode-hdr node with HDR support (#2174)
Added a new custom The vae-decode-hdr repository is for a custom ComfyUI node designed to preserve High Dynamic Range (HDR) data during VAE decoding. The developer, Sumit Chatterjee, created this node to address the limitation of ComfyUI's default VAE Decode node, which compresses outputs to a 0-1 pixel range, resulting in a loss of dynamic range.

The node uses a "scientific approach" to analyze the VAE's conv_out layer and intelligently expand highlight regions, bypassing the clipping that typically occurs. The repository also includes a companion tool called the "Linear EXR Export" node, which is essential for creating professional HDR output files that are ready for use in compositing software. The project is licensed under the MIT License and is open to contributions.ComfyUI node for HDR VAE decoding.
2025-09-25 07:17:28 +09:00
Dr.Lt.Data
9217c965dd update DB 2025-09-25 07:17:12 +09:00
DaLongZZi
a4d71ef487 Add Gemini Prompt Studio node (#2175) 2025-09-25 07:16:18 +09:00
Dr.Lt.Data
518f332047 update DB 2025-09-25 07:15:19 +09:00
Peter
9257d497b8 Add pg nodesAdd "PG Nodes" to custom-node-list.json (#2173)
* Update custom-node-list.json for PG Nodes

* Update custom-node-list.json for PG Nodes (fix)
2025-09-25 07:13:59 +09:00
Dr.Lt.Data
07cf5de4f7 update DB 2025-09-24 07:47:34 +09:00
wallen0322
43ad69e48d Update custom-node-list.json-Add ComfyUI-QI-QwenEditSafe (#2169)
* Update custom-node-list.json-Add ComfyUI-QI-QwenEditSafe

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-24 07:17:34 +09:00
Dr.Lt.Data
c62e236cc6 update DB 2025-09-24 07:17:07 +09:00
fkxianzhou
15a2fbb293 Update custom-node-list.json (#2168) 2025-09-24 07:15:32 +09:00
Dr.Lt.Data
16800c3fa0 update DB 2025-09-23 12:57:23 +09:00
Dr.Lt.Data
ce09f41aa3 update DB 2025-09-23 07:54:51 +09:00
Dr.Lt.Data
47dc2f036a update DB 2025-09-23 07:21:26 +09:00
S4MUEL
f27a154bfd Add ComfyUI-PromptsO to Custom node list (#2167)
* Add ComfyUI-S4Tool-Image to custom nodes list

Add ComfyUI-S4Tool-Image to custom nodes list

* Update custom-node-list.json

Add custom-node : ComfyUI-S4Motion

* Add ComfyUI-S4Tool-Text to custom node list

Text rendering and styling nodes for ComfyUI. This extension provides a basic text renderer, multiple font loaders, and a style node that adds stroke, shadow, gradient fill, and opacity control.

* Add ComfyUI-Prepack to custom node list

A small, practical bundle of ComfyUI nodes that streamlines common workflows.

* Update custom-node-list.json

* Add ComfyUI-PromptsO to Custom node list

A comprehensive AI API integration and prompt processing toolkit for ComfyUI, providing powerful text and image generation capabilities with advanced prompt manipulation tools.

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-23 07:20:33 +09:00
umyunsang
79757366e8 docs: fix typos and phrasing in README and docs (en/ko)\n\n- README: grammar, capitalization, option name (--skip-stat-update), double-click, macOS\n- js/README: Copus platform name\n- docs/en: Colab capitalization\n- docs/ko: spacing, wording, typos (예를, 명령, show를, etc.) (#2166) 2025-09-23 07:17:41 +09:00
Dr.Lt.Data
2cd9a417d6 update DB 2025-09-22 12:32:22 +09:00
Dr.Lt.Data
deb05c6cc3 update DB 2025-09-22 07:30:28 +09:00
sumitchatterjee13
b6f171de51 Add Luminance Stack Processor node (#2165)
A set of nodes to stack multi exposure images to produce high dynamic range image, dedicated exr output node.
2025-09-22 07:14:53 +09:00
Dr.Lt.Data
a58d5f6999 update DB 2025-09-21 12:03:39 +09:00
Dr.Lt.Data
e0b3f3eb45 update DB 2025-09-20 07:50:52 +09:00
Dr.Lt.Data
4bbc8594a7 update DB 2025-09-19 18:05:57 +09:00
Dr.Lt.Data
1ab2b1aeb3 modified: Reflection of changing --disable-manager to --enable-manager 2025-09-19 11:58:04 +09:00
Dr.Lt.Data
3a377300e1 update DB 2025-09-19 07:57:39 +09:00
SBCODE
33a07e3a86 add ComfyUI Virtual Webcam to custom-node-list.json (#2161)
* Added ComfyUI Virtual Webcam plugin to custom-node-list.json

The ComfyUI Virtual Webcam allows you to stream your ksampler output images to a webcam driver

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-19 07:27:21 +09:00
Dr.Lt.Data
212cafc1d7 update DB 2025-09-18 12:45:47 +09:00
Leylah
2643b3cbcc Update author and reference for ComfyUI-Violet-Tools (#2159) 2025-09-18 07:38:32 +09:00
Dr.Lt.Data
d445229b6d update DB 2025-09-17 12:54:06 +09:00
Dr.Lt.Data
dab5c451b0 update DB 2025-09-17 07:37:39 +09:00
Dr.Lt.Data
7bdf06131a update DB 2025-09-17 06:44:45 +09:00
LeechKing
854648d5af Add Danbooru FAISS Search Node to custom-node-list (#2157) 2025-09-17 06:43:55 +09:00
Dr.Lt.Data
c5f7b97359 update DB 2025-09-17 06:43:39 +09:00
Aaalice
dd8a727ad6 Update custom-node-list.json (#2154) 2025-09-17 06:42:10 +09:00
Dr.Lt.Data
6c627fe422 update DB 2025-09-17 06:41:49 +09:00
dehypnotic
ee980e1caf Update custom-node-list.json (#2153) 2025-09-17 06:39:29 +09:00
Semonxue
22bfaf6527 Add ComfyUI FlexAI Nodes to custom-node-list (#2149)
Added a new node for ComfyUI FlexAI with detailed description.
2025-09-17 06:35:58 +09:00
Dr.Lt.Data
48ab48cc30 fixed: more complete uv support
* Previously, only `uv` installed inside a venv was properly handled. Now `uv` installed outside the venv is also supported.
* Even if `use_uv=False`, `uv` is used as a fallback when `pip` is unavailable.
* Even if `use_uv=True`, `pip` is used as a fallback when `uv` is unavailable.

https://github.com/Comfy-Org/ComfyUI-Manager/issues/2125
2025-09-17 06:28:06 +09:00
Dr.Lt.Data
a0b14d4127 update DB 2025-09-16 12:39:14 +09:00
Dr.Lt.Data
03f9fe1a70 update DB 2025-09-16 07:44:02 +09:00
Jonnathan Nakagawa
8915b8d796 Add custom node: comfyui_nakagawa for websocket video data handling (#2151) 2025-09-16 06:36:09 +09:00
Dr.Lt.Data
c77ffeeec0 update DB 2025-09-15 12:52:43 +09:00
Dr.Lt.Data
4acf5660b2 fixed: broken db 2025-09-15 08:11:56 +09:00
Dr.Lt.Data
2d9f0a668c update DB 2025-09-15 07:41:30 +09:00
S4MUEL
9e6cb246cc Update ComfyUI-S4Tool-Image to custom_nodes list (#2150)
* Add ComfyUI-S4Tool-Image to custom nodes list

Add ComfyUI-S4Tool-Image to custom nodes list

* Update custom-node-list.json

Add custom-node : ComfyUI-S4Motion

* Add ComfyUI-S4Tool-Text to custom node list

Text rendering and styling nodes for ComfyUI. This extension provides a basic text renderer, multiple font loaders, and a style node that adds stroke, shadow, gradient fill, and opacity control.

* Add ComfyUI-Prepack to custom node list

A small, practical bundle of ComfyUI nodes that streamlines common workflows.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-09-15 07:01:27 +09:00
Dr.Lt.Data
14544ca63d update DB 2025-09-14 08:21:21 +09:00
fr0nky0ng
26b347c04c Add custom node: ComfyUI-Face-Comparator (#2147) 2025-09-14 08:20:23 +09:00
Dr.Lt.Data
36f75d1811 update DB 2025-09-13 15:55:25 +09:00
Dr.Lt.Data
ffaeb6d3ff from draft-v4 to manager-v4 2025-09-13 08:07:44 +09:00
Dr.Lt.Data
6cc1ad4cc0 Merge branch 'main' into draft-v4 2025-09-13 08:06:45 +09:00
Dr.Lt.Data
27fc787294 update DB 2025-09-13 08:06:27 +09:00
snicolast
d23286d390 IndexTTS2 custom node (custom-node-list.json) (#2146) 2025-09-13 07:36:18 +09:00
Dr.Lt.Data
7c3ccc76c3 update DB 2025-09-12 12:48:20 +09:00
Dr.Lt.Data
892dc5d4f3 update DB 2025-09-12 07:53:17 +09:00
Dr.Lt.Data
e278692749 update DB 2025-09-11 12:36:38 +09:00
Dr.Lt.Data
8d77dd2246 update DB 2025-09-11 07:23:42 +09:00
Dr.Lt.Data
14ede2a585 update DB 2025-09-10 11:58:27 +09:00
Dr.Lt.Data
5b525622f1 update DB 2025-09-10 07:52:05 +09:00
Dr.Lt.Data
a24b11905c update DB 2025-09-09 12:19:49 +09:00
darkamenosa
5d70858341 Add Comfy Nano Banana - Interact directly with Gemini API using your own API key, also add custom batch images node to avoid chaining a lot of nodes (#2141) 2025-09-09 07:39:31 +09:00
dehypnotic
3daa006741 Update custom-node-list.json (#2140) 2025-09-09 07:39:18 +09:00
Dr.Lt.Data
0bcc0c2101 update DB 2025-09-08 12:31:06 +09:00
Dr.Lt.Data
b8850c808c update DB 2025-09-08 07:47:24 +09:00
Dr.Lt.Data
f4f2c01ac1 update DB 2025-09-08 06:40:55 +09:00
Dr.Lt.Data
7072e82dff update DB 2025-09-08 06:38:52 +09:00
Leylah Krell
53dc36c4cf Add ComfyUI Violet Tools to custom node list (#2136)
Added aesthetic-focused custom nodes package with 7 specialized nodes:
- Aesthetic Alchemist (style blending with 20+ curated aesthetics)
- Quality Queen (quality prompts)
- Glamour Goddess (hair/makeup)
- Body Bard (body features)
- Pose Priestess (positioning)
- Encoding Enchantress (text processing)
- Negativity Nullifier (negative prompts)

Features weighted blending, randomization, and modular YAML-based configuration.
2025-09-08 06:37:00 +09:00
Satadal Dhara
5aadc3af00 Updated Node List with My node (#2134) 2025-09-06 03:55:06 +09:00
Dr.Lt.Data
8c28a698ed update DB 2025-09-06 03:54:56 +09:00
Dr.Lt.Data
5ed6d8b202 update DB 2025-09-06 03:53:56 +09:00
Vantage with AI
b73dc7bf5e Changed name of node from ComfyUI-HunyuanFoley to Vantage-HunyuanFoley because of conflict. (#2130)
* Update custom-node-list.json

* Update custom-node-list.json
2025-09-06 03:51:08 +09:00
Dr.Lt.Data
71d0f4ab63 update DB 2025-09-05 12:56:40 +09:00
Dr.Lt.Data
d479dcde81 update DB 2025-09-05 07:53:04 +09:00
Dr.Lt.Data
ae536017d5 update DB 2025-09-05 07:49:12 +09:00
matthewfriedrichs
67ddfce279 adding thought bubble custom node (#2129) 2025-09-05 07:48:06 +09:00
Vantage with AI
b1f39b34d7 Update custom-node-list.json (#2128) 2025-09-05 07:47:26 +09:00
Dr.Lt.Data
6cf958ccce udpate DB 2025-09-04 12:22:45 +09:00
Dr.Lt.Data
eaed3677d3 update DB 2025-09-04 07:27:31 +09:00
sumitchatterjee13
b9c88da54d Add Nuke Nodes for ComfyUI to registry (#2123)
This PR adds nuke-nodes-comfyui to the ComfyUI Manager registry.

Features:
- Professional compositing nodes replicating Nuke functionality
- 15+ nodes including merge, grade, transform, and blur operations
- Designed for professional compositing workflows in ComfyUI
- Well-documented with installation instructions

Repository: https://github.com/sumitchatterjee13/nuke-nodes-comfyui
2025-09-04 07:23:48 +09:00
Dr.Lt.Data
104ae77f7a update DB 2025-09-03 12:12:40 +09:00
Dr.Lt.Data
bfcb2ce61b update DB 2025-09-03 07:40:58 +09:00
32 changed files with 38815 additions and 11589 deletions

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: branches:
- draft-v4 - manager-v4
paths: paths:
- "pyproject.toml" - "pyproject.toml"

View File

@@ -89,20 +89,20 @@
## Paths ## Paths
In `ComfyUI-Manager` V3.0 and later, configuration files and dynamically generated files are located under `<USER_DIRECTORY>/default/ComfyUI-Manager/`. In `ComfyUI-Manager` V4.0.3b4 and later, configuration files and dynamically generated files are located under `<USER_DIRECTORY>/__manager/`.
* <USER_DIRECTORY> * <USER_DIRECTORY>
* If executed without any options, the path defaults to ComfyUI/user. * If executed without any options, the path defaults to ComfyUI/user.
* It can be set using --user-directory <USER_DIRECTORY>. * It can be set using --user-directory <USER_DIRECTORY>.
* Basic config files: `<USER_DIRECTORY>/default/ComfyUI-Manager/config.ini` * Basic config files: `<USER_DIRECTORY>/__manager/config.ini`
* Configurable channel lists: `<USER_DIRECTORY>/default/ComfyUI-Manager/channels.ini` * Configurable channel lists: `<USER_DIRECTORY>/__manager/channels.ini`
* Configurable pip overrides: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_overrides.json` * Configurable pip overrides: `<USER_DIRECTORY>/__manager/pip_overrides.json`
* Configurable pip blacklist: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_blacklist.list` * Configurable pip blacklist: `<USER_DIRECTORY>/__manager/pip_blacklist.list`
* Configurable pip auto fix: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_auto_fix.list` * Configurable pip auto fix: `<USER_DIRECTORY>/__manager/pip_auto_fix.list`
* Saved snapshot files: `<USER_DIRECTORY>/default/ComfyUI-Manager/snapshots` * Saved snapshot files: `<USER_DIRECTORY>/__manager/snapshots`
* Startup script files: `<USER_DIRECTORY>/default/ComfyUI-Manager/startup-scripts` * Startup script files: `<USER_DIRECTORY>/__manager/startup-scripts`
* Component files: `<USER_DIRECTORY>/default/ComfyUI-Manager/components` * Component files: `<USER_DIRECTORY>/__manager/components`
## `extra_model_paths.yaml` Configuration ## `extra_model_paths.yaml` Configuration
@@ -115,17 +115,17 @@ The following settings are applied based on the section marked as `is_default`.
## Snapshot-Manager ## Snapshot-Manager
* When you press `Save snapshot` or use `Update All` on `Manager Menu`, the current installation status snapshot is saved. * When you press `Save snapshot` or use `Update All` on `Manager Menu`, the current installation status snapshot is saved.
* Snapshot file dir: `<USER_DIRECTORY>/default/ComfyUI-Manager/snapshots` * Snapshot file dir: `<USER_DIRECTORY>/__manager/snapshots`
* You can rename snapshot file. * You can rename snapshot file.
* Press the "Restore" button to revert to the installation status of the respective snapshot. * Press the "Restore" button to revert to the installation status of the respective snapshot.
* However, for custom nodes not managed by Git, snapshot support is incomplete. * However, for custom nodes not managed by Git, snapshot support is incomplete.
* When you press `Restore`, it will take effect on the next ComfyUI startup. * When you press `Restore`, it will take effect on the next ComfyUI startup.
* The selected snapshot file is saved in `<USER_DIRECTORY>/default/ComfyUI-Manager/startup-scripts/restore-snapshot.json`, and upon restarting ComfyUI, the snapshot is applied and then deleted. * The selected snapshot file is saved in `<USER_DIRECTORY>/__manager/startup-scripts/restore-snapshot.json`, and upon restarting ComfyUI, the snapshot is applied and then deleted.
![model-install-dialog](https://raw.githubusercontent.com/ltdrdata/ComfyUI-extension-tutorials/Main/ComfyUI-Manager/images/snapshot.jpg) ![model-install-dialog](https://raw.githubusercontent.com/ltdrdata/ComfyUI-extension-tutorials/Main/ComfyUI-Manager/images/snapshot.jpg)
## cm-cli: command line tools for power user ## cm-cli: command line tools for power users
* A tool is provided that allows you to use the features of ComfyUI-Manager without running ComfyUI. * A tool is provided that allows you to use the features of ComfyUI-Manager without running ComfyUI.
* For more details, please refer to the [cm-cli documentation](docs/en/cm-cli.md). * For more details, please refer to the [cm-cli documentation](docs/en/cm-cli.md).
@@ -169,12 +169,12 @@ The following settings are applied based on the section marked as `is_default`.
} }
``` ```
* `<current timestamp>` Ensure that the timestamp is always unique. * `<current timestamp>` Ensure that the timestamp is always unique.
* "components" should have the same structure as the content of the file stored in `<USER_DIRECTORY>/default/ComfyUI-Manager/components`. * "components" should have the same structure as the content of the file stored in `<USER_DIRECTORY>/__manager/components`.
* `<component name>`: The name should be in the format `<prefix>::<node name>`. * `<component name>`: The name should be in the format `<prefix>::<node name>`.
* `<compnent nodeata>`: In the nodedata of the group node. * `<component node data>`: In the node data of the group node.
* `<version>`: Only two formats are allowed: `major.minor.patch` or `major.minor`. (e.g. `1.0`, `2.2.1`) * `<version>`: Only two formats are allowed: `major.minor.patch` or `major.minor`. (e.g. `1.0`, `2.2.1`)
* `<datetime>`: Saved time * `<datetime>`: Saved time
* `<packname>`: If the packname is not empty, the category becomes packname/workflow, and it is saved in the <packname>.pack file in `<USER_DIRECTORY>/default/ComfyUI-Manager/components`. * `<packname>`: If the packname is not empty, the category becomes packname/workflow, and it is saved in the <packname>.pack file in `<USER_DIRECTORY>/__manager/components`.
* `<category>`: If there is neither a category nor a packname, it is saved in the components category. * `<category>`: If there is neither a category nor a packname, it is saved in the components category.
``` ```
"version":"1.0", "version":"1.0",
@@ -189,7 +189,7 @@ The following settings are applied based on the section marked as `is_default`.
* Dragging and dropping or pasting a single component will add a node. However, when adding multiple components, nodes will not be added. * Dragging and dropping or pasting a single component will add a node. However, when adding multiple components, nodes will not be added.
## Support of missing nodes installation ## Support for installing missing nodes
![missing-menu](https://raw.githubusercontent.com/ltdrdata/ComfyUI-extension-tutorials/Main/ComfyUI-Manager/images/missing-menu.jpg) ![missing-menu](https://raw.githubusercontent.com/ltdrdata/ComfyUI-extension-tutorials/Main/ComfyUI-Manager/images/missing-menu.jpg)
@@ -229,10 +229,10 @@ The following settings are applied based on the section marked as `is_default`.
* Logging to file feature * Logging to file feature
* This feature is enabled by default and can be disabled by setting `file_logging = False` in the `config.ini`. * This feature is enabled by default and can be disabled by setting `file_logging = False` in the `config.ini`.
* Fix node(recreate): When right-clicking on a node and selecting `Fix node (recreate)`, you can recreate the node. The widget's values are reset, while the connections maintain those with the same names. * Fix node (recreate): When right-clicking on a node and selecting `Fix node (recreate)`, you can recreate the node. The widget's values are reset, while the connections maintain those with the same names.
* It is used to correct errors in nodes of old workflows created before, which are incompatible with the version changes of custom nodes. * It is used to correct errors in nodes of old workflows created before, which are incompatible with the version changes of custom nodes.
* Double-Click Node Title: You can set the double click behavior of nodes in the ComfyUI-Manager menu. * Double-Click Node Title: You can set the double-click behavior of nodes in the ComfyUI-Manager menu.
* `Copy All Connections`, `Copy Input Connections`: Double-clicking a node copies the connections of the nearest node. * `Copy All Connections`, `Copy Input Connections`: Double-clicking a node copies the connections of the nearest node.
* This action targets the nearest node within a straight-line distance of 1000 pixels from the center of the node. * This action targets the nearest node within a straight-line distance of 1000 pixels from the center of the node.
* In the case of `Copy All Connections`, it duplicates existing outputs, but since it does not allow duplicate connections, the existing output connections of the original node are disconnected. * In the case of `Copy All Connections`, it duplicates existing outputs, but since it does not allow duplicate connections, the existing output connections of the original node are disconnected.
@@ -298,17 +298,17 @@ When you run the `scan.sh` script:
* It updates the `github-stats.json`. * It updates the `github-stats.json`.
* This uses the GitHub API, so set your token with `export GITHUB_TOKEN=your_token_here` to avoid quickly reaching the rate limit and malfunctioning. * This uses the GitHub API, so set your token with `export GITHUB_TOKEN=your_token_here` to avoid quickly reaching the rate limit and malfunctioning.
* To skip this step, add the `--skip-update-stat` option. * To skip this step, add the `--skip-stat-update` option.
* The `--skip-all` option applies both `--skip-update` and `--skip-stat-update`. * The `--skip-all` option applies both `--skip-update` and `--skip-stat-update`.
## Troubleshooting ## Troubleshooting
* If your `git.exe` is installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name in `git_exe = ` in the `<USER_DIRECTORY>/default/ComfyUI-Manager/config.ini` file that is generated. * If your `git.exe` is installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name in `git_exe = ` in the `<USER_DIRECTORY>/__manager/config.ini` file that is generated.
* If updating ComfyUI-Manager itself fails, please go to the **ComfyUI-Manager** directory and execute the command `git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull`. * If updating ComfyUI-Manager itself fails, please go to the **ComfyUI-Manager** directory and execute the command `git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull`.
* If you encounter the error message `Overlapped Object has pending operation at deallocation on Comfyui Manager load` under Windows * If you encounter the error message `Overlapped Object has pending operation at deallocation on ComfyUI Manager load` under Windows
* Edit `config.ini` file: add `windows_selector_event_loop_policy = True` * Edit `config.ini` file: add `windows_selector_event_loop_policy = True`
* if `SSL: CERTIFICATE_VERIFY_FAILED` error is occured. * If the `SSL: CERTIFICATE_VERIFY_FAILED` error occurs.
* Edit `config.ini` file: add `bypass_ssl = True` * Edit `config.ini` file: add `bypass_ssl = True`

View File

@@ -37,7 +37,7 @@ find ~/.tmp/default -name "*.py" -print0 | xargs -0 grep -E "crypto|^_A="
echo echo
echo CHECK3 echo CHECK3
find ~/.tmp/default -name "requirements.txt" | xargs grep "^\s*https\\?:" find ~/.tmp/default -name "requirements.txt" | xargs grep "^\s*[^#]*https\?:"
find ~/.tmp/default -name "requirements.txt" | xargs grep "\.whl" find ~/.tmp/default -name "requirements.txt" | xargs grep "^\s*[^#].*\.whl"
echo echo

View File

@@ -15,7 +15,7 @@ def start():
logging.info('[START] ComfyUI-Manager') logging.info('[START] ComfyUI-Manager')
from .common import cm_global # noqa: F401 from .common import cm_global # noqa: F401
if not args.disable_manager: if args.enable_manager:
if args.enable_manager_legacy_ui: if args.enable_manager_legacy_ui:
try: try:
from .legacy import manager_server # noqa: F401 from .legacy import manager_server # noqa: F401
@@ -42,7 +42,7 @@ def should_be_disabled(fullpath:str) -> bool:
1. Disables the legacy ComfyUI-Manager. 1. Disables the legacy ComfyUI-Manager.
2. The blocklist can be expanded later based on policies. 2. The blocklist can be expanded later based on policies.
""" """
if not args.disable_manager: if args.enable_manager:
# In cases where installation is done via a zip archive, the directory name may not be comfyui-manager, and it may not contain a git repository. # In cases where installation is done via a zip archive, the directory name may not be comfyui-manager, and it may not contain a git repository.
# It is assumed that any installed legacy ComfyUI-Manager will have at least 'comfyui-manager' in its directory name. # It is assumed that any installed legacy ComfyUI-Manager will have at least 'comfyui-manager' in its directory name.
dir_name = os.path.basename(fullpath).lower() dir_name = os.path.basename(fullpath).lower()

View File

@@ -11,6 +11,7 @@ from . import manager_util
import requests import requests
import toml import toml
import logging
base_url = "https://api.comfy.org" base_url = "https://api.comfy.org"
@@ -23,7 +24,7 @@ async def get_cnr_data(cache_mode=True, dont_wait=True):
try: try:
return await _get_cnr_data(cache_mode, dont_wait) return await _get_cnr_data(cache_mode, dont_wait)
except asyncio.TimeoutError: except asyncio.TimeoutError:
print("A timeout occurred during the fetch process from ComfyRegistry.") logging.info("A timeout occurred during the fetch process from ComfyRegistry.")
return await _get_cnr_data(cache_mode=True, dont_wait=True) # timeout fallback return await _get_cnr_data(cache_mode=True, dont_wait=True) # timeout fallback
async def _get_cnr_data(cache_mode=True, dont_wait=True): async def _get_cnr_data(cache_mode=True, dont_wait=True):
@@ -79,12 +80,12 @@ async def _get_cnr_data(cache_mode=True, dont_wait=True):
full_nodes[x['id']] = x full_nodes[x['id']] = x
if page % 5 == 0: if page % 5 == 0:
print(f"FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}") logging.info(f"FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}")
page += 1 page += 1
time.sleep(0.5) time.sleep(0.5)
print("FETCH ComfyRegistry Data [DONE]") logging.info("FETCH ComfyRegistry Data [DONE]")
for v in full_nodes.values(): for v in full_nodes.values():
if 'latest_version' not in v: if 'latest_version' not in v:
@@ -100,7 +101,7 @@ async def _get_cnr_data(cache_mode=True, dont_wait=True):
if cache_state == 'not-cached': if cache_state == 'not-cached':
return {} return {}
else: else:
print("[ComfyUI-Manager] The ComfyRegistry cache update is still in progress, so an outdated cache is being used.") logging.info("[ComfyUI-Manager] The ComfyRegistry cache update is still in progress, so an outdated cache is being used.")
with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file: with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file:
return json.load(json_file)['nodes'] return json.load(json_file)['nodes']
@@ -114,7 +115,7 @@ async def _get_cnr_data(cache_mode=True, dont_wait=True):
return json_obj['nodes'] return json_obj['nodes']
except Exception: except Exception:
res = {} res = {}
print("Cannot connect to comfyregistry.") logging.warning("Cannot connect to comfyregistry.")
finally: finally:
if cache_mode: if cache_mode:
is_cache_loading = False is_cache_loading = False
@@ -240,7 +241,7 @@ def generate_cnr_id(fullpath, cnr_id):
with open(cnr_id_path, "w") as f: with open(cnr_id_path, "w") as f:
return f.write(cnr_id) return f.write(cnr_id)
except Exception: except Exception:
print(f"[ComfyUI Manager] unable to create file: {cnr_id_path}") logging.error(f"[ComfyUI Manager] unable to create file: {cnr_id_path}")
def read_cnr_id(fullpath): def read_cnr_id(fullpath):

View File

@@ -34,7 +34,7 @@ manager_pip_blacklist_path = None
manager_components_path = None manager_components_path = None
manager_batch_history_path = None manager_batch_history_path = None
def update_user_directory(user_dir): def update_user_directory(manager_dir):
global manager_files_path global manager_files_path
global manager_config_path global manager_config_path
global manager_channel_list_path global manager_channel_list_path
@@ -45,7 +45,7 @@ def update_user_directory(user_dir):
global manager_components_path global manager_components_path
global manager_batch_history_path global manager_batch_history_path
manager_files_path = os.path.abspath(os.path.join(user_dir, 'default', 'ComfyUI-Manager')) manager_files_path = manager_dir
if not os.path.exists(manager_files_path): if not os.path.exists(manager_files_path):
os.makedirs(manager_files_path) os.makedirs(manager_files_path)
@@ -73,7 +73,7 @@ def update_user_directory(user_dir):
try: try:
import folder_paths import folder_paths
update_user_directory(folder_paths.get_user_directory()) update_user_directory(folder_paths.get_system_user_directory("manager"))
except Exception: except Exception:
# fallback: # fallback:

View File

@@ -15,6 +15,7 @@ import re
import logging import logging
import platform import platform
import shlex import shlex
from functools import lru_cache
cache_lock = threading.Lock() cache_lock = threading.Lock()
@@ -38,18 +39,64 @@ def add_python_path_to_env():
os.environ['PATH'] = os.path.dirname(sys.executable)+sep+os.environ['PATH'] os.environ['PATH'] = os.path.dirname(sys.executable)+sep+os.environ['PATH']
@lru_cache(maxsize=2)
def get_pip_cmd(force_uv=False):
"""
Get the base pip command, with automatic fallback to uv if pip is unavailable.
Args:
force_uv (bool): If True, use uv directly without trying pip
Returns:
list: Base command for pip operations
"""
embedded = 'python_embeded' in sys.executable
# Try pip first (unless forcing uv)
if not force_uv:
try:
test_cmd = [sys.executable] + (['-s'] if embedded else []) + ['-m', 'pip', '--version']
subprocess.check_output(test_cmd, stderr=subprocess.DEVNULL, timeout=5)
return [sys.executable] + (['-s'] if embedded else []) + ['-m', 'pip']
except Exception:
logging.warning("[ComfyUI-Manager] python -m pip not available. Falling back to uv.")
# Try uv (either forced or pip failed)
import shutil
# Try uv as Python module
try:
test_cmd = [sys.executable] + (['-s'] if embedded else []) + ['-m', 'uv', '--version']
subprocess.check_output(test_cmd, stderr=subprocess.DEVNULL, timeout=5)
logging.info("[ComfyUI-Manager] Using uv as Python module for pip operations.")
return [sys.executable] + (['-s'] if embedded else []) + ['-m', 'uv', 'pip']
except Exception:
pass
# Try standalone uv
if shutil.which('uv'):
logging.info("[ComfyUI-Manager] Using standalone uv for pip operations.")
return ['uv', 'pip']
# Nothing worked
logging.error("[ComfyUI-Manager] Neither python -m pip nor uv are available. Cannot proceed with package operations.")
raise Exception("Neither pip nor uv are available for package management")
def make_pip_cmd(cmd): def make_pip_cmd(cmd):
if 'python_embeded' in sys.executable: """
if use_uv: Create a pip command by combining the cached base pip command with the given arguments.
return [sys.executable, '-s', '-m', 'uv', 'pip'] + cmd
else: Args:
return [sys.executable, '-s', '-m', 'pip'] + cmd cmd (list): List of pip command arguments (e.g., ['install', 'package'])
else:
# FIXED: https://github.com/ltdrdata/ComfyUI-Manager/issues/1667 Returns:
if use_uv: list: Complete command list ready for subprocess execution
return [sys.executable, '-m', 'uv', 'pip'] + cmd """
else: global use_uv
return [sys.executable, '-m', 'pip'] + cmd base_cmd = get_pip_cmd(force_uv=use_uv)
return base_cmd + cmd
# DON'T USE StrictVersion - cannot handle pre_release version # DON'T USE StrictVersion - cannot handle pre_release version
# try: # try:

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,7 @@ from ..common.enums import NetworkMode, SecurityLevel, DBMode
from ..common import context from ..common import context
version_code = [4, 0, 1] version_code = [4, 0, 3]
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 '')
@@ -1003,7 +1003,6 @@ class UnifiedManager:
""" """
result = ManagedResult('enable') result = ManagedResult('enable')
if 'comfyui-manager' in node_id.lower(): if 'comfyui-manager' in node_id.lower():
return result.fail(f"ignored: enabling '{node_id}'") return result.fail(f"ignored: enabling '{node_id}'")
@@ -1902,6 +1901,27 @@ def execute_install_script(url, repo_path, lazy_mode=False, instant_execution=Fa
return True return True
def install_manager_requirements(repo_path):
"""
Install packages from manager_requirements.txt if it exists.
This is specifically for ComfyUI's manager_requirements.txt.
"""
manager_requirements_path = os.path.join(repo_path, "manager_requirements.txt")
if not os.path.exists(manager_requirements_path):
return
logging.info("[ComfyUI-Manager] Installing manager_requirements.txt")
with open(manager_requirements_path, "r") as f:
for line in f:
line = line.strip()
if line and not line.startswith('#'):
if '#' in line:
line = line.split('#')[0].strip()
if line:
install_cmd = manager_util.make_pip_cmd(["install", line])
subprocess.run(install_cmd)
def git_repo_update_check_with(path, do_fetch=False, do_update=False, no_deps=False): def git_repo_update_check_with(path, do_fetch=False, do_update=False, no_deps=False):
""" """
@@ -2435,6 +2455,7 @@ def update_to_stable_comfyui(repo_path):
else: else:
logging.info(f"[ComfyUI-Manager] Updating ComfyUI: {current_tag} -> {latest_tag}") logging.info(f"[ComfyUI-Manager] Updating ComfyUI: {current_tag} -> {latest_tag}")
repo.git.checkout(latest_tag) repo.git.checkout(latest_tag)
execute_install_script("ComfyUI", repo_path, instant_execution=False, no_deps=False)
return 'updated', latest_tag return 'updated', latest_tag
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()

View File

@@ -968,6 +968,8 @@ async def task_worker():
logging.error("ComfyUI update failed") logging.error("ComfyUI update failed")
return "fail" return "fail"
elif res == "updated": elif res == "updated":
core.install_manager_requirements(repo_path)
if is_stable: if is_stable:
logging.info("ComfyUI is updated to latest stable version.") logging.info("ComfyUI is updated to latest stable version.")
return "success-stable-" + latest_tag return "success-stable-" + latest_tag
@@ -2045,10 +2047,7 @@ async def default_cache_update():
) )
traceback.print_exc() traceback.print_exc()
if ( if core.get_config()["network_mode"] != "offline":
core.get_config()["network_mode"] != "offline"
and not manager_util.is_manager_pip_package()
):
a = get_cache("custom-node-list.json") a = get_cache("custom-node-list.json")
b = get_cache("extension-node-map.json") b = get_cache("extension-node-map.json")
c = get_cache("model-list.json") c = get_cache("model-list.json")

View File

@@ -13,7 +13,7 @@ This directory contains the JavaScript frontend implementation for ComfyUI-Manag
## Sharing Components ## Sharing Components
- **comfyui-share-common.js**: Base functionality for workflow sharing features. - **comfyui-share-common.js**: Base functionality for workflow sharing features.
- **comfyui-share-copus.js**: Integration with the ComfyUI Opus sharing platform. - **comfyui-share-copus.js**: Integration with the ComfyUI Copus sharing platform.
- **comfyui-share-openart.js**: Integration with the OpenArt sharing platform. - **comfyui-share-openart.js**: Integration with the OpenArt sharing platform.
- **comfyui-share-youml.js**: Integration with the YouML sharing platform. - **comfyui-share-youml.js**: Integration with the YouML sharing platform.
@@ -47,4 +47,4 @@ CSS files are included for specific components:
- **custom-nodes-manager.css**: Styling for the node management UI - **custom-nodes-manager.css**: Styling for the node management UI
- **model-manager.css**: Styling for the model management UI - **model-manager.css**: Styling for the model management UI
This frontend implementation provides a comprehensive yet user-friendly interface for managing the ComfyUI ecosystem. This frontend implementation provides a comprehensive yet user-friendly interface for managing the ComfyUI ecosystem.

View File

@@ -1,5 +1,5 @@
.cn-manager { .cn-manager {
--grid-font: -apple-system, BlinkMacSystemFont, "Segue UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; --grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
z-index: 1099; z-index: 1099;
width: 80%; width: 80%;
height: 80%; height: 80%;

View File

@@ -41,7 +41,7 @@ from ..common.enums import NetworkMode, SecurityLevel, DBMode
from ..common import context from ..common import context
version_code = [4, 0] version_code = [4, 0, 3]
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 '')
@@ -1391,6 +1391,7 @@ class UnifiedManager:
return ManagedResult('skip') return ManagedResult('skip')
elif self.is_disabled(node_id): elif self.is_disabled(node_id):
return self.unified_enable(node_id) return self.unified_enable(node_id)
else: else:
version_spec = self.resolve_unspecified_version(node_id) version_spec = self.resolve_unspecified_version(node_id)
@@ -1912,6 +1913,27 @@ def execute_install_script(url, repo_path, lazy_mode=False, instant_execution=Fa
return True return True
def install_manager_requirements(repo_path):
"""
Install packages from manager_requirements.txt if it exists.
This is specifically for ComfyUI's manager_requirements.txt.
"""
manager_requirements_path = os.path.join(repo_path, "manager_requirements.txt")
if not os.path.exists(manager_requirements_path):
return
logging.info("[ComfyUI-Manager] Installing manager_requirements.txt")
with open(manager_requirements_path, "r") as f:
for line in f:
line = line.strip()
if line and not line.startswith('#'):
if '#' in line:
line = line.split('#')[0].strip()
if line:
install_cmd = manager_util.make_pip_cmd(["install", line])
subprocess.run(install_cmd)
def git_repo_update_check_with(path, do_fetch=False, do_update=False, no_deps=False): def git_repo_update_check_with(path, do_fetch=False, do_update=False, no_deps=False):
""" """
@@ -2431,6 +2453,7 @@ def update_to_stable_comfyui(repo_path):
else: else:
logging.info(f"[ComfyUI-Manager] Updating ComfyUI: {current_tag} -> {latest_tag}") logging.info(f"[ComfyUI-Manager] Updating ComfyUI: {current_tag} -> {latest_tag}")
repo.git.checkout(latest_tag) repo.git.checkout(latest_tag)
execute_install_script("ComfyUI", repo_path, instant_execution=False, no_deps=False)
return 'updated', latest_tag return 'updated', latest_tag
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()
@@ -2562,9 +2585,13 @@ def check_state_of_git_node_pack_single(item, do_fetch=False, do_update_check=Tr
def get_installed_pip_packages(): def get_installed_pip_packages():
# extract pip package infos try:
cmd = manager_util.make_pip_cmd(['freeze']) # extract pip package infos
pips = subprocess.check_output(cmd, text=True).split('\n') cmd = manager_util.make_pip_cmd(['freeze'])
pips = subprocess.check_output(cmd, text=True).split('\n')
except Exception as e:
logging.warning("[ComfyUI-Manager] Could not enumerate pip packages for snapshot: %s", e)
return {}
res = {} res = {}
for x in pips: for x in pips:

View File

@@ -561,6 +561,8 @@ async def task_worker():
logging.error("ComfyUI update failed") logging.error("ComfyUI update failed")
return "fail" return "fail"
elif res == "updated": elif res == "updated":
core.install_manager_requirements(repo_path)
if is_stable: if is_stable:
logging.info("ComfyUI is updated to latest stable version.") logging.info("ComfyUI is updated to latest stable version.")
return "success-stable-"+latest_tag return "success-stable-"+latest_tag

View File

@@ -5355,6 +5355,317 @@
"filename": "LBM_relighting.safetensors", "filename": "LBM_relighting.safetensors",
"url": "https://huggingface.co/jasperai/LBM_relighting/resolve/main/model.safetensors", "url": "https://huggingface.co/jasperai/LBM_relighting/resolve/main/model.safetensors",
"size": "5.02GB" "size": "5.02GB"
},
{
"name": "Qwen-Image VAE",
"type": "VAE",
"base": "Qwen-Image",
"save_path": "vae/qwen-image",
"description": "VAE model for Qwen-Image",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI",
"filename": "qwen_image_vae.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/vae/qwen_image_vae.safetensors",
"size": "335MB"
},
{
"name": "Qwen 2.5 VL 7B Text Encoder (fp8_scaled)",
"type": "clip",
"base": "Qwen-2.5-VL",
"save_path": "text_encoders/qwen",
"description": "Qwen 2.5 VL 7B text encoder model (fp8_scaled)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI",
"filename": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/text_encoders/qwen_2.5_vl_7b_fp8_scaled.safetensors",
"size": "3.75GB"
},
{
"name": "Qwen 2.5 VL 7B Text Encoder",
"type": "clip",
"base": "Qwen-2.5-VL",
"save_path": "text_encoders/qwen",
"description": "Qwen 2.5 VL 7B text encoder model",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI",
"filename": "qwen_2.5_vl_7b.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/text_encoders/qwen_2.5_vl_7b.safetensors",
"size": "7.51GB"
},
{
"name": "Qwen-Image Diffusion Model (fp8_e4m3fn)",
"type": "diffusion_model",
"base": "Qwen-Image",
"save_path": "diffusion_models/qwen-image",
"description": "Qwen-Image diffusion model (fp8_e4m3fn)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI",
"filename": "qwen_image_fp8_e4m3fn.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_fp8_e4m3fn.safetensors",
"size": "4.89GB"
},
{
"name": "Qwen-Image Diffusion Model (bf16)",
"type": "diffusion_model",
"base": "Qwen-Image",
"save_path": "diffusion_models/qwen-image",
"description": "Qwen-Image diffusion model (bf16)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI",
"filename": "qwen_image_bf16.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_bf16.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Edit 2509 Diffusion Model (fp8_e4m3fn)",
"type": "diffusion_model",
"base": "Qwen-Image-Edit",
"save_path": "diffusion_models/qwen-image-edit",
"description": "Qwen-Image-Edit 2509 diffusion model (fp8_e4m3fn)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI",
"filename": "qwen_image_edit_2509_fp8_e4m3fn.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_edit_2509_fp8_e4m3fn.safetensors",
"size": "4.89GB"
},
{
"name": "Qwen-Image-Edit 2509 Diffusion Model (bf16)",
"type": "diffusion_model",
"base": "Qwen-Image-Edit",
"save_path": "diffusion_models/qwen-image-edit",
"description": "Qwen-Image-Edit 2509 diffusion model (bf16)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI",
"filename": "qwen_image_edit_2509_bf16.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_edit_2509_bf16.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Edit Diffusion Model (fp8_e4m3fn)",
"type": "diffusion_model",
"base": "Qwen-Image-Edit",
"save_path": "diffusion_models/qwen-image-edit",
"description": "Qwen-Image-Edit diffusion model (fp8_e4m3fn)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI",
"filename": "qwen_image_edit_fp8_e4m3fn.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_edit_fp8_e4m3fn.safetensors",
"size": "4.89GB"
},
{
"name": "Qwen-Image-Edit Diffusion Model (bf16)",
"type": "diffusion_model",
"base": "Qwen-Image-Edit",
"save_path": "diffusion_models/qwen-image-edit",
"description": "Qwen-Image-Edit diffusion model (bf16)",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI",
"filename": "qwen_image_edit_bf16.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_edit_bf16.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 8steps V1.0",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 8-step LoRA model V1.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-8steps-V1.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V1.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 4steps V1.0",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 4-step LoRA model V1.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-4steps-V1.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 4steps V1.0 (bf16)",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 4-step LoRA model V1.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-4steps-V1.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-4steps-V1.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Lightning 4steps V2.0",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 4-step LoRA model V2.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-4steps-V2.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-4steps-V2.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 4steps V2.0 (bf16)",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 4-step LoRA model V2.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-4steps-V2.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-4steps-V2.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Lightning 8steps V1.1",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 8-step LoRA model V1.1",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-8steps-V1.1.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V1.1.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 8steps V1.1 (bf16)",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 8-step LoRA model V1.1 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-8steps-V1.1-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V1.1-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Lightning 8steps V2.0",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 8-step LoRA model V2.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-8steps-V2.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V2.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Lightning 8steps V2.0 (bf16)",
"type": "lora",
"base": "Qwen-Image",
"save_path": "loras/qwen-image-lightning",
"description": "Qwen-Image-Lightning 8-step LoRA model V2.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Lightning-8steps-V2.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V2.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Edit-Lightning 4steps V1.0",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-Lightning 4-step LoRA model V1.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-Lightning-4steps-V1.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-Lightning-4steps-V1.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Edit-Lightning 4steps V1.0 (bf16)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-Lightning 4-step LoRA model V1.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-Lightning-4steps-V1.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-Lightning-4steps-V1.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Edit-Lightning 8steps V1.0",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-Lightning 8-step LoRA model V1.0",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-Lightning-8steps-V1.0.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-Lightning-8steps-V1.0.safetensors",
"size": "9.78GB"
},
{
"name": "Qwen-Image-Edit-Lightning 8steps V1.0 (bf16)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-Lightning 8-step LoRA model V1.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-Lightning-8steps-V1.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-Lightning-8steps-V1.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Edit-2509-Lightning 4steps V1.0 (bf16)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-2509-Lightning 4-step LoRA model V1.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Edit-2509-Lightning 4steps V1.0 (fp32)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-2509-Lightning 4-step LoRA model V1.0 (fp32)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-fp32.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-4steps-V1.0-fp32.safetensors",
"size": "39.1GB"
},
{
"name": "Qwen-Image-Edit-2509-Lightning 8steps V1.0 (bf16)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-2509-Lightning 8-step LoRA model V1.0 (bf16)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-2509-Lightning-8steps-V1.0-bf16.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-8steps-V1.0-bf16.safetensors",
"size": "19.6GB"
},
{
"name": "Qwen-Image-Edit-2509-Lightning 8steps V1.0 (fp32)",
"type": "lora",
"base": "Qwen-Image-Edit",
"save_path": "loras/qwen-image-edit-lightning",
"description": "Qwen-Image-Edit-2509-Lightning 8-step LoRA model V1.0 (fp32)",
"reference": "https://huggingface.co/lightx2v/Qwen-Image-Lightning",
"filename": "Qwen-Image-Edit-2509-Lightning-8steps-V1.0-fp32.safetensors",
"url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-8steps-V1.0-fp32.safetensors",
"size": "39.1GB"
},
{
"name": "Qwen-Image InstantX ControlNet Union",
"type": "controlnet",
"base": "Qwen-Image",
"save_path": "controlnet/qwen-image/instantx",
"description": "Qwen-Image InstantX ControlNet Union model",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-InstantX-ControlNets",
"filename": "Qwen-Image-InstantX-ControlNet-Union.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-InstantX-ControlNets/resolve/main/split_files/controlnet/Qwen-Image-InstantX-ControlNet-Union.safetensors",
"size": "2.54GB"
},
{
"name": "Qwen-Image InstantX ControlNet Inpainting",
"type": "controlnet",
"base": "Qwen-Image",
"save_path": "controlnet/qwen-image/instantx",
"description": "Qwen-Image InstantX ControlNet Inpainting model",
"reference": "https://huggingface.co/Comfy-Org/Qwen-Image-InstantX-ControlNets",
"filename": "Qwen-Image-InstantX-ControlNet-Inpainting.safetensors",
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-InstantX-ControlNets/resolve/main/split_files/controlnet/Qwen-Image-InstantX-ControlNet-Inpainting.safetensors",
"size": "2.54GB"
} }
] ]
} }

View File

@@ -80,7 +80,7 @@ cm_global.register_api('cm.is_import_failed_extension', is_import_failed_extensi
comfyui_manager_path = os.path.abspath(os.path.dirname(__file__)) comfyui_manager_path = os.path.abspath(os.path.dirname(__file__))
custom_nodes_base_path = folder_paths.get_folder_paths('custom_nodes')[0] custom_nodes_base_path = folder_paths.get_folder_paths('custom_nodes')[0]
manager_files_path = os.path.abspath(os.path.join(folder_paths.get_user_directory(), 'default', 'ComfyUI-Manager')) manager_files_path = folder_paths.get_system_user_directory("manager")
manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json") manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json")
manager_pip_blacklist_path = os.path.join(manager_files_path, "pip_blacklist.list") manager_pip_blacklist_path = os.path.join(manager_files_path, "pip_blacklist.list")
restore_snapshot_path = os.path.join(manager_files_path, "startup-scripts", "restore-snapshot.json") restore_snapshot_path = os.path.join(manager_files_path, "startup-scripts", "restore-snapshot.json")
@@ -483,7 +483,7 @@ check_bypass_ssl()
# Perform install # Perform install
processed_install = set() processed_install = set()
script_list_path = os.path.join(folder_paths.user_directory, "default", "ComfyUI-Manager", "startup-scripts", "install-scripts.txt") script_list_path = os.path.join(manager_files_path, "startup-scripts", "install-scripts.txt")
pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path, manager_files_path) pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path, manager_files_path)

View File

@@ -139,9 +139,9 @@ You can set whether to use ComfyUI-Manager solely via CLI.
`restore-dependencies` `restore-dependencies`
* This command can be used if custom nodes are installed under the `ComfyUI/custom_nodes` path but their dependencies are not installed. * This command can be used if custom nodes are installed under the `ComfyUI/custom_nodes` path but their dependencies are not installed.
* It is useful when starting a new cloud instance, like colab, where dependencies need to be reinstalled and installation scripts re-executed. * It is useful when starting a new cloud instance, like Colab, where dependencies need to be reinstalled and installation scripts re-executed.
* It can also be utilized if ComfyUI is reinstalled and only the custom_nodes path has been backed up and restored. * It can also be utilized if ComfyUI is reinstalled and only the custom_nodes path has been backed up and restored.
### 7. Clear ### 7. Clear
In the GUI, installations, updates, or snapshot restorations are scheduled to execute the next time ComfyUI is launched. The `clear` command clears this scheduled state, ensuring no pre-execution actions are applied. In the GUI, installations, updates, or snapshot restorations are scheduled to execute the next time ComfyUI is launched. The `clear` command clears this scheduled state, ensuring no pre-execution actions are applied.

View File

@@ -23,13 +23,13 @@ OPTIONS:
## How To Use? ## How To Use?
* `python cm-cli.py` 를 통해서 실행 시킬 수 있습니다. * `python cm-cli.py` 를 통해서 실행 시킬 수 있습니다.
* 예를 들어 custom node를 모두 업데이트 하고 싶다면 * 예를 들어 custom node를 모두 업데이트 하고 싶다면
* ComfyUI-Manager경로 에서 `python cm-cli.py update all` 를 command를 실행할 수 있습니다. * ComfyUI-Manager 경로에서 `python cm-cli.py update all` 명령을 실행할 수 있습니다.
* ComfyUI 경로에서 실행한다면, `python custom_nodes/ComfyUI-Manager/cm-cli.py update all` 와 같이 cm-cli.py 의 경로를 지정할 수도 있습니다. * ComfyUI 경로에서 실행한다면, `python custom_nodes/ComfyUI-Manager/cm-cli.py update all` 와 같이 cm-cli.py 의 경로를 지정할 수도 있습니다.
## Prerequisite ## Prerequisite
* ComfyUI 를 실행하는 python과 동일한 python 환경에서 실행해야 합니다. * ComfyUI 를 실행하는 python과 동일한 python 환경에서 실행해야 합니다.
* venv를 사용할 경우 해당 venv를 activate 한 상태에서 실행해야 합니다. * venv를 사용할 경우 해당 venv를 activate 한 상태에서 실행해야 합니다.
* portable 버전을 사용할 경우 run_nvidia_gpu.bat 파일이 있는 경로인 경우, 다음과 같은 방식으로 코맨드를 실행해야 합니다. * portable 버전을 사용할 경우 run_nvidia_gpu.bat 파일이 있는 경로인 경우, 다음과 같은 방식으로 명령을 실행해야 합니다.
`.\python_embeded\python.exe ComfyUI\custom_nodes\ComfyUI-Manager\cm-cli.py update all` `.\python_embeded\python.exe ComfyUI\custom_nodes\ComfyUI-Manager\cm-cli.py update all`
* ComfyUI 의 경로는 COMFYUI_PATH 환경 변수로 설정할 수 있습니다. 만약 생략할 경우 다음과 같은 경고 메시지가 나타나며, ComfyUI-Manager가 설치된 경로를 기준으로 상대 경로로 설정됩니다. * ComfyUI 의 경로는 COMFYUI_PATH 환경 변수로 설정할 수 있습니다. 만약 생략할 경우 다음과 같은 경고 메시지가 나타나며, ComfyUI-Manager가 설치된 경로를 기준으로 상대 경로로 설정됩니다.
``` ```
@@ -40,8 +40,8 @@ OPTIONS:
### 1. --channel, --mode ### 1. --channel, --mode
* 정보 보기 기능과 커스텀 노드 관리 기능의 경우는 --channel과 --mode를 통해 정보 DB를 설정할 수 있습니다. * 정보 보기 기능과 커스텀 노드 관리 기능의 경우는 --channel과 --mode를 통해 정보 DB를 설정할 수 있습니다.
* 예 들어 `python cm-cli.py update all --channel recent --mode remote`와 같은 command를 실행할 경우, 현재 ComfyUI-Manager repo에 내장된 로컬의 정보가 아닌 remote의 최신 정보를 기준으로 동작하며, recent channel에 있는 목록을 대상으로만 동작합니다. * 예 들어 `python cm-cli.py update all --channel recent --mode remote`와 같은 명령을 실행할 경우, 현재 ComfyUI-Manager repo에 내장된 로컬의 정보가 아닌 remote의 최신 정보를 기준으로 동작하며, recent channel에 있는 목록을 대상으로만 동작합니다.
* --channel, --mode 는 `simple-show, show, install, uninstall, update, disable, enable, fix` command에서만 사용 가능합니다. * --channel, --mode 는 `simple-show, show, install, uninstall, update, disable, enable, fix` 명령에서만 사용 가능합니다.
### 2. 관리 정보 보기 ### 2. 관리 정보 보기
@@ -51,7 +51,7 @@ OPTIONS:
* `[show|simple-show]` - `show`는 상세하게 정보를 보여주며, `simple-show`는 간단하게 정보를 보여줍니다. * `[show|simple-show]` - `show`는 상세하게 정보를 보여주며, `simple-show`는 간단하게 정보를 보여줍니다.
`python cm-cli.py show installed` 와 같은 코맨드를 실행하면 설치된 커스텀 노드의 정보를 상세하게 보여줍니다. `python cm-cli.py show installed` 와 같은 명령을 실행하면 설치된 커스텀 노드의 정보를 상세하게 보여줍니다.
``` ```
-= ComfyUI-Manager CLI (V2.24) =- -= ComfyUI-Manager CLI (V2.24) =-
@@ -67,7 +67,7 @@ FETCH DATA from: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main
[ DISABLED ] ComfyUI-Loopchain (author: Fannovel16) [ DISABLED ] ComfyUI-Loopchain (author: Fannovel16)
``` ```
`python cm-cli.py simple-show installed` 와 같은 코맨드를 이용해서 설치된 커스텀 노드의 정보를 간단하게 보여줍니다. `python cm-cli.py simple-show installed` 와 같은 명령을 이용해서 설치된 커스텀 노드의 정보를 간단하게 보여줍니다.
``` ```
-= ComfyUI-Manager CLI (V2.24) =- -= ComfyUI-Manager CLI (V2.24) =-
@@ -89,7 +89,7 @@ ComfyUI-Loopchain
* `installed`: enable, disable 여부와 상관없이 설치된 모든 노드를 보여줍니다 * `installed`: enable, disable 여부와 상관없이 설치된 모든 노드를 보여줍니다
* `not-installed`: 설치되지 않은 커스텀 노드의 목록을 보여줍니다. * `not-installed`: 설치되지 않은 커스텀 노드의 목록을 보여줍니다.
* `all`: 모든 커스텀 노드의 목록을 보여줍니다. * `all`: 모든 커스텀 노드의 목록을 보여줍니다.
* `snapshot`: 현재 설치된 커스텀 노드의 snapshot 정보를 보여줍니다. `show` 통해서 볼 경우는 json 출력 형태로 보여주며, `simple-show`를 통해서 볼 경우는 간단하게, 커밋 해시와 함께 보여줍니다. * `snapshot`: 현재 설치된 커스텀 노드의 snapshot 정보를 보여줍니다. `show` 통해서 볼 경우는 json 출력 형태로 보여주며, `simple-show`를 통해서 볼 경우는 간단하게, 커밋 해시와 함께 보여줍니다.
* `snapshot-list`: ComfyUI-Manager/snapshots 에 저장된 snapshot 파일의 목록을 보여줍니다. * `snapshot-list`: ComfyUI-Manager/snapshots 에 저장된 snapshot 파일의 목록을 보여줍니다.
### 3. 커스텀 노드 관리 하기 ### 3. 커스텀 노드 관리 하기
@@ -98,7 +98,7 @@ ComfyUI-Loopchain
* `python cm-cli.py install ComfyUI-Impact-Pack ComfyUI-Inspire-Pack ComfyUI_experiments` 와 같이 커스텀 노드의 이름을 나열해서 관리 기능을 적용할 수 있습니다. * `python cm-cli.py install ComfyUI-Impact-Pack ComfyUI-Inspire-Pack ComfyUI_experiments` 와 같이 커스텀 노드의 이름을 나열해서 관리 기능을 적용할 수 있습니다.
* 커스텀 노드의 이름은 `show`를 했을 때 보여주는 이름이며, git repository의 이름입니다. * 커스텀 노드의 이름은 `show`를 했을 때 보여주는 이름이며, git repository의 이름입니다.
(추후 nickname 을 사용가능하돌고 업데이트 할 예정입니다.) (추후 nickname을 사용 가능하도록 업데이트할 예정입니다.)
`[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]` `[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]`
@@ -124,7 +124,7 @@ ComfyUI-Loopchain
* `--pip-non-local-url`: web URL에 등록된 pip 패키지들에 대해서 복구를 수행 * `--pip-non-local-url`: web URL에 등록된 pip 패키지들에 대해서 복구를 수행
* `--pip-local-url`: local 경로를 지정하고 있는 pip 패키지들에 대해서 복구를 수행 * `--pip-local-url`: local 경로를 지정하고 있는 pip 패키지들에 대해서 복구를 수행
* `--user-directory`: 사용자 디렉토리 설정 * `--user-directory`: 사용자 디렉토리 설정
* `--restore-to`: 복구될 커스텀 노드가 설치될 경로. (이 옵션을 적용할 경우 오직 대상 경로에 설치된 custom nodes 만 설치된 것으로 인식함.) * `--restore-to`: 복구될 커스텀 노드가 설치될 경로. (이 옵션을 적용할 경우 오직 대상 경로에 설치된 custom nodes만 설치된 것으로 인식함.)
### 5. CLI only mode ### 5. CLI only mode
@@ -133,7 +133,7 @@ ComfyUI-Manager를 CLI로만 사용할 것인지를 설정할 수 있습니다.
`cli-only-mode [enable|disable]` `cli-only-mode [enable|disable]`
* security 혹은 policy 의 이유로 GUI 를 통한 ComfyUI-Manager 사용을 제한하고 싶은 경우 이 모드를 사용할 수 있습니다. * security 혹은 policy 의 이유로 GUI 를 통한 ComfyUI-Manager 사용을 제한하고 싶은 경우 이 모드를 사용할 수 있습니다.
* CLI only mode를 적용할 경우 ComfyUI-Manager 가 매우 제한된 상태로 로드되어, 내부적으로 제공하는 web API가 비활성화 되며, 메인 메뉴에서도 Manager 버튼이 표시되지 않습니다. * CLI only mode를 적용할 경우 ComfyUI-Manager 가 매우 제한된 상태로 로드되어, 내부적으로 제공하는 web API가 비활성화되며, 메인 메뉴에서도 Manager 버튼이 표시되지 않습니다.
### 6. 의존성 설치 ### 6. 의존성 설치
@@ -141,10 +141,10 @@ ComfyUI-Manager를 CLI로만 사용할 것인지를 설정할 수 있습니다.
`restore-dependencies` `restore-dependencies`
* `ComfyUI/custom_nodes` 하위 경로에 커스텀 노드들이 설치되어 있긴 하지만, 의존성이 설치되지 않은 경우 사용할 수 있습니다. * `ComfyUI/custom_nodes` 하위 경로에 커스텀 노드들이 설치되어 있긴 하지만, 의존성이 설치되지 않은 경우 사용할 수 있습니다.
* colab 과 같이 cloud instance를 새로 시작하는 경우 의존성 재설치 및 설치 스크립트가 재실행 되어야 하는 경우 사용합니다. * Colab과 같이 cloud instance를 새로 시작하는 경우 의존성 재설치 및 설치 스크립트가 재실행되어야 하는 경우 사용합니다.
* ComfyUI 재설치할 경우, custom_nodes 경로만 백업했다가 재설치 할 경우 활용 가능합니다. * ComfyUI 재설치할 경우, custom_nodes 경로만 백업했다가 재설치할 경우 활용 가능합니다.
### 7. clear ### 7. clear
GUI에서 install, update를 하거나 snapshot 을 restore하는 경우 예약을 통해서 다음번 ComfyUI를 실행할 경우 실행되는 구조입니다. `clear` 는 이런 예약 상태를 clear해서, 아무런 사전 실행이 적용되지 않도록 합니다. GUI에서 install, update를 하거나 snapshot을 restore하는 경우 예약을 통해서 다음번 ComfyUI를 실행할 경우 실행되는 구조입니다. `clear` 는 이런 예약 상태를 clear해서, 아무런 사전 실행이 적용되지 않도록 합니다.

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -169,6 +169,16 @@
], ],
"install_type": "git-clone", "install_type": "git-clone",
"description": "A fork of KJNodes for ComfyUI.\nVarious quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability" "description": "A fork of KJNodes for ComfyUI.\nVarious quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability"
},
{
"author": "huixingyun",
"title": "ComfyUI-SoundFlow",
"reference": "https://github.com/huixingyun/ComfyUI-SoundFlow",
"files": [
"https://github.com/huixingyun/ComfyUI-SoundFlow"
],
"install_type": "git-clone",
"description": "forked from https://github.com/fredconex/ComfyUI-SoundFlow (removed)"
} }
] ]
} }

View File

@@ -1,5 +1,800 @@
{ {
"custom_nodes": [ "custom_nodes": [
{
"author": "cedarconnor",
"title": "ComfyUI-GEN3C-Gsplat [REMOVED]",
"reference": "https://github.com/cedarconnor/ComfyUI-GEN3C-Gsplat",
"files": [
"https://github.com/cedarconnor/ComfyUI-GEN3C-Gsplat"
],
"install_type": "git-clone",
"description": "A custom ComfyUI node pack that bridges Cosmos/GEN3C video generation with in-graph Gaussian Splat (3DGS) training. It adds camera/trajectory tooling, dataset exporters, and two training backends (Nerfstudio CLI wrapper and an in-process gsplat optimizer) so artists can go from prompt to splat entirely inside ComfyUI.\nNOTE: The files in the repo are not organized."
},
{
"author": "dowa-git",
"title": "comfyui-dowa [REMOVED]",
"reference": "https://github.com/dowa-git/comfyui-dowa",
"files": [
"https://github.com/dowa-git/comfyui-dowa"
],
"install_type": "git-clone",
"description": "Professional navigation bar widget for ComfyUI with JWT-based user authentication, workflow templates, and team collaboration features in a purple gradient design."
},
{
"author": "Fablestarexpanse",
"title": "Timer-Node-Comfyui [REMOVED]",
"reference": "https://github.com/Fablestarexpanse/Timer-Node-Comfyui",
"files": [
"https://github.com/Fablestarexpanse/Timer-Node-Comfyui"
],
"install_type": "git-clone",
"description": "A custom ComfyUI node that displays live processing time in a red digital countdown clock format, perfect for monitoring image generation times and tracking performance between workflow nodes."
},
{
"author": "cedarconnor",
"title": "ComfyUI-OmniX [REMOVED]",
"reference": "https://github.com/cedarconnor/ComfyUI-OmniX",
"files": [
"https://github.com/cedarconnor/ComfyUI-OmniX"
],
"install_type": "git-clone",
"description": "Extract comprehensive scene properties from 360-degree equirectangular panoramas, including depth, normals, and PBR materials, using OmniX adapters with Flux."
},
{
"author": "cedarconnor",
"title": "ComfyUI-DiT360 [REMOVED]",
"reference": "https://github.com/cedarconnor/ComfyUI-DiT360",
"files": [
"https://github.com/cedarconnor/ComfyUI-DiT360"
],
"install_type": "git-clone",
"description": "Generate high-fidelity 360-degree panoramic images using the DiT360 diffusion transformer model in ComfyUI."
},
{
"author": "PozzettiAndrea",
"title": "ComfyUI-AnyTop [REMOVED]",
"reference": "https://github.com/PozzettiAndrea/ComfyUI-AnyTop",
"files": [
"https://github.com/PozzettiAndrea/ComfyUI-AnyTop"
],
"install_type": "git-clone",
"description": "Standalone ComfyUI custom nodes for AnyTop - Universal Motion Generation for Any Skeleton Topology."
},
{
"author": "penposs",
"title": "ComfyUI-Banana-Node [REMOVED]",
"reference": "https://github.com/penposs/ComfyUI-Banana-Node",
"files": [
"https://github.com/penposs/ComfyUI-Banana-Node"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that generates images using Googles Gemini 2.5 Flash Image Preview API."
},
{
"author": "spiralmountain",
"title": "ComfyUI_HDNodes [REMOVED]",
"reference": "https://github.com/spiralmountain/ComfyUI_HDNodes",
"files": [
"https://github.com/spiralmountain/ComfyUI_HDNodes"
],
"install_type": "git-clone",
"description": "Custom nodes for ComfyUI that enable video generation using ByteDance's Seedance model via [a/Fal.ai](https://fal.ai/)."
},
{
"author": "fredconex",
"title": "Sync Edit [REMOVED]",
"reference": "https://github.com/fredconex/ComfyUI-SyncEdit",
"files": [
"https://github.com/fredconex/ComfyUI-SyncEdit"
],
"install_type": "git-clone",
"description": "This node allow to intercept changes on the input string and choose between use the current one or sync with incoming new one."
},
{
"author": "fredconex",
"title": "ComfyUI-SoundFlow [REMOVED]",
"reference": "https://github.com/fredconex/ComfyUI-SoundFlow",
"files": [
"https://github.com/fredconex/ComfyUI-SoundFlow"
],
"install_type": "git-clone",
"description": "This is a bunch of nodes for ComfyUI to help with sound work."
},
{
"author": "fredconex",
"title": "SongBloom [REMOVED]",
"reference": "https://github.com/fredconex/ComfyUI-SongBloom",
"files": [
"https://github.com/fredconex/ComfyUI-SongBloom"
],
"install_type": "git-clone",
"description": "ComfyUI Nodes for SongBloom"
},
{
"author": "EQXai",
"title": "ComfyUI_EQX [REMOVED]",
"reference": "https://github.com/EQXai/ComfyUI_EQX",
"files": [
"https://github.com/EQXai/ComfyUI_EQX"
],
"install_type": "git-clone",
"description": "NODES: SaveImage_EQX, File Image Selector, Load Prompt From File - EQX, LoraStackEQX_random, Extract Filename - EQX, Extract LORA name - EQX, NSFW Detector EQX, NSFW Detector Advanced EQX"
},
{
"author": "wizdroid",
"title": "Wizdroid ComfyUI Outfit Selection [REMOVED]",
"reference": "https://github.com/wizdroid/wizdroid-fashionista",
"files": [
"https://github.com/wizdroid/wizdroid-fashionista"
],
"install_type": "git-clone",
"description": "A comprehensive outfit generation system for ComfyUI with AI-powered prompt enhancement and dynamic outfit composition."
},
{
"author": "enternalsaga",
"title": "NBA-ComfyUINode [REMOVED]",
"reference": "https://github.com/enternalsaga/NBA-ComfyUINode-public",
"files": [
"https://github.com/enternalsaga/NBA-ComfyUINode-public"
],
"install_type": "git-clone",
"description": "Version 1.2.1 - Dependency cleanup and archived LineSelector node\nA comprehensive collection of custom nodes for ComfyUI, providing advanced image processing, workflow control, and utility functions to enhance your AI image generation workflows."
},
{
"author": "sselpah",
"title": "ComfyUI-sselpah-nodes [REMOVED]",
"reference": "https://github.com/sselpah/ComfyUI-sselpah-nodes",
"files": [
"https://github.com/sselpah/ComfyUI-sselpah-nodes"
],
"install_type": "git-clone",
"description": "Extension of IPAdapter implementation by cubiq and whoever contributed to that repository"
},
{
"author": "vsaan212",
"title": "ComfyUI Text Split Node [REMOVED]",
"reference": "https://github.com/vsaan212/Comfy-ui-textsplit",
"files": [
"https://github.com/vsaan212/Comfy-ui-textsplit"
],
"install_type": "git-clone",
"description": "A custom ComfyUI node that splits text into multiple outputs for feeding complex multi-scene renders. This node allows you to dynamically control the number of splits and use custom separators."
},
{
"author": "EnragedAntelope",
"title": "ComfyUI-Doubutsu-Describer [DEPRECATED]",
"reference": "https://github.com/EnragedAntelope/ComfyUI-Doubutsu-Describer",
"files": [
"https://github.com/EnragedAntelope/ComfyUI-Doubutsu-Describer"
],
"install_type": "git-clone",
"description": "This custom node for ComfyUI allows you to use the Doubutsu small VLM model to describe images. Credit and further information on Doubutsu: [a/https://huggingface.co/qresearch/doubutsu-2b-pt-756](https://huggingface.co/qresearch/doubutsu-2b-pt-756)"
},
{
"author": "vsaan212",
"title": "ComfyUI Subject Selector [DEPRECATED]",
"reference": "https://github.com/vsaan212/ComfyUI_subjectselector",
"files": [
"https://github.com/vsaan212/ComfyUI_subjectselector"
],
"install_type": "git-clone",
"description": "ComfyUI_subjectselector is a custom ComfyUI node that allows you to manage and select text-based subject descriptions directly from the workflow UI. This node was designed to pair seamlessly with [a/ComfyUI-textsplit](https://github.com/vsaan212/Comfy-ui-textsplit), providing a clean, modular way to feed descriptive text prompts into your generation pipeline."
},
{
"author": "agxagi",
"title": "Autoregressive Transformer and Rolling Diffusion Sampler for ComfyUI [REMOVED]",
"reference": "https://github.com/agxagi/ComfyUI-GPT4o-Image-Gen-FLUX-DEV",
"files": [
"https://github.com/agxagi/ComfyUI-GPT4o-Image-Gen-FLUX-DEV"
],
"install_type": "git-clone",
"description": "A custom ComfyUI node that implements an Autoregressive Transformer and Rolling Diffusion-like Decoder using Black Forest Lab's Flux-Dev model for accurate text-to-image generation, similar to GPT-4o's image generation approach.\nNOTE: The files in the repo are not organized."
},
{
"author": "walke2019",
"title": "ComfyUI-GGUF-VisionLM [REMOVED]",
"reference": "https://github.com/walke2019/ComfyUI-GGUF-VisionLM",
"files": [
"https://github.com/walke2019/ComfyUI-GGUF-VisionLM"
],
"install_type": "git-clone",
"description": "ComfyUI nodes for running GGUF quantized Qwen2.5-VL models using llama.cpp"
},
{
"author": "neocrz",
"title": "comfyui-tinyae [REMOVED]",
"reference": "https://github.com/neocrz/comfyui-tinyae",
"files": [
"https://github.com/neocrz/comfyui-tinyae"
],
"install_type": "git-clone",
"description": "NODES: TinyAE Encode (Image/Video), TinyAE Decode (Image/Video), TinyAE Encode Tiled (Image), TinyAE Decode Tiled (Image)"
},
{
"author": "Laser-one",
"title": "ComfyUI-align-pose [REMOVED]",
"reference": "https://github.com/Laser-one/ComfyUI-align-pose",
"files": [
"https://github.com/Laser-one/ComfyUI-align-pose"
],
"install_type": "git-clone",
"description": "NODES:align pose"
},
{
"author": "nomadoor",
"title": "ComfyUI Video Stabilizer",
"reference": "https://github.com/nomadoor/ComfyUI-Video-Stabilizer",
"files": [
"https://github.com/nomadoor/ComfyUI-Video-Stabilizer"
],
"install_type": "git-clone",
"description": "Two complementary stabiliser nodes for ComfyUI: Video Stabilizer (Classic), Video Stabilizer (Flow)"
},
{
"author": "0xhappydev",
"title": "comfyui-qwen-image-tools",
"reference": "https://github.com/0xhappydev/comfyui-qwen-image-tools",
"files": [
"https://github.com/0xhappydev/comfyui-qwen-image-tools"
],
"install_type": "git-clone",
"description": "Custom nodes for Qwen-Image-Edit with multi-image support, more flexibility around the vision transformer (qwen2.5-vl), custom system prompts, and some other experimental things to come."
},
{
"author": "Rathius-Saranoth",
"title": "Rathius ComfyUI Nodes",
"reference": "https://github.com/Rathius-Saranoth/rathius-comfyui-nodes",
"files": [
"https://github.com/Rathius-Saranoth/rathius-comfyui-nodes"
],
"install_type": "git-clone",
"description": "Custom nodes for ComfyUI by Rathius"
},
{
"author": "Hiero207",
"title": "Hiero-Nodes [REMOVED]",
"id": "hiero",
"reference": "https://github.com/Hiero207/ComfyUI-Hiero-Nodes",
"files": [
"https://github.com/Hiero207/ComfyUI-Hiero-Nodes"
],
"install_type": "git-clone",
"description": "Nodes:Post to Discord w/ Webhook"
},
{
"author": "NeoDroleDeGueule",
"title": "comfyui-image-mixer",
"reference": "https://github.com/NeoDroleDeGueule/comfyui-image-mixer [REMOVED]",
"files": [
"https://github.com/NeoDroleDeGueule/comfyui-image-mixer"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node that blends two images in latent space using a mix factor slider."
},
{
"author": "Glarus-akash",
"title": "ComfyUI_Image_Upscaler [REMOVED]",
"reference": "https://github.com/Glarus-akash/ComfyUI_Image_Upscaler",
"files": [
"https://github.com/Glarus-akash/ComfyUI_Image_Upscaler"
],
"install_type": "git-clone",
"description": "Welcome to the Image Upscaler & Restorer project! This tool utilizes the [a/GFPGAN](https://github.com/TencentARC/GFPGAN) algorithm to enhance and restore images, providing a seamless way to improve image quality."
},
{
"author": "styletransfer",
"title": "Sequential Group Controller for ComfyUI [REMOVED]",
"reference": "https://github.com/styletransfer/ComfyUI_SequentialGroupController",
"files": [
"https://github.com/styletransfer/ComfyUI_SequentialGroupController"
],
"install_type": "git-clone",
"description": "Control which groups execute based on iteration ranges - a simplified alternative to complex conditional branching workflows."
},
{
"author": "xl0",
"title": "q_tools [REMOVED]",
"reference": "https://github.com/xl0/q_tools",
"files": [
"https://github.com/xl0/q_tools"
],
"install_type": "git-clone",
"description": "NODES: QLoadLatent, QLinearScheduler, QPreviewLatent, QGaussianLatent, QUniformLatent, QKSampler"
},
{
"author": "tmode-1960",
"title": "comfyui-ta-nodes-pack [REMOVED]",
"reference": "https://github.com/tmode-1960/comfyui-ta-nodes-pack",
"files": [
"https://github.com/tmode-1960/comfyui-ta-nodes-pack"
],
"install_type": "git-clone",
"description": "Model loaders with an additional model name output"
},
{
"author": "Shadetail",
"title": "Eagleshadow Custom Nodes [REMOVED]",
"id": "eagleshadow",
"reference": "https://github.com/Shadetail/ComfyUI_Eagleshadow",
"files": [
"https://github.com/Shadetail/ComfyUI_Eagleshadow"
],
"install_type": "git-clone",
"description": "Custom nodes for ComfyUI by Eagleshadow."
},
{
"author": "manycore-maas",
"title": "ComfyUI-SpatialGen [REMOVED]",
"reference": "https://github.com/manycore-maas/ComfyUI-SpatialGen",
"files": [
"https://github.com/manycore-maas/ComfyUI-SpatialGen"
],
"install_type": "git-clone",
"description": "Scene Viewer of SpatialGen"
},
{
"author": "YinBailiang",
"title": "MergeBlockWeighted_fo_ComfyUI [REMOVED]",
"id": "mergeblockweighted_fo_comfyui",
"reference": "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI",
"files": [
"https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI"
],
"install_type": "git-clone",
"description": "Nodes: MergeBlockWeighted"
},
{
"author": "facok",
"title": "ComfyUI-FokToolset [REMOVED]",
"reference": "https://github.com/facok/ComfyUI-FokToolset",
"files": [
"https://github.com/facok/ComfyUI-FokToolset"
],
"install_type": "git-clone",
"description": "NODES: Fok Preprocess Ref Image (Phantom)"
},
{
"author": "Elawphant",
"title": "ComfyUI-MusicGen [WIP]",
"id": "musicgen",
"reference": "https://github.com/Elawphant/ComfyUI-MusicGen",
"files": [
"https://github.com/Elawphant/ComfyUI-MusicGen"
],
"install_type": "git-clone",
"description": "ComfyUI for Meta MusicGen."
},
{
"author": "isaac-mcfadyen",
"title": "ComfyUI-QwenClip [REMOVED]",
"reference": "https://github.com/isaac-mcfadyen/ComfyUI-QwenClip",
"files": [
"https://github.com/isaac-mcfadyen/ComfyUI-QwenClip"
],
"install_type": "git-clone",
"description": "A variety of random text encoder tools intended for use with ComfyUI and Qwen Image/Qwen Image Edit. More (may) be added as I try out various modifications to Qwen Image."
},
{
"author": "Gaotian",
"title": "KLComfyUI-Nodes [REMOVED]",
"reference": "https://github.com/Gaotian-cpu/KLComfyUI-Nodes",
"files": [
"https://github.com/Gaotian-cpu/KLComfyUI-Nodes"
],
"install_type": "git-clone",
"description": "NODES: Single Video_Img Callback"
},
{
"author": "geltz",
"title": "Momentum Guidance for ComfyUI [REMOVED]",
"reference": "https://github.com/geltz/ComfyUI-MomentumGuidance",
"files": [
"https://github.com/geltz/ComfyUI-MomentumGuidance"
],
"install_type": "git-clone",
"description": "Momentum Guidance (MG) is a training-free guidance method that reduces computational cost by 40% compared to standard guidance techniques like CFG or PAG."
},
{
"author": "GeekyGhost",
"title": "Studio42 Image, Audio, and Video Editing Suite for ComfyUI [REMOVED]",
"reference": "https://github.com/GeekyGhost/24oiduts-ComfyUI",
"files": [
"https://github.com/GeekyGhost/24oiduts-ComfyUI"
],
"install_type": "git-clone",
"description": "Studio42 is a comprehensive suite of advanced custom nodes that brings professional-grade image and video editing capabilities to ComfyUI. Designed for efficiency, quality, and creative flexibility, this suite provides cutting-edge background removal, layer composition, and patch manipulation tools used in modern VFX and content creation workflows."
},
{
"author": "rvage",
"title": "ComfyUI-RvTools-X [REMOVED]",
"reference": "https://github.com/r-vage/ComfyUI-RvTools-X",
"files": [
"https://github.com/r-vage/ComfyUI-RvTools-X"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes and utilities for workflow building, type conversions, checkpoint/pipe loaders and file utilities."
},
{
"author": "heyburns",
"title": "LinxUtil [REMOVED]",
"reference": "https://github.com/heyburns/LinxUtil",
"files": [
"https://github.com/heyburns/LinxUtil"
],
"install_type": "git-clone",
"description": "Utility nodes for ComfyUI. Created solely for my own use case, shared as a courtesy only.\nNOTE: The files in the repo are not organized."
},
{
"author": "fcanfora",
"title": "comfyui-camera-tools [REMOVED]",
"reference": "https://github.com/fcanfora/comfyui-camera-tools",
"files": [
"https://github.com/fcanfora/comfyui-camera-tools"
],
"install_type": "git-clone",
"description": "NODES: Load Camera From File, Load 3D, Load 3D - Animation, Preview 3D, Preview 3D - Animation"
},
{
"author": "ziwang-com",
"title": "comfyui-deepseek-r1 [REMOVED]",
"reference": "https://github.com/ziwang-com/comfyui-deepseek-r1",
"files": [
"https://github.com/ziwang-com/comfyui-deepseek-r1"
],
"install_type": "git-clone",
"description": "Comfyui-deepseek-r1 Node Plugin"
},
{
"author": "leeguandong",
"title": "ComfyUI nodes to use Xverse [REMOVED]",
"reference": "https://github.com/leeguandong/ComfyUI_Xverse",
"files": [
"https://github.com/leeguandong/ComfyUI_Xverse"
],
"install_type": "git-clone",
"description": "The ComfyUI version of [a/XVerse](https://github.com/bytedance/XVerse)"
},
{
"author": "Dehypnotic",
"title": "Dehypnotic Save nodes [REMOVED]",
"reference": "https://github.com/Dehypnotic/comfyui-dehypnotic-save-nodes",
"files": [
"https://github.com/Dehypnotic/comfyui-dehypnotic-save-nodes"
],
"install_type": "git-clone",
"description": "Save toolkit for audio, image, and video: MP3 audio export with VBR/CBR options, multi-format image saving with workflow/thumbnail metadata, and video + frame encoding (MP4/MKV/WEBM/MOV) — all sharing whitelist-safe paths and rich placeholder templating."
},
{
"author": "znuost10",
"title": "comfyui-multi-float-output [REMOVED]",
"reference": "https://github.com/znuost10/comfyui-multi-float-output",
"files": [
"https://github.com/znuost10/comfyui-multi-float-output"
],
"install_type": "git-clone",
"description": "System monitoring API endpoints for ComfyUI by otoy SKW"
},
{
"author": "rakki194",
"title": "ComfyUI_WolfSigmas [UNSAFE/REMOVED]",
"reference": "https://github.com/rakki194/ComfyUI_WolfSigmas",
"files": [
"https://github.com/rakki194/ComfyUI_WolfSigmas"
],
"install_type": "git-clone",
"description": "This custom nodepack for ComfyUI provides a suite of tools for generating and manipulating sigma schedules for diffusion models. These nodes are particularly useful for fine-tuning the sampling process, experimenting with different step counts, and adapting schedules for specific models.[w/Security Warning: Remote Code Execution]"
},
{
"author": "Maff3u",
"title": "MattiaNodes - Points Editor On Cropped [REMOVED]",
"reference": "https://github.com/Maff3u/MattiaNodes",
"files": [
"https://github.com/Maff3u/MattiaNodes"
],
"install_type": "git-clone",
"description": "A standalone ComfyUI custom node for interactive coordinate editing with crop factor correction.\nNOTE: The files in the repo are not organized."
},
{
"author": "rakki194",
"title": "ComfyUI-ImageCompare [REMOVED]",
"reference": "https://github.com/rakki194/ComfyUI-ImageCompare",
"files": [
"https://github.com/rakki194/ComfyUI-ImageCompare"
],
"install_type": "git-clone",
"description": "A simple custom node for ComfyUI that allows you to compare two images (or batches of images) side-by-side within the UI."
},
{
"author": "APZmedia",
"title": "NormalMapLightEstimator [REMOVED]",
"reference": "https://github.com/APZmedia/Comfyui-LightDirection-estimation",
"files": [
"https://github.com/APZmedia/Comfyui-LightDirection-estimation"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node for estimating light direction and quality from normal maps using luma masking. The system analyzes surface normals to infer lighting information for downstream tasks like adaptive relighting, directional masking, or stylized effects."
},
{
"author": "APZmedia",
"title": "ComfyUI APZmedia PSD Tools [REMOVED]",
"reference": "https://github.com/APZmedia/APZmedia-ComfyUI-PSDtools",
"files": [
"https://github.com/APZmedia/APZmedia-ComfyUI-PSDtools"
],
"install_type": "git-clone",
"description": "This extension provides PSD layer saving functionalities with mask support for ComfyUI."
},
{
"author": "huixingyun",
"title": "ComfyUI-HX-Pimg [REMOVED]",
"reference": "https://github.com/huixingyun/ComfyUI-HX-Pimg",
"files": [
"https://github.com/huixingyun/ComfyUI-HX-Pimg"
],
"install_type": "git-clone",
"description": "Some custom nodes used for pimg (a comfyui controller deployed in huixingyun)."
},
{
"author": "rvage",
"title": "ComfyUI-RvToolsX [REMOVED]",
"reference": "https://github.com/r-vage/ComfyUI-RvToolsX",
"files": [
"https://github.com/r-vage/ComfyUI-RvToolsX"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes and utilities for workflow building, type conversions, checkpoint/pipe loaders and file utilities."
},
{
"author": "usman2003",
"title": "ComfyUI-RaceDetect [REMOVED]",
"reference": "https://github.com/usman2003/ComfyUI-RaceDetect",
"files": [
"https://github.com/usman2003/ComfyUI-RaceDetect"
],
"install_type": "git-clone",
"description": "NODES: Race Detection V2"
},
{
"author": "lihaoyun6",
"title": "ComfyUI-CSV-Random-Picker [REMOVED]",
"reference": "https://github.com/lihaoyun6/ComfyUI-CSV-Random-Picker",
"files": [
"https://github.com/lihaoyun6/ComfyUI-CSV-Random-Picker"
],
"install_type": "git-clone",
"description": "String random picker for ComfyUI"
},
{
"author": "r-vage",
"title": "ComfyUI-RvTools_v2 [REMOVED]",
"reference": "https://github.com/r-vage/ComfyUI-RvTools_v2",
"files": [
"https://github.com/r-vage/ComfyUI-RvTools_v2"
],
"install_type": "git-clone",
"description": "this node contains a lot of small little helpers like switches, passers and selectors that i use a lot to build my workflows."
},
{
"author": "Yuxi Liu",
"title": "comfyui-ddu [REMOVED]",
"reference": "https://github.com/YL-Lyx/Comfyui-ddu-toolchain",
"files": [
"https://github.com/YL-Lyx/Comfyui-ddu-toolchain"
],
"install_type": "git-clone",
"description": "ai-driven toolchain for digital design and fabrication "
},
{
"author": "lu64k",
"title": "SK-Nodes [REMOVED]",
"reference": "https://github.com/lu64k/SK-Nodes",
"files": [
"https://github.com/lu64k/SK-Nodes"
],
"install_type": "git-clone",
"description": "NODES:image select, Load AnyLLM, Ask LLM, OpenAI DAlle Node, SK Text_String, SK Random File Name"
},
{
"author": "SiggEye",
"title": "FaceCanon — Consistent Faces at Any Resolution [REMOVED]",
"reference": "https://github.com/SiggEye/FaceCanon",
"files": [
"https://github.com/SiggEye/FaceCanon"
],
"install_type": "git-clone",
"description": "FaceCanon scales a detected face to a canonical pixel size, lets you run your favorite face detailer at that sweet spot, then maps the result back into the original image with seamless blending. The payoff is consistent face style no matter the input resolution or framing."
},
{
"author": "AlfredClark",
"title": "ComfyUI-ModelSpec [REMOVED]",
"reference": "https://github.com/AlfredClark/ComfyUI-ModelSpec",
"files": [
"https://github.com/AlfredClark/ComfyUI-ModelSpec"
],
"install_type": "git-clone",
"description": "ComfyUI model metadata editing nodes."
},
{
"author": "VraethrDalkr",
"title": "ComfyUI-ProgressiveBlend [REMOVED]",
"reference": "https://github.com/VraethrDalkr/ComfyUI-ProgressiveBlend",
"files": [
"https://github.com/VraethrDalkr/ComfyUI-ProgressiveBlend"
],
"install_type": "git-clone",
"description": "A collection of custom nodes for ComfyUI that enable progressive blending and color matching effects across image batches/video frames."
},
{
"author": "xmarked-ai",
"title": "ComfyUI_misc [REMOVED]",
"reference": "https://github.com/xmarked-ai/ComfyUI_misc",
"files": [
"https://github.com/xmarked-ai/ComfyUI_misc"
],
"install_type": "git-clone",
"description": "NODES: Ace IntegerX, Ace FloatX, Ace Color FixX, White Balance X, Depth Displace X, Empty Latent X, KSampler Combo X, ..."
},
{
"author": "sm079",
"title": "ComfyUI-Face-Detection [REMOVED]",
"reference": "https://github.com/sm079/ComfyUI-Face-Detection",
"files": [
"https://github.com/sm079/ComfyUI-Face-Detection"
],
"install_type": "git-clone",
"description": "face detection nodes for comfyui"
},
{
"author": "42lux",
"title": "ComfyUI-42lux [REMOVED]",
"reference": "https://github.com/42lux/ComfyUI-42lux",
"files": [
"https://github.com/42lux/ComfyUI-42lux"
],
"install_type": "git-clone",
"description": "A collection of custom nodes for ComfyUI focused on enhanced sampling, model optimization, and quality improvements."
},
{
"author": "lucak5s",
"title": "ComfyUI GFPGAN [REMOVED]",
"reference": "https://github.com/lucak5s/comfyui_gfpgan",
"files": [
"https://github.com/lucak5s/comfyui_gfpgan"
],
"install_type": "git-clone",
"description": "Face restoration with GFPGAN."
},
{
"author": "impactframes",
"title": "IF_AI_tools [DEPRECATED]",
"id": "impactframes-tools",
"reference": "https://github.com/if-ai/ComfyUI-IF_AI_tools",
"files": [
"https://github.com/if-ai/ComfyUI-IF_AI_tools"
],
"install_type": "git-clone",
"description": "Various AI tools to use in Comfy UI. Starting with VL and prompt making tools using Ollma as backend will evolve as I find time."
},
{
"author": "netroxin",
"title": "comfyui_netro [REMOVED]",
"reference": "https://github.com/netroxin/comfyui_netro",
"files": [
"https://github.com/netroxin/comfyui_netro"
],
"install_type": "git-clone",
"description": "#Camera Movement Prompt Node for ComfyUI\nThis custom node script for ComfyUI generates descriptive camera movement prompts based on user-selected movement options for Wan2.2"
},
{
"author": "aistudynow",
"title": "comfyui-HunyuanImage-2.1 [REMOVED]",
"reference": "https://github.com/aistudynow/comfyui-HunyuanImage-2.1",
"files": [
"https://github.com/aistudynow/comfyui-HunyuanImage-2.1"
],
"install_type": "git-clone",
"description": "NODES: Load HunyuanImage DiT, Load HunyuanImage VAE, Load HunyuanImage Dual Text Encoder, HunyuanImage Sampler, HunyuanImage VAE Decode, HunyuanImage CLIP Text Encode, Empty HunyuanImage Latent Image"
},
{
"author": "SlackinJack",
"title": "distrifuser_comfyui [DEPRECATED]",
"reference": "https://github.com/SlackinJack/distrifuser_comfyui",
"files": [
"https://github.com/SlackinJack/distrifuser_comfyui"
],
"install_type": "git-clone",
"description": "[a/Distrifuser](https://github.com/mit-han-lab/distrifuser) sampler node for ComfyUI\n"
},
{
"author": "SlackinJack",
"title": "asyncdiff_comfyui [DEPRECATED]",
"reference": "https://github.com/SlackinJack/asyncdiff_comfyui",
"files": [
"https://github.com/SlackinJack/asyncdiff_comfyui"
],
"install_type": "git-clone",
"description": "AsyncDiff node for ComfyUI"
},
{
"author": "TheBill2001",
"title": "Save Images with Captions [REMOVED]",
"reference": "https://github.com/TheBill2001/ComfyUI-Save-Image-Caption",
"files": [
"https://github.com/TheBill2001/ComfyUI-Save-Image-Caption"
],
"install_type": "git-clone",
"description": "Provide two custom nodes to load and save images with captions as separate files."
},
{
"author": "ShmuelRonen",
"title": "ComfyUI Flux 1.1 Ultra & Raw Node [REMOVED]",
"reference": "https://github.com/ShmuelRonen/ComfyUI_Flux_1.1_RAW_API",
"files": [
"https://github.com/ShmuelRonen/ComfyUI_Flux_1.1_RAW_API"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node for Black Forest Labs' FLUX 1.1 [pro] API, supporting both regular and Ultra modes with optional Raw mode."
},
{
"author": "mattwilliamson",
"title": "ComfyUI AI GameDev Nodes [UNSAFE/REMOVED]",
"reference": "https://github.com/mattwilliamson/comfyui-ai-gamedev",
"files": [
"https://github.com/mattwilliamson/comfyui-ai-gamedev"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for AI-powered game asset generation, providing a comprehensive toolkit for game developers to create 3D models, animations, and audio assets using state-of-the-art AI models.[w/This node pack has an implementation that dynamically generates scripts.]"
},
{
"author": "manifestations",
"title": "ComfyUI Outfit Nodes [DEPRECATED]",
"reference": "https://github.com/manifestations/comfyui-outfit",
"files": [
"https://github.com/manifestations/comfyui-outfit"
],
"install_type": "git-clone",
"description": "Advanced, professional outfit and makeup generation nodes for ComfyUI, with dynamic UI and AI-powered prompt formatting."
},
{
"author": "Poukpalaova",
"title": "ComfyUI-FRED-Nodes [DEPRECATED]",
"reference": "https://github.com/Poukpalaova/ComfyUI-FRED-Nodes",
"files": [
"https://github.com/Poukpalaova/ComfyUI-FRED-Nodes"
],
"install_type": "git-clone",
"description": "Multiple nodes that ease the process.\nNOTE: The files in the repo are not organized."
},
{
"author": "cwebbi1",
"title": "VoidCustomNodes [REMOVED]",
"reference": "https://github.com/cwebbi1/VoidCustomNodes",
"files": [
"https://github.com/cwebbi1/VoidCustomNodes"
],
"install_type": "git-clone",
"description": "NODES:Prompt Parser, String Combiner"
},
{
"author": "Shellishack",
"title": "ComfyUI Remote Media Loaders [REMOVED]",
"reference": "https://github.com/Shellishack/comfyui-remote-media-loaders",
"files": [
"https://github.com/Shellishack/comfyui-remote-media-loaders"
],
"install_type": "git-clone",
"description": "Load media (image/video/audio) from remote URL"
},
{
"author": "D3lUX3I",
"title": "VideoPromptEnhancer [REMOVED]",
"reference": "https://github.com/D3lUX3I/ComfyUI-VideoPromptEnhancer",
"files": [
"https://github.com/D3lUX3I/ComfyUI-VideoPromptEnhancer"
],
"install_type": "git-clone",
"description": "This node generates a professional prompt from an input text for modern video AI models (e.g., Alibaba Wan 2.2) via the OpenRouter API."
},
{ {
"author": "perilli", "author": "perilli",
"title": "apw_nodes [REMOVED]", "title": "apw_nodes [REMOVED]",
@@ -562,16 +1357,6 @@
"install_type": "git-clone", "install_type": "git-clone",
"description": "This node provides advanced text-to-speech functionality powered by KokoroTTS. Follow the instructions below to install, configure, and use the node within your portable ComfyUI installation." "description": "This node provides advanced text-to-speech functionality powered by KokoroTTS. Follow the instructions below to install, configure, and use the node within your portable ComfyUI installation."
}, },
{
"author": "MushroomFleet",
"title": "DJZ-Pedalboard [REMOVED]",
"reference": "https://github.com/MushroomFleet/DJZ-Pedalboard",
"files": [
"https://github.com/MushroomFleet/DJZ-Pedalboard"
],
"install_type": "git-clone",
"description": "This project provides a collection of custom nodes designed for enhanced audio effects in ComfyUI. With an intuitive pedalboard interface, users can easily integrate and manipulate various audio effects within their workflows."
},
{ {
"author": "MushroomFleet", "author": "MushroomFleet",
"title": "SVG Suite for ComfyUI [REMOVED]", "title": "SVG Suite for ComfyUI [REMOVED]",

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,16 @@
"install_type": "git-clone", "install_type": "git-clone",
"description": "A minimal template for creating React/TypeScript frontend extensions for ComfyUI, with complete boilerplate setup including internationalization and unit testing." "description": "A minimal template for creating React/TypeScript frontend extensions for ComfyUI, with complete boilerplate setup including internationalization and unit testing."
}, },
{
"author": "comfyui-wiki",
"title": "ComfyUI-i18n-demo",
"reference": "https://github.com/comfyui-wiki/ComfyUI-i18n-demo",
"files": [
"https://github.com/comfyui-wiki/ComfyUI-i18n-demo"
],
"install_type": "git-clone",
"description": "ComfyUI custom node develop i18n support demo "
},
{ {
"author": "Suzie1", "author": "Suzie1",
"title": "Guide To Making Custom Nodes in ComfyUI", "title": "Guide To Making Custom Nodes in ComfyUI",
@@ -351,6 +361,16 @@
], ],
"install_type": "git-clone", "install_type": "git-clone",
"description": "Vibe Coded ComfyUI Custom Nodes" "description": "Vibe Coded ComfyUI Custom Nodes"
},
{
"author": "aiforhumans",
"title": "XDev Nodes - Complete Toolkit",
"reference": "https://github.com/aiforhumans/comfyui-xdev-nodes",
"files": [
"https://github.com/aiforhumans/comfyui-xdev-nodes"
],
"install_type": "git-clone",
"description": "Complete ComfyUI development toolkit with 8 professional nodes including VAE tools, universal type testing, and comprehensive debugging infrastructure."
} }
] ]
} }

View File

@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "comfyui-manager" name = "comfyui-manager"
license = { text = "GPL-3.0-only" } license = { text = "GPL-3.0-only" }
version = "4.0.1-beta.5" version = "4.0.3b4"
requires-python = ">= 3.9" requires-python = ">= 3.9"
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."
readme = "README.md" readme = "README.md"
@@ -19,7 +19,7 @@ maintainers = [
] ]
classifiers = [ classifiers = [
"Development Status :: 4 - Beta", "Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers", "Intended Audience :: Developers",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
] ]

View File

@@ -2,7 +2,7 @@ GitPython
PyGithub PyGithub
# matrix-nio # matrix-nio
transformers transformers
huggingface-hub>0.20 huggingface-hub
typer typer
rich rich
typing-extensions typing-extensions

View File

@@ -9,4 +9,4 @@ lint.select = [
"F", "F",
] ]
exclude = ["*.ipynb"] exclude = ["*.ipynb", "tests"]

View File

@@ -7,13 +7,15 @@ import concurrent
import datetime import datetime
import concurrent.futures import concurrent.futures
import requests import requests
import warnings
import argparse
builtin_nodes = set() builtin_nodes = set()
import sys import sys
from urllib.parse import urlparse from urllib.parse import urlparse
from github import Github from github import Github, Auth
def download_url(url, dest_folder, filename=None): def download_url(url, dest_folder, filename=None):
@@ -39,26 +41,51 @@ def download_url(url, dest_folder, filename=None):
raise Exception(f"Failed to download file from {url}") raise Exception(f"Failed to download file from {url}")
# prepare temp dir def parse_arguments():
if len(sys.argv) > 1: """Parse command-line arguments"""
temp_dir = sys.argv[1] parser = argparse.ArgumentParser(
else: description='ComfyUI Manager Node Scanner',
temp_dir = os.path.join(os.getcwd(), ".tmp") formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='''
Examples:
# Standard mode
python3 scanner.py
python3 scanner.py --skip-update
if not os.path.exists(temp_dir): # Scan-only mode
os.makedirs(temp_dir) python3 scanner.py --scan-only temp-urls-clean.list
python3 scanner.py --scan-only urls.list --temp-dir /custom/temp
python3 scanner.py --scan-only urls.list --skip-update
'''
)
parser.add_argument('--scan-only', type=str, metavar='URL_LIST_FILE',
help='Scan-only mode: provide URL list file (one URL per line)')
parser.add_argument('--temp-dir', type=str, metavar='DIR',
help='Temporary directory for cloned repositories')
parser.add_argument('--skip-update', action='store_true',
help='Skip git clone/pull operations')
parser.add_argument('--skip-stat-update', action='store_true',
help='Skip GitHub stats collection')
parser.add_argument('--skip-all', action='store_true',
help='Skip all update operations')
# Backward compatibility: positional argument for temp_dir
parser.add_argument('temp_dir_positional', nargs='?', metavar='TEMP_DIR',
help='(Legacy) Temporary directory path')
args = parser.parse_args()
return args
skip_update = '--skip-update' in sys.argv or '--skip-all' in sys.argv # Module-level variables (will be set in main if running as script)
skip_stat_update = '--skip-stat-update' in sys.argv or '--skip-all' in sys.argv args = None
scan_only_mode = False
if not skip_stat_update: url_list_file = None
g = Github(os.environ.get('GITHUB_TOKEN')) temp_dir = None
else: skip_update = False
g = None skip_stat_update = True
g = None
print(f"TEMP DIR: {temp_dir}")
parse_cnt = 0 parse_cnt = 0
@@ -73,12 +100,22 @@ def extract_nodes(code_text):
parse_cnt += 1 parse_cnt += 1
code_text = re.sub(r'\\[^"\']', '', code_text) code_text = re.sub(r'\\[^"\']', '', code_text)
parsed_code = ast.parse(code_text) with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=SyntaxWarning)
warnings.filterwarnings('ignore', category=DeprecationWarning)
parsed_code = ast.parse(code_text)
# Support both ast.Assign and ast.AnnAssign (for type-annotated assignments)
assignments = (node for node in parsed_code.body if isinstance(node, (ast.Assign, ast.AnnAssign)))
assignments = (node for node in parsed_code.body if isinstance(node, ast.Assign))
for assignment in assignments: for assignment in assignments:
if isinstance(assignment.targets[0], ast.Name) and assignment.targets[0].id in ['NODE_CONFIG', 'NODE_CLASS_MAPPINGS']: # Handle ast.AnnAssign (e.g., NODE_CLASS_MAPPINGS: Type = {...})
if isinstance(assignment, ast.AnnAssign):
if isinstance(assignment.target, ast.Name) and assignment.target.id in ['NODE_CONFIG', 'NODE_CLASS_MAPPINGS']:
node_class_mappings = assignment.value
break
# Handle ast.Assign (e.g., NODE_CLASS_MAPPINGS = {...})
elif isinstance(assignment.targets[0], ast.Name) and assignment.targets[0].id in ['NODE_CONFIG', 'NODE_CLASS_MAPPINGS']:
node_class_mappings = assignment.value node_class_mappings = assignment.value
break break
else: else:
@@ -90,7 +127,7 @@ def extract_nodes(code_text):
for key in node_class_mappings.keys: for key in node_class_mappings.keys:
if key is not None and isinstance(key.value, str): if key is not None and isinstance(key.value, str):
s.add(key.value.strip()) s.add(key.value.strip())
return s return s
else: else:
return set() return set()
@@ -98,6 +135,99 @@ def extract_nodes(code_text):
return set() return set()
def has_comfy_node_base(class_node):
"""Check if class inherits from io.ComfyNode or ComfyNode"""
for base in class_node.bases:
# Case 1: ComfyNode
if isinstance(base, ast.Name) and base.id == 'ComfyNode':
return True
# Case 2: io.ComfyNode
elif isinstance(base, ast.Attribute):
if base.attr == 'ComfyNode':
return True
return False
def extract_keyword_value(call_node, keyword):
"""
Extract string value of keyword argument
Schema(node_id="MyNode") -> "MyNode"
"""
for kw in call_node.keywords:
if kw.arg == keyword:
# ast.Constant (Python 3.8+)
if isinstance(kw.value, ast.Constant):
if isinstance(kw.value.value, str):
return kw.value.value
# ast.Str (Python 3.7-) - suppress deprecation warning
else:
with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=DeprecationWarning)
if hasattr(ast, 'Str') and isinstance(kw.value, ast.Str):
return kw.value.s
return None
def is_schema_call(call_node):
"""Check if ast.Call is io.Schema() or Schema()"""
func = call_node.func
if isinstance(func, ast.Name) and func.id == 'Schema':
return True
elif isinstance(func, ast.Attribute) and func.attr == 'Schema':
return True
return False
def extract_node_id_from_schema(class_node):
"""
Extract node_id from define_schema() method
"""
for item in class_node.body:
if isinstance(item, ast.FunctionDef) and item.name == 'define_schema':
# Walk through function body
for stmt in ast.walk(item):
if isinstance(stmt, ast.Call):
# Check if it's Schema() call
if is_schema_call(stmt):
node_id = extract_keyword_value(stmt, 'node_id')
if node_id:
return node_id
return None
def extract_v3_nodes(code_text):
"""
Extract V3 node IDs using AST parsing
Returns: set of node_id strings
"""
global parse_cnt
try:
if parse_cnt % 100 == 0:
print(".", end="", flush=True)
parse_cnt += 1
with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=SyntaxWarning)
warnings.filterwarnings('ignore', category=DeprecationWarning)
tree = ast.parse(code_text)
except (SyntaxError, UnicodeDecodeError):
return set()
nodes = set()
# Find io.ComfyNode subclasses
for node in ast.walk(tree):
if isinstance(node, ast.ClassDef):
# Check if inherits from ComfyNode
if has_comfy_node_base(node):
node_id = extract_node_id_from_schema(node)
if node_id:
nodes.add(node_id)
return nodes
# scan # scan
def scan_in_file(filename, is_builtin=False): def scan_in_file(filename, is_builtin=False):
global builtin_nodes global builtin_nodes
@@ -105,13 +235,18 @@ def scan_in_file(filename, is_builtin=False):
with open(filename, encoding='utf-8', errors='ignore') as file: with open(filename, encoding='utf-8', errors='ignore') as file:
code = file.read() code = file.read()
pattern = r"_CLASS_MAPPINGS\s*=\s*{([^}]*)}" # Support type annotations (e.g., NODE_CLASS_MAPPINGS: Type = {...}) and line continuations (\)
pattern = r"_CLASS_MAPPINGS\s*(?::\s*\w+\s*)?=\s*(?:\\\s*)?{([^}]*)}"
regex = re.compile(pattern, re.MULTILINE | re.DOTALL) regex = re.compile(pattern, re.MULTILINE | re.DOTALL)
nodes = set() nodes = set()
class_dict = {} class_dict = {}
# V1 nodes detection
nodes |= extract_nodes(code) nodes |= extract_nodes(code)
# V3 nodes detection
nodes |= extract_v3_nodes(code)
code = re.sub(r'^#.*?$', '', code, flags=re.MULTILINE) code = re.sub(r'^#.*?$', '', code, flags=re.MULTILINE)
def extract_keys(pattern, code): def extract_keys(pattern, code):
@@ -208,6 +343,53 @@ def get_nodes(target_dir):
return py_files, directories return py_files, directories
def get_urls_from_list_file(list_file):
"""
Read URLs from list file for scan-only mode
Args:
list_file (str): Path to URL list file (one URL per line)
Returns:
list of tuples: [(url, "", None, None), ...]
Format: (url, title, preemptions, nodename_pattern)
- title: Empty string
- preemptions: None
- nodename_pattern: None
File format:
https://github.com/owner/repo1
https://github.com/owner/repo2
# Comments starting with # are ignored
Raises:
FileNotFoundError: If list_file does not exist
"""
if not os.path.exists(list_file):
raise FileNotFoundError(f"URL list file not found: {list_file}")
urls = []
with open(list_file, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.strip()
# Skip empty lines and comments
if not line or line.startswith('#'):
continue
# Validate URL format (basic check)
if not (line.startswith('http://') or line.startswith('https://')):
print(f"WARNING: Line {line_num} is not a valid URL: {line}")
continue
# Add URL with empty metadata
# (url, title, preemptions, nodename_pattern)
urls.append((line, "", None, None))
print(f"Loaded {len(urls)} URLs from {list_file}")
return urls
def get_git_urls_from_json(json_file): def get_git_urls_from_json(json_file):
with open(json_file, encoding='utf-8') as file: with open(json_file, encoding='utf-8') as file:
data = json.load(file) data = json.load(file)
@@ -264,13 +446,43 @@ def clone_or_pull_git_repository(git_url):
print(f"Failed to clone '{repo_name}': {e}") print(f"Failed to clone '{repo_name}': {e}")
def update_custom_nodes(): def update_custom_nodes(scan_only_mode=False, url_list_file=None):
"""
Update custom nodes by cloning/pulling repositories
Args:
scan_only_mode (bool): If True, use URL list file instead of custom-node-list.json
url_list_file (str): Path to URL list file (required if scan_only_mode=True)
Returns:
dict: node_info mapping {repo_name: (url, title, preemptions, node_pattern)}
"""
if not os.path.exists(temp_dir): if not os.path.exists(temp_dir):
os.makedirs(temp_dir) os.makedirs(temp_dir)
node_info = {} node_info = {}
git_url_titles_preemptions = get_git_urls_from_json('custom-node-list.json') # Select URL source based on mode
if scan_only_mode:
if not url_list_file:
raise ValueError("url_list_file is required in scan-only mode")
git_url_titles_preemptions = get_urls_from_list_file(url_list_file)
print("\n[Scan-Only Mode]")
print(f" - URL source: {url_list_file}")
print(" - GitHub stats: DISABLED")
print(f" - Git clone/pull: {'ENABLED' if not skip_update else 'DISABLED'}")
print(" - Metadata: EMPTY")
else:
if not os.path.exists('custom-node-list.json'):
raise FileNotFoundError("custom-node-list.json not found")
git_url_titles_preemptions = get_git_urls_from_json('custom-node-list.json')
print("\n[Standard Mode]")
print(" - URL source: custom-node-list.json")
print(f" - GitHub stats: {'ENABLED' if not skip_stat_update else 'DISABLED'}")
print(f" - Git clone/pull: {'ENABLED' if not skip_update else 'DISABLED'}")
print(" - Metadata: FULL")
def process_git_url_title(url, title, preemptions, node_pattern): def process_git_url_title(url, title, preemptions, node_pattern):
name = os.path.basename(url) name = os.path.basename(url)
@@ -382,46 +594,59 @@ def update_custom_nodes():
if not skip_stat_update: if not skip_stat_update:
process_git_stats(git_url_titles_preemptions) process_git_stats(git_url_titles_preemptions)
# Git clone/pull for all repositories
with concurrent.futures.ThreadPoolExecutor(11) as executor: with concurrent.futures.ThreadPoolExecutor(11) as executor:
for url, title, preemptions, node_pattern in git_url_titles_preemptions: for url, title, preemptions, node_pattern in git_url_titles_preemptions:
executor.submit(process_git_url_title, url, title, preemptions, node_pattern) executor.submit(process_git_url_title, url, title, preemptions, node_pattern)
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json') # .py file download (skip in scan-only mode - only process git repos)
if not scan_only_mode:
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
def download_and_store_info(url_title_preemptions_and_pattern): def download_and_store_info(url_title_preemptions_and_pattern):
url, title, preemptions, node_pattern = url_title_preemptions_and_pattern url, title, preemptions, node_pattern = url_title_preemptions_and_pattern
name = os.path.basename(url) name = os.path.basename(url)
if name.endswith(".py"): if name.endswith(".py"):
node_info[name] = (url, title, preemptions, node_pattern) node_info[name] = (url, title, preemptions, node_pattern)
try: try:
download_url(url, temp_dir) download_url(url, temp_dir)
except Exception: except Exception:
print(f"[ERROR] Cannot download '{url}'") print(f"[ERROR] Cannot download '{url}'")
with concurrent.futures.ThreadPoolExecutor(10) as executor: with concurrent.futures.ThreadPoolExecutor(10) as executor:
executor.map(download_and_store_info, py_url_titles_and_pattern) executor.map(download_and_store_info, py_url_titles_and_pattern)
return node_info return node_info
def gen_json(node_info): def gen_json(node_info, scan_only_mode=False):
"""
Generate extension-node-map.json from scanned node information
Args:
node_info (dict): Repository metadata mapping
scan_only_mode (bool): If True, exclude metadata from output
"""
# scan from .py file # scan from .py file
node_files, node_dirs = get_nodes(temp_dir) node_files, node_dirs = get_nodes(temp_dir)
comfyui_path = os.path.abspath(os.path.join(temp_dir, "ComfyUI")) comfyui_path = os.path.abspath(os.path.join(temp_dir, "ComfyUI"))
node_dirs.remove(comfyui_path) # Only reorder if ComfyUI exists in the list
node_dirs = [comfyui_path] + node_dirs if comfyui_path in node_dirs:
node_dirs.remove(comfyui_path)
node_dirs = [comfyui_path] + node_dirs
data = {} data = {}
for dirname in node_dirs: for dirname in node_dirs:
py_files = get_py_file_paths(dirname) py_files = get_py_file_paths(dirname)
metadata = {} metadata = {}
nodes = set() nodes = set()
for py in py_files: for py in py_files:
nodes_in_file, metadata_in_file = scan_in_file(py, dirname == "ComfyUI") nodes_in_file, metadata_in_file = scan_in_file(py, dirname == "ComfyUI")
nodes.update(nodes_in_file) nodes.update(nodes_in_file)
# Include metadata from .py files in both modes
metadata.update(metadata_in_file) metadata.update(metadata_in_file)
dirname = os.path.basename(dirname) dirname = os.path.basename(dirname)
@@ -436,17 +661,28 @@ def gen_json(node_info):
if dirname in node_info: if dirname in node_info:
git_url, title, preemptions, node_pattern = node_info[dirname] git_url, title, preemptions, node_pattern = node_info[dirname]
metadata['title_aux'] = title # Conditionally add metadata based on mode
if not scan_only_mode:
# Standard mode: include all metadata
metadata['title_aux'] = title
if preemptions is not None: if preemptions is not None:
metadata['preemptions'] = preemptions metadata['preemptions'] = preemptions
if node_pattern is not None: if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern metadata['nodename_pattern'] = node_pattern
# Scan-only mode: metadata remains empty
data[git_url] = (nodes, metadata) data[git_url] = (nodes, metadata)
else: else:
print(f"WARN: {dirname} is removed from custom-node-list.json") # Scan-only mode: Repository not in node_info (expected behavior)
# Construct URL from dirname (author_repo format)
if '_' in dirname:
parts = dirname.split('_', 1)
git_url = f"https://github.com/{parts[0]}/{parts[1]}"
data[git_url] = (nodes, metadata)
else:
print(f"WARN: {dirname} is removed from custom-node-list.json")
for file in node_files: for file in node_files:
nodes, metadata = scan_in_file(file) nodes, metadata = scan_in_file(file)
@@ -459,13 +695,16 @@ def gen_json(node_info):
if file in node_info: if file in node_info:
url, title, preemptions, node_pattern = node_info[file] url, title, preemptions, node_pattern = node_info[file]
metadata['title_aux'] = title
if preemptions is not None: # Conditionally add metadata based on mode
metadata['preemptions'] = preemptions if not scan_only_mode:
metadata['title_aux'] = title
if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern if preemptions is not None:
metadata['preemptions'] = preemptions
if node_pattern is not None:
metadata['nodename_pattern'] = node_pattern
data[url] = (nodes, metadata) data[url] = (nodes, metadata)
else: else:
@@ -477,6 +716,10 @@ def gen_json(node_info):
for extension in extensions: for extension in extensions:
node_list_json_path = os.path.join(temp_dir, extension, 'node_list.json') node_list_json_path = os.path.join(temp_dir, extension, 'node_list.json')
if os.path.exists(node_list_json_path): if os.path.exists(node_list_json_path):
# Skip if extension not in node_info (scan-only mode with limited URLs)
if extension not in node_info:
continue
git_url, title, preemptions, node_pattern = node_info[extension] git_url, title, preemptions, node_pattern = node_info[extension]
with open(node_list_json_path, 'r', encoding='utf-8') as f: with open(node_list_json_path, 'r', encoding='utf-8') as f:
@@ -506,14 +749,16 @@ def gen_json(node_info):
print("------------------------------------------------------") print("------------------------------------------------------")
node_list_json = {} node_list_json = {}
metadata_in_url['title_aux'] = title # Conditionally add metadata based on mode
if not scan_only_mode:
metadata_in_url['title_aux'] = title
if preemptions is not None: if preemptions is not None:
metadata['preemptions'] = preemptions metadata_in_url['preemptions'] = preemptions
if node_pattern is not None:
metadata_in_url['nodename_pattern'] = node_pattern
if node_pattern is not None:
metadata_in_url['nodename_pattern'] = node_pattern
nodes = list(nodes) nodes = list(nodes)
nodes.sort() nodes.sort()
data[git_url] = (nodes, metadata_in_url) data[git_url] = (nodes, metadata_in_url)
@@ -523,12 +768,53 @@ def gen_json(node_info):
json.dump(data, file, indent=4, sort_keys=True) json.dump(data, file, indent=4, sort_keys=True)
print("### ComfyUI Manager Node Scanner ###") if __name__ == "__main__":
# Parse arguments
args = parse_arguments()
print("\n# Updating extensions\n") # Determine mode
updated_node_info = update_custom_nodes() scan_only_mode = args.scan_only is not None
url_list_file = args.scan_only if scan_only_mode else None
print("\n# 'extension-node-map.json' file is generated.\n") # Determine temp_dir
gen_json(updated_node_info) if args.temp_dir:
temp_dir = args.temp_dir
elif args.temp_dir_positional:
temp_dir = args.temp_dir_positional
else:
temp_dir = os.path.join(os.getcwd(), ".tmp")
print("\nDONE.\n") if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
# Determine skip flags
skip_update = args.skip_update or args.skip_all
skip_stat_update = args.skip_stat_update or args.skip_all or scan_only_mode
if not skip_stat_update:
auth = Auth.Token(os.environ.get('GITHUB_TOKEN'))
g = Github(auth=auth)
else:
g = None
print("### ComfyUI Manager Node Scanner ###")
if scan_only_mode:
print(f"\n# [Scan-Only Mode] Processing URL list: {url_list_file}\n")
else:
print("\n# [Standard Mode] Updating extensions\n")
# Update/clone repositories and collect node info
updated_node_info = update_custom_nodes(scan_only_mode, url_list_file)
print("\n# Generating 'extension-node-map.json'...\n")
# Generate extension-node-map.json
gen_json(updated_node_info, scan_only_mode)
print("\n✅ DONE.\n")
if scan_only_mode:
print("Output: extension-node-map.json (node mappings only)")
else:
print("Output: extension-node-map.json (full metadata)")