Compare commits
1 Commits
3.33
...
api/openap
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a83bab57b |
@@ -8,7 +8,7 @@
|
|||||||
* V3.16: Support for `uv` has been added. Set `use_uv` in `config.ini`.
|
* V3.16: Support for `uv` has been added. Set `use_uv` in `config.ini`.
|
||||||
* V3.10: `double-click feature` is removed
|
* V3.10: `double-click feature` is removed
|
||||||
* This feature has been moved to https://github.com/ltdrdata/comfyui-connection-helper
|
* This feature has been moved to https://github.com/ltdrdata/comfyui-connection-helper
|
||||||
* V3.3.2: Overhauled. Officially supports [https://registry.comfy.org/](https://registry.comfy.org/).
|
* V3.3.2: Overhauled. Officially supports [https://comfyregistry.org/](https://comfyregistry.org/).
|
||||||
* You can see whole nodes info on [ComfyUI Nodes Info](https://ltdrdata.github.io/) page.
|
* You can see whole nodes info on [ComfyUI Nodes Info](https://ltdrdata.github.io/) page.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,41 +0,0 @@
|
|||||||
# ComfyUI-Manager: Documentation
|
|
||||||
|
|
||||||
This directory contains documentation for the ComfyUI-Manager, providing guides and tutorials for users in multiple languages.
|
|
||||||
|
|
||||||
## Directory Structure
|
|
||||||
|
|
||||||
The documentation is organized into language-specific directories:
|
|
||||||
|
|
||||||
- **en/**: English documentation
|
|
||||||
- **ko/**: Korean documentation
|
|
||||||
|
|
||||||
## Core Documentation Files
|
|
||||||
|
|
||||||
### Command-Line Interface
|
|
||||||
|
|
||||||
- **cm-cli.md**: Documentation for the ComfyUI-Manager Command Line Interface (CLI), which allows using manager functionality without the UI.
|
|
||||||
|
|
||||||
### Advanced Features
|
|
||||||
|
|
||||||
- **use_aria2.md**: Guide for using the aria2 download accelerator with ComfyUI-Manager for faster model downloads.
|
|
||||||
|
|
||||||
## Documentation Standards
|
|
||||||
|
|
||||||
The documentation follows these standards:
|
|
||||||
|
|
||||||
1. **Markdown Format**: All documentation is written in Markdown for easy rendering on GitHub and other platforms
|
|
||||||
2. **Language-specific Directories**: Content is separated by language to facilitate localization
|
|
||||||
3. **Feature-focused Documentation**: Each major feature has its own documentation file
|
|
||||||
4. **Updated with Releases**: Documentation is kept in sync with software releases
|
|
||||||
|
|
||||||
## Contributing to Documentation
|
|
||||||
|
|
||||||
When contributing new documentation:
|
|
||||||
|
|
||||||
1. Place files in the appropriate language directory
|
|
||||||
2. Use clear, concise language appropriate for the target audience
|
|
||||||
3. Include examples where helpful
|
|
||||||
4. Consider adding screenshots or diagrams for complex features
|
|
||||||
5. Maintain consistent formatting with existing documentation
|
|
||||||
|
|
||||||
This documentation directory will continue to grow to support the expanding feature set of ComfyUI-Manager.
|
|
||||||
File diff suppressed because it is too large
Load Diff
8919
github-stats.json
8919
github-stats.json
File diff suppressed because it is too large
Load Diff
@@ -1,53 +0,0 @@
|
|||||||
# ComfyUI-Manager: Core Backend (glob)
|
|
||||||
|
|
||||||
This directory contains the Python backend modules that power ComfyUI-Manager, handling the core functionality of node management, downloading, security, and server operations.
|
|
||||||
|
|
||||||
## Core Modules
|
|
||||||
|
|
||||||
- **manager_core.py**: The central implementation of management functions, handling configuration, installation, updates, and node management.
|
|
||||||
- **manager_server.py**: Implements server functionality and API endpoints for the web interface to interact with the backend.
|
|
||||||
- **manager_downloader.py**: Handles downloading operations for models, extensions, and other resources.
|
|
||||||
- **manager_util.py**: Provides utility functions used throughout the system.
|
|
||||||
|
|
||||||
## Specialized Modules
|
|
||||||
|
|
||||||
- **cm_global.py**: Maintains global variables and state management across the system.
|
|
||||||
- **cnr_utils.py**: Helper utilities for interacting with the custom node registry (CNR).
|
|
||||||
- **git_utils.py**: Git-specific utilities for repository operations.
|
|
||||||
- **node_package.py**: Handles the packaging and installation of node extensions.
|
|
||||||
- **security_check.py**: Implements the multi-level security system for installation safety.
|
|
||||||
- **share_3rdparty.py**: Manages integration with third-party sharing platforms.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
The backend follows a modular design pattern with clear separation of concerns:
|
|
||||||
|
|
||||||
1. **Core Layer**: Manager modules provide the primary API and business logic
|
|
||||||
2. **Utility Layer**: Helper modules provide specialized functionality
|
|
||||||
3. **Integration Layer**: Modules that connect to external systems
|
|
||||||
|
|
||||||
## Security Model
|
|
||||||
|
|
||||||
The system implements a comprehensive security framework with multiple levels:
|
|
||||||
|
|
||||||
- **Block**: Highest security - blocks most remote operations
|
|
||||||
- **High**: Allows only specific trusted operations
|
|
||||||
- **Middle**: Standard security for most users
|
|
||||||
- **Normal-**: More permissive for advanced users
|
|
||||||
- **Weak**: Lowest security for development environments
|
|
||||||
|
|
||||||
## Implementation Details
|
|
||||||
|
|
||||||
- The backend is designed to work seamlessly with ComfyUI
|
|
||||||
- Asynchronous task queuing is implemented for background operations
|
|
||||||
- The system supports multiple installation modes
|
|
||||||
- Error handling and risk assessment are integrated throughout the codebase
|
|
||||||
|
|
||||||
## API Integration
|
|
||||||
|
|
||||||
The backend exposes a REST API via `manager_server.py` that enables:
|
|
||||||
- Custom node management (install, update, disable, remove)
|
|
||||||
- Model downloading and organization
|
|
||||||
- System configuration
|
|
||||||
- Snapshot management
|
|
||||||
- Workflow component handling
|
|
||||||
@@ -46,8 +46,6 @@ def git_url(fullpath):
|
|||||||
|
|
||||||
for k, v in config.items():
|
for k, v in config.items():
|
||||||
if k.startswith('remote ') and 'url' in v:
|
if k.startswith('remote ') and 'url' in v:
|
||||||
if 'Comfy-Org/ComfyUI-Manager' in v['url']:
|
|
||||||
return "https://github.com/ltdrdata/ComfyUI-Manager"
|
|
||||||
return v['url']
|
return v['url']
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ import manager_downloader
|
|||||||
from node_package import InstalledNodePackage
|
from node_package import InstalledNodePackage
|
||||||
|
|
||||||
|
|
||||||
version_code = [3, 33]
|
version_code = [3, 32, 3]
|
||||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||||
|
|
||||||
|
|
||||||
@@ -400,44 +400,16 @@ class ManagedResult:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
class NormalizedKeyDict(dict):
|
|
||||||
def _normalize_key(self, key):
|
|
||||||
if isinstance(key, str):
|
|
||||||
return key.strip().lower()
|
|
||||||
return key
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
super().__setitem__(self._normalize_key(key), value)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
return super().__getitem__(self._normalize_key(key))
|
|
||||||
|
|
||||||
def __delitem__(self, key):
|
|
||||||
return super().__delitem__(self._normalize_key(key))
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
return super().__contains__(self._normalize_key(key))
|
|
||||||
|
|
||||||
def get(self, key, default=None):
|
|
||||||
return super().get(self._normalize_key(key), default)
|
|
||||||
|
|
||||||
def setdefault(self, key, default=None):
|
|
||||||
return super().setdefault(self._normalize_key(key), default)
|
|
||||||
|
|
||||||
def pop(self, key, default=None):
|
|
||||||
return super().pop(self._normalize_key(key), default)
|
|
||||||
|
|
||||||
|
|
||||||
class UnifiedManager:
|
class UnifiedManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.installed_node_packages: dict[str, InstalledNodePackage] = {}
|
self.installed_node_packages: dict[str, InstalledNodePackage] = {}
|
||||||
|
|
||||||
self.cnr_inactive_nodes = NormalizedKeyDict() # node_id -> node_version -> fullpath
|
self.cnr_inactive_nodes = {} # node_id -> node_version -> fullpath
|
||||||
self.nightly_inactive_nodes = NormalizedKeyDict() # node_id -> fullpath
|
self.nightly_inactive_nodes = {} # node_id -> fullpath
|
||||||
self.unknown_inactive_nodes = {} # node_id -> repo url * fullpath
|
self.unknown_inactive_nodes = {} # node_id -> repo url * fullpath
|
||||||
self.active_nodes = NormalizedKeyDict() # node_id -> node_version * fullpath
|
self.active_nodes = {} # node_id -> node_version * fullpath
|
||||||
self.unknown_active_nodes = {} # node_id -> repo url * fullpath
|
self.unknown_active_nodes = {} # node_id -> repo url * fullpath
|
||||||
self.cnr_map = NormalizedKeyDict() # node_id -> cnr info
|
self.cnr_map = {} # node_id -> cnr info
|
||||||
self.repo_cnr_map = {} # repo_url -> cnr info
|
self.repo_cnr_map = {} # repo_url -> cnr info
|
||||||
self.custom_node_map_cache = {} # (channel, mode) -> augmented custom node list json
|
self.custom_node_map_cache = {} # (channel, mode) -> augmented custom node list json
|
||||||
self.processed_install = set()
|
self.processed_install = set()
|
||||||
@@ -2904,7 +2876,7 @@ async def get_unified_total_nodes(channel, mode, regsitry_cache_mode='cache'):
|
|||||||
|
|
||||||
if cnr_id is not None:
|
if cnr_id is not None:
|
||||||
# cnr or nightly version
|
# cnr or nightly version
|
||||||
cnr_ids.discard(cnr_id)
|
cnr_ids.remove(cnr_id)
|
||||||
updatable = False
|
updatable = False
|
||||||
cnr = unified_manager.cnr_map[cnr_id]
|
cnr = unified_manager.cnr_map[cnr_id]
|
||||||
|
|
||||||
|
|||||||
@@ -181,10 +181,7 @@ def set_preview_method(method):
|
|||||||
core.get_config()['preview_method'] = method
|
core.get_config()['preview_method'] = method
|
||||||
|
|
||||||
|
|
||||||
if args.preview_method == latent_preview.LatentPreviewMethod.NoPreviews:
|
set_preview_method(core.get_config()['preview_method'])
|
||||||
set_preview_method(core.get_config()['preview_method'])
|
|
||||||
else:
|
|
||||||
logging.warning("[ComfyUI-Manager] Since --preview-method is set, ComfyUI-Manager's preview method feature will be ignored.")
|
|
||||||
|
|
||||||
|
|
||||||
def set_component_policy(mode):
|
def set_component_policy(mode):
|
||||||
@@ -440,10 +437,7 @@ async def task_worker():
|
|||||||
|
|
||||||
if res.ver == 'unknown':
|
if res.ver == 'unknown':
|
||||||
url = core.unified_manager.unknown_active_nodes[node_name][0]
|
url = core.unified_manager.unknown_active_nodes[node_name][0]
|
||||||
try:
|
|
||||||
title = os.path.basename(url)
|
title = os.path.basename(url)
|
||||||
except Exception:
|
|
||||||
title = node_name
|
|
||||||
else:
|
else:
|
||||||
url = core.unified_manager.cnr_map[node_name].get('repository')
|
url = core.unified_manager.cnr_map[node_name].get('repository')
|
||||||
title = core.unified_manager.cnr_map[node_name]['name']
|
title = core.unified_manager.cnr_map[node_name]['name']
|
||||||
|
|||||||
@@ -476,7 +476,7 @@ class PIPFixer:
|
|||||||
normalized_name = parsed['package'].lower().replace('-', '_')
|
normalized_name = parsed['package'].lower().replace('-', '_')
|
||||||
if normalized_name in new_pip_versions:
|
if normalized_name in new_pip_versions:
|
||||||
if 'version' in parsed and 'operator' in parsed:
|
if 'version' in parsed and 'operator' in parsed:
|
||||||
cur = StrictVersion(new_pip_versions[normalized_name])
|
cur = StrictVersion(new_pip_versions[parsed['package']])
|
||||||
dest = parsed['version']
|
dest = parsed['version']
|
||||||
op = parsed['operator']
|
op = parsed['operator']
|
||||||
if cur == dest:
|
if cur == dest:
|
||||||
|
|||||||
50
js/README.md
50
js/README.md
@@ -1,50 +0,0 @@
|
|||||||
# ComfyUI-Manager: Frontend (js)
|
|
||||||
|
|
||||||
This directory contains the JavaScript frontend implementation for ComfyUI-Manager, providing the user interface components that interact with the backend API.
|
|
||||||
|
|
||||||
## Core Components
|
|
||||||
|
|
||||||
- **comfyui-manager.js**: Main entry point that initializes the manager UI and integrates with ComfyUI.
|
|
||||||
- **custom-nodes-manager.js**: Implements the UI for browsing, installing, and managing custom nodes.
|
|
||||||
- **model-manager.js**: Handles the model management interface for downloading and organizing AI models.
|
|
||||||
- **components-manager.js**: Manages reusable workflow components system.
|
|
||||||
- **snapshot.js**: Implements the snapshot system for backing up and restoring installations.
|
|
||||||
|
|
||||||
## Sharing Components
|
|
||||||
|
|
||||||
- **comfyui-share-common.js**: Base functionality for workflow sharing features.
|
|
||||||
- **comfyui-share-copus.js**: Integration with the ComfyUI Opus sharing platform.
|
|
||||||
- **comfyui-share-openart.js**: Integration with the OpenArt sharing platform.
|
|
||||||
- **comfyui-share-youml.js**: Integration with the YouML sharing platform.
|
|
||||||
|
|
||||||
## Utility Components
|
|
||||||
|
|
||||||
- **cm-api.js**: Client-side API wrapper for communication with the backend.
|
|
||||||
- **common.js**: Shared utilities and helper functions used across the frontend.
|
|
||||||
- **node_fixer.js**: Utilities for fixing disconnected links and repairing malformed nodes by recreating them while preserving connections.
|
|
||||||
- **popover-helper.js**: UI component for popup tooltips and contextual information.
|
|
||||||
- **turbogrid.esm.js**: Grid component library - https://github.com/cenfun/turbogrid
|
|
||||||
- **workflow-metadata.js**: Handles workflow metadata parsing, validation and cross-repository compatibility including versioning, dependencies tracking, and resource management.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
The frontend follows a modular component-based architecture:
|
|
||||||
|
|
||||||
1. **Integration Layer**: Connects with ComfyUI's existing UI system
|
|
||||||
2. **Manager Components**: Individual functional UI components (node manager, model manager, etc.)
|
|
||||||
3. **Sharing Components**: Platform-specific sharing implementations
|
|
||||||
4. **Utility Layer**: Reusable UI components and helpers
|
|
||||||
|
|
||||||
## Implementation Details
|
|
||||||
|
|
||||||
- The frontend integrates directly with ComfyUI's UI system through `app.js`
|
|
||||||
- Dialog-based UI for most manager functions to avoid cluttering the main interface
|
|
||||||
- Asynchronous API calls to handle backend operations without blocking the UI
|
|
||||||
|
|
||||||
## Styling
|
|
||||||
|
|
||||||
CSS files are included for specific components:
|
|
||||||
- **custom-nodes-manager.css**: Styling for the node management UI
|
|
||||||
- **model-manager.css**: Styling for the model management UI
|
|
||||||
|
|
||||||
This frontend implementation provides a comprehensive yet user-friendly interface for managing the ComfyUI ecosystem.
|
|
||||||
@@ -153,7 +153,6 @@ app.registerExtension({
|
|||||||
app.canvas.graph.add(new_node, false);
|
app.canvas.graph.add(new_node, false);
|
||||||
node_info_copy(this, new_node, true);
|
node_info_copy(this, new_node, true);
|
||||||
app.canvas.graph.remove(this);
|
app.canvas.graph.remove(this);
|
||||||
requestAnimationFrame(() => app.canvas.setDirty(true, true))
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
# ComfyUI-Manager: Node Database (node_db)
|
|
||||||
|
|
||||||
This directory contains the JSON database files that power ComfyUI-Manager's legacy node registry system. While the manager is gradually transitioning to the online Custom Node Registry (CNR), these local JSON files continue to provide important metadata about custom nodes, models, and their integrations.
|
|
||||||
|
|
||||||
## Directory Structure
|
|
||||||
|
|
||||||
The node_db directory is organized into several subdirectories, each serving a specific purpose:
|
|
||||||
|
|
||||||
- **dev/**: Development channel files with latest additions and experimental nodes
|
|
||||||
- **legacy/**: Historical/legacy nodes that may require special handling
|
|
||||||
- **new/**: New nodes that have passed initial verification but are still being evaluated
|
|
||||||
- **forked/**: Forks of existing nodes with modifications
|
|
||||||
- **tutorial/**: Example and tutorial nodes designed for learning purposes
|
|
||||||
|
|
||||||
## Core Database Files
|
|
||||||
|
|
||||||
Each subdirectory contains a standard set of JSON files:
|
|
||||||
|
|
||||||
- **custom-node-list.json**: Primary database of custom nodes with metadata
|
|
||||||
- **extension-node-map.json**: Maps between extensions and individual nodes they provide
|
|
||||||
- **model-list.json**: Catalog of models that can be downloaded through the manager
|
|
||||||
- **alter-list.json**: Alternative implementations of nodes for compatibility or functionality
|
|
||||||
- **github-stats.json**: GitHub repository statistics for node popularity metrics
|
|
||||||
|
|
||||||
## Database Schema
|
|
||||||
|
|
||||||
### custom-node-list.json
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"custom_nodes": [
|
|
||||||
{
|
|
||||||
"title": "Node display name",
|
|
||||||
"name": "Repository name",
|
|
||||||
"reference": "Original repository if forked",
|
|
||||||
"files": ["GitHub URL or other source location"],
|
|
||||||
"install_type": "git",
|
|
||||||
"description": "Description of the node's functionality",
|
|
||||||
"pip": ["optional pip dependencies"],
|
|
||||||
"js": ["optional JavaScript files"],
|
|
||||||
"tags": ["categorization tags"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### extension-node-map.json
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"extension-id": [
|
|
||||||
["list", "of", "node", "classes"],
|
|
||||||
{
|
|
||||||
"author": "Author name",
|
|
||||||
"description": "Extension description",
|
|
||||||
"nodename_pattern": "Optional regex pattern for node name matching"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Transition to Custom Node Registry (CNR)
|
|
||||||
|
|
||||||
This local database system is being progressively replaced by the online Custom Node Registry (CNR), which provides:
|
|
||||||
- Real-time updates without manual JSON maintenance
|
|
||||||
- Improved versioning support
|
|
||||||
- Better security validation
|
|
||||||
- Enhanced metadata
|
|
||||||
|
|
||||||
The Manager supports both systems simultaneously during the transition period.
|
|
||||||
|
|
||||||
## Implementation Details
|
|
||||||
|
|
||||||
- The database follows a channel-based architecture for different sources
|
|
||||||
- Multiple database modes are supported: Channel, Local, and Remote
|
|
||||||
- The system supports differential updates to minimize bandwidth usage
|
|
||||||
- Security levels are enforced for different node installations based on source
|
|
||||||
|
|
||||||
## Usage in the Application
|
|
||||||
|
|
||||||
The Manager's backend uses these database files to:
|
|
||||||
|
|
||||||
1. Provide browsable lists of available nodes and models
|
|
||||||
2. Resolve dependencies for installation
|
|
||||||
3. Track updates and new versions
|
|
||||||
4. Map node classes to their source repositories
|
|
||||||
5. Assess risk levels for installation security
|
|
||||||
|
|
||||||
## Maintenance Scripts
|
|
||||||
|
|
||||||
Each subdirectory contains a `scan.sh` script that assists with:
|
|
||||||
- Scanning repositories for new nodes
|
|
||||||
- Updating metadata
|
|
||||||
- Validating database integrity
|
|
||||||
- Generating proper JSON structures
|
|
||||||
|
|
||||||
This database system enables a flexible, secure, and comprehensive management system for the ComfyUI ecosystem while the transition to CNR continues.
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,158 +1,16 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
{
|
{
|
||||||
"author": "theUpsider",
|
"author": "#NOTICE_1.13",
|
||||||
"title": "ComfyUI-Logic [DEPRECATED]",
|
"title": "NOTICE: This channel is not the default channel.",
|
||||||
"id": "comfy-logic",
|
"reference": "https://github.com/ltdrdata/ComfyUI-Manager",
|
||||||
"reference": "https://github.com/theUpsider/ComfyUI-Logic",
|
"files": [],
|
||||||
"files": [
|
|
||||||
"https://github.com/theUpsider/ComfyUI-Logic"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "An extension to ComfyUI that introduces logic nodes and conditional rendering capabilities."
|
"description": "If you see this message, your ComfyUI-Manager is outdated.\nLegacy channel provides only the list of the deprecated nodes. If you want to find the complete node list, please go to the Default channel."
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Malloc-pix",
|
|
||||||
"title": "comfyui_qwen2.4_vl_node [REMOVED]",
|
|
||||||
"reference": "https://github.com/Malloc-pix/comfyui_qwen2.4_vl_node",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Malloc-pix/comfyui_qwen2.4_vl_node"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: CogVLM2 Captioner, CLIP Dynamic Text Encode(cy)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "inyourdreams-studio",
|
|
||||||
"title": "ComfyUI-RBLM [REMOVED]",
|
|
||||||
"reference": "https://github.com/inyourdreams-studio/comfyui-rblm",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/inyourdreams-studio/comfyui-rblm"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A custom node pack for ComfyUI that provides text manipulation nodes."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "dream-computing",
|
|
||||||
"title": "SyntaxNodes - Image Processing Effects for ComfyUI [REMOVED]",
|
|
||||||
"reference": "https://github.com/dream-computing/syntax-nodes",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/dream-computing/syntax-nodes"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A collection of custom nodes for ComfyUI designed to apply various image processing effects, stylizations, and analyses."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "UD1sto",
|
|
||||||
"title": "plugin-utils-nodes [DEPRECATED]",
|
|
||||||
"reference": "https://github.com/its-DeFine/plugin-utils-nodes",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/its-DeFine/plugin-utils-nodes"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Compare Images (SimHash), Image Selector, Temporal Consistency, Update Image Reference, Frame Blend."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "hanyingcho",
|
|
||||||
"title": "ComfyUI LLM Promp [REMOVED]",
|
|
||||||
"reference": "https://github.com/hanyingcho/comfyui-llmprompt",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/hanyingcho/comfyui-llmprompt"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Load llm, Generate Text with LLM, Inference Qwen2VL, Inference Qwen2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "WASasquatch",
|
|
||||||
"title": "WAS Node Suite [DEPRECATED]",
|
|
||||||
"id": "was",
|
|
||||||
"reference": "https://github.com/WASasquatch/was-node-suite-comfyui",
|
|
||||||
"pip": ["numba"],
|
|
||||||
"files": [
|
|
||||||
"https://github.com/WASasquatch/was-node-suite-comfyui"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A node suite for ComfyUI with many new nodes, such as image processing, text processing, and more."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "TOM1063",
|
|
||||||
"title": "ComfyUI-SamuraiTools [REMOVED]",
|
|
||||||
"reference": "https://github.com/TOM1063/ComfyUI-SamuraiTools",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/TOM1063/ComfyUI-SamuraiTools"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "ComfyUI custom node for switching integer values based on boolean conditions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "whitemoney293",
|
|
||||||
"title": "ComfyUI-MediaUtilities [REMOVED]",
|
|
||||||
"reference": "https://github.com/ThanaritKanjanametawatAU/ComfyUI-MediaUtilities",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ThanaritKanjanametawatAU/ComfyUI-MediaUtilities"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Custom nodes for loading and previewing media from URLs in ComfyUI."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "pureexe",
|
|
||||||
"title": "DiffusionLight-ComfyUI [REMOVED]",
|
|
||||||
"reference": "https://github.com/pureexe/DiffusionLight-ComfyUI",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/pureexe/DiffusionLight-ComfyUI"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "DiffusionLight (Turbo) implemented in ComfyUI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "gondar-software",
|
|
||||||
"title": "comfyui-custom-padding [REMOVED]",
|
|
||||||
"reference": "https://github.com/gondar-software/comfyui-custom-padding",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/gondar-software/comfyui-custom-padding"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Adaptive image padding, Adaptive image unpadding"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Charonartist",
|
|
||||||
"title": "ComfyUI-EagleExporter [REMOVED]",
|
|
||||||
"reference": "https://github.com/Charonartist/ComfyUI-EagleExporter",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Charonartist/ComfyUI-EagleExporter"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is an extension that automatically saves video files generated with ComfyUI's 'video combine' extension to the Eagle library."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "pomePLaszlo-collablyu",
|
|
||||||
"title": "comfyui_ejam [REMOVED]",
|
|
||||||
"reference": "https://github.com/PLaszlo-collab/comfyui_ejam",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/PLaszlo-collab/comfyui_ejam"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Ejam nodes for comfyui"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "jonnydolake",
|
|
||||||
"title": "ComfyUI-AIR-Nodes [REMOVED]",
|
|
||||||
"reference": "https://github.com/jonnydolake/ComfyUI-AIR-Nodes",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/jonnydolake/ComfyUI-AIR-Nodes"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: String List To Prompt Schedule, Force Minimum Batch Size, Target Location (Crop), Target Location (Paste), Image Composite Chained, Match Image Count To Mask Count, Random Character Prompts, Parallax Test, Easy Parallax, Parallax GPU Test"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "solution9th",
|
|
||||||
"title": "Comfyui_mobilesam [REMOVED]",
|
|
||||||
"reference": "https://github.com/solution9th/Comfyui_mobilesam",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/solution9th/Comfyui_mobilesam"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Mobile SAM Model Loader, Mobile SAM Detector, Mobile SAM Predictor"
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"author": "syaofox",
|
"author": "syaofox",
|
||||||
"title": "ComfyUI_fnodes [REMOVED]",
|
"title": "ComfyUI_fnodes [REMOVED]",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -344,12 +344,7 @@ try:
|
|||||||
log_file.write(message)
|
log_file.write(message)
|
||||||
else:
|
else:
|
||||||
log_file.write(f"[{timestamp}] {message}")
|
log_file.write(f"[{timestamp}] {message}")
|
||||||
|
|
||||||
try:
|
|
||||||
log_file.flush()
|
log_file.flush()
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
self.last_char = message if message == '' else message[-1]
|
self.last_char = message if message == '' else message[-1]
|
||||||
|
|
||||||
if not file_only:
|
if not file_only:
|
||||||
@@ -362,10 +357,7 @@ try:
|
|||||||
original_stderr.flush()
|
original_stderr.flush()
|
||||||
|
|
||||||
def flush(self):
|
def flush(self):
|
||||||
try:
|
|
||||||
log_file.flush()
|
log_file.flush()
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
with std_log_lock:
|
with std_log_lock:
|
||||||
if self.is_stdout:
|
if self.is_stdout:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "comfyui-manager"
|
name = "comfyui-manager"
|
||||||
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||||
version = "3.33"
|
version = "3.32.3"
|
||||||
license = { file = "LICENSE.txt" }
|
license = { file = "LICENSE.txt" }
|
||||||
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]
|
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,11 @@ def extract_nodes(code_text):
|
|||||||
def scan_in_file(filename, is_builtin=False):
|
def scan_in_file(filename, is_builtin=False):
|
||||||
global builtin_nodes
|
global builtin_nodes
|
||||||
|
|
||||||
with open(filename, encoding='utf-8', errors='ignore') as file:
|
try:
|
||||||
|
with open(filename, encoding='utf-8') as file:
|
||||||
|
code = file.read()
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
with open(filename, encoding='cp949') as file:
|
||||||
code = file.read()
|
code = file.read()
|
||||||
|
|
||||||
pattern = r"_CLASS_MAPPINGS\s*=\s*{([^}]*)}"
|
pattern = r"_CLASS_MAPPINGS\s*=\s*{([^}]*)}"
|
||||||
@@ -293,7 +297,7 @@ def update_custom_nodes():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def is_rate_limit_exceeded():
|
def is_rate_limit_exceeded():
|
||||||
return g.rate_limiting[0] <= 20
|
return g.rate_limiting[0] == 0
|
||||||
|
|
||||||
if is_rate_limit_exceeded():
|
if is_rate_limit_exceeded():
|
||||||
print(f"GitHub API Rate Limit Exceeded: remained - {(g.rate_limiting_resettime - datetime.datetime.now().timestamp())/60:.2f} min")
|
print(f"GitHub API Rate Limit Exceeded: remained - {(g.rate_limiting_resettime - datetime.datetime.now().timestamp())/60:.2f} min")
|
||||||
|
|||||||
Reference in New Issue
Block a user