Compare commits

...

35 Commits

Author SHA1 Message Date
Dr.Lt.Data
5941ee9ae5 Fix: use tag_ref.name explicitly and cache get_remote_name result
- Use tag_ref.name instead of tag_ref object for checkout
- Cache get_remote_name() result to avoid duplicate calls

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 18:13:49 +09:00
Benjamin Lu
22a5992b11 Merge remote-tracking branch 'origin/main' into backport/comfyui-versions-pick-latest 2025-12-02 16:36:39 -08:00
Benjamin Lu
8d728a1b28 Fix nightly current detection on default branch 2025-12-02 16:33:56 -08:00
Benjamin Lu
a72505e339 Fix ComfyUI semver selection and stable update 2025-12-02 14:23:02 -08:00
Dr.Lt.Data
c709274a28 update DB 2025-12-03 01:46:58 +09:00
Dr.Lt.Data
c8f05e79db update DB 2025-12-03 01:35:55 +09:00
ah-kun
4d2887e99f Add ComfyUI-FailSafe-Translate-Node to custom-node-list (#2330) 2025-12-03 01:35:14 +09:00
Dr.Lt.Data
29256a5154 update DB 2025-12-03 01:33:18 +09:00
luxdelux7
82d42e4094 Add Forbidden Vision custom node pack (#2328)
* Add Forbidden Vision custom node pack

Custom face detection/segmentation models with enhancement nodes for ComfyUI.
Supports realistic, anime, and NSFW content.

* Update custom-node-list.json

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-12-03 01:32:34 +09:00
Dr.Lt.Data
53850fb627 update DB 2025-12-03 01:29:30 +09:00
Pondowner857
34b4c8ce46 Update custom-node-list.json (#2325) 2025-12-03 01:28:25 +09:00
Dr.Lt.Data
e944841054 update DB 2025-12-03 01:25:51 +09:00
llikethat
f6a5ff5552 added iSeeBetter Custom Node (#2324)
* added iSeeBetter Custom Node

iSeeBetter Custom Node for upscaling

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-12-03 01:24:38 +09:00
Dr.Lt.Data
01763b59d4 update DB 2025-12-03 01:24:18 +09:00
BuddyBytes.co
044173b2a1 Add Smart Resolution Toolkit aspect-aware, snap64-safe resolution and latent generator nodes (#2322)
Smart Resolution Toolkit for ComfyUI

A lightweight resolution assistant for ComfyUI that provides human-friendly dropdowns to pick:

- Resolution presets: HD, FullHD, 2K, 4K, 8K
- Aspect ratios: 1:1, 9:16, 4:5, 21:9, 16:9, 2:3, etc.

Key Features:
• Auto width & height calculation (INT output)
• Latent-safe – automatically snaps to nearest multiple of 64
• Perfect for EmptyLatentImage, KSampler, AnimateDiff, ControlNet, Video formats
• Includes two nodes:
   - Smart Resolution Picker → returns width & height (INT)
   - Smart Latent Generator → directly creates empty LATENT tensor

Popular use cases:
TikTok video, IG story, portrait photography, ultra-wide banners, cinematic 21:9, album covers.

GitHub: https://github.com/buddy-bytes/ComfyUI-SmartResolutionToolkit
2025-12-03 01:20:12 +09:00
Dr.Lt.Data
99e7a88dbd update DB 2025-12-03 01:19:09 +09:00
HALXP
01cd9fbb0e Add HALXP-Comfy to custom-node-list.json (#2320)
* Added HALXP-Comfy to the custom node lists

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-12-03 01:18:02 +09:00
Dr.Lt.Data
aaed1dc3d5 feat(security): Support System User Protection API with security migration (V3.38) (#2338)
- Migrate Manager data path: default/ComfyUI-Manager → __manager
- Force security_level=strong on outdated ComfyUI (block installations)
- Auto-migrate config.ini only; backup legacy files for manual verification
- Raise weak/normal- to normal during migration
- Add /manager/startup_alerts API for UI warnings
- Differentiate 403 responses: comfyui_outdated vs security_level
- Block startup scripts execution on old ComfyUI

Requires ComfyUI v0.3.76+ for full functionality.
Backward compatible with older versions (uses legacy path).
2025-12-03 00:42:12 +09:00
Benjamin Lu
f19f718a9f Improve comfyui version listing 2025-12-01 20:59:52 -08:00
Dr.Lt.Data
c8dce94c03 update DB 2025-12-01 12:23:52 +09:00
Dr.Lt.Data
06496d07b3 update DB 2025-11-29 01:43:52 +09:00
painter890602
a97f98c9cc Add PainterFLF2V custom node (#2311)
* 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-29 01:23:25 +09:00
Dr.Lt.Data
8d0406f74f update DB 2025-11-28 18:32:02 +09:00
Dr.Lt.Data
c64d14701d update DB 2025-11-28 08:59:09 +09:00
Dr.Lt.Data
00332ae444 update DB 2025-11-28 08:02:05 +09:00
akawana
e8deb3d8fe Add Utils Extra custom node to the list (#2313)
* Add Utils Extra custom node to the list

Added a new custom node entry for Utils Extra with details.

* Update description in custom-node-list.json

Expanded the description to include additional functionalities of the utility tools.
2025-11-28 08:00:38 +09:00
obvirm
8b234c99cf Add ComfyUI-WhisperXX custom node entry (#2314)
* Add ComfyUI-WhisperXX custom node entry

Added a new custom node entry for ComfyUI-WhisperXX with details.

* Update custom-node-list.json

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-11-28 07:59:25 +09:00
Rzgar
1f986d9c45 Add entry for Qwen Image Size Picker (#2312) 2025-11-28 07:56:02 +09:00
Dr.Lt.Data
bacb8fb3cd update DB 2025-11-27 00:23:54 +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
23 changed files with 10631 additions and 6697 deletions

View File

@@ -5,6 +5,7 @@
![menu](https://raw.githubusercontent.com/ltdrdata/ComfyUI-extension-tutorials/refs/heads/Main/ComfyUI-Manager/images/dialog.jpg)
## NOTICE
* V3.38: **Security patch** - Manager data migrated to protected path. See [Migration Guide](docs/en/v3.38-userdata-security-migration.md).
* V3.16: Support for `uv` has been added. Set `use_uv` in `config.ini`.
* V3.10: `double-click feature` is removed
* This feature has been moved to https://github.com/ltdrdata/comfyui-connection-helper
@@ -140,20 +141,27 @@ This repository provides Colab notebooks that allow you to install and use Comfy
## Paths
In `ComfyUI-Manager` V3.0 and later, configuration files and dynamically generated files are located under `<USER_DIRECTORY>/default/ComfyUI-Manager/`.
Starting from V3.38, Manager uses a protected system path for enhanced security.
* <USER_DIRECTORY>
* If executed without any options, the path defaults to ComfyUI/user.
* It can be set using --user-directory <USER_DIRECTORY>.
* <USER_DIRECTORY>
* If executed without any options, the path defaults to ComfyUI/user.
* It can be set using --user-directory <USER_DIRECTORY>.
* Basic config files: `<USER_DIRECTORY>/default/ComfyUI-Manager/config.ini`
* Configurable channel lists: `<USER_DIRECTORY>/default/ComfyUI-Manager/channels.ini`
* Configurable pip overrides: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_overrides.json`
* Configurable pip blacklist: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_blacklist.list`
* Configurable pip auto fix: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_auto_fix.list`
* Saved snapshot files: `<USER_DIRECTORY>/default/ComfyUI-Manager/snapshots`
* Startup script files: `<USER_DIRECTORY>/default/ComfyUI-Manager/startup-scripts`
* Component files: `<USER_DIRECTORY>/default/ComfyUI-Manager/components`
| ComfyUI Version | Manager Path |
|-----------------|--------------|
| v0.3.76+ (with System User API) | `<USER_DIRECTORY>/__manager/` |
| Older versions | `<USER_DIRECTORY>/default/ComfyUI-Manager/` |
* Basic config files: `config.ini`
* Configurable channel lists: `channels.list`
* Configurable pip overrides: `pip_overrides.json`
* Configurable pip blacklist: `pip_blacklist.list`
* Configurable pip auto fix: `pip_auto_fix.list`
* Saved snapshot files: `snapshots/`
* Startup script files: `startup-scripts/`
* Component files: `components/`
> **Note**: See [Migration Guide](docs/en/v3.38-userdata-security-migration.md) for upgrade details.
## `extra_model_paths.yaml` Configuration

View File

@@ -13625,6 +13625,16 @@
"install_type": "git-clone",
"description": "This custom node for ComfyUI integrates the Flux-Prompt-Enhance model, allowing you to enhance your prompts directly within your ComfyUI workflows."
},
{
"author": "marduk191",
"title": "comfyui_qwen_runninghub",
"reference": "https://github.com/marduk191/comfyui_qwen_runninghub",
"files": [
"https://github.com/marduk191/comfyui_qwen_runninghub"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for integrating RunningHub's AI image and video generation services into workflows. (Description by CC)"
},
{
"author": "haohaocreates",
"title": "ComfyUI-HH-Image-Selector",
@@ -16814,6 +16824,16 @@
"install_type": "git-clone",
"description": "pass up to 8 images and visually place, rotate and scale them to build the perfect composition. group move and group rescale. remember their position and scaling value across generations to easy swap images. use the buffer zone to to park an asset you don't want to use or easily reach transformations controls"
},
{
"author": "erosDiffusion",
"title": "ComfyUI-ZImageDit",
"reference": "https://github.com/erosDiffusion/ComfyUI-ZImageDit",
"files": [
"https://github.com/erosDiffusion/ComfyUI-ZImageDit"
],
"install_type": "git-clone",
"description": "Unofficial diffusers integration of the official SDNQ pipeline to run in ComfyUI. (Description by CC)"
},
{
"author": "Steudio",
"title": "ComfyUI Steudio",
@@ -26384,6 +26404,16 @@
"install_type": "git-clone",
"description": "ComfyUI nodes for generating and editing speech from SRT subtitle files using VoxCPM text-to-speech model, supporting multi-speaker dialogue and audio replacement workflows."
},
{
"author": "judian17",
"title": "ComfyUI-multiple-inputs",
"reference": "https://github.com/judian17/ComfyUI-multiple-inputs",
"files": [
"https://github.com/judian17/ComfyUI-multiple-inputs"
],
"install_type": "git-clone",
"description": "A collection of utility nodes for ComfyUI, focusing on batch processing, stitching, and visualization."
},
{
"author": "AngelCookies",
"title": "ComfyUI-Seed-Tracker",
@@ -29969,6 +29999,16 @@
"install_type": "git-clone",
"description": "A simple node for detecting vrediction, outputs a boolean value, used for logical switching (for example, automatically adding rescalecfg when vrediction model is detected), recommended to be used with if else and other nodes."
},
{
"author": "Windecay",
"title": "ComfyUI_Dynamic-RAMCache",
"reference": "https://github.com/Windecay/ComfyUI_Dynamic-RAMCache",
"files": [
"https://github.com/Windecay/ComfyUI_Dynamic-RAMCache"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that dynamically manages RAM usage by intelligently controlling cache purging based on available system memory."
},
{
"author": "kaaskoek232",
"title": "ComfyUI-MemoryManagement",
@@ -30917,6 +30957,17 @@
"install_type": "git-clone",
"description": "This custom node allows users to selectively choose what to add to the generated image's metadata."
},
{
"author": "brucew4yn3rp",
"title": "Vintage Effect",
"id": "VintageEffect",
"reference": "https://github.com/brucew4yn3rp/ComfyUI_VintageEffect",
"files": [
"https://github.com/brucew4yn3rp/ComfyUI_VintageEffect"
],
"install_type": "git-clone",
"description": "ComfyUI node that applies vintage/retro effects through JPG compression, color grading, film grain, vignette, and more to emulate more realistic photo aesthetics."
},
{
"author": "cedarconnor",
"title": "ComfyUI LatLong - Equirectangular Image Processing Nodes",
@@ -30947,26 +30998,6 @@
"install_type": "git-clone",
"description": "A ComfyUI custom node package for batch image processing with filename preservation."
},
{
"author": "cedarconnor",
"title": "ComfyUI-DiT360",
"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": "cedarconnor",
"title": "ComfyUI-OmniX",
"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-DreamCube",
@@ -31764,13 +31795,14 @@
},
{
"author": "Rzgar Espo",
"title": "ComfyUI-Qwen-Image-Size-Picker",
"title": "ComfyUI Qwen Image Size Picker",
"id": "QwenImg-latent",
"reference": "https://github.com/rzgarespo/ComfyUI-qwen-image-size-picker",
"files": [
"https://github.com/rzgarespo/ComfyUI-qwen-image-size-picker"
],
"install_type": "git-clone",
"description": "A universal node for generating empty latent tensors with support for Qwen Image, SDXL and Flux models. Features extended aspect ratio support, batch processing, and flexible dimension overrides."
"description": "An empty latent size picker with support for Qwen Image, SDXL, and Flux models."
},
{
"author": "luke-mino-altherr",
@@ -32427,6 +32459,7 @@
"author": "RUiNtheExtinct",
"title": "comfyui-save-file-extended",
"reference": "https://github.com/RUiNtheExtinct/comfyui-save-file-extended",
"reference2": "https://github.com/bytes2pro/comfyui-save-file-extended",
"files": [
"https://github.com/RUiNtheExtinct/comfyui-save-file-extended"
],
@@ -32483,16 +32516,6 @@
"install_type": "git-clone",
"description": "A tool that organizes workflow nodes into clean, user-friendly layouts"
},
{
"author": "rslosch",
"title": "ComfyUI-EZ_Prompts",
"reference": "https://github.com/rslosch/ComfyUI-EZ_Prompts",
"files": [
"https://github.com/rslosch/ComfyUI-EZ_Prompts"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node extension that provides easy-to-use prompt templates and wildcards for AI image generation."
},
{
"author": "rslosch",
"title": "ComfyUI Batch BBox Detector",
@@ -32826,6 +32849,16 @@
"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",
"title": "ComfyUI-FLUX2-JSON",
"reference": "https://github.com/MushroomFleet/ComfyUI-FLUX2-JSON",
"files": [
"https://github.com/MushroomFleet/ComfyUI-FLUX2-JSON"
],
"install_type": "git-clone",
"description": "A comprehensive suite of custom nodes for building structured JSON prompts for FLUX.2 image generation with precision and control."
},
{
"author": "Urabewe",
"title": "ComfyUI Video Extend Counter",
@@ -33721,7 +33754,17 @@
],
"install_type": "git-clone",
"description": "A ComfyUI custom node that automatically calculates optimal output dimensions for Google's Nano Banana image editing model, supporting 22 aspect ratio buckets and ensuring pixel-perfect outputs without shifting or cropping."
},
},
{
"author": "comrender",
"title": "ComfyUI-edge-match-checker",
"reference": "https://github.com/comrender/ComfyUI-edge-match-checker",
"files": [
"https://github.com/comrender/ComfyUI-edge-match-checker"
],
"install_type": "git-clone",
"description": "Node comparing two image masks or images with adjustable overlap threshold (default 95%) for detecting minor shifts and mismatches in proportions, suitable for automated post-processing validation. (Description by CC)"
},
{
"author": "DecartAI",
"title": "Lucy-Edit-ComfyUI",
@@ -35373,16 +35416,6 @@
"install_type": "git-clone",
"description": "A ComfyUI scheduler that finds the shift value required to align high/low sampling steps with a target sigma boundary."
},
{
"author": "hvppycoding",
"title": "hvppyflow",
"reference": "https://github.com/hvppycoding/hvppyflow",
"files": [
"https://github.com/hvppycoding/hvppyflow"
],
"install_type": "git-clone",
"description": "ComfyUI nodes for Automated Workflow"
},
{
"author": "l33chking",
"title": "ComfyUI Channel Ops",
@@ -36224,6 +36257,26 @@
"install_type": "git-clone",
"description": "NVIDIA ModelOpt integration for ComfyUI - Quantize and optimize diffusion models with INT8/FP8/INT4"
},
{
"author": "EnragedAntelope",
"title": "ComfyUI_EasyRegion",
"reference": "https://github.com/EnragedAntelope/ComfyUI_EasyRegion",
"files": [
"https://github.com/EnragedAntelope/ComfyUI_EasyRegion"
],
"install_type": "git-clone",
"description": "Control different parts of your image with separate prompts using visual box drawing."
},
{
"author": "EnragedAntelope",
"title": "comfyui-sdnq",
"reference": "https://github.com/EnragedAntelope/comfyui-sdnq",
"files": [
"https://github.com/EnragedAntelope/comfyui-sdnq"
],
"install_type": "git-clone",
"description": "ComfyUI custom node pack for loading SDNQ quantized models"
},
{
"author": "tester4488",
"title": "mc_qwen",
@@ -36435,7 +36488,29 @@
],
"install_type": "git-clone",
"description": "A dual-model image-to-video sampler for ComfyUI that combines high-noise and low-noise models in a single node, replacing two KSamplerAdvanced nodes with zero overhead and bit-identical frame generation. (Description by CC)"
},
},
{
"author": "princepainter",
"title": "Comfyui-PainterVRAM",
"reference": "https://github.com/princepainter/Comfyui-PainterVRAM",
"files": [
"https://github.com/princepainter/Comfyui-PainterVRAM"
],
"install_type": "git-clone",
"description": "ComfyUI node that reserves GPU VRAM before workflow execution to prevent OOM crashes with manual or auto mode options."
},
{
"author": "princepainter",
"title": "PainterFLF2V - First/Last Frame Video Enhancer",
"id": "painterflf2v",
"reference": "https://github.com/princepainter/Comfyui-PainterFLF2V",
"files": [
"https://github.com/princepainter/Comfyui-PainterFLF2V"
],
"install_type": "git-clone",
"description": "Enhance first and last frames for smooth video loop generation in ComfyUI. Based on WAN Video workflow.",
"tags": ["video", "frame", "loop", "workflow"]
},
{
"author": "rafacost",
"title": "rafacostComfy",
@@ -36589,16 +36664,6 @@
"install_type": "git-clone",
"description": "A LLM node with some models. (Description by CC)"
},
{
"author": "sean-hungerford",
"title": "seedVR2_cudafull",
"reference": "https://github.com/sean-hungerford/seedVR2_cudafull",
"files": [
"https://github.com/sean-hungerford/seedVR2_cudafull"
],
"install_type": "git-clone",
"description": "Application for upscaling videos and images with multi-GPU support, offering a user-friendly interface and high-quality results with minimal effort."
},
{
"author": "tiheaven",
"title": "Ps-Comfy-TiHeaveN-CustomNodes",
@@ -36710,16 +36775,6 @@
"install_type": "git-clone",
"description": "Dual implementation of reference-based video colorization featuring ColorMNet (2024) with DINOv2 and Deep Exemplar (2019). Includes 4 nodes (2 video, 2 image), multiple feature encoders (VGG19, DINOv2, CLIP), advanced post-processing (color-matcher, WLS, guided, bilateral), and auto-installer for dependencies."
},
{
"author": "Fablestarexpanse",
"title": "Timer-Node-Comfyui",
"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": "liming123332",
"title": "ComfyUI-Ranbooru",
@@ -36780,16 +36835,6 @@
"install_type": "git-clone",
"description": "ComfyUI custom node for adding watermarks to videos using FFmpeg, with configurable position, opacity, scale, and hardware acceleration support."
},
{
"author": "dowa-git",
"title": "comfyui-dowa",
"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": "wzyfromhust",
"title": "ComfyUI_SAM2UltraV2",
@@ -36965,6 +37010,16 @@
"install_type": "git-clone",
"description": "Nodos custom, al estilo fury, nodos que añaden versatilidad. con el tiempo ira creciendo los nodos."
},
{
"author": "FuryNocturn",
"title": "ComfyUI-Dummy_Node_Pack",
"reference": "https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack",
"files": [
"https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack"
],
"install_type": "git-clone",
"description": "Custom node pack creating fake/dummy nodes to replace missing, obsolete, or cloud-specific nodes, allowing legacy workflows to load visually without errors while preserving connections. (Description by CC)"
},
{
"author": "granddyser",
"title": "Wan-video-extender",
@@ -36986,13 +37041,331 @@
"description": "Adds shortcuts for commenting and deleting lines of text, with a configurable comment symbol. Includes a node that cleans comments from text and splits content using tags for Regional Prompting.",
"tags": ["frontend", "shortcut", "utility"]
},
{
"author": "akawana",
"title": "Utils Extra",
"reference": "https://github.com/akawana/ComfyUI-Utils-extra",
"files": [
"https://github.com/akawana/ComfyUI-Utils-extra"
],
"install_type": "git-clone",
"description": "Utility tools. Index Multiple is used for expanding multiple values from a list, IsOneOfGroupsActive to identify groups state, RepeatGroupState group enable/disable like rg but without connection etc.",
"tags": ["utility", "list", "batch"]
},
{
"author": "lovisdotio",
"title": "ComfyUI-Replace-First-Frame-Last-Frame",
"reference": "https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame",
"files": [
"https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame"
],
"install_type": "git-clone",
"description": "Replace the first and last frames of an image sequence in ComfyUI. Auto-resizes frames to match video dimensions, handles batches, and adjusts parameters if needed."
},
{
"author": "yukascomfy",
"title": "ATI_AudioReactive",
"reference": "https://github.com/yukascomfy/ATI_AudioReactive",
"files": [
"https://github.com/yukascomfy/ATI_AudioReactive"
],
"install_type": "git-clone",
"description": "ComfyUI audio-reactive animation node combining RyanOnTheInside's reactive features with Fillip's path animation for creating audio-driven visual animations. (Description by CC)"
},
{
"author": "techzuhaib",
"title": "FaceCLIP-ComfyUI",
"reference": "https://github.com/techzuhaib/FaceCLIP-ComfyUI",
"files": [
"https://github.com/techzuhaib/FaceCLIP-ComfyUI"
],
"install_type": "git-clone",
"description": "FaceCLIP nodes for ComfyUI providing joint embeddings from aligned face images plus text prompts, and identity-preserving image synthesis using fine-tuned SDXL UNet. (Description by CC)"
},
{
"author": "tuki0918",
"title": "comfyui-image-expand-nodes",
"reference": "https://github.com/tuki0918/comfyui-image-expand-nodes",
"files": [
"https://github.com/tuki0918/comfyui-image-expand-nodes"
],
"install_type": "git-clone",
"description": "Custom nodes for ComfyUI to expand images with noise for outpainting or inpainting purposes. This allows for seamless image extension in any direction."
},
{
"author": "tuki0918",
"title": "comfyui-image-tiled-nodes",
"reference": "https://github.com/tuki0918/comfyui-image-tiled-nodes",
"files": [
"https://github.com/tuki0918/comfyui-image-tiled-nodes"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes that split large images into overlapping tiles for processing and merge them back seamlessly with feathering blending. (Description by CC)"
},
{
"author": "tuki0918",
"title": "ComfyUI_Cooldown_Node",
"reference": "https://github.com/tuki0918/ComfyUI_Cooldown_Node",
"files": [
"https://github.com/tuki0918/ComfyUI_Cooldown_Node"
],
"install_type": "git-clone",
"description": "Provides custom nodes with a cooldown feature for ComfyUI. (Description by CC)"
},
{
"author": "NeoDroleDeGueule",
"title": "NDDG_Great_Nodes",
"reference": "https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes",
"files": [
"https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes"
],
"install_type": "git-clone",
"description": "NDDG Great Nodes - ComfyUI custom nodes featuring Great Conditioning Modifier with advanced semantic drift, token dropout, gradient amplification and other conceptual manipulation tools. (Description by CC)"
},
{
"author": "aining2022",
"title": "ComfyUI_Swwan",
"reference": "https://github.com/aining2022/ComfyUI_Swwan",
"files": [
"https://github.com/aining2022/ComfyUI_Swwan"
],
"install_type": "git-clone",
"description": "Collection of image processing utility nodes for ComfyUI including intelligent cropping, aspect ratio scaling, and crop box restoration capabilities. (Description by CC)"
},
{
"author": "chchchadzilla",
"title": "ComfyUI-ChomfyNodes",
"reference": "https://github.com/chchchadzilla/ComfyUI-ChomfyNodes",
"files": [
"https://github.com/chchchadzilla/ComfyUI-ChomfyNodes"
],
"install_type": "git-clone",
"description": "A professional suite of utility nodes for ComfyUI, featuring forensic logging, massive wildcard control, universal noise injection, and persistent counters."
},
{
"author": "nitingrg",
"title": "comfyui-ntools",
"reference": "https://github.com/nitingrg/comfyui-ntools",
"files": [
"https://github.com/nitingrg/comfyui-ntools"
],
"install_type": "git-clone",
"description": "Essential little utilities that should have been in ComfyUI from day one. (Description by CC)"
},
{
"author": "jav12z",
"title": "ComfyUI-ToyShaders",
"reference": "https://github.com/jav12z/ComfyUI-ToyShaders",
"files": [
"https://github.com/jav12z/ComfyUI-ToyShaders"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that allows you to render GLSL shaders (Shadertoy-style) directly inside your workflows. (Description by CC)"
},
{
"author": "Nynxz",
"title": "ComfyUI-NynxzNodes",
"reference": "https://github.com/Nynxz/ComfyUI-NynxzNodes",
"files": [
"https://github.com/Nynxz/ComfyUI-NynxzNodes"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes providing video comparison utilities, including wipe and fade compare video generation in multiple directions. (Description by CC)"
},
{
"author": "huygiatrng",
"title": "Facefusion_comfyui",
"reference": "https://github.com/huygiatrng/Facefusion_comfyui",
"files": [
"https://github.com/huygiatrng/Facefusion_comfyui"
],
"install_type": "git-clone",
"description": "Advanced face swapping for ComfyUI with local ONNX inference - no API required!"
},
{
"author": "Ada123-a",
"title": "ComfyUI-Kandinsky",
"reference": "https://github.com/Ada123-a/ComfyUI-Kandinsky",
"files": [
"https://github.com/Ada123-a/ComfyUI-Kandinsky"
],
"install_type": "git-clone",
"description": "Kandinsky 2/20B ComfyUI support with FP8/GGUF/blockswap support."
},
{
"author": "obvirm",
"title": "ComfyUI-WhisperXX",
"reference": "https://github.com/obvirm/ComfyUI-WhisperXX",
"files": [
"https://github.com/obvirm/ComfyUI-WhisperXX"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that provides advanced transcription, alignment, and diarization capabilities using the WhisperX library."
},
{
"author": "geroldmeisinger",
"title": "ComfyUI-outputlists-combiner",
"reference": "https://github.com/geroldmeisinger/ComfyUI-outputlists-combiner",
"files": [
"https://github.com/geroldmeisinger/ComfyUI-outputlists-combiner"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes to create output lists with strings and numbers, make combinations of them, and help with XYZ-Gridplots"
},
{
"author": "agavesunset",
"title": "AgaveLogicCounter",
"reference": "https://github.com/agavesunset/AgaveLogicCounter",
"files": [
"https://github.com/agavesunset/AgaveLogicCounter"
],
"install_type": "git-clone",
"description": "Solves the complex 'For-Loop' logic in ComfyUI. Perfect for controlling multi-subject vs. multi-scene batch workflows."
},
{
"author": "idvdii",
"title": "ComfyUI-DvD-LoraTriggerwordsManager",
"reference": "https://github.com/idvdii/ComfyUI-DvD-LoraTriggerwordsManager",
"files": [
"https://github.com/idvdii/ComfyUI-DvD-LoraTriggerwordsManager"
],
"install_type": "git-clone",
"description": "Professional ComfyUI custom nodes for managing LoRA trigger words, with auto-read, smart lookup via Civitai, editing, and WebUI-compatible JSON format support. (Description by CC)"
},
{
"author": "zhanglongxiao111",
"title": "Comfyui-geminiapi",
"reference": "https://github.com/zhanglongxiao111/Comfyui-geminiapi",
"files": [
"https://github.com/zhanglongxiao111/Comfyui-geminiapi"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for integrating multiple external APIs including Gemini, OpenAI, Replicate, and ElevenLabs directly into local workflows. (Description by CC)"
},
{
"author": "keghoang",
"title": "ComfyUI-Charon",
"reference": "https://github.com/keghoang/ComfyUI-Charon",
"files": [
"https://github.com/keghoang/ComfyUI-Charon"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for CHARON auto-alignment and DA3 camera export."
},
{
"author": "mobcat40",
"title": "ComfyUI-PromptChain",
"reference": "https://github.com/mobcat40/ComfyUI-PromptChain",
"files": [
"https://github.com/mobcat40/ComfyUI-PromptChain"
],
"install_type": "git-clone",
"description": "A visual tool for prompt randomization and advanced combinations inside of your ComfyUI workflows."
},
{
"author": "tpc2233",
"title": "ComfyUI-Z-Image-Turbo",
"reference": "https://github.com/tpc2233/ComfyUI-Z-Image-Turbo",
"files": [
"https://github.com/tpc2233/ComfyUI-Z-Image-Turbo"
],
"install_type": "git-clone",
"description": "Comfy UI nodes for Z-Image-Turbo to run native weights with automatic model downloading and support for 2048x2048 resolution. (Description by CC)"
},
{
"author": "Rathius-Saranoth",
"title": "Rathius_ComfyNodes",
"reference": "https://github.com/Rathius-Saranoth/Rathius_ComfyNodes",
"files": [
"https://github.com/Rathius-Saranoth/Rathius_ComfyNodes"
],
"install_type": "git-clone",
"description": "Collection of quality-of-life ComfyUI nodes including a text file loader for parsing descriptions and managing prompts without manual copy-paste. (Description by CC)"
},
{
"author": "jrabek",
"title": "BokehDiffusionComfyUI",
"reference": "https://github.com/jrabek/BokehDiffusionComfyUI",
"files": [
"https://github.com/jrabek/BokehDiffusionComfyUI"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for Bokeh Diffusion - Defocus Blur Control in Text-to-Image Diffusion Models."
},
{
"author": "HAL-XP",
"title": "HALXP-Comfy",
"reference": "https://github.com/hal-xp/halxp-comfy",
"files": [
"https://github.com/hal-xp/halxp-comfy"
],
"install_type": "git-clone",
"description": "A UI suite for ComfyUI including Focus mode and layout enhancements."
},
{
"author": "BuddyBytes",
"title": "Smart Resolution Toolkit",
"reference": "https://github.com/buddy-bytes/ComfyUI-SmartResolutionToolkit",
"files": [
"https://github.com/buddy-bytes/ComfyUI-SmartResolutionToolkit"
],
"install_type": "git-clone",
"description": "Resolution picker and latent generator for ComfyUI. Select presets like HD, FullHD, 2K, 4K, 8K with aspect ratios (1:1, 9:16, 4:5, 21:9 etc.) via dropdowns. Automatically snaps width/height to latent-safe multiples of 64. Ideal for EmptyLatentImage, AnimateDiff, ControlNet, video formats, and KSampler workflows. Outputs clean INT values or ready-to-use LATENT tensor."
},
{
"author": "Bharanidharan",
"title": "iSeeBetter Node for ComfyUI",
"reference": "https://github.com/llikethat/ComfyUI-iseebetter",
"files": [
"https://github.com/llikethat/ComfyUI-iseebetter"
],
"install_type": "git-clone",
"description": "Custom Node to implement iSeeBetter upscaling method."
},
{
"author": "Pondowner857",
"title": "ComfyUI Remote Workflow Executor",
"id": "comfy_Pond_Nodes_V2",
"reference": "https://github.com/Pondowner857/comfy_Pond_Nodes_V2",
"files": [
"https://github.com/Pondowner857/comfy_Pond_Nodes_V2"
],
"install_type": "git-clone",
"description": "Remote workflow executor node - Execute workflows on remote ComfyUI servers. Supports image/text/audio/video input and output."
},
{
"author": "luxdelux7",
"title": "Forbidden Vision",
"reference": "https://github.com/luxdelux7/ComfyUI-Forbidden-Vision",
"files": [
"https://github.com/luxdelux7/ComfyUI-Forbidden-Vision"
],
"install_type": "git-clone",
"description": "Custom face detection and segmentation for ComfyUI with automatic face fixing, intelligent color grading, and iterative refinement. Custom-trained models optimized for realistic, anime, and NSFW content.",
"nodename_pattern": "ForbiddenVision"
},
{
"author": "ah-kun",
"title": "ComfyUI-FailSafe-Translate-Node",
"reference": "https://github.com/ah-kun/ComfyUI-FailSafe-Translate-Node",
"files": [
"https://github.com/ah-kun/ComfyUI-FailSafe-Translate-Node"
],
"install_type": "git-clone",
"description": "Fail-safe Google Translate prompt node for ComfyUI (retry + caching)."
},
{
"author": "Kazama-Suichiku",
"title": "ComfyUI-Meshy",
"id": "comfyui-meshy",
"reference": "https://github.com/Kazama-Suichiku/ComfyUI-Meshy",
"files": [
"https://github.com/Kazama-Suichiku/ComfyUI-Meshy"
],
"install_type": "git-clone",
"description": "ComfyUI-Meshy is a 3D generation extension based on Meshy AI API. It provides Text-to-3D and Image-to-3D capabilities within ComfyUI, allowing you to generate 3D models directly from text prompts or images. Supports multiple AI models (Meshy-4, Meshy-5, Meshy-6) with customizable topology, polygon count, and PBR settings."
},
@@ -37421,6 +37794,6 @@
],
"install_type": "unzip",
"description": "This is a node to convert an image into a CMYK Halftone dot image."
}
}
]
}

View File

@@ -0,0 +1,230 @@
# ComfyUI-Manager V3.38: Userdata Security Migration Guide
## Introduction
ComfyUI-Manager V3.38 introduces a **security patch** that migrates Manager's configuration and data to a protected system path. This change leverages ComfyUI's new System User Protection API (PR #10966) to provide enhanced security isolation.
This guide explains what happens during the migration and how to handle various situations.
---
## What Changed
### Finding Your Paths
When ComfyUI starts, it displays the full paths in the terminal:
```
** User directory: /path/to/ComfyUI/user
** ComfyUI-Manager config path: /path/to/ComfyUI/user/__manager/config.ini
```
Look for these lines in your startup log to find the exact location on your system. In this guide, paths are shown relative to the `user` directory.
### Path Migration
| Data | Legacy Path | New Path |
|------|-------------|----------|
| Configuration | `user/default/ComfyUI-Manager/` | `user/__manager/` |
| Snapshots | `user/default/ComfyUI-Manager/snapshots/` | `user/__manager/snapshots/` |
### Why This Change
In older ComfyUI versions, the `default/` directory was **unprotected** and accessible via web APIs. If you ran ComfyUI with `--listen 0.0.0.0` or similar options to allow external connections, this data **may have been tampered with** by malicious actors.
**Note:** If you only used ComfyUI locally (without `--listen` or with `--listen 127.0.0.1`), your data was not exposed to this vulnerability.
The new `__manager` path uses ComfyUI's protected system directory, which:
- **Cannot be accessed** from outside (protected by ComfyUI)
- Isolates system settings from user data
- Enables stricter security for remote access
**This is why only `config.ini` is automatically migrated** - other files (snapshots) may have been compromised and should be manually verified before copying.
---
## Automatic Migration
When you start ComfyUI with the new System User Protection API, Manager automatically handles the migration:
### Step 1: Configuration Migration
Only `config.ini` is migrated automatically.
**Important**: Snapshots are **NOT** automatically migrated. You must copy them manually if needed.
### Step 2: Security Level Check
During migration, if your security level is below `normal` (i.e., `weak` or `normal-`), it will be automatically raised to `normal`. This is a safety measure because the security level setting itself may have been tampered with in the old version.
```
======================================================================
[ComfyUI-Manager] WARNING: Security level adjusted
- Previous: 'weak' → New: 'normal'
- Raised to prevent unauthorized remote access.
======================================================================
```
If you need a lower security level, you can manually edit the config after migration.
### Step 3: Legacy Backup
Your entire legacy directory is moved to a backup location:
```
user/__manager/.legacy-manager-backup/
```
This backup is preserved until you manually delete it.
---
## Persistent Backup Notification
As long as the backup exists, Manager will remind you on **every startup**:
```
----------------------------------------------------------------------
[ComfyUI-Manager] NOTICE: Legacy backup exists
- Your old Manager data was backed up to:
/path/to/ComfyUI/user/__manager/.legacy-manager-backup
- Please verify and remove it when no longer needed.
----------------------------------------------------------------------
```
**To stop this notification**: Delete the `.legacy-manager-backup` folder inside `user/__manager/` after confirming you don't need any data from it.
---
## Recovering Old Data
### Snapshots
If you need your old snapshots, copy the contents of `.legacy-manager-backup/snapshots/` to `user/__manager/snapshots/`.
---
## Outdated ComfyUI Warning
If you're running an older version of ComfyUI without the System User Protection API, Manager will:
1. **Force security level to `strong`** - All installations are blocked
2. **Display warning message**:
```
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[ComfyUI-Manager] ERROR: ComfyUI version is outdated!
- Most operations are blocked for security.
- ComfyUI update is still allowed.
- Please update ComfyUI to use Manager normally.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
```
**Solution**: Update ComfyUI to v0.3.76 or later.
---
## Security Levels
| Level | What's Allowed |
|-------|----------------|
| `strong` | ComfyUI update only. All other installations blocked. |
| `normal` | Install/update/remove registered custom nodes and models. |
| `normal-` | Above + Install via Git URL or pip (localhost only). |
| `weak` | All operations allowed, including from remote connections. |
**Notes:**
- `strong` is forced on outdated ComfyUI versions.
- `normal` is the default and recommended for most users.
- `normal-` is for developers who need to install unregistered nodes locally.
- `weak` should only be used in isolated development environments.
### Changing Security Level
Edit `user/__manager/config.ini`:
```ini
[default]
security_level = normal
```
---
## Error Messages
### "comfyui_outdated" (HTTP 403)
This error appears when:
- Your ComfyUI doesn't have the System User Protection API
- All installations are blocked until you update ComfyUI
**Solution**: Update ComfyUI to the latest version.
### "security_level" (HTTP 403)
This error appears when:
- Your security level blocks the requested operation
- For example, `strong` level blocks all installations
**Solution**: Lower your security level in config.ini if appropriate for your use case.
---
## Security Warning: Suspicious Path
If you see this error on an **older** ComfyUI:
```
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[ComfyUI-Manager] ERROR: Suspicious path detected!
- '__manager' exists with low security level: 'weak'
- Please verify manually:
/path/to/ComfyUI/user/__manager/config.ini
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
```
On older ComfyUI versions, the `__manager` directory is not normally created. If this directory exists, it may have been created externally. For safety, manually verify the contents of this directory before updating ComfyUI.
---
## Troubleshooting
### All my installations are blocked
**Check 1**: Is your ComfyUI updated?
- Old ComfyUI forces `security_level = strong`
- Update ComfyUI to resolve
**Check 2**: What's your security level?
- Check `user/__manager/config.ini`
- `security_level = strong` blocks all installations
### My snapshots are missing
Snapshots are not automatically migrated. You need to manually copy the `snapshots` folder from inside `.legacy-manager-backup` to the `user/__manager/` directory.
### I keep seeing the backup notification
Delete the `.legacy-manager-backup` folder inside `user/__manager/` after confirming you don't need any data from it.
### Snapshot restore is blocked
On old ComfyUI (without System User API), snapshot restore is blocked because security is forced to `strong`. Update ComfyUI to enable snapshot restore.
---
## File Structure Reference
```
user/
└── __manager/
├── config.ini # Manager configuration
├── channels.list # Custom node channels
├── snapshots/ # Environment snapshots
└── .legacy-manager-backup/ # Backup of old Manager data (temporary)
```
---
## Requirements
- **ComfyUI**: v0.3.76 or later (with System User Protection API)
- **ComfyUI-Manager**: V3.38 or later

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

@@ -40,10 +40,11 @@ import cnr_utils
import manager_util
import git_utils
import manager_downloader
import manager_migration
from node_package import InstalledNodePackage
version_code = [3, 37, 1]
version_code = [3, 38]
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
@@ -214,9 +215,10 @@ def update_user_directory(user_dir):
global manager_pip_blacklist_path
global manager_components_path
manager_files_path = os.path.abspath(os.path.join(user_dir, 'default', 'ComfyUI-Manager'))
manager_files_path = manager_migration.get_manager_path(user_dir)
if not os.path.exists(manager_files_path):
os.makedirs(manager_files_path)
manager_migration.run_migration_checks(user_dir, manager_files_path)
manager_snapshot_path = os.path.join(manager_files_path, "snapshots")
if not os.path.exists(manager_snapshot_path):
@@ -1719,7 +1721,7 @@ def read_config():
manager_util.use_uv = default_conf['use_uv'].lower() == 'true' if 'use_uv' in default_conf else False
manager_util.bypass_ssl = get_bool('bypass_ssl', False)
return {
result = {
'http_channel_enabled': get_bool('http_channel_enabled', False),
'preview_method': default_conf.get('preview_method', manager_funcs.get_current_preview_method()).lower(),
'git_exe': default_conf.get('git_exe', ''),
@@ -1739,6 +1741,8 @@ def read_config():
'security_level': default_conf.get('security_level', 'normal').lower(),
'db_mode': default_conf.get('db_mode', 'cache').lower(),
}
manager_migration.force_security_level_if_needed(result)
return result
except Exception:
import importlib.util
@@ -1746,7 +1750,7 @@ def read_config():
manager_util.use_uv = importlib.util.find_spec("uv") is not None and platform.system() != "Windows"
manager_util.bypass_ssl = False
return {
result = {
'http_channel_enabled': False,
'preview_method': manager_funcs.get_current_preview_method(),
'git_exe': '',
@@ -1766,6 +1770,8 @@ def read_config():
'security_level': 'normal', # strong | normal | normal- | weak
'db_mode': 'cache', # local | cache | remote
}
manager_migration.force_security_level_if_needed(result)
return result
def get_config():
@@ -2517,22 +2523,23 @@ def update_to_stable_comfyui(repo_path):
logging.error('\t'+branch.name)
return "fail", None
versions, current_tag, _ = get_comfyui_versions(repo)
if len(versions) == 0 or (len(versions) == 1 and versions[0] == 'nightly'):
versions, current_tag, latest_tag = get_comfyui_versions(repo)
if latest_tag is None:
logging.info("[ComfyUI-Manager] Unable to update to the stable ComfyUI version.")
return "fail", None
if versions[0] == 'nightly':
latest_tag = versions[1]
else:
latest_tag = versions[0]
if current_tag == latest_tag:
tag_ref = next((t for t in repo.tags if t.name == latest_tag), None)
if tag_ref is None:
logging.info(f"[ComfyUI-Manager] Unable to locate tag '{latest_tag}' in repository.")
return "fail", None
if repo.head.commit == tag_ref.commit:
return "skip", None
else:
logging.info(f"[ComfyUI-Manager] Updating ComfyUI: {current_tag} -> {latest_tag}")
repo.git.checkout(latest_tag)
repo.git.checkout(tag_ref.name)
execute_install_script("ComfyUI", repo_path, instant_execution=False, no_deps=False)
return 'updated', latest_tag
except:
traceback.print_exc()
@@ -3355,36 +3362,80 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
def get_comfyui_versions(repo=None):
if repo is None:
repo = git.Repo(comfy_path)
repo = repo or git.Repo(comfy_path)
remote_name = None
try:
remote = get_remote_name(repo)
repo.remotes[remote].fetch()
remote_name = get_remote_name(repo)
repo.remotes[remote_name].fetch()
except:
logging.error("[ComfyUI-Manager] Failed to fetch ComfyUI")
versions = [x.name for x in repo.tags if x.name.startswith('v')]
def parse_semver(tag_name):
match = re.match(r'^v(\d+)\.(\d+)\.(\d+)$', tag_name)
return tuple(int(x) for x in match.groups()) if match else None
# nearest tag
versions = sorted(versions, key=lambda v: repo.git.log('-1', '--format=%ct', v), reverse=True)
versions = versions[:4]
def normalize_describe(tag_name):
if not tag_name:
return None
base = tag_name.split('-', 1)[0]
return base if parse_semver(base) else None
current_tag = repo.git.describe('--tags')
# Collect semver tags and sort descending (highest first)
semver_tags = []
for tag in repo.tags:
semver = parse_semver(tag.name)
if semver:
semver_tags.append((semver, tag.name))
semver_tags.sort(key=lambda x: x[0], reverse=True)
semver_tags = [name for _, name in semver_tags]
if current_tag not in versions:
versions = sorted(versions + [current_tag], key=lambda v: repo.git.log('-1', '--format=%ct', v), reverse=True)
versions = versions[:4]
latest_tag = semver_tags[0] if semver_tags else None
main_branch = repo.heads.master
latest_commit = main_branch.commit
latest_tag = repo.git.describe('--tags', latest_commit.hexsha)
try:
described = repo.git.describe('--tags')
except Exception:
described = ''
if latest_tag != versions[0]:
versions.insert(0, 'nightly')
else:
versions[0] = 'nightly'
try:
exact_tag = repo.git.describe('--tags', '--exact-match')
except Exception:
exact_tag = ''
head_is_default = False
if remote_name:
try:
default_head_ref = repo.refs[f'{remote_name}/HEAD']
default_commit = default_head_ref.reference.commit
head_is_default = repo.head.commit == default_commit
except Exception:
head_is_default = False
nearest_semver = normalize_describe(described)
exact_semver = exact_tag if parse_semver(exact_tag) else None
if head_is_default and not exact_tag:
current_tag = 'nightly'
else:
current_tag = exact_tag or described or 'nightly'
# Prepare semver list for display: top 4 plus the current/nearest semver if missing
display_semver_tags = semver_tags[:4]
if exact_semver and exact_semver not in display_semver_tags:
display_semver_tags.append(exact_semver)
elif nearest_semver and nearest_semver not in display_semver_tags:
display_semver_tags.append(nearest_semver)
versions = ['nightly']
if current_tag and not exact_semver and current_tag not in versions and current_tag not in display_semver_tags:
versions.append(current_tag)
for tag in display_semver_tags:
if tag not in versions:
versions.append(tag)
versions = versions[:6]
return versions, current_tag, latest_tag

356
glob/manager_migration.py Normal file
View File

@@ -0,0 +1,356 @@
"""
ComfyUI-Manager migration module.
Handles migration from legacy paths to new __manager path structure.
"""
import os
import sys
import subprocess
import configparser
# Startup notices for notice board
startup_notices = [] # List of (message, level) tuples
def add_startup_notice(message, level='warning'):
"""Add a notice to be displayed on Manager notice board.
Args:
message: HTML-formatted message string
level: 'warning', 'error', 'info'
"""
global startup_notices
startup_notices.append((message, level))
# Cache for API check (computed once per session)
_cached_has_system_user_api = None
def has_system_user_api():
"""Check if ComfyUI has the System User Protection API (PR #10966).
Result is cached for performance.
"""
global _cached_has_system_user_api
if _cached_has_system_user_api is None:
try:
import folder_paths
_cached_has_system_user_api = hasattr(folder_paths, 'get_system_user_directory')
except Exception:
_cached_has_system_user_api = False
return _cached_has_system_user_api
def get_manager_path(user_dir):
"""Get the appropriate manager files path based on ComfyUI version.
Returns:
str: manager_files_path
"""
if has_system_user_api():
return os.path.abspath(os.path.join(user_dir, '__manager'))
else:
return os.path.abspath(os.path.join(user_dir, 'default', 'ComfyUI-Manager'))
def run_migration_checks(user_dir, manager_files_path):
"""Run all migration and security checks.
Call this after get_manager_path() to handle:
- Legacy config migration (new ComfyUI)
- Legacy backup notification (every startup)
- Suspicious directory detection (old ComfyUI)
- Outdated ComfyUI warning (old ComfyUI)
"""
if has_system_user_api():
migrated = migrate_legacy_config(user_dir, manager_files_path)
# Only check for legacy backup if migration didn't just happen
# (migration already shows backup location in its message)
if not migrated:
check_legacy_backup(manager_files_path)
else:
check_suspicious_manager(user_dir)
warn_outdated_comfyui()
def check_legacy_backup(manager_files_path):
"""Check for legacy backup and notify user to verify and remove it.
This runs on every startup to remind users about pending legacy backup.
"""
backup_dir = os.path.join(manager_files_path, '.legacy-manager-backup')
if not os.path.exists(backup_dir):
return
# Terminal output
print("\n" + "-"*70)
print("[ComfyUI-Manager] NOTICE: Legacy backup exists")
print(" - Your old Manager data was backed up to:")
print(f" {backup_dir}")
print(" - Please verify and remove it when no longer needed.")
print("-"*70 + "\n")
# Notice board output
add_startup_notice(
"Legacy ComfyUI-Manager data backup exists. Please verify and remove when no longer needed.",
level='info'
)
def check_suspicious_manager(user_dir):
"""Check for suspicious __manager directory on old ComfyUI.
On old ComfyUI without System User API, if __manager exists with low security,
warn the user to verify manually.
Returns:
bool: True if suspicious setup detected
"""
if has_system_user_api():
return False # Not suspicious on new ComfyUI
suspicious_path = os.path.abspath(os.path.join(user_dir, '__manager'))
if not os.path.exists(suspicious_path):
return False
config_path = os.path.join(suspicious_path, 'config.ini')
if not os.path.exists(config_path):
return False
config = configparser.ConfigParser()
config.read(config_path)
sec_level = config.get('default', 'security_level', fallback='normal').lower()
if sec_level in ['weak', 'normal-']:
# Terminal output
print("\n" + "!"*70)
print("[ComfyUI-Manager] ERROR: Suspicious path detected!")
print(f" - '__manager' exists with low security level: '{sec_level}'")
print(" - Please verify manually:")
print(f" {config_path}")
print("!"*70 + "\n")
# Notice board output
add_startup_notice(
"[Security Alert] Suspicious path detected. See terminal log for details.",
level='error'
)
return True
return False
def warn_outdated_comfyui():
"""Warn user about outdated ComfyUI without System User API."""
if has_system_user_api():
return
# Terminal output
print("\n" + "!"*70)
print("[ComfyUI-Manager] ERROR: ComfyUI version is outdated!")
print(" - Most operations are blocked for security.")
print(" - ComfyUI update is still allowed.")
print(" - Please update ComfyUI to use Manager normally.")
print("!"*70 + "\n")
# Notice board output
add_startup_notice(
"[Security Alert] ComfyUI outdated. Installations blocked (update allowed).<BR>"
"Update ComfyUI for normal operation.",
level='error'
)
def migrate_legacy_config(user_dir, manager_files_path):
"""Migrate ONLY config.ini to new __manager path if needed.
IMPORTANT: Only config.ini is migrated. Other files (snapshots, cache, etc.)
are NOT migrated - users must recreate them.
Scenarios:
1. Legacy exists, New doesn't exist → Migrate config.ini
2. Legacy exists, New exists → First update after upgrade
- Run ComfyUI dependency installation
- Rename legacy to .backup
3. Legacy doesn't exist → No migration needed
Returns:
bool: True if migration was performed
"""
if not has_system_user_api():
return False
legacy_dir = os.path.join(user_dir, 'default', 'ComfyUI-Manager')
legacy_config = os.path.join(legacy_dir, 'config.ini')
new_config = os.path.join(manager_files_path, 'config.ini')
if not os.path.exists(legacy_dir):
return False # No legacy directory, nothing to migrate
# IMPORTANT: Check for config.ini existence, not just directory
# (because makedirs() creates __manager before this function is called)
# Case: Both configs exist (first update after ComfyUI upgrade)
# This means user ran new ComfyUI at least once, creating __manager/config.ini
if os.path.exists(legacy_config) and os.path.exists(new_config):
_handle_first_update_migration(user_dir, legacy_dir, manager_files_path)
return True
# Case: Legacy config exists but new config doesn't (normal migration)
# This is the first run after ComfyUI upgrade
if os.path.exists(legacy_config) and not os.path.exists(new_config):
pass # Continue with normal migration below
else:
return False
# Terminal output
print("\n" + "-"*70)
print("[ComfyUI-Manager] NOTICE: Legacy config.ini detected")
print(f" - Old: {legacy_config}")
print(f" - New: {new_config}")
print(" - Migrating config.ini only (other files are NOT migrated).")
print(" - Security level below 'normal' will be raised.")
print("-"*70 + "\n")
_migrate_config_with_security_check(legacy_config, new_config)
# Move legacy directory to backup
_move_legacy_to_backup(legacy_dir, manager_files_path)
return True
def _handle_first_update_migration(user_dir, legacy_dir, manager_files_path):
"""Handle first ComfyUI update when both legacy and new directories exist.
This scenario happens when:
- User was on old ComfyUI (using default/ComfyUI-Manager)
- ComfyUI was updated (now has System User API)
- Manager already created __manager on first new run
- But legacy directory still exists
Actions:
1. Run ComfyUI dependency installation
2. Move legacy to __manager/.legacy-manager-backup
"""
# Terminal output
print("\n" + "-"*70)
print("[ComfyUI-Manager] NOTICE: First update after ComfyUI upgrade detected")
print(" - Both legacy and new directories exist.")
print(" - Running ComfyUI dependency installation...")
print("-"*70 + "\n")
# Run ComfyUI dependency installation
# Path: glob/manager_migration.py → glob → comfyui-manager → custom_nodes → ComfyUI
try:
comfyui_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
requirements_path = os.path.join(comfyui_path, 'requirements.txt')
if os.path.exists(requirements_path):
subprocess.run([sys.executable, '-m', 'pip', 'install', '-r', requirements_path],
capture_output=True, check=False)
print("[ComfyUI-Manager] ComfyUI dependencies installation completed.")
except Exception as e:
print(f"[ComfyUI-Manager] WARNING: Failed to install ComfyUI dependencies: {e}")
# Move legacy to backup inside __manager
_move_legacy_to_backup(legacy_dir, manager_files_path)
def _move_legacy_to_backup(legacy_dir, manager_files_path):
"""Move legacy directory to backup inside __manager.
Returns:
str: Path to backup directory if successful, None if failed
"""
import shutil
backup_dir = os.path.join(manager_files_path, '.legacy-manager-backup')
try:
if os.path.exists(backup_dir):
shutil.rmtree(backup_dir) # Remove old backup if exists
shutil.move(legacy_dir, backup_dir)
# Terminal output (full paths shown here only)
print("\n" + "-"*70)
print("[ComfyUI-Manager] NOTICE: Legacy settings migrated")
print(f" - Old location: {legacy_dir}")
print(f" - Backed up to: {backup_dir}")
print(" - Please verify and remove the backup when no longer needed.")
print("-"*70 + "\n")
# Notice board output (no full paths for security)
add_startup_notice(
"Legacy ComfyUI-Manager data migrated. See terminal for details.",
level='info'
)
return backup_dir
except Exception as e:
print(f"[ComfyUI-Manager] WARNING: Failed to backup legacy directory: {e}")
add_startup_notice(
f"[MIGRATION] Failed to backup legacy directory: {e}",
level='warning'
)
return None
def _migrate_config_with_security_check(legacy_path, new_path):
"""Migrate legacy config, raising security level only if below default."""
config = configparser.ConfigParser()
try:
config.read(legacy_path)
except Exception as e:
print(f"[ComfyUI-Manager] WARNING: Failed to parse config.ini: {e}")
print(" - Creating fresh config with default settings.")
add_startup_notice(
"[MIGRATION] Failed to parse legacy config. Using defaults.",
level='warning'
)
return # Skip migration, let Manager create fresh config
# Security level hierarchy: strong > normal > normal- > weak
# Default is 'normal', only raise if below default
if 'default' in config:
current_level = config['default'].get('security_level', 'normal').lower()
below_default_levels = ['weak', 'normal-']
if current_level in below_default_levels:
config['default']['security_level'] = 'normal'
# Terminal output
print("\n" + "="*70)
print("[ComfyUI-Manager] WARNING: Security level adjusted")
print(f" - Previous: '{current_level}' → New: 'normal'")
print(" - Raised to prevent unauthorized remote access.")
print("="*70 + "\n")
# Notice board output
add_startup_notice(
f"[MIGRATION] Security level raised: '{current_level}''normal'.<BR>"
"To prevent unauthorized remote access.",
level='warning'
)
else:
print(f" - Security level: '{current_level}' (no change needed)")
# Ensure directory exists
os.makedirs(os.path.dirname(new_path), exist_ok=True)
with open(new_path, 'w') as f:
config.write(f)
def force_security_level_if_needed(config_dict):
"""Force security level to 'strong' if on old ComfyUI.
Args:
config_dict: Configuration dictionary to modify in-place
Returns:
bool: True if security level was forced
"""
if not has_system_user_api():
config_dict['security_level'] = 'strong'
return True
return False

View File

@@ -22,6 +22,7 @@ import asyncio
import queue
import manager_downloader
import manager_migration
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
@@ -276,6 +277,13 @@ import zipfile
import urllib.request
def security_403_response():
"""Return appropriate 403 response based on ComfyUI version."""
if not manager_migration.has_system_user_api():
return web.json_response({"error": "comfyui_outdated"}, status=403)
return web.json_response({"error": "security_level"}, status=403)
def get_model_dir(data, show_log=False):
if 'download_model_base' in folder_paths.folder_names_and_paths:
models_base = folder_paths.folder_names_and_paths['download_model_base'][0][0]
@@ -732,7 +740,7 @@ async def fetch_updates(request):
async def update_all(request):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
return web.Response(status=403)
return security_403_response()
with task_worker_lock:
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
@@ -965,7 +973,7 @@ async def get_snapshot_list(request):
async def remove_snapshot(request):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
return web.Response(status=403)
return security_403_response()
try:
target = request.rel_url.query["target"]
@@ -983,7 +991,7 @@ async def remove_snapshot(request):
async def restore_snapshot(request):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
return web.Response(status=403)
return security_403_response()
try:
target = request.rel_url.query["target"]
@@ -1302,7 +1310,7 @@ async def fix_custom_node(request):
async def install_custom_node_git_url(request):
if not is_allowed_security_level('high'):
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
return web.Response(status=403)
return security_403_response()
url = await request.text()
res = await core.gitclone_install(url)
@@ -1322,7 +1330,7 @@ async def install_custom_node_git_url(request):
async def install_custom_node_pip(request):
if not is_allowed_security_level('high'):
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
return web.Response(status=403)
return security_403_response()
packages = await request.text()
core.pip_install(packages.split(' '))
@@ -1594,6 +1602,16 @@ async def get_notice(request):
except:
pass
# Prepend startup notices from manager_migration
for message, level in reversed(manager_migration.startup_notices):
if level == 'error':
style = 'color:red; background-color:white; font-weight:bold'
elif level == 'warning':
style = 'color:orange; background-color:white; font-weight:bold'
else:
style = 'color:blue; background-color:white'
markdown_content = f'<P style="{style}">{message}</P>' + markdown_content
return web.Response(text=markdown_content, status=200)
else:
return web.Response(text="Unable to retrieve Notice", status=200)
@@ -1601,11 +1619,35 @@ async def get_notice(request):
return web.Response(text="Unable to retrieve Notice", status=200)
@routes.get("/manager/startup_alerts")
async def get_startup_alerts(request):
"""Return startup alerts for customAlert display on page load.
Returns JSON array of alerts that should be shown to user immediately.
All startup notices (error, warning, info) are returned.
"""
alerts = []
# Return all startup notices for alert display
for message, level in manager_migration.startup_notices:
# Convert HTML BR to newlines for customAlert
text = message.replace('<BR>', '\n').replace('<br>', '\n')
# Add [ComfyUI-Manager] prefix for customAlert (notice board shows in Manager UI anyway)
text = text.replace('[Security Alert]', '[ComfyUI-Manager] Security Alert:')
text = text.replace('[MIGRATION]', '[ComfyUI-Manager] Migration:')
alerts.append({
'message': text,
'level': level
})
return web.json_response(alerts)
@routes.get("/manager/reboot")
def restart(self):
if not is_allowed_security_level('middle'):
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
return web.Response(status=403)
return security_403_response()
try:
sys.stdout.close_log()

View File

@@ -1,6 +1,6 @@
import { api } from "../../scripts/api.js";
import { app } from "../../scripts/app.js";
import { sleep, customConfirm, customAlert } from "./common.js";
import { sleep, customConfirm, customAlert, handle403Response, show_message } from "./common.js";
async function tryInstallCustomNode(event) {
let msg = '-= [ComfyUI Manager] extension installation request =-\n\n';
@@ -42,7 +42,7 @@ async function tryInstallCustomNode(event) {
});
if(response.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(response);
return false;
}
else if(response.status == 400) {
@@ -54,7 +54,7 @@ async function tryInstallCustomNode(event) {
let response = await api.fetchApi("/manager/reboot");
if(response.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(response);
return false;
}

View File

@@ -14,7 +14,7 @@ import { OpenArtShareDialog } from "./comfyui-share-openart.js";
import {
free_models, install_pip, install_via_git_url, manager_instance,
rebootAPI, setManagerInstance, show_message, customAlert, customPrompt,
infoToast, showTerminal, setNeedRestart
infoToast, showTerminal, setNeedRestart, handle403Response
} from "./common.js";
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
import { CustomNodesManager } from "./custom-nodes-manager.js";
@@ -753,9 +753,9 @@ async function onQueueStatus(event) {
const rebootButton = document.getElementById('cm-reboot-button5');
rebootButton?.addEventListener("click",
function() {
if(rebootAPI()) {
manager_dialog.close();
async function() {
if(await rebootAPI()) {
manager_instance.close();
}
});
}
@@ -780,8 +780,13 @@ async function updateAll(update_comfyui) {
const response = await api.fetchApi(`/manager/queue/update_all?mode=${mode}`);
if (response.status == 401) {
if (response.status == 403) {
await handle403Response(response);
reset_action_buttons();
}
else if (response.status == 401) {
customAlert('Another task is already in progress. Please stop the ongoing task first.');
reset_action_buttons();
}
else if(response.status == 200) {
is_updating = true;
@@ -1453,6 +1458,31 @@ app.registerExtension({
load_components();
// Fetch and show startup alerts (critical errors like outdated ComfyUI)
// Poll until extensionManager.toast is ready (set in Vue onMounted)
const showStartupAlerts = async () => {
let toastWaitCount = 0;
const waitForToast = () => {
if (window['app']?.extensionManager?.toast) {
fetch('/manager/startup_alerts')
.then(response => response.ok ? response.json() : [])
.then(alerts => {
for (const alert of alerts) {
customAlert(alert.message);
}
})
.catch(e => console.warn('[ComfyUI-Manager] Failed to fetch startup alerts:', e));
} else if (toastWaitCount < 300) { // Max 30 seconds (300 * 100ms)
toastWaitCount++;
setTimeout(waitForToast, 100);
} else {
console.warn('[ComfyUI-Manager] Timeout waiting for toast. Startup alerts skipped.');
}
};
waitForToast();
};
showStartupAlerts();
const menu = document.querySelector(".comfy-menu");
const separator = document.createElement("hr");

View File

@@ -100,6 +100,19 @@ export function show_message(msg) {
app.ui.dialog.element.style.zIndex = 1100;
}
export async function handle403Response(res, defaultMessage) {
try {
const data = await res.json();
if(data.error === 'comfyui_outdated') {
show_message('ComfyUI version is outdated.<BR>Please update ComfyUI to use Manager normally.');
} else {
show_message(defaultMessage || 'This action is not allowed with this security level configuration.');
}
} catch {
show_message(defaultMessage || 'This action is not allowed with this security level configuration.');
}
}
export async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
@@ -163,20 +176,23 @@ export async function customPrompt(title, message) {
}
export function rebootAPI() {
export async function rebootAPI() {
if ('electronAPI' in window) {
window.electronAPI.restartApp();
return true;
}
customConfirm("Are you sure you'd like to reboot the server?").then((isConfirmed) => {
if (isConfirmed) {
try {
api.fetchApi("/manager/reboot");
const isConfirmed = await customConfirm("Are you sure you'd like to reboot the server?");
if (isConfirmed) {
try {
const response = await api.fetchApi("/manager/reboot");
if (response.status == 403) {
await handle403Response(response);
return false;
}
catch(exception) {}
}
});
catch(exception) {}
}
return false;
}
@@ -216,7 +232,7 @@ export async function install_pip(packages) {
});
if(res.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(res);
return;
}
@@ -251,7 +267,7 @@ export async function install_via_git_url(url, manager_dialog) {
});
if(res.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(res);
return;
}
@@ -262,9 +278,9 @@ export async function install_via_git_url(url, manager_dialog) {
const self = this;
rebootButton.addEventListener("click",
function() {
if(rebootAPI()) {
manager_dialog.close();
async function() {
if(await rebootAPI()) {
manager_instance.close();
}
});
}

View File

@@ -7,7 +7,7 @@ import {
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt,
sanitizeHTML, infoToast, showTerminal, setNeedRestart,
storeColumnWidth, restoreColumnWidth, getTimeAgo, copyText, loadCss,
showPopover, hidePopover
showPopover, hidePopover, handle403Response
} from "./common.js";
// https://cenfun.github.io/turbogrid/api.html
@@ -1528,7 +1528,16 @@ export class CustomNodesManager {
errorMsg = `'${item.title}': `;
if(res.status == 403) {
errorMsg += `This action is not allowed with this security level configuration.\n`;
try {
const data = await res.json();
if(data.error === 'comfyui_outdated') {
errorMsg += `ComfyUI version is outdated. Please update ComfyUI to use Manager normally.\n`;
} else {
errorMsg += `This action is not allowed with this security level configuration.\n`;
}
} catch {
errorMsg += `This action is not allowed with this security level configuration.\n`;
}
} else if(res.status == 404) {
errorMsg += `With the current security level configuration, only custom nodes from the <B>"default channel"</B> can be installed.\n`;
} else {

View File

@@ -1,9 +1,9 @@
import { app } from "../../scripts/app.js";
import { $el } from "../../scripts/ui.js";
import {
manager_instance, rebootAPI,
import {
manager_instance, rebootAPI,
fetchData, md5, icons, show_message, customAlert, infoToast, showTerminal,
storeColumnWidth, restoreColumnWidth, loadCss
storeColumnWidth, restoreColumnWidth, loadCss, handle403Response
} from "./common.js";
import { api } from "../../scripts/api.js";
@@ -477,7 +477,16 @@ export class ModelManager {
errorMsg = `'${item.name}': `;
if(res.status == 403) {
errorMsg += `This action is not allowed with this security level configuration.\n`;
try {
const data = await res.json();
if(data.error === 'comfyui_outdated') {
errorMsg += `ComfyUI version is outdated. Please update ComfyUI to use Manager normally.\n`;
} else {
errorMsg += `This action is not allowed with this security level configuration.\n`;
}
} catch {
errorMsg += `This action is not allowed with this security level configuration.\n`;
}
} else {
errorMsg += await res.text() + '\n';
}

View File

@@ -1,7 +1,7 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js"
import { ComfyDialog, $el } from "../../scripts/ui.js";
import { manager_instance, rebootAPI, show_message } from "./common.js";
import { manager_instance, rebootAPI, show_message, handle403Response } from "./common.js";
async function restore_snapshot(target) {
@@ -10,7 +10,7 @@ async function restore_snapshot(target) {
const response = await api.fetchApi(`/snapshot/restore?target=${target}`, { cache: "no-store" });
if(response.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(response);
return false;
}
@@ -38,7 +38,7 @@ async function remove_snapshot(target) {
const response = await api.fetchApi(`/snapshot/remove?target=${target}`, { cache: "no-store" });
if(response.status == 403) {
show_message('This action is not allowed with this security level configuration.');
await handle403Response(response);
return false;
}
@@ -145,8 +145,8 @@ export class SnapshotManager extends ComfyDialog {
if(btn_id) {
const rebootButton = document.getElementById(btn_id);
const self = this;
rebootButton.onclick = function() {
if(rebootAPI()) {
rebootButton.onclick = async function() {
if(await rebootAPI()) {
self.close();
self.manager_dialog.close();
}

View File

@@ -1,5 +1,135 @@
{
"custom_nodes": [
{
"author": "starsFriday",
"title": "ComfyUI-Tracker-Person [WIP]",
"reference": "https://github.com/starsFriday/ComfyUI-Tracker-Person",
"files": [
"https://github.com/starsFriday/ComfyUI-Tracker-Person"
],
"install_type": "git-clone",
"description": "ComfyUI custom node using YOLO instance segmentation to track specific people in video frames with color histogram re-identification for robust tracking across occlusions. (Description by CC)\nNOTE: The files in the repo are not organized."
},
{
"author": "judian17",
"title": "ComfyUI-MIDI-3D [WIP]",
"reference": "https://github.com/judian17/ComfyUI-MIDI-3D",
"files": [
"https://github.com/judian17/ComfyUI-MIDI-3D"
],
"install_type": "git-clone",
"description": "Partial implementation of the MIDI-3D project for ComfyUI with multi-view normal/depth map generation and texture baking. (Description by CC)\nNOTE: The files in the repo are not organized."
},
{
"author": "IAFFeng",
"title": "Comfyui_XF_Custom_Actual-Node",
"reference": "https://github.com/IAFFeng/Comfyui_XF_Custom_Actual-Node",
"files": [
"https://github.com/IAFFeng/Comfyui_XF_Custom_Actual-Node"
],
"install_type": "git-clone",
"description": "ComfyUI custom node providing GeminiMatting functionality for image matting operations. (Description by CC)"
},
{
"author": "LvyuanW",
"title": "ComfyUI-6yuan [WIP]",
"reference": "https://github.com/LvyuanW/ComfyUI-6yuan",
"files": [
"https://github.com/LvyuanW/ComfyUI-6yuan"
],
"install_type": "git-clone",
"description": "A curated set of ComfyUI nodes under 6yuan namespace."
},
{
"author": "wciq1208",
"title": "even-comfyui-plugin",
"reference": "https://github.com/wciq1208/even-comfyui-plugin",
"files": [
"https://github.com/wciq1208/even-comfyui-plugin"
],
"install_type": "git-clone",
"description": "NODES: Gemini, NanoBanana"
},
{
"author": "Fuhze73",
"title": "ComfyUI-PainterI2V-StartEndImage-Tiled [WIP]",
"reference": "https://github.com/Fuhze73/ComfyUI-PainterI2V-StartEndImage-Tiled",
"files": [
"https://github.com/Fuhze73/ComfyUI-PainterI2V-StartEndImage-Tiled"
],
"install_type": "git-clone",
"description": "Wan2.2 image-to-video enhancement node optimized for 4-step LoRAs, reducing slow-motion and enhancing camera movement. (Description by CC)\nNOTE: The files in the repo are not organized."
},
{
"author": "stevanisya",
"title": "comfyui_txt_selector [WIP]",
"reference": "https://github.com/stevanisya/comfyui_txt_selector",
"files": [
"https://github.com/stevanisya/comfyui_txt_selector"
],
"install_type": "git-clone",
"description": "A simple ComfyUI node that lets you choose one text from up to 10 inputs.\nNOTE: The files in the repo are not organized."
},
{
"author": "Isi-dev",
"title": "ComfyUI_DeleteModelPassthrough_ExecutionFlowControl [WIP]",
"reference": "https://github.com/Isi-dev/ComfyUI_DeleteModelPassthrough_ExecutionFlowControl",
"files": [
"https://github.com/Isi-dev/ComfyUI_DeleteModelPassthrough_ExecutionFlowControl"
],
"install_type": "git-clone",
"description": "Memory management custom node that deletes specific models from VRAM and RAM while passing through other input types unchanged, useful for low-memory environments. (Description by CC)"
},
{
"author": "K1maran",
"title": "ComfyUI-Kimaran",
"reference": "https://github.com/K1maran/ComfyUI-Kimaran",
"files": [
"https://github.com/K1maran/ComfyUI-Kimaran"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for preset latent image generation including EmptyLatentImagePresetsAIO, FLUX, QWEN, and SD1.5 variants. (Description by CC)"
},
{
"author": "silveroxides",
"title": "ComfyUI_LoHalo",
"reference": "https://github.com/silveroxides/ComfyUI_LoHalo",
"files": [
"https://github.com/silveroxides/ComfyUI_LoHalo"
],
"install_type": "git-clone",
"description": "ComfyUI upscaling node package with Lohalo high-fidelity scaling and kernel-based image enhancement capabilities. (Description by CC)"
},
{
"author": "jorin91",
"title": "ComfyUI-JSG-Utils [UNSAFE]",
"reference": "https://github.com/jorin91/ComfyUI-JSG-Utils",
"files": [
"https://github.com/jorin91/ComfyUI-JSG-Utils"
],
"install_type": "git-clone",
"description": "Utility nodes for ComfyUI including file operations, recursive image finding, and path parsing. (Description by CC)[w/This nodepack contains a vulnerability that allows remote deletion of files at arbitrary paths.]"
},
{
"author": "vadimcro",
"title": "External-Image-Revised-with-MASK",
"reference": "https://github.com/vadimcro/External-Image-Revised-with-MASK",
"files": [
"https://github.com/vadimcro/External-Image-Revised-with-MASK"
],
"install_type": "git-clone",
"description": "ComfyUI external image node with mask support for image composition and masking workflows. (Description by CC)"
},
{
"author": "martinken",
"title": "ComfyUI-KMNodes",
"reference": "https://github.com/martinken/ComfyUI-KMNodes",
"files": [
"https://github.com/martinken/ComfyUI-KMNodes"
],
"install_type": "git-clone",
"description": "NODES: KM_Aspect_Ratio_Selector, KM_Color_Correct, KM_Downscale_Image, KM_Merge_Images, KM_Safe_Mask_Bounds, KM_Safe_SEGS_Bounds, KM_Video_Image_Color_Match, KM_WanVideoToVideo, WanImageToVide, ..."
},
{
"author": "sahibalejandro",
"title": "ComfyUI Sahib Nodes",
@@ -170,16 +300,6 @@
"install_type": "git-clone",
"description": "Adds a node that outputs the workflow's name as a string\nNOTE: The files in the repo are not organized."
},
{
"author": "PozzettiAndrea",
"title": "ComfyUI-CameraAnalysis",
"reference": "https://github.com/PozzettiAndrea/ComfyUI-CameraAnalysis",
"files": [
"https://github.com/PozzettiAndrea/ComfyUI-CameraAnalysis"
],
"install_type": "git-clone",
"description": "Extracts camera intrinsic parameters from image EXIF data."
},
{
"author": "newraina",
"title": "comfyui-photoshop-v2 [WIP]",
@@ -291,15 +411,16 @@
"description": "A slimmed down collection of ComfyUI nodes either from elsewhere, custom creation or updated independently. (Description by CC)"
},
{
"author": "liusida",
"author": "Sida Liu",
"title": "ComfyUI-Notebook [UNSAFE]",
"id": "notebook",
"reference": "https://github.com/liusida/ComfyUI-Notebook",
"files": [
"https://github.com/liusida/ComfyUI-Notebook"
],
"install_type": "git-clone",
"description": "A Jupyter-style custom node for executing Python code within ComfyUI workflows, featuring syntax highlighting, shared variables, and pre-loaded libraries like numpy, torch, and matplotlib.[w/This extension allows remote command execution.]"
},
"description": "A Jupyter-style custom node for executing Python code and plotting within ComfyUI workflows.[w/This extension allows remote command execution.]"
},
{
"author": "pznodes",
"title": "ComfyUI-UniRig [WIP]",
@@ -1342,16 +1463,6 @@
"install_type": "git-clone",
"description": "Created by BizaNator for the BrainDeadGuild community. These professional-grade character editing tools for ComfyUI specialize in identity preservation and multi-reference image control.\nNOTE: The files in the repo are not organized."
},
{
"author": "cedarconnor",
"title": "ComfyUI-GEN3C-Gsplat [WIP]",
"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": "sk-palani",
"title": "ComfyUI_Simpler",
@@ -4456,16 +4567,6 @@
"install_type": "git-clone",
"description": "Node for LoRA stack management in ComfyUI\nNOTE: The files in the repo are not organized."
},
{
"author": "fuzr0dah",
"title": "comfyui-sceneassembly",
"reference": "https://github.com/fuzr0dah/comfyui-sceneassembly",
"files": [
"https://github.com/fuzr0dah/comfyui-sceneassembly"
],
"install_type": "git-clone",
"description": "A bunch of nodes I created that I also find useful."
},
{
"author": "PabloGrant",
"title": "comfyui-giraffe-test-panel",

View File

@@ -423,6 +423,7 @@
"A1r KSampler Config",
"A1r KSampler Config Values",
"A1r Latent Encode Transform",
"A1r Latent Observer",
"A1r Latent Upscale Transform",
"A1r LoRA Config",
"A1r LoRA Config Advance",
@@ -813,13 +814,17 @@
"TS Equirectangular to Cube",
"TS Files Downloader",
"TS Youtube Chapters",
"TSAutoTileSize",
"TSCropToMask",
"TSRestoreFromCrop",
"TSWhisper",
"TS_BGRM_BiRefNet",
"TS_Color_Grade",
"TS_DeflickerNode",
"TS_FilePathLoader",
"TS_FilmEmulation",
"TS_FilmGrain",
"TS_Film_Emulation",
"TS_Free_Video_Memory",
"TS_ImageResize",
"TS_MarianTranslator",
@@ -827,10 +832,12 @@
"TS_ModelConverterAdvanced",
"TS_Qwen2.5_VL",
"TS_Qwen3",
"TS_Qwen3_VL",
"TS_QwenCanvas",
"TS_QwenSafeResize",
"TS_VideoDepthNode",
"TS_Video_Upscale_With_Model"
"TS_Video_Upscale_With_Model",
"TS_WAN_SafeResize"
],
{
"title_aux": "ComfyUI Timesaver Nodes"
@@ -1846,6 +1853,15 @@
"title_aux": "ComfyUI-Airtable [WIP]"
}
],
"https://github.com/Fuhze73/ComfyUI-PainterI2V-StartEndImage-Tiled": [
[
"PainterI2V",
"PainterI2VTiled"
],
{
"title_aux": "ComfyUI-PainterI2V-StartEndImage-Tiled [WIP]"
}
],
"https://github.com/GalactusX31/ComfyUI-FileBrowserAPI": [
[
"PathSelectorNode"
@@ -1906,13 +1922,15 @@
],
"https://github.com/GoddessLabs/ComfyUI-GoddessLabs-NodePack": [
[
"GoddessLabsFolderSelector"
"GoddessLabsDestroyAndRecreate",
"GoddessLabsFolderSelector",
"GoddessLabsNodeStateManager"
],
{
"author": "GoddessLabs",
"description": "Custom nodes to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more.",
"nickname": "GoddessLabs",
"title": "GoddessLabs NodePack",
"title": "\u2764\ufe0f\u200d\ud83d\udd25\ud83d\udc8a GoddessLabs Toolset",
"title_aux": "ComfyUI-GoddessLabs-NodePack"
}
],
@@ -2012,6 +2030,14 @@
"title_aux": "ComfyUI-LLMs-Toolkit [WIP]"
}
],
"https://github.com/IAFFeng/Comfyui_XF_Custom_Actual-Node": [
[
"GeminiMattingNode"
],
{
"title_aux": "Comfyui_XF_Custom_Actual-Node"
}
],
"https://github.com/IXIWORKS-KIMJUNGHO/comfyui-ixiworks": [
[
"BuildCharacterPromptNode",
@@ -2036,6 +2062,7 @@
],
"https://github.com/IgPoly/ComfyUI-igTools": [
[
"IGT_ImageTilesCalc",
"IGT_SimpleTilesCalc"
],
{
@@ -2063,6 +2090,22 @@
"title_aux": "comfyui-HandDetect"
}
],
"https://github.com/Isi-dev/ComfyUI_DeleteModelPassthrough_ExecutionFlowControl": [
[
"ControlledCLIPTextEncode",
"ControlledControlNetLoader",
"ControlledModelPatchLoader",
"ControlledUNETLoader",
"ControlledUnetLoaderGGUF",
"ControlledVAELoader",
"DeleteModelPassthrough",
"DeleteModelPassthroughLight",
"SmartClipDeleter"
],
{
"title_aux": "ComfyUI_DeleteModelPassthrough_ExecutionFlowControl [WIP]"
}
],
"https://github.com/IvanZhd/comfyui-codeformer": [
[
"RedBeanie_CustomImageInverter"
@@ -2200,6 +2243,18 @@
"title_aux": "ComfyUI-Arduino [WIP]"
}
],
"https://github.com/K1maran/ComfyUI-Kimaran": [
[
"EmptyLatentImagePresetsAIO",
"EmptyLatentImagePresetsFLUX",
"EmptyLatentImagePresetsQWEN",
"EmptyLatentImagePresetsSD15",
"KSamplerSetup"
],
{
"title_aux": "ComfyUI-Kimaran"
}
],
"https://github.com/KERRY-YUAN/ComfyUI_Python_Executor": [
[
"NodePython"
@@ -2212,7 +2267,8 @@
[
"LoadFromUrl",
"S3UploadPresigned",
"SaveImageToDisk"
"SaveImageToDisk",
"WeaverAnimator"
],
{
"title_aux": "ComfyUI-Easy-s3"
@@ -2384,18 +2440,37 @@
],
"https://github.com/LSDJesus/ComfyUI-Luna-Collection": [
[
"LunaAdvancedUpscaler",
"LunaAssembler",
"LunaBasePrompt",
"LunaCacheManager",
"LunaCheckpointLoader",
"LunaCivitaiBatchScraper",
"LunaCivitaiScraper",
"LunaConditionals",
"LunaConnectionEditor",
"LunaConnectionMatcher",
"LunaConnectionStats",
"LunaDaemonConfig",
"LunaDaemonConfigFromLoaders",
"LunaDaemonModelSwitch",
"LunaDaemonStatus",
"LunaEmbeddingCache",
"LunaEmbeddingManager",
"LunaEmbeddingManagerRandom",
"LunaExpanders",
"LunaExpressionBatchSaver",
"LunaExpressionList",
"LunaExpressionPromptBuilder",
"LunaExpressionSheetSlicer",
"LunaListPreprocessedPrompts",
"LunaLoRALinker",
"LunaLoRARandomizer",
"LunaLoRAStacker",
"LunaLoRAStackerRandom",
"LunaLoadParameters",
"LunaLoadPreprocessedPrompt",
"LunaMediaPipeDetailer",
"LunaLogicResolver",
"LunaModifiers",
"LunaModifyPreprocessedPrompt",
"LunaMultiSaver",
"LunaOptimizedPreprocessedLoader",
@@ -2409,19 +2484,26 @@
"LunaSampler",
"LunaSaveNegativePrompt",
"LunaSelectPromptFolder",
"LunaSimpleUpscaler",
"LunaSharedCLIPEncode",
"LunaSharedCLIPEncodeDual",
"LunaSharedCLIPEncodeSDXL",
"LunaSharedVAEDecode",
"LunaSharedVAEEncode",
"LunaSinglePromptProcessor",
"LunaSmartLoRALinker",
"LunaTextProcessor",
"LunaUnifiedPromptProcessor",
"LunaWildcardBuilder",
"LunaWildcardPromptGenerator",
"LunaYAMLInjector",
"LunaYAMLPathExplorer",
"LunaYAMLWildcard",
"LunaYAMLWildcardBatch",
"LunaYAMLWildcardExplorer",
"Luna_Advanced_Upscaler",
"Luna_Detailer",
"Luna_MediaPipe_Detailer",
"Luna_MediaPipe_Segs",
"Luna_SimpleUpscaler",
"Luna_UltimateSDUpscale",
"Luna_YOLO_Annotation_Exporter",
"luna_image_caption"
"Luna_UltimateSDUpscale"
],
{
"title_aux": "ComfyUI-Pyrite-Core [WIP]"
@@ -2566,6 +2648,20 @@
"title_aux": "ComfyUI-invAIder-Nodes"
}
],
"https://github.com/LvyuanW/ComfyUI-6yuan": [
[
"ColorKMeans",
"CropAlpha",
"RemoveBackground",
"RemoveBackgroundAdvanced",
"ShapeLanguageSummary",
"ShrinkImage",
"StringPreview"
],
{
"title_aux": "ComfyUI-6yuan [WIP]"
}
],
"https://github.com/LyazS/ComfyUI-aznodes": [
[
"CrossFadeImageSequence",
@@ -3347,6 +3443,7 @@
"CAD_Mesh_Gmsh",
"CAD_Mesh_Gmsh_Advanced",
"CAD_Quality_Metrics",
"CAD_Remesh_OCC",
"LoadPoint2CADModel",
"LoadPointCloudXYZ",
"ML_FeatureDetection",
@@ -3368,14 +3465,6 @@
"title_aux": "CADabra [WIP]"
}
],
"https://github.com/PozzettiAndrea/ComfyUI-CameraAnalysis": [
[
"CameraAnalysis"
],
{
"title_aux": "ComfyUI-CameraAnalysis"
}
],
"https://github.com/PozzettiAndrea/ComfyUI-Hunyuan3D-Part": [
[
"ClearAllModelCaches",
@@ -3414,11 +3503,10 @@
"LoadFBXCharacter",
"LoadGVHMRModels",
"LoadSMPL",
"SMPLRetargetToSMPL",
"SMPLToFBX",
"SMPLViewer",
"SMPLtoBVH",
"SMPLtoBVH_NoCollar",
"SMPLtoBVH_TPose",
"SaveSMPL"
],
{
@@ -3434,15 +3522,16 @@
"SAM3DExportPLYBatch",
"SAM3DExtractMesh",
"SAM3DGaussianDecode",
"SAM3DGenerate",
"SAM3DGenerateRGBA",
"SAM3DMeshDecode",
"SAM3DRenderSingle",
"SAM3DSLATGen",
"SAM3DSparseGen",
"SAM3DTextureBake",
"SAM3DVisualizer",
"SAM3D_PreviewPointCloud"
"SAM3D_DepthEstimate",
"SAM3D_PoseOptimization",
"SAM3D_PreviewPointCloud",
"SAM3D_UnloadModel"
],
{
"title_aux": "SAM3DObjects [UNSAFE]"
@@ -3551,6 +3640,7 @@
"https://github.com/Randomwalkforest/Comfyui-Koi-Toolkit": [
[
"AliyunChat",
"AliyunVLChat",
"Florence2CoordinateExtractor",
"Florence2JsonShow",
"ImageDesaturateEdgeBinarize",
@@ -3561,6 +3651,7 @@
"PreviewSVG",
"SVGToImage",
"SaveSVG",
"SearchIconFreepik",
"SimpleImageStitch",
"TextSplitLines",
"imageStitchForICImproved",
@@ -4233,9 +4324,7 @@
"Color Cast Detector",
"Color Harmony Analyzer",
"Color Temperature Estimator",
"ColorTemperatureEstimator",
"Contrast Analysis",
"ContrastAnalysis",
"Defocus Analysis",
"Edge Density Analysis",
"Entropy Analysis",
@@ -4723,6 +4812,7 @@
"PipemindFlux2MAspectRatio",
"PipemindLoraLoader",
"PipemindMultilineTextInput",
"PipemindQwenAspectRatio",
"PipemindSDXL15AspectRatio",
"PipemindSaveImageWTxt",
"PipemindShowText",
@@ -5349,6 +5439,19 @@
"title_aux": "BigModelPipe [WIP]"
}
],
"https://github.com/barakapa/barakapa-nodes": [
[
"brkp_ConcatenateString",
"brkp_ConvertToString",
"brkp_CountTokens",
"brkp_DirectoryImageCounter",
"brkp_SaveImage",
"brkp_SaveWorkflow"
],
{
"title_aux": "barakapa-nodes"
}
],
"https://github.com/basenc/Comfyui-EnvVarNode": [
[
"EnvVarNode"
@@ -5762,22 +5865,6 @@
"title_aux": "ComfyUI-Pixelsmith [WIP]"
}
],
"https://github.com/cedarconnor/ComfyUI-GEN3C-Gsplat": [
[
"CosmosGen3CImageToVideoLatent",
"CosmosGen3CLatentVideo",
"CosmosImageToVideoLatent",
"CosmosPredict2ImageToVideoLatent",
"EmptyCosmosLatentVideo",
"Gen3CDiffusion",
"Gen3C_Export",
"Gen3C_PoseRecovery",
"Gen3C_Quality"
],
{
"title_aux": "ComfyUI-GEN3C-Gsplat [WIP]"
}
],
"https://github.com/cedarconnor/ComfyUI-HunyuanWorld-Mirror": [
[
"HWMInference",
@@ -5800,6 +5887,7 @@
[
"AdaptiveTessellate",
"BarycentricWarp",
"BidirectionalFlowExtractor",
"DepthEstimator",
"FlowSRRefine",
"FlowToSTMap",
@@ -6052,6 +6140,7 @@
"EmptyAudio",
"EmptyChromaRadianceLatentImage",
"EmptyCosmosLatentVideo",
"EmptyFlux2LatentImage",
"EmptyHunyuanImageLatent",
"EmptyHunyuanLatentVideo",
"EmptyImage",
@@ -6066,13 +6155,14 @@
"ExtendIntermediateSigmas",
"FeatherMask",
"FlipSigmas",
"Flux2ProImageNode",
"Flux2Scheduler",
"FluxDisableGuidance",
"FluxGuidance",
"FluxKontextImageScale",
"FluxKontextMultiReferenceLatentMethod",
"FluxProExpandNode",
"FluxProFillNode",
"FluxProImageNode",
"FluxProUltraImageNode",
"FreSca",
"FreeU",
@@ -6176,14 +6266,14 @@
"LatentUpscaleModelLoader",
"LazyCache",
"Load3D",
"Load3DAnimation",
"LoadAudio",
"LoadImage",
"LoadImageDataSetFromFolder",
"LoadImageMask",
"LoadImageOutput",
"LoadImageSetFromFolderNode",
"LoadImageTextSetFromFolderNode",
"LoadImageTextDataSetFromFolder",
"LoadLatent",
"LoadTrainingDataset",
"LoadVideo",
"LoraLoader",
"LoraLoaderModelOnly",
@@ -6200,6 +6290,7 @@
"LumaReferenceNode",
"LumaVideoNode",
"Mahiro",
"MakeTrainingDataset",
"MaskComposite",
"MaskPreview",
"MaskToImage",
@@ -6269,7 +6360,6 @@
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"Preview3D",
"Preview3DAnimation",
"PreviewAny",
"PreviewAudio",
"PreviewImage",
@@ -6340,10 +6430,13 @@
"SaveAudioOpus",
"SaveGLB",
"SaveImage",
"SaveImageDataSetToFolder",
"SaveImageTextDataSetToFolder",
"SaveImageWebsocket",
"SaveLatent",
"SaveLoRANode",
"SaveLoRA",
"SaveSVGNode",
"SaveTrainingDataset",
"SaveVideo",
"SaveWEBM",
"ScaleROPE",
@@ -6351,6 +6444,7 @@
"SetFirstSigma",
"SetLatentNoiseMask",
"SetUnionControlNetType",
"ShuffleImageTextDataset",
"SkipLayerGuidanceDiT",
"SkipLayerGuidanceDiTSimple",
"SkipLayerGuidanceSD3",
@@ -6475,6 +6569,7 @@
"VAELoader",
"VAESave",
"VPScheduler",
"Veo3FirstLastFrameNode",
"VeoVideoGenerationNode",
"VideoLinearCFGGuidance",
"VideoTriangleCFGGuidance",
@@ -7252,14 +7347,15 @@
[
"FBTextEncodeQwenImageEditPlus",
"OpaqueAlpha",
"QwenAspectRatio",
"SAMPreprocessNHWC",
"SaveScene",
"SceneCreate",
"SceneInput",
"SceneOutput",
"SceneSelect",
"SceneUpdate",
"SceneView",
"SelectScene",
"SubdirLister",
"TailEnhancePro",
"TailSplit"
@@ -7512,7 +7608,6 @@
],
"https://github.com/grinlau18/ComfyUI_XISER_Nodes": [
[
"CreatePointsString",
"XISER_Canvas",
"XIS_BooleanSwitch",
"XIS_CanvasConfig",
@@ -7539,13 +7634,14 @@
"XIS_ImageAdjustAndBlend",
"XIS_ImageManager",
"XIS_ImageMaskMirror",
"XIS_ImageStitcher",
"XIS_ImagePuzzle",
"XIS_ImageSwitch",
"XIS_IntSwitch",
"XIS_InvertMask",
"XIS_IsThereAnyData",
"XIS_KSamplerSettingsNode",
"XIS_KSamplerSettingsUnpackNode",
"XIS_LLMOrchestrator",
"XIS_Label",
"XIS_LatentBlendNode",
"XIS_LoadImage",
@@ -7567,7 +7663,8 @@
"XIS_SetColor",
"XIS_ShapeAndText",
"XIS_ShapeData",
"XIS_StringSwitch"
"XIS_StringSwitch",
"XIS_UnpackImages"
],
{
"title_aux": "Xiser_Nodes [WIP]"
@@ -7960,6 +8057,7 @@
"Alta:AddInt(Math)",
"Alta:AudioDenoise",
"Alta:BuildFilePath",
"Alta:CompareFolders(File)",
"Alta:DeleteAudioFromMemory",
"Alta:DeleteFile(Util)",
"Alta:FileDownloader",
@@ -8381,6 +8479,20 @@
"title_aux": "ComfyUI_HelpfulNodes"
}
],
"https://github.com/jorin91/ComfyUI-JSG-Utils": [
[
"JSGDeleteFilePassAny",
"JSGDeleteFilePassImage",
"JSGDeleteFilePassString",
"JSGFindImagePathsRecursive",
"JSGFindImagesRecursiveList",
"JSGLoadImageFromPath",
"JSGParsePath"
],
{
"title_aux": "ComfyUI-JSG-Utils [UNSAFE]"
}
],
"https://github.com/jpwgad/jpwgad-comfy": [
[
"AutoSelector",
@@ -8442,6 +8554,18 @@
"title_aux": "ComfyUI Frontend Vue Basic [WIP]"
}
],
"https://github.com/judian17/ComfyUI-MIDI-3D": [
[
"MIDI3DAllPassRenderer",
"MIDI3DInstanceCropper",
"MIDI3DLoader",
"MIDI3DSampler",
"MIDI3DTextureBaker"
],
{
"title_aux": "ComfyUI-MIDI-3D [WIP]"
}
],
"https://github.com/junhe421/comfyui_batch_image_processor": [
[
"BatchImageDifferenceToPromptFiles",
@@ -8754,10 +8878,24 @@
],
"https://github.com/kongds1999/ComfyUI_was_image": [
[
"BBoxToCoco",
"BBoxToXYWH",
"BBoxVisNode",
"Check Person In Text",
"CocoToNumber",
"ConvertGrayToImage",
"ConvertToDict",
"CustomUltralyticsModelLoader",
"Generate Color Palette",
"Replace Color By Palette"
"GetImageSize",
"ImageResizeAdvanced",
"Replace Color By Palette",
"UltralyticsCheckCategory",
"UltralyticsInference",
"UltralyticsListIndexToNames",
"UltralyticsModelLoader",
"UltralyticsVisualization",
"ViewText"
],
{
"title_aux": "ComfyUI_was_image"
@@ -9209,7 +9347,7 @@
"LF_BlurImages",
"LF_Boolean",
"LF_Brightness",
"LF_CaptionImageWD14",
"LF_CaptionImageWD14Onnx",
"LF_CharacterImpersonator",
"LF_CheckpointSelector",
"LF_CivitAIMetadataSetup",
@@ -9264,6 +9402,7 @@
"LF_LoadLoraTags",
"LF_LoadMetadata",
"LF_LoadWD14Model",
"LF_LoadWD14Onnx",
"LF_LoraAndEmbeddingSelector",
"LF_LoraSelector",
"LF_MarkdownDocGenerator",
@@ -9452,6 +9591,22 @@
"title_aux": "comfyui_cmdtls [UNSAFE]"
}
],
"https://github.com/martinken/ComfyUI-KMNodes": [
[
"KM_Aspect_Ratio_Selector",
"KM_Color_Correct",
"KM_Downscale_Image",
"KM_Merge_Images",
"KM_Safe_Mask_Bounds",
"KM_Safe_SEGS_Bounds",
"KM_Video_Image_Color_Match",
"KM_WanVideoToVideo",
"WanImageToVideo"
],
{
"title_aux": "ComfyUI-KMNodes"
}
],
"https://github.com/maruhidd/ComfyUI_Transparent-Background": [
[
"FillTransparentNode",
@@ -9678,11 +9833,11 @@
],
"https://github.com/mrCodinghero/ComfyUI-Codinghero": [
[
"Basic Settings",
"Image Size Calculator",
"Model Selector",
"Settings",
"Upscale Settings Calculator",
"Video Settings"
"Upscale Settings Calculator"
],
{
"title_aux": "ComfyUI-Codinghero"
@@ -9908,6 +10063,14 @@
"title_aux": "comfyui-samenodes"
}
],
"https://github.com/nohikomiso/ComfyUI-ImageFolderPicker": [
[
"ImageFolderPicker"
],
{
"title_aux": "ComfyUI-ImageFolderPicker [UNSAFE]"
}
],
"https://github.com/nomcycle/ComfyUI_Cluster": [
[
"ClusterBroadcastLoadedImage",
@@ -10344,7 +10507,9 @@
],
"https://github.com/punicfaith/ComfyUI-GoogleAIStudio": [
[
"GoogleGeminiPrompt"
"BatchImageNormalizer",
"GoogleGeminiPrompt",
"NanobananaNode"
],
{
"title_aux": "ComfyUI-GoogleAIStudio"
@@ -10909,6 +11074,15 @@
"title_aux": "WIP Conditioning Toolkit [UNSAFE]"
}
],
"https://github.com/silveroxides/ComfyUI_LoHalo": [
[
"LohaloHighFidelityScaler",
"LohaloKernelScalingNode"
],
{
"title_aux": "ComfyUI_LoHalo"
}
],
"https://github.com/silveroxides/ComfyUI_LogicMath": [
[
"LogicAND",
@@ -10967,6 +11141,7 @@
"https://github.com/silveroxides/ComfyUI_SamplingUtils": [
[
"GetJsonKeyValue",
"Image_Color_Noise",
"SamplingParameters"
],
{
@@ -11167,12 +11342,16 @@
"https://github.com/stalkervr/comfyui-custom-path-nodes": [
[
"AnyCollector",
"AutoAspectRatioAdjustFixer",
"BatchImageCrop",
"ContextPipeIn",
"ContextPipeOut",
"ContextPipeReroute",
"DataFileLoader",
"ImageAspectFixer",
"ImageGridCropper",
"JsonFieldRemover",
"JsonFieldReplaceAdvanced",
"JsonFieldValueExtractor",
"ListItemExtractor",
"ListToString",
@@ -11200,6 +11379,14 @@
"title_aux": "ComfyUI-Audio-Subtitle [WIP]"
}
],
"https://github.com/starsFriday/ComfyUI-Tracker-Person": [
[
"YoloTrackNode"
],
{
"title_aux": "ComfyUI-Tracker-Person [WIP]"
}
],
"https://github.com/steelan9199/ComfyUI-Teeth": [
[
"teeth FindContours",
@@ -11217,6 +11404,14 @@
"title_aux": "ComfyUI-Teeth [UNSAFE]"
}
],
"https://github.com/stevanisya/comfyui_txt_selector": [
[
"TextSelector"
],
{
"title_aux": "comfyui_txt_selector [WIP]"
}
],
"https://github.com/sthao42/comfyui-melodkeet-tts": [
[
"MelodkeetTTS"
@@ -11739,6 +11934,14 @@
"title_aux": "ComfyUI-AllergicPack [WIP]"
}
],
"https://github.com/vadimcro/External-Image-Revised-with-MASK": [
[
"ComfyUIDeployExternalImageRevised"
],
{
"title_aux": "External-Image-Revised-with-MASK"
}
],
"https://github.com/vadimcro/string_by_index": [
[
"StringByIndex"
@@ -11924,13 +12127,16 @@
[
"ConditionalTagProcessorNode",
"LoadTextFile",
"ParsePromptCustom",
"ParsePromptFull",
"ProcessWildcard",
"PromptsFromTextbox",
"RemoveComments",
"ReplaceVariables",
"ReplaceVariablesAndProcessWildcard",
"SaveTextFile",
"StringsFromTextbox"
"StringsFromTextbox",
"StringsToList"
],
{
"title_aux": "ComfyUI-Text-Utility [UNSAFE]"
@@ -11954,6 +12160,15 @@
"title_aux": "FindBrightestSpot [WIP]"
}
],
"https://github.com/wciq1208/even-comfyui-plugin": [
[
"Gemini",
"NanoBanana"
],
{
"title_aux": "even-comfyui-plugin"
}
],
"https://github.com/whmc76/ComfyUI-AudioSuiteAdvanced": [
[
"AudioConcatenateFree",
@@ -12220,7 +12435,6 @@
"FloatNode",
"FloatToIntNode",
"IfNode",
"ImageResizeNode",
"ImageSizeNode",
"ImageToBase64Node",
"ImageToVideoNode",
@@ -12238,6 +12452,9 @@
"LoraLoaderDualNode",
"MaxNode",
"MinNode",
"ModulationDirectionNode",
"ModulationNode",
"MultiplyIntNode",
"MultiplyNode",
"NumberNode",
"OutpaintingPadNode",
@@ -12246,6 +12463,7 @@
"PrintImageNode",
"PythonScriptNode",
"RangeStringNode",
"ResizeImageNode",
"SaveImageToDirectoryNode",
"SaveStringToDirectoryNode",
"ShowStringNode",

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,95 @@
{
"custom_nodes": [
{
"author": "PozzettiAndrea",
"title": "ComfyUI-CameraAnalysis [REMOVED]",
"reference": "https://github.com/PozzettiAndrea/ComfyUI-CameraAnalysis",
"files": [
"https://github.com/PozzettiAndrea/ComfyUI-CameraAnalysis"
],
"install_type": "git-clone",
"description": "Extracts camera intrinsic parameters from image EXIF data."
},
{
"author": "fuzr0dah",
"title": "comfyui-sceneassembly [REMOVED]",
"reference": "https://github.com/fuzr0dah/comfyui-sceneassembly",
"files": [
"https://github.com/fuzr0dah/comfyui-sceneassembly"
],
"install_type": "git-clone",
"description": "A bunch of nodes I created that I also find useful."
},
{
"author": "rslosch",
"title": "ComfyUI-EZ_Prompts [REMOVED]",
"reference": "https://github.com/rslosch/ComfyUI-EZ_Prompts",
"files": [
"https://github.com/rslosch/ComfyUI-EZ_Prompts"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node extension that provides easy-to-use prompt templates and wildcards for AI image generation."
},
{
"author": "hvppycoding",
"title": "hvppyflow [REMOVED]",
"reference": "https://github.com/hvppycoding/hvppyflow",
"files": [
"https://github.com/hvppycoding/hvppyflow"
],
"install_type": "git-clone",
"description": "ComfyUI nodes for Automated Workflow"
},
{
"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]",

View File

@@ -1,5 +1,463 @@
{
"custom_nodes": [
{
"author": "HAL-XP",
"title": "HALXP-Comfy",
"reference": "https://github.com/hal-xp/halxp-comfy",
"files": [
"https://github.com/hal-xp/halxp-comfy"
],
"install_type": "git-clone",
"description": "A UI suite for ComfyUI including Focus mode and layout enhancements."
},
{
"author": "BuddyBytes",
"title": "Smart Resolution Toolkit",
"reference": "https://github.com/buddy-bytes/ComfyUI-SmartResolutionToolkit",
"files": [
"https://github.com/buddy-bytes/ComfyUI-SmartResolutionToolkit"
],
"install_type": "git-clone",
"description": "Resolution picker and latent generator for ComfyUI. Select presets like HD, FullHD, 2K, 4K, 8K with aspect ratios (1:1, 9:16, 4:5, 21:9 etc.) via dropdowns. Automatically snaps width/height to latent-safe multiples of 64. Ideal for EmptyLatentImage, AnimateDiff, ControlNet, video formats, and KSampler workflows. Outputs clean INT values or ready-to-use LATENT tensor."
},
{
"author": "Bharanidharan",
"title": "iSeeBetter Node for ComfyUI",
"reference": "https://github.com/llikethat/ComfyUI-iseebetter",
"files": [
"https://github.com/llikethat/ComfyUI-iseebetter"
],
"install_type": "git-clone",
"description": "Custom Node to implement iSeeBetter upscaling method."
},
{
"author": "Pondowner857",
"title": "ComfyUI Remote Workflow Executor",
"id": "comfy_Pond_Nodes_V2",
"reference": "https://github.com/Pondowner857/comfy_Pond_Nodes_V2",
"files": [
"https://github.com/Pondowner857/comfy_Pond_Nodes_V2"
],
"install_type": "git-clone",
"description": "Remote workflow executor node - Execute workflows on remote ComfyUI servers. Supports image/text/audio/video input and output."
},
{
"author": "luxdelux7",
"title": "Forbidden Vision",
"reference": "https://github.com/luxdelux7/ComfyUI-Forbidden-Vision",
"files": [
"https://github.com/luxdelux7/ComfyUI-Forbidden-Vision"
],
"install_type": "git-clone",
"description": "Custom face detection and segmentation for ComfyUI with automatic face fixing, intelligent color grading, and iterative refinement. Custom-trained models optimized for realistic, anime, and NSFW content.",
"nodename_pattern": "ForbiddenVision"
},
{
"author": "Kazama-Suichiku",
"title": "ComfyUI-Meshy",
"id": "comfyui-meshy",
"reference": "https://github.com/Kazama-Suichiku/ComfyUI-Meshy",
"files": [
"https://github.com/Kazama-Suichiku/ComfyUI-Meshy"
],
"install_type": "git-clone",
"description": "ComfyUI-Meshy is a 3D generation extension based on Meshy AI API. It provides Text-to-3D and Image-to-3D capabilities within ComfyUI, allowing you to generate 3D models directly from text prompts or images. Supports multiple AI models (Meshy-4, Meshy-5, Meshy-6) with customizable topology, polygon count, and PBR settings."
},
{
"author": "ah-kun",
"title": "ComfyUI-FailSafe-Translate-Node",
"reference": "https://github.com/ah-kun/ComfyUI-FailSafe-Translate-Node",
"files": [
"https://github.com/ah-kun/ComfyUI-FailSafe-Translate-Node"
],
"install_type": "git-clone",
"description": "Fail-safe Google Translate prompt node for ComfyUI (retry + caching)."
},
{
"author": "princepainter",
"title": "PainterFLF2V - First/Last Frame Video Enhancer",
"id": "painterflf2v",
"reference": "https://github.com/princepainter/Comfyui-PainterFLF2V",
"files": [
"https://github.com/princepainter/Comfyui-PainterFLF2V"
],
"install_type": "git-clone",
"description": "Enhance first and last frames for smooth video loop generation in ComfyUI. Based on WAN Video workflow.",
"tags": ["video", "frame", "loop", "workflow"]
},
{
"author": "EnragedAntelope",
"title": "comfyui-sdnq",
"reference": "https://github.com/EnragedAntelope/comfyui-sdnq",
"files": [
"https://github.com/EnragedAntelope/comfyui-sdnq"
],
"install_type": "git-clone",
"description": "ComfyUI custom node pack for loading SDNQ quantized models"
},
{
"author": "geroldmeisinger",
"title": "ComfyUI-outputlists-combiner",
"reference": "https://github.com/geroldmeisinger/ComfyUI-outputlists-combiner",
"files": [
"https://github.com/geroldmeisinger/ComfyUI-outputlists-combiner"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes to create output lists with strings and numbers, make combinations of them, and help with XYZ-Gridplots"
},
{
"author": "judian17",
"title": "ComfyUI-multiple-inputs",
"reference": "https://github.com/judian17/ComfyUI-multiple-inputs",
"files": [
"https://github.com/judian17/ComfyUI-multiple-inputs"
],
"install_type": "git-clone",
"description": "A collection of utility nodes for ComfyUI, focusing on batch processing, stitching, and visualization."
},
{
"author": "erosDiffusion",
"title": "ComfyUI-ZImageDit",
"reference": "https://github.com/erosDiffusion/ComfyUI-ZImageDit",
"files": [
"https://github.com/erosDiffusion/ComfyUI-ZImageDit"
],
"install_type": "git-clone",
"description": "Unofficial diffusers integration of the official SDNQ pipeline to run in ComfyUI. (Description by CC)"
},
{
"author": "jrabek",
"title": "BokehDiffusionComfyUI",
"reference": "https://github.com/jrabek/BokehDiffusionComfyUI",
"files": [
"https://github.com/jrabek/BokehDiffusionComfyUI"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for Bokeh Diffusion - Defocus Blur Control in Text-to-Image Diffusion Models."
},
{
"author": "marduk191",
"title": "comfyui_qwen_runninghub",
"reference": "https://github.com/marduk191/comfyui_qwen_runninghub",
"files": [
"https://github.com/marduk191/comfyui_qwen_runninghub"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for integrating RunningHub's AI image and video generation services into workflows. (Description by CC)"
},
{
"author": "keghoang",
"title": "ComfyUI-Charon",
"reference": "https://github.com/keghoang/ComfyUI-Charon",
"files": [
"https://github.com/keghoang/ComfyUI-Charon"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes for CHARON auto-alignment and DA3 camera export."
},
{
"author": "mobcat40",
"title": "ComfyUI-PromptChain",
"reference": "https://github.com/mobcat40/ComfyUI-PromptChain",
"files": [
"https://github.com/mobcat40/ComfyUI-PromptChain"
],
"install_type": "git-clone",
"description": "A visual tool for prompt randomization and advanced combinations inside of your ComfyUI workflows."
},
{
"author": "tpc2233",
"title": "ComfyUI-Z-Image-Turbo",
"reference": "https://github.com/tpc2233/ComfyUI-Z-Image-Turbo",
"files": [
"https://github.com/tpc2233/ComfyUI-Z-Image-Turbo"
],
"install_type": "git-clone",
"description": "Comfy UI nodes for Z-Image-Turbo to run native weights with automatic model downloading and support for 2048x2048 resolution. (Description by CC)"
},
{
"author": "Rathius-Saranoth",
"title": "Rathius_ComfyNodes",
"reference": "https://github.com/Rathius-Saranoth/Rathius_ComfyNodes",
"files": [
"https://github.com/Rathius-Saranoth/Rathius_ComfyNodes"
],
"install_type": "git-clone",
"description": "Collection of quality-of-life ComfyUI nodes including a text file loader for parsing descriptions and managing prompts without manual copy-paste. (Description by CC)"
},
{
"author": "princepainter",
"title": "Comfyui-PainterVRAM",
"reference": "https://github.com/princepainter/Comfyui-PainterVRAM",
"files": [
"https://github.com/princepainter/Comfyui-PainterVRAM"
],
"install_type": "git-clone",
"description": "ComfyUI node that reserves GPU VRAM before workflow execution to prevent OOM crashes with manual or auto mode options."
},
{
"author": "zhanglongxiao111",
"title": "Comfyui-geminiapi",
"reference": "https://github.com/zhanglongxiao111/Comfyui-geminiapi",
"files": [
"https://github.com/zhanglongxiao111/Comfyui-geminiapi"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for integrating multiple external APIs including Gemini, OpenAI, Replicate, and ElevenLabs directly into local workflows. (Description by CC)"
},
{
"author": "MushroomFleet",
"title": "ComfyUI-FLUX2-JSON",
"reference": "https://github.com/MushroomFleet/ComfyUI-FLUX2-JSON",
"files": [
"https://github.com/MushroomFleet/ComfyUI-FLUX2-JSON"
],
"install_type": "git-clone",
"description": "A comprehensive suite of custom nodes for building structured JSON prompts for FLUX.2 image generation with precision and control."
},
{
"author": "agavesunset",
"title": "AgaveLogicCounter",
"reference": "https://github.com/agavesunset/AgaveLogicCounter",
"files": [
"https://github.com/agavesunset/AgaveLogicCounter"
],
"install_type": "git-clone",
"description": "Solves the complex 'For-Loop' logic in ComfyUI. Perfect for controlling multi-subject vs. multi-scene batch workflows."
},
{
"author": "idvdii",
"title": "ComfyUI-DvD-LoraTriggerwordsManager",
"reference": "https://github.com/idvdii/ComfyUI-DvD-LoraTriggerwordsManager",
"files": [
"https://github.com/idvdii/ComfyUI-DvD-LoraTriggerwordsManager"
],
"install_type": "git-clone",
"description": "Professional ComfyUI custom nodes for managing LoRA trigger words, with auto-read, smart lookup via Civitai, editing, and WebUI-compatible JSON format support. (Description by CC)"
},
{
"author": "Rzgar Espo",
"title": "ComfyUI Qwen Image Size Picker",
"id": "QwenImg-latent",
"reference": "https://github.com/rzgarespo/ComfyUI-qwen-image-size-picker",
"files": [
"https://github.com/rzgarespo/ComfyUI-qwen-image-size-picker"
],
"install_type": "git-clone",
"description": "An empty latent size picker with support for Qwen Image, SDXL, and Flux models."
},
{
"author": "obvirm",
"title": "ComfyUI-WhisperXX",
"reference": "https://github.com/obvirm/ComfyUI-WhisperXX",
"files": [
"https://github.com/obvirm/ComfyUI-WhisperXX"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that provides advanced transcription, alignment, and diarization capabilities using the WhisperX library."
},
{
"author": "tuki0918",
"title": "ComfyUI_Cooldown_Node",
"reference": "https://github.com/tuki0918/ComfyUI_Cooldown_Node",
"files": [
"https://github.com/tuki0918/ComfyUI_Cooldown_Node"
],
"install_type": "git-clone",
"description": "Provides custom nodes with a cooldown feature for ComfyUI. (Description by CC)"
},
{
"author": "akawana",
"title": "Utils Extra",
"reference": "https://github.com/akawana/ComfyUI-Utils-extra",
"files": [
"https://github.com/akawana/ComfyUI-Utils-extra"
],
"install_type": "git-clone",
"description": "Utility tools. Index Multiple is used for expanding multiple values from a list, IsOneOfGroupsActive to identify groups state, RepeatGroupState group enable/disable like rg but without connection etc.",
"tags": ["utility", "list", "batch"]
},
{
"author": "huygiatrng",
"title": "Facefusion_comfyui",
"reference": "https://github.com/huygiatrng/Facefusion_comfyui",
"files": [
"https://github.com/huygiatrng/Facefusion_comfyui"
],
"install_type": "git-clone",
"description": "Advanced face swapping for ComfyUI with local ONNX inference - no API required!"
},
{
"author": "Ada123-a",
"title": "ComfyUI-Kandinsky",
"reference": "https://github.com/Ada123-a/ComfyUI-Kandinsky",
"files": [
"https://github.com/Ada123-a/ComfyUI-Kandinsky"
],
"install_type": "git-clone",
"description": "Kandinsky 2/20B ComfyUI support with FP8/GGUF/blockswap support."
},
{
"author": "chchchadzilla",
"title": "ComfyUI-ChomfyNodes",
"reference": "https://github.com/chchchadzilla/ComfyUI-ChomfyNodes",
"files": [
"https://github.com/chchchadzilla/ComfyUI-ChomfyNodes"
],
"install_type": "git-clone",
"description": "A professional suite of utility nodes for ComfyUI, featuring forensic logging, massive wildcard control, universal noise injection, and persistent counters."
},
{
"author": "nitingrg",
"title": "comfyui-ntools",
"reference": "https://github.com/nitingrg/comfyui-ntools",
"files": [
"https://github.com/nitingrg/comfyui-ntools"
],
"install_type": "git-clone",
"description": "Essential little utilities that should have been in ComfyUI from day one. (Description by CC)"
},
{
"author": "jav12z",
"title": "ComfyUI-ToyShaders",
"reference": "https://github.com/jav12z/ComfyUI-ToyShaders",
"files": [
"https://github.com/jav12z/ComfyUI-ToyShaders"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that allows you to render GLSL shaders (Shadertoy-style) directly inside your workflows. (Description by CC)"
},
{
"author": "Nynxz",
"title": "ComfyUI-NynxzNodes",
"reference": "https://github.com/Nynxz/ComfyUI-NynxzNodes",
"files": [
"https://github.com/Nynxz/ComfyUI-NynxzNodes"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes providing video comparison utilities, including wipe and fade compare video generation in multiple directions. (Description by CC)"
},
{
"author": "comrender",
"title": "ComfyUI-edge-match-checker",
"reference": "https://github.com/comrender/ComfyUI-edge-match-checker",
"files": [
"https://github.com/comrender/ComfyUI-edge-match-checker"
],
"install_type": "git-clone",
"description": "Node comparing two image masks or images with adjustable overlap threshold (default 95%) for detecting minor shifts and mismatches in proportions, suitable for automated post-processing validation. (Description by CC)"
},
{
"author": "lovisdotio",
"title": "ComfyUI-Replace-First-Frame-Last-Frame",
"reference": "https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame",
"files": [
"https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame"
],
"install_type": "git-clone",
"description": "Replace the first and last frames of an image sequence in ComfyUI. Auto-resizes frames to match video dimensions, handles batches, and adjusts parameters if needed."
},
{
"author": "FuryNocturn",
"title": "ComfyUI-Dummy_Node_Pack",
"reference": "https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack",
"files": [
"https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack"
],
"install_type": "git-clone",
"description": "Custom node pack creating fake/dummy nodes to replace missing, obsolete, or cloud-specific nodes, allowing legacy workflows to load visually without errors while preserving connections. (Description by CC)"
},
{
"author": "yukascomfy",
"title": "ATI_AudioReactive",
"reference": "https://github.com/yukascomfy/ATI_AudioReactive",
"files": [
"https://github.com/yukascomfy/ATI_AudioReactive"
],
"install_type": "git-clone",
"description": "ComfyUI audio-reactive animation node combining RyanOnTheInside's reactive features with Fillip's path animation for creating audio-driven visual animations. (Description by CC)"
},
{
"author": "techzuhaib",
"title": "FaceCLIP-ComfyUI",
"reference": "https://github.com/techzuhaib/FaceCLIP-ComfyUI",
"files": [
"https://github.com/techzuhaib/FaceCLIP-ComfyUI"
],
"install_type": "git-clone",
"description": "FaceCLIP nodes for ComfyUI providing joint embeddings from aligned face images plus text prompts, and identity-preserving image synthesis using fine-tuned SDXL UNet. (Description by CC)"
},
{
"author": "Windecay",
"title": "ComfyUI_Dynamic-RAMCache",
"reference": "https://github.com/Windecay/ComfyUI_Dynamic-RAMCache",
"files": [
"https://github.com/Windecay/ComfyUI_Dynamic-RAMCache"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that dynamically manages RAM usage by intelligently controlling cache purging based on available system memory."
},
{
"author": "tuki0918",
"title": "comfyui-image-expand-nodes",
"reference": "https://github.com/tuki0918/comfyui-image-expand-nodes",
"files": [
"https://github.com/tuki0918/comfyui-image-expand-nodes"
],
"install_type": "git-clone",
"description": "Custom nodes for ComfyUI to expand images with noise for outpainting or inpainting purposes. This allows for seamless image extension in any direction."
},
{
"author": "tuki0918",
"title": "comfyui-image-tiled-nodes",
"reference": "https://github.com/tuki0918/comfyui-image-tiled-nodes",
"files": [
"https://github.com/tuki0918/comfyui-image-tiled-nodes"
],
"install_type": "git-clone",
"description": "Custom ComfyUI nodes that split large images into overlapping tiles for processing and merge them back seamlessly with feathering blending. (Description by CC)"
},
{
"author": "NeoDroleDeGueule",
"title": "NDDG_Great_Nodes",
"reference": "https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes",
"files": [
"https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes"
],
"install_type": "git-clone",
"description": "NDDG Great Nodes - ComfyUI custom nodes featuring Great Conditioning Modifier with advanced semantic drift, token dropout, gradient amplification and other conceptual manipulation tools. (Description by CC)"
},
{
"author": "EnragedAntelope",
"title": "ComfyUI_EasyRegion",
"reference": "https://github.com/EnragedAntelope/ComfyUI_EasyRegion",
"files": [
"https://github.com/EnragedAntelope/ComfyUI_EasyRegion"
],
"install_type": "git-clone",
"description": "Control different parts of your image with separate prompts using visual box drawing."
},
{
"author": "aining2022",
"title": "ComfyUI_Swwan",
"reference": "https://github.com/aining2022/ComfyUI_Swwan",
"files": [
"https://github.com/aining2022/ComfyUI_Swwan"
],
"install_type": "git-clone",
"description": "Collection of image processing utility nodes for ComfyUI including intelligent cropping, aspect ratio scaling, and crop box restoration capabilities. (Description by CC)"
},
{
"author": "brucew4yn3rp",
"title": "Vintage Effect",
"id": "VintageEffect",
"reference": "https://github.com/brucew4yn3rp/ComfyUI_VintageEffect",
"files": [
"https://github.com/brucew4yn3rp/ComfyUI_VintageEffect"
],
"install_type": "git-clone",
"description": "ComfyUI node that applies vintage/retro effects through JPG compression, color grading, film grain, vignette, and more to emulate more realistic photo aesthetics."
},
{
"title": "Download Tools for ComfyUI",
"reference": "https://github.com/EricRollei/Download_Tools",
@@ -271,498 +729,6 @@
],
"install_type": "git-clone",
"description": "ComfyUI integration for Meta's SAM3 model enabling open-vocabulary image segmentation using natural language text prompts, with automatic model download, geometric refinement, and flexible confidence thresholds."
},
{
"author": "wwzhifeng",
"title": "comfyui-jsonprompt",
"reference": "https://github.com/wwzhifeng/comfyui-jsonprompt",
"files": [
"https://github.com/wwzhifeng/comfyui-jsonprompt"
],
"install_type": "git-clone",
"description": "Custom ComfyUI node that expands structured JSON text into standard prompts for use with models like Gemini, Flux, OpenAI, and Sora. (Description by CC)"
},
{
"author": "StarIICraft",
"title": "ComfyUI-Simple-Selector",
"reference": "https://github.com/StarIICraft/ComfyUI-Simple-Selector",
"files": [
"https://github.com/StarIICraft/ComfyUI-Simple-Selector"
],
"install_type": "git-clone",
"description": "Logic control node with 5 universal input ports that checks connections in reverse priority order and outputs the index of the first valid active input, with support for muted nodes and any data type."
},
{
"author": "fr0nky0ng",
"title": "ComfyUI-JSON-Prompt",
"reference": "https://github.com/fr0nky0ng/ComfyUI-JSON-Prompt",
"files": [
"https://github.com/fr0nky0ng/ComfyUI-JSON-Prompt"
],
"install_type": "git-clone",
"description": "Custom node for ComfyUI that generates JSON prompts from natural language descriptions to improve text-to-image generation quality. Supports local LLM integration via Ollama or Google Gemini API."
},
{
"author": "EricRollei",
"title": "Eric_Image_Processing_Nodes",
"reference": "https://github.com/EricRollei/Eric_Image_Processing_Nodes",
"files": [
"https://github.com/EricRollei/Eric_Image_Processing_Nodes"
],
"install_type": "git-clone",
"description": "A comprehensive collection of advanced image processing nodes for ComfyUI, featuring state-of-the-art denoising, enhancement, and restoration techniques with GPU acceleration and specialized film grain processing."
},
{
"author": "huyl3-cpu",
"title": "comfyui-huyl2-nodes",
"reference": "https://github.com/huyl3-cpu/comfyui-sortlist",
"files": [
"https://github.com/huyl3-cpu/comfyui-sortlist"
],
"install_type": "git-clone",
"description": "Custom utility nodes for ComfyUI by huyl2 (sort list v2, etc.)"
},
{
"author": "7BEII",
"title": "comfyui-PD_comfy-api-node",
"reference": "https://github.com/7BEII/comfyui-PD_comfy-api-node",
"files": [
"https://github.com/7BEII/comfyui-PD_comfy-api-node"
],
"install_type": "git-clone",
"description": "ComfyUI custom node suite integrating multiple AI image generation APIs (Gemini, Flux.1 Kontext Pro) with unified authentication via ComfyUI API Key and real-time cost tracking. (Description by CC)"
},
{
"author": "wallen0322",
"title": "ComfyUI-AE-Animation",
"reference": "https://github.com/wallen0322/ComfyUI-AE-Animation",
"files": [
"https://github.com/wallen0322/ComfyUI-AE-Animation"
],
"install_type": "git-clone",
"description": "After Effects-style animation nodes for ComfyUI with timeline-based keyframe control, layer management, and real-time preview rendering. (Description by CC)"
},
{
"author": "wallen0322",
"title": "ComfyUI-TTM-WAN22",
"reference": "https://github.com/wallen0322/ComfyUI-TTM-WAN22",
"files": [
"https://github.com/wallen0322/ComfyUI-TTM-WAN22"
],
"install_type": "git-clone",
"description": "TTM (Time-to-Move) node for ComfyUI enabling motion-controlled video generation with Wan2.2 models using dual-clock denoising for independent background and object animation control."
},
{
"author": "swan7-py",
"title": "ComfyUI-ImageAlphaCrop",
"reference": "https://github.com/swan7-py/ComfyUI-ImageAlphaCrop",
"files": [
"https://github.com/swan7-py/ComfyUI-ImageAlphaCrop"
],
"install_type": "git-clone",
"description": "ComfyUI plugin for automatically cropping transparent alpha channel borders from images - ideal for processing logos and icons. Supports batch processing with adjustable padding and alpha threshold. (Description by CC)"
},
{
"author": "was",
"title": "WAS LMStudio Easy-Query",
"reference": "https://github.com/WASasquatch/ComfyUI_LMStudio_EasyQuery",
"files": [
"https://github.com/WASasquatch/ComfyUI_LMStudio_EasyQuery"
],
"install_type": "git-clone",
"description": "LM Studio calls with image support and easy task directions."
},
{
"author": "PozzettiAndrea",
"title": "ComfyUI-AnyTop",
"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": "IamCreateAI",
"title": "ComfyUI-Animon",
"reference": "https://github.com/IamCreateAI/ComfyUI-Animon",
"files": [
"https://github.com/IamCreateAI/ComfyUI-Animon"
],
"install_type": "git-clone",
"description": "ComfyUI nodes for [Animon Platform](https://platform.animon.ai/), a comprehensive API service offering a variety of image and video generation models."
},
{
"author": "neonr0",
"title": "ComfyUI-PixelConstrainedScaler",
"reference": "https://github.com/neonr-0/ComfyUI-PixelConstrainedScaler",
"files": [
"https://github.com/neonr-0/ComfyUI-PixelConstrainedScaler"
],
"install_type": "git-clone",
"description": "Smart upscaling with pixel-budget awareness while preserving native aspect ratios. Ideal for Image to Image (I2I) and Image to Video (I2V) workflows!"
},
{
"author": "slahiri",
"title": "ComfyUI-AI-Photography-Toolkit",
"reference": "https://github.com/slahiri/ComfyUI-AI-Photography-Toolkit",
"files": [
"https://github.com/slahiri/ComfyUI-AI-Photography-Toolkit"
],
"install_type": "git-clone",
"description": "A collection of AI-powered photography and image generation tools for ComfyUI, featuring the SID_AIPromptGenerator node that uses Anthropic's Claude API to analyze images and generate optimized prompts for various image generation models."
},
{
"author": "wzyfromhust",
"title": "ComfyUI_SAM2UltraV2",
"reference": "https://github.com/wzyfromhust/ComfyUI_SAM2UltraV2",
"files": [
"https://github.com/wzyfromhust/ComfyUI_SAM2UltraV2"
],
"install_type": "git-clone",
"description": "A fully modular and high-performance implementation of SAM2 (Segment Anything Model 2) for ComfyUI with dual-prompt support, negative point sampling, and upper body segmentation."
},
{
"author": "cedarconnor",
"title": "ComfyUI-DreamCube",
"reference": "https://github.com/cedarconnor/ComfyUI-DreamCube",
"files": [
"https://github.com/cedarconnor/ComfyUI-DreamCube"
],
"install_type": "git-clone",
"description": "360° panoramic depth estimation with multi-plane synchronization for ComfyUI, featuring equirectangular-cubemap transformations, cross-face consistency, and boundary blending for seamless depth maps."
},
{
"author": "dowa-git",
"title": "comfyui-dowa",
"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": "fuselayer",
"title": "comfyui-lite-tracker",
"reference": "https://github.com/fuselayer/comfyui-lite-tracker",
"files": [
"https://github.com/fuselayer/comfyui-lite-tracker"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for LiteTracker, a fast and efficient point tracking model for videos with load model, track, and grid editor nodes."
},
{
"author": "yichengup",
"title": "ComfyUI-YCNodes_Toolkit",
"reference": "https://github.com/yichengup/ComfyUI-YCNodes_Toolkit",
"files": [
"https://github.com/yichengup/ComfyUI-YCNodes_Toolkit"
],
"install_type": "git-clone",
"description": "ComfyUI toolkit with custom nodes for BBox canvas visualization, image brush mask drawing, and coordinate annotation for debugging and external data bridging. (Description by CC)"
},
{
"author": "hua1995116",
"title": "comfyui_goenhance_ffmpeg_wm",
"reference": "https://github.com/hua1995116/comfyui_goenhance_ffmpeg_wm",
"files": [
"https://github.com/hua1995116/comfyui_goenhance_ffmpeg_wm"
],
"install_type": "git-clone",
"description": "ComfyUI custom node for adding watermarks to videos using FFmpeg, with configurable position, opacity, scale, and hardware acceleration support."
},
{
"author": "EricRollei",
"title": "Comfy_HunyuanImage3",
"reference": "https://github.com/EricRollei/Comfy_HunyuanImage3",
"files": [
"https://github.com/EricRollei/Comfy_HunyuanImage3"
],
"install_type": "git-clone",
"description": "Professional ComfyUI custom nodes for Tencent's HunyuanImage-3.0 80B multimodal model, with multiple loading modes, smart memory management, large image generation with CPU offload, and optional prompt enhancement via LLM APIs."
},
{
"author": "Devin Garner",
"title": "ComfyUI_Make-It-Animatable",
"reference": "https://github.com/speige/ComfyUI_Make-It-Animatable",
"files": [
"https://github.com/speige/ComfyUI_Make-It-Animatable"
],
"install_type": "git-clone",
"description": "Auto-Rigging humanoid 3D meshes for Mixamo animations"
},
{
"author": "alexjx",
"title": "ComfyUI-XJNodes",
"reference": "https://github.com/alexjx/ComfyUI-XJNodes",
"files": [
"https://github.com/alexjx/ComfyUI-XJNodes"
],
"install_type": "git-clone",
"description": "A modular collection of custom nodes for ComfyUI, organized by data type for easy navigation and maintenance."
},
{
"author": "princepainter",
"title": "Comfyui-PainterSampler",
"reference": "https://github.com/princepainter/Comfyui-PainterSampler",
"files": [
"https://github.com/princepainter/Comfyui-PainterSampler"
],
"install_type": "git-clone",
"description": "A dual-model image-to-video sampler for ComfyUI that combines high-noise and low-noise models in a single node, replacing two KSamplerAdvanced nodes with zero overhead and bit-identical frame generation. (Description by CC)"
},
{
"author": "comrender",
"title": "ComfyUI-Nano-Banana-Resizer",
"reference": "https://github.com/comrender/ComfyUI-Nano-Banana-Resizer",
"files": [
"https://github.com/comrender/ComfyUI-Nano-Banana-Resizer"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node that automatically calculates optimal output dimensions for Google's Nano Banana image editing model, supporting 22 aspect ratio buckets and ensuring pixel-perfect outputs without shifting or cropping."
},
{
"author": "hum-ma",
"title": "ComfyUI-TiledVaeLite",
"reference": "https://github.com/hum-ma/ComfyUI-TiledVaeLite",
"files": [
"https://github.com/hum-ma/ComfyUI-TiledVaeLite"
],
"install_type": "git-clone",
"description": "A faster tiled VAE decode node for ComfyUI based on LTXV, optimized for low VRAM scenarios with configurable tiling, progress bars, and improved logging for decoding large images and videos."
},
{
"author": "tristanvdb",
"title": "ComfyUI-toolset",
"reference": "https://github.com/tristanvdb/ComfyUI-toolset",
"files": [
"https://github.com/tristanvdb/ComfyUI-toolset"
],
"install_type": "git-clone",
"description": "Human-in-the-loop image selection tool for ComfyUI workflows using a Flask web server, enabling users to pause workflows and interactively select images via a web browser interface."
},
{
"author": "smthemex",
"title": "ComfyUI_DyPE",
"reference": "https://github.com/smthemex/ComfyUI_DyPE",
"files": [
"https://github.com/smthemex/ComfyUI_DyPE"
],
"install_type": "git-clone",
"description": "DyPE: Dynamic Position Extrapolation for Ultra High Resolution Diffusion ,you can use a wrapper node it in comfyUI"
},
{
"author": "ailab",
"title": "ComfyUI-FlashVSR",
"reference": "https://github.com/1038lab/ComfyUI-FlashVSR",
"files": [
"https://github.com/1038lab/ComfyUI-FlashVSR"
],
"install_type": "git-clone",
"description": "Powerful ComfyUI custom node built on the FlashVSR model, facilitating real-time diffusion-based video super-resolution for streaming applications."
},
{
"author": "shammi-g",
"title": "ComfyUI-Simple_Readable_Metadata-SG",
"reference": "https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG",
"files": [
"https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG"
],
"install_type": "git-clone",
"description": "View Image Metadata of ComfyUI as well as of ForgeUI or Automatic 1111 generated images in Easily Readable Format"
},
{
"author": "mister_link",
"title": "Link Comfy Nodes",
"reference": "https://github.com/Mister-Link/link-comfy-nodes",
"files": [
"https://github.com/Mister-Link/link-comfy-nodes"
],
"install_type": "git-clone",
"description": "A collection of custom ComfyUI nodes by Mister-Link, including color parsing, frame calculation, and utility nodes for enhanced workflow capabilities."
},
{
"author": "jonstreeter",
"title": "Reference-Based Video Colorization",
"reference": "https://github.com/jonstreeter/ComfyUI-Reference-Based-Video-Colorization",
"files": [
"https://github.com/jonstreeter/ComfyUI-Reference-Based-Video-Colorization"
],
"install_type": "git-clone",
"description": "Dual implementation of reference-based video colorization featuring ColorMNet (2024) with DINOv2 and Deep Exemplar (2019). Includes 4 nodes (2 video, 2 image), multiple feature encoders (VGG19, DINOv2, CLIP), advanced post-processing (color-matcher, WLS, guided, bilateral), and auto-installer for dependencies."
},
{
"author": "comrender",
"title": "ComfyUI-Topaz-Upscaler",
"reference": "https://github.com/comrender/ComfyUI-Topaz-Upscaler",
"files": [
"https://github.com/comrender/ComfyUI-Topaz-Upscaler"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that integrates the Topaz Labs API for AI-powered image upscaling and enhancement."
},
{
"author": "Fablestarexpanse",
"title": "Timer-Node-Comfyui",
"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": "liming123332",
"title": "ComfyUI-Ranbooru",
"reference": "https://github.com/liming123332/ComfyUI-Ranbooru",
"files": [
"https://github.com/liming123332/ComfyUI-Ranbooru"
],
"install_type": "git-clone",
"description": "Custom node that migrates WebUI Forge's Ranbooru plugin to ComfyUI, enabling searches across Booru sites to generate positive/negative prompts with tag cleaning, rating sorting, and caching support. (Description by CC)"
},
{
"author": "SilentZhang",
"title": "comfyui-encrypt",
"reference": "https://github.com/SilentZhang/comfyui-encrypt",
"files": [
"https://github.com/SilentZhang/comfyui-encrypt"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes for RSA image encryption using asymmetric cryptography with key generation, encryption, and decryption functions via the cryptography library. (Description by CC)"
},
{
"author": "pznodes",
"title": "ComfyUI-DepthAnythingV3",
"reference": "https://github.com/PozzettiAndrea/ComfyUI-DepthAnythingV3",
"files": [
"https://github.com/PozzettiAndrea/ComfyUI-DepthAnythingV3"
],
"install_type": "git-clone",
"description": "ComfyUI nodes to use Depth Anything V3 - the latest depth estimation model from ByteDance. For now monocular depth, camera pose estimation and 3D point clouds/gaussians are supported. Models autodownload from HuggingFace (depth-anything org). This is a first draft, let me know if you have any feedback! :)"
},
{
"author": "Koratahiu",
"title": "ComfyUI-OFTv2",
"reference": "https://github.com/Koratahiu/ComfyUI-OFTv2",
"files": [
"https://github.com/Koratahiu/ComfyUI-OFTv2"
],
"install_type": "git-clone",
"description": "A custom node to support and load OFTv2 adapters"
},
{
"author": "GeekatplayStudio",
"title": "ComfyUI-Text2Speech",
"reference": "https://github.com/GeekatplayStudio/ComfyUI-Text2Speech",
"files": [
"https://github.com/GeekatplayStudio/ComfyUI-Text2Speech"
],
"install_type": "git-clone",
"description": "A ComfyUI custom node for text-to-speech integration with a local TTS server."
},
{
"author": "alankent",
"title": "OA 360 Clip",
"reference": "https://github.com/alankent/ComfyUI-OA-360-Clip",
"files": [
"https://github.com/alankent/ComfyUI-OA-360-Clip"
],
"install_type": "git-clone",
"description": "A ComfyUI node for extracting perspective views from 360 degree equirectangular images with an interactive drag-and-drop crop interface."
},
{
"author": "GraftingRayman",
"title": "ComfyUI Visual Dimension Selector",
"reference": "https://github.com/GraftingRayman/ComfyUI-Dimension-Selector",
"files": [
"https://github.com/GraftingRayman/ComfyUI-Dimension-Selector"
],
"install_type": "git-clone",
"description": "A visual ComfyUI latent canvas dimensions selector"
},
{
"author": "alludus",
"title": "multiGPU Upscaler",
"reference": "https://github.com/alludus/ComfyUI-multiGPU-upscaler",
"files": [
"https://github.com/alludus/ComfyUI-multiGPU-upscaler"
],
"install_type": "git-clone",
"description": "multiGPU batch-parallel upscaling nodes for ComfyUI."
},
{
"author": "Koratahiu",
"title": "ComfyUI-Diff2Flow",
"reference": "https://github.com/Koratahiu/ComfyUI-Diff2Flow",
"files": [
"https://github.com/Koratahiu/ComfyUI-Diff2Flow"
],
"install_type": "git-clone",
"description": "Unofficial Implementation of Diff2Flow Method for ComfyUI."
},
{
"author": "GraftingRayman",
"title": "Unfied Vision Prompt Generator",
"reference": "https://github.com/GraftingRayman/Unified-Vision-Prompt-Generator",
"files": [
"https://github.com/GraftingRayman/Unified-Vision-Prompt-Generator"
],
"install_type": "git-clone",
"description": "A Qwen 2/2.5, Moondream and SmolVLM LLM caption/prompt genrator"
},
{
"author": "GraftingRayman",
"title": "Border Distance Mapper",
"reference": "https://github.com/GraftingRayman/Border-Distance-Mapper",
"files": [
"https://github.com/GraftingRayman/Border-Distance-Mapper"
],
"install_type": "git-clone",
"description": "A Countries Border distance mapper"
},
{
"author": "jianghong-zhu",
"title": "ComfyUI-AdvancedCameraPrompts",
"reference": "https://github.com/jandan520/ComfyUI-AdvancedCameraPrompts",
"files": [
"https://github.com/jandan520/ComfyUI-AdvancedCameraPrompts"
],
"install_type": "git-clone",
"description": "Advanced camera control prompt generator for ComfyUI that reads camera information from 3D nodes and generates precise, professional camera control prompts."
},
{
"author": "ahkimkoo",
"title": "ComfyUI-GetKeyFrames",
"reference": "https://github.com/ahkimkoo/ComfyUI-GetKeyFrames",
"files": [
"https://github.com/ahkimkoo/ComfyUI-GetKeyFrames"
],
"install_type": "git-clone",
"description": "Extract keyframes from video"
},
{
"author": "power88",
"title": "ComfyUI-PDiD-LLM-Nodes",
"reference": "https://github.com/power88/ComfyUI-PDiD-LLM-Nodes",
"files": [
"https://github.com/power88/ComfyUI-PDiD-LLM-Nodes"
],
"install_type": "git-clone",
"description": "A LLM node with some models. (Description by CC)"
},
{
"author": "deng-wei",
"title": "ComfyUI-MiVolo-V2",
"id": "ComfyUI-MiVolo-V2",
"reference": "https://github.com/deng-wei/ComfyUI-MiVolo-V2",
"files": [
"https://github.com/deng-wei/ComfyUI-MiVolo-V2"
],
"install_type": "git-clone",
"description": "ComfyUI nodes for [MiVolo V2 Age & Gender Prediction](https://huggingface.co/iitolstykh/mivolo_v2)"
}
]
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -85,7 +85,15 @@ cm_global.register_api('cm.is_import_failed_extension', is_import_failed_extensi
comfyui_manager_path = os.path.abspath(os.path.dirname(__file__))
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'))
# Check for System User API availability (PR #10966)
_has_system_user_api = hasattr(folder_paths, 'get_system_user_directory')
if _has_system_user_api:
manager_files_path = os.path.abspath(os.path.join(folder_paths.get_user_directory(), '__manager'))
else:
manager_files_path = os.path.abspath(os.path.join(folder_paths.get_user_directory(), 'default', 'ComfyUI-Manager'))
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")
restore_snapshot_path = os.path.join(manager_files_path, "startup-scripts", "restore-snapshot.json")
@@ -516,7 +524,8 @@ check_bypass_ssl()
# Perform install
processed_install = set()
script_list_path = os.path.join(folder_paths.user_directory, "default", "ComfyUI-Manager", "startup-scripts", "install-scripts.txt")
# Use manager_files_path for consistency (fixes path inconsistency bug)
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)
@@ -793,7 +802,11 @@ def execute_startup_script():
# Check if script_list_path exists
if os.path.exists(script_list_path):
# Block startup-scripts on old ComfyUI (security measure)
if not _has_system_user_api:
if os.path.exists(script_list_path):
print("[ComfyUI-Manager] Startup scripts blocked on old ComfyUI version.")
elif os.path.exists(script_list_path):
execute_startup_script()

View File

@@ -1,7 +1,7 @@
[project]
name = "comfyui-manager"
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
version = "3.37.1"
version = "3.38"
license = { file = "LICENSE.txt" }
dependencies = ["GitPython", "PyGithub", "matrix-nio", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]

View File

@@ -105,10 +105,17 @@ def extract_nodes(code_text):
warnings.filterwarnings('ignore', category=DeprecationWarning)
parsed_code = ast.parse(code_text)
assignments = (node for node in parsed_code.body if isinstance(node, ast.Assign))
# 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)))
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
break
else:
@@ -228,7 +235,8 @@ def scan_in_file(filename, is_builtin=False):
with open(filename, encoding='utf-8', errors='ignore') as file:
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)
nodes = set()