1. Project Overview & Quickstart (Comfy-Org/ComfyUI-Manager)
File: README.md
ComfyUI Manager
ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom nodes of ComfyUI. Furthermore, this extension provides a hub feature and convenience functions to access a wide range of information within ComfyUI.
NOTICE
- V3.38: Security patch - Manager data migrated to protected path. See Migration Guide.
- V3.16: Support for
uvhas been added. Setuse_uvinconfig.ini. - V3.10:
double-click featureis removed- This feature has been moved to https://github.com/ltdrdata/comfyui-connection-helper
- V3.3.2: Overhauled. Officially supports https://registry.comfy.org/.
- You can see whole nodes info on ComfyUI Nodes Info page.
Installation
Installation[method1] (General installation method: ComfyUI-Manager only)
To install ComfyUI-Manager in addition to an existing installation of ComfyUI, you can follow the following steps:
- Go to
ComfyUI/custom_nodesdir in terminal (cmd) git clone https://github.com/ltdrdata/ComfyUI-Manager comfyui-manager- Restart ComfyUI
Installation[method2] (Installation for portable ComfyUI version: ComfyUI-Manager only)
- install git
- https://git-scm.com/download/win
- standalone version
- select option: use windows default console window
- Download scripts/install-manager-for-portable-version.bat into installed
"ComfyUI_windows_portable"directory
- Don't click. Right-click the link and choose 'Save As...'
- Double-click
install-manager-for-portable-version.batbatch file
Installation[method3] (Installation through comfy-cli: install ComfyUI and ComfyUI-Manager at once.)
RECOMMENDED: comfy-cli provides various features to manage ComfyUI from the CLI.
- prerequisite: python 3, git
Windows:
python -m venv venv
venv\Scripts\activate
pip install comfy-cli
comfy installLinux/macOS:
python -m venv venv
. venv/bin/activate
pip install comfy-cli
comfy install- See also: https://github.com/Comfy-Org/comfy-cli
Installation[method4] (Installation for Linux+venv: ComfyUI + ComfyUI-Manager)
To install ComfyUI with ComfyUI-Manager on Linux using a venv environment, you can follow these steps:
- prerequisite: python-is-python3, python3-venv, git
- Download scripts/install-comfyui-venv-linux.sh into empty install directory
- Don't click. Right-click the link and choose 'Save As...'
- ComfyUI will be installed in the subdirectory of the specified directory, and the directory will contain the generated executable script.
chmod +x install-comfyui-venv-linux.sh./install-comfyui-venv-linux.sh
Installation Precautions
- DO:
ComfyUI-Managerfiles must be accurately located in the pathComfyUI/custom_nodes/comfyui-manager- Installing in a compressed file format is not recommended.
- DON'T: Decompress directly into the
ComfyUI/custom_nodeslocation, resulting in the Manager contents like__init__.pybeing placed directly in that directory.- You have to remove all ComfyUI-Manager files from
ComfyUI/custom_nodes
- You have to remove all ComfyUI-Manager files from
- DON'T: In a form where decompression occurs in a path such as
ComfyUI/custom_nodes/ComfyUI-Manager/ComfyUI-Manager. - DON'T: In a form where decompression occurs in a path such as
ComfyUI/custom_nodes/ComfyUI-Manager-main.- In such cases,
ComfyUI-Managermay operate, but it won't be recognized withinComfyUI-Manager, and updates cannot be performed. It also poses the risk of duplicate installations. Remove it and install properly viagit clonemethod.
- In such cases,
You can execute ComfyUI by running either ./run_gpu.sh or ./run_cpu.sh depending on your system configuration.
Colab Notebook
This repository provides Colab notebooks that allow you to install and use ComfyUI, including ComfyUI-Manager. To use ComfyUI, click on this link.
- Support for installing ComfyUI
- Support for basic installation of ComfyUI-Manager
- Support for automatically installing dependencies of custom nodes upon restarting Colab notebooks.
How To Use
Click "Manager" button on main menu
If you click on 'Install Custom Nodes' or 'Install Models', an installer dialog will open.
There are three DB modes:
DB: Channel (1day cache),DB: Local, andDB: Channel (remote).Channel (1day cache)utilizes Channel cache information with a validity period of one day to quickly display the list.- This information will be updated when there is no cache, when the cache expires, or when external information is retrieved through the Channel (remote).
- Whenever you start ComfyUI anew, this mode is always set as the default mode.
Localuses information stored locally in ComfyUI-Manager.- This information will be updated only when you update ComfyUI-Manager.
- For custom node developers, they should use this mode when registering their nodes in
custom-node-list.jsonand testing them.
Channel (remote)retrieves information from the remote channel, always displaying the latest list.- In cases where retrieval is not possible due to network errors, it will forcibly use local information.
The
Fetch Updatesmenu retrieves update data for custom nodes locally. Actual updates are applied by clicking theUpdatebutton in theInstall Custom Nodesmenu.
Click 'Install' or 'Try Install' button.
Installed: This item is already installed.
Install: Clicking this button will install the item.
Try Install: This is a custom node of which installation information cannot be confirmed. Click the button to try installing it.
If a red background
Channelindicator appears at the top, it means it is not the default channel. Since the amount of information held is different from the default channel, many custom nodes may not appear in this channel state.- Channel settings have a broad impact, affecting not only the node list but also all functions like "Update all."
Conflicted Nodes with a yellow background show a list of nodes conflicting with other extensions in the respective extension. This issue needs to be addressed by the developer, and users should be aware that due to these conflicts, some nodes may not function correctly and may need to be installed accordingly.
Share
You can share the workflow by clicking the Share button at the bottom of the main menu or selecting Share Output from the Context Menu of the Image node.
Currently, it supports sharing via https://comfyworkflows.com/,
https://openart.ai, https://youml.com
as well as through the Matrix channel.Through the Share settings in the Manager menu, you can configure the behavior of the Share button in the Main menu or Share Output button on Context Menu.
None: hide from Main menuAll: Show a dialog where the user can select a title for sharing.
Paths
Starting from V3.38, Manager uses a protected system path for enhanced security.
- If executed without any options, the path defaults to ComfyUI/user.
- It can be set using --user-directory .
| ComfyUI Version | Manager Path |
|---|---|
| v0.3.76+ (with System User API) | /__manager/ |
| Older versions | /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 for upgrade details.
`extra_model_paths.yaml` Configuration
The following settings are applied based on the section marked as is_default.
custom_nodes: Path for installing custom nodes- Importing does not need to adhere to the path set as
is_default, but this is the path where custom nodes are installed by theComfyUI Nodes Manager.
- Importing does not need to adhere to the path set as
download_model_base: Path for downloading models
Snapshot-Manager
- When you press
Save snapshotor useUpdate AllonManager Menu, the current installation status snapshot is saved.- Snapshot file dir:
/default/ComfyUI-Manager/snapshots - You can rename snapshot file.
- Snapshot file dir:
- Press the "Restore" button to revert to the installation status of the respective snapshot.
- However, for custom nodes not managed by Git, snapshot support is incomplete.
- When you press
Restore, it will take effect on the next ComfyUI startup.- The selected snapshot file is saved in
/default/ComfyUI-Manager/startup-scripts/restore-snapshot.json, and upon restarting ComfyUI, the snapshot is applied and then deleted.
- The selected snapshot file is saved in
cm-cli: command line tools for power users
- A tool is provided that allows you to use the features of ComfyUI-Manager without running ComfyUI.
- For more details, please refer to the cm-cli documentation.
How to register your custom node into ComfyUI-Manager
- Add an entry to
custom-node-list.jsonlocated in the root of ComfyUI-Manager and submit a Pull Request. - NOTE: Before submitting the PR after making changes, please check
Use local DBand ensure that the extension list loads without any issues in theInstall custom nodesdialog. Occasionally, missing or extra commas can lead to JSON syntax errors. - The remaining JSON will be updated through scripts in the future, so you don't need to worry about it.
Custom node support guide
NOTICE:
- You should no longer assume that the GitHub repository name will match the subdirectory name under
custom_nodes. The name of the subdirectory undercustom_nodeswill now use the normalized name from thenamefield inpyproject.toml. - Avoid relying on directory names for imports whenever possible.
- You should no longer assume that the GitHub repository name will match the subdirectory name under
Special purpose files (optional)
pyproject.toml- Spec file for comfyregistry.node_list.json- When your custom nodes pattern of NODE_CLASS_MAPPINGS is not conventional, it is used to manually provide a list of nodes for reference. (example)requirements.txt- When installing, this pip requirements will be installed automaticallyinstall.py- When installing, it is automatically called- All scripts are executed from the root path of the corresponding custom node.
Component Sharing
Copy & Paste
- Demo Page
- When pasting a component from the clipboard, it supports text in the following JSON format. (text/plain)text
{ "kind": "ComfyUI Components", "timestamp": <current timestamp>, "components": { <component name>: <component nodedata> } } <current timestamp>Ensure that the timestamp is always unique.- "components" should have the same structure as the content of the file stored in
/default/ComfyUI-Manager/components.<component name>: The name should be in the format::<node name>.<component node data>: In the node data of the group node.<version>: Only two formats are allowed:major.minor.patchormajor.minor. (e.g.1.0,2.2.1)<datetime>: Saved time- ``: If the packname is not empty, the category becomes packname/workflow, and it is saved in the .pack file in
/default/ComfyUI-Manager/components. <category>: If there is neither a category nor a packname, it is saved in the components category.
text"version":"1.0", "datetime": 1705390656516, "packname": "mypack", "category": "util/pipe",
- "components" should have the same structure as the content of the file stored in
Drag & Drop
- Dragging and dropping a
.packor.jsonfile will add the corresponding components. - Example pack: Impact.pack
- Dragging and dropping a
Dragging and dropping or pasting a single component will add a node. However, when adding multiple components, nodes will not be added.
Support for installing missing nodes
- When you click on the
Install Missing Custom Nodesbutton in the menu, it displays a list of extension nodes that contain nodes not currently present in the workflow.
Config
You can modify the
config.inifile to apply the settings for ComfyUI-Manager.- The path to the
config.iniused by ComfyUI-Manager is displayed in the startup log messages. - See also: [https://github.com/ltdrdata/ComfyUI-Manager#paths]
- The path to the
Configuration options:
text[default] git_exe = <Manually specify the path to the git executable. If left empty, the default git executable path will be used.> use_uv = default_cache_as_channel_url = <Determines whether to retrieve the DB designated as channel_url at startup> bypass_ssl = <Set to True if SSL errors occur to disable SSL.> file_logging = <Configure whether to create a log file used by ComfyUI-Manager.> windows_selector_event_loop_policy = model_download_by_agent = <When downloading models, use an agent instead of torchvision_download_url.> downgrade_blacklist = <Set a list of packages to prevent downgrades. List them separated by commas.> security_level = <Set the security level => strong|normal|normal-|weak> always_lazy_install = <Whether to perform dependency installation on restart even in environments other than Windows.> network_mode = <Set the network mode => public|private|offline>- network_mode:
- public: An environment that uses a typical public network.
- private: An environment that uses a closed network, where a private node DB is configured via
channel_url. (Uses cache if available) - offline: An environment that does not use any external connections when using an offline network. (Uses cache if available)
- network_mode:
Additional Feature
Logging to file feature
- This feature is enabled by default and can be disabled by setting
file_logging = Falsein theconfig.ini.
- This feature is enabled by default and can be disabled by setting
Fix node (recreate): When right-clicking on a node and selecting
Fix node (recreate), you can recreate the node. The widget's values are reset, while the connections maintain those with the same names.- It is used to correct errors in nodes of old workflows created before, which are incompatible with the version changes of custom nodes.
Double-Click Node Title: You can set the double-click behavior of nodes in the ComfyUI-Manager menu.
Copy All Connections,Copy Input Connections: Double-clicking a node copies the connections of the nearest node.- This action targets the nearest node within a straight-line distance of 1000 pixels from the center of the node.
- In the case of
Copy All Connections, it duplicates existing outputs, but since it does not allow duplicate connections, the existing output connections of the original node are disconnected. - This feature copies only the input and output that match the names.
Possible Input Connections: It connects all outputs that match the closest type within the specified range.- This connection links to the closest outputs among the nodes located on the left side of the target node.
Possible(left) + Copy(right): When you Double-Click on the left half of the title, it operates asPossible Input Connections, and when you Double-Click on the right half, it operates asCopy All Connections.
Prevent downgrade of specific packages
- List the package names in the
downgrade_blacklistsection of theconfig.inifile, separating them with commas.- e.g
textdowngrade_blacklist = diffusers, kornia
- List the package names in the
Custom pip mapping
- When you create the
pip_overrides.jsonfile, it changes the installation of specific pip packages to installations defined by the user.- Please refer to the
pip_overrides.json.templatefile.
- Please refer to the
- When you create the
Prevent the installation of specific pip packages
- List the package names one per line in the
pip_blacklist.listfile.
- List the package names one per line in the
Automatically Restoring pip Installation
If you list pip spec requirements in
pip_auto_fix.list, similar torequirements.txt, it will automatically restore the specified versions when starting ComfyUI or when versions get mismatched during various custom node installations.--index-urlcan be used.Use
aria2as downloader
Environment Variables
The following features can be configured using environment variables:
- COMFYUI_PATH: The installation path of ComfyUI
- GITHUB_ENDPOINT: Reverse proxy configuration for environments with limited access to GitHub
- HF_ENDPOINT: Reverse proxy configuration for environments with limited access to Hugging Face
Example 1:
Redirecting https://github.com/ltdrdata/ComfyUI-Impact-Pack to https://mirror.ghproxy.com/https://github.com/ltdrdata/ComfyUI-Impact-Pack
GITHUB_ENDPOINT=https://mirror.ghproxy.com/https://github.comExample 2:
Changing https://huggingface.co/path/to/somewhere to https://some-hf-mirror.com/path/to/somewhere
HF_ENDPOINT=https://some-hf-mirror.comScanner
When you run the scan.sh script:
It updates the
extension-node-map.json.- To do this, it pulls or clones the custom nodes listed in
custom-node-list.jsoninto~/.tmp/default. - To skip this step, add the
--skip-updateoption. - If you want to specify a different path instead of
~/.tmp/default, runpython scanner.py [path]directly instead ofscan.sh.
- To do this, it pulls or clones the custom nodes listed in
It updates the
github-stats.json.- This uses the GitHub API, so set your token with
export GITHUB_TOKEN=your_token_hereto avoid quickly reaching the rate limit and malfunctioning. - To skip this step, add the
--skip-stat-updateoption.
- This uses the GitHub API, so set your token with
The
--skip-alloption applies both--skip-updateand--skip-stat-update.
Troubleshooting
- If your
git.exeis installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name ingit_exe =in the/default/ComfyUI-Manager/config.inifile that is generated. - If updating ComfyUI-Manager itself fails, please go to the ComfyUI-Manager directory and execute the command
git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull. - If you encounter the error message
Overlapped Object has pending operation at deallocation on ComfyUI Manager loadunder Windows- Edit
config.inifile: addwindows_selector_event_loop_policy = True
- Edit
- If the
SSL: CERTIFICATE_VERIFY_FAILEDerror occurs.- Edit
config.inifile: addbypass_ssl = True
- Edit
Security policy
Edit
config.inifile: addsecurity_level = <LEVEL>strong- doesn't allow
highandmiddlelevel risky feature
- doesn't allow
normal- doesn't allow
highlevel risky feature middlelevel risky feature is available
- doesn't allow
normal-- doesn't allow
highlevel risky feature if--listenis specified and not starts with127. middlelevel risky feature is available
- doesn't allow
weak- all feature is available
highlevel risky features- Downloading models that are not in
.safetensorsformat and not
registered in thedefault channelmodel list - NOTE:
Install via git url,pip install, and installation of custom nodes
not registered in thedefault channelare no longer governed bysecurity_level— they are governed by the dedicated install flags
described below.
- Downloading models that are not in
middlelevel risky features- Uninstall/Update
- Installation of custom nodes registered in the
default channel. - Fix custom nodes
- Restore/Remove Snapshot
- Restart
lowlevel risky features- Update ComfyUI
Dedicated install flags: `allow_git_url_install` / `allow_pip_install`
The two arbitrary-install surfaces are governed by dedicated boolean keys inconfig.ini ([default] section), fully decoupled from security_level:
allow_git_url_install- governs
Install via Git URL(POST /customnode/install/git_url) and
the unknown-git-URL arm of the batch install queue
(POST /manager/queue/install, including reinstall delegation) — i.e.
installing any custom node from a git URL that is not registered in thedefault channelcatalog - on the batch queue path, the flag is necessary but not
sufficient: the queue's normalsecurity_levelentry gate (middle)
must ALSO pass — atsecurity_level = strong, batch unknown-URL
installs stay denied even with the flag set totrue(only the directInstall via Git URLendpoint is fully independent ofsecurity_level) - covers the entire install transaction it starts, including the
pack's transitive dependency pip installs
- governs
allow_pip_install- governs only the standalone
pip installfeature
(POST /customnode/install/pip)
- governs only the standalone
Key properties:
- Decoupled from
security_level(replace, not and) — on the two
direct endpoints (Install via Git URLandpip install),security_levelno longer has any effect in either direction: a strict
level cannot deny them when the flag istrue, and a weak level cannot
allow them when the flag isfalse. (The batch queue path keeps itssecurity_levelentry gate in ADDITION to the flag — see the scope bullet
above.) Every other gated feature remains governed bysecurity_levelas
described above. - Loopback only — the flags take effect only when the server listens
on a loopback address (e.g.--listen 127.0.0.1). On a non-loopback
listener these surfaces stay denied regardless of the flags; the flags
never widen the exposure of a public deployment. - Default deny / explicit opt-in — both flags default to
false. Only
the case-insensitive stringtrueenables a flag; a missing or malformed
key reads asfalse.
To opt in, edit config.ini:
[default]
allow_git_url_install = true
allow_pip_install = trueChanges take effect after a restart (no hot reload).
Migration note: there is no automatic migration from
security_level.
If you previously relied onsecurity_level = weak(ornormal-) to use
install-via-git-URL / pip install, you must opt in explicitly with the flags
above. SeeCHANGELOG.mdfor details, including a behavior note for
outdated ComfyUI deployments.
Disclaimer
- This extension simply provides the convenience of installing custom nodes and does not guarantee their proper functioning.
Credit
ComfyUI/ComfyUI - A powerful and modular stable diffusion GUI.
And, for all ComfyUI custom node developers
File: docs/ko/cm-cli.md
`cm-cli`: ComfyUI-Manager CLI
cm-cli 는 ComfyUI를 실행시키지 않고 command line에서 ComfyUI-Manager의 여러가지 기능을 사용할 수 있도록 도와주는 도구입니다.
-= ComfyUI-Manager CLI (V2.24) =-
python cm-cli.py [OPTIONS]
OPTIONS:
[install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[simple-show|show] [installed|enabled|not-installed|disabled|all|snapshot|snapshot-list] ?[--channel <channel name>] ?[--mode [remote|local|cache]]
save-snapshot ?[--output <snapshot .json/.yaml>]
restore-snapshot <snapshot .json/.yaml> ?[--pip-non-url] ?[--pip-non-local-url] ?[--pip-local-url]
cli-only-mode [enable|disable]
restore-dependencies
clearHow To Use?
python cm-cli.py를 통해서 실행 시킬 수 있습니다.- 예를 들어 custom node를 모두 업데이트 하고 싶다면
- ComfyUI-Manager 경로에서
python cm-cli.py update all명령을 실행할 수 있습니다. - ComfyUI 경로에서 실행한다면,
python custom_nodes/ComfyUI-Manager/cm-cli.py update all와 같이 cm-cli.py 의 경로를 지정할 수도 있습니다.
- ComfyUI-Manager 경로에서
Prerequisite
- ComfyUI 를 실행하는 python과 동일한 python 환경에서 실행해야 합니다.
- venv를 사용할 경우 해당 venv를 activate 한 상태에서 실행해야 합니다.
- portable 버전을 사용할 경우 run_nvidia_gpu.bat 파일이 있는 경로인 경우, 다음과 같은 방식으로 명령을 실행해야 합니다.
.\python_embeded\python.exe ComfyUI\custom_nodes\ComfyUI-Manager\cm-cli.py update all - ComfyUI 의 경로는 COMFYUI_PATH 환경 변수로 설정할 수 있습니다. 만약 생략할 경우 다음과 같은 경고 메시지가 나타나며, ComfyUI-Manager가 설치된 경로를 기준으로 상대 경로로 설정됩니다.
WARN: The `COMFYUI_PATH` environment variable is not set. Assuming `custom_nodes/ComfyUI-Manager/../../` as the ComfyUI path.
Features
1. --channel, --mode
- 정보 보기 기능과 커스텀 노드 관리 기능의 경우는 --channel과 --mode를 통해 정보 DB를 설정할 수 있습니다.
- 예를 들어
python cm-cli.py update all --channel recent --mode remote와 같은 명령을 실행할 경우, 현재 ComfyUI-Manager repo에 내장된 로컬의 정보가 아닌 remote의 최신 정보를 기준으로 동작하며, recent channel에 있는 목록을 대상으로만 동작합니다. - --channel, --mode 는
simple-show, show, install, uninstall, update, disable, enable, fix명령에서만 사용 가능합니다.
2. 관리 정보 보기
[simple-show|show] [installed|enabled|not-installed|disabled|all|snapshot|snapshot-list] ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[show|simple-show]-show는 상세하게 정보를 보여주며,simple-show는 간단하게 정보를 보여줍니다.
python cm-cli.py show installed 와 같은 명령을 실행하면 설치된 커스텀 노드의 정보를 상세하게 보여줍니다.
-= ComfyUI-Manager CLI (V2.24) =-
FETCH DATA from: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
[ ENABLED ] ComfyUI-Manager (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI-Impact-Pack (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI-Inspire-Pack (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI_experiments (author: comfyanonymous)
[ ENABLED ] ComfyUI-SAI_API (author: Stability-AI)
[ ENABLED ] stability-ComfyUI-nodes (author: Stability-AI)
[ ENABLED ] comfyui_controlnet_aux (author: Fannovel16)
[ ENABLED ] ComfyUI-Frame-Interpolation (author: Fannovel16)
[ DISABLED ] ComfyUI-Loopchain (author: Fannovel16)python cm-cli.py simple-show installed 와 같은 명령을 이용해서 설치된 커스텀 노드의 정보를 간단하게 보여줍니다.
-= ComfyUI-Manager CLI (V2.24) =-
FETCH DATA from: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
ComfyUI-Manager
ComfyUI-Impact-Pack
ComfyUI-Inspire-Pack
ComfyUI_experiments
ComfyUI-SAI_API
stability-ComfyUI-nodes
comfyui_controlnet_aux
ComfyUI-Frame-Interpolation
ComfyUI-Loopchain[installed|enabled|not-installed|disabled|all|snapshot|snapshot-list]enabled,disabled: 설치된 커스텀 노드들 중 enable 되었거나, disable된 노드들을 보여줍니다.installed: enable, disable 여부와 상관없이 설치된 모든 노드를 보여줍니다not-installed: 설치되지 않은 커스텀 노드의 목록을 보여줍니다.all: 모든 커스텀 노드의 목록을 보여줍니다.snapshot: 현재 설치된 커스텀 노드의 snapshot 정보를 보여줍니다.show를 통해서 볼 경우는 json 출력 형태로 보여주며,simple-show를 통해서 볼 경우는 간단하게, 커밋 해시와 함께 보여줍니다.snapshot-list: ComfyUI-Manager/snapshots 에 저장된 snapshot 파일의 목록을 보여줍니다.
3. 커스텀 노드 관리 하기
[install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel <channel name>] ?[--mode [remote|local|cache]]
python cm-cli.py install ComfyUI-Impact-Pack ComfyUI-Inspire-Pack ComfyUI_experiments와 같이 커스텀 노드의 이름을 나열해서 관리 기능을 적용할 수 있습니다.- 커스텀 노드의 이름은
show를 했을 때 보여주는 이름이며, git repository의 이름입니다.
(추후 nickname을 사용 가능하도록 업데이트할 예정입니다.)
[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]
update, disable, enable, fix기능은 all 로 지정 가능합니다.세부 동작
install: 지정된 커스텀 노드들을 설치합니다reinstall: 지정된 커스텀 노드를 삭제하고 재설치 합니다.uninstall: 지정된 커스텀 노드들을 삭제합니다.update: 지정된 커스텀 노드들을 업데이트합니다.disable: 지정된 커스텀 노드들을 비활성화합니다.enable: 지정된 커스텀 노드들을 활성화합니다.fix: 지정된 커스텀 노드의 의존성을 고치기 위한 시도를 합니다.
4. 스냅샷 관리 기능
python cm-cli.py save-snapshot ?[--output <snapshot .json/.yaml>]: 현재의 snapshot을 저장합니다.- --output 으로 임의의 경로에 .yaml 파일과 format으로 저장할 수 있습니다.
python cm-cli.py restore-snapshot <snapshot .json/.yaml>: 지정된 snapshot으로 복구합니다.- snapshot 경로에 파일이 존재하는 경우 해당 snapshot을 로드합니다.
- snapshot 경로에 파일이 존재하지 않는 경우 묵시적으로, ComfyUI-Manager/snapshots 에 있다고 가정합니다.
--pip-non-url: PyPI 에 등록된 pip 패키지들에 대해서 복구를 수행--pip-non-local-url: web URL에 등록된 pip 패키지들에 대해서 복구를 수행--pip-local-url: local 경로를 지정하고 있는 pip 패키지들에 대해서 복구를 수행--user-directory: 사용자 디렉토리 설정--restore-to: 복구될 커스텀 노드가 설치될 경로. (이 옵션을 적용할 경우 오직 대상 경로에 설치된 custom nodes만 설치된 것으로 인식함.)
5. CLI only mode
ComfyUI-Manager를 CLI로만 사용할 것인지를 설정할 수 있습니다.
cli-only-mode [enable|disable]
- security 혹은 policy 의 이유로 GUI 를 통한 ComfyUI-Manager 사용을 제한하고 싶은 경우 이 모드를 사용할 수 있습니다.
- CLI only mode를 적용할 경우 ComfyUI-Manager 가 매우 제한된 상태로 로드되어, 내부적으로 제공하는 web API가 비활성화되며, 메인 메뉴에서도 Manager 버튼이 표시되지 않습니다.
6. 의존성 설치
restore-dependencies
ComfyUI/custom_nodes하위 경로에 커스텀 노드들이 설치되어 있긴 하지만, 의존성이 설치되지 않은 경우 사용할 수 있습니다.- Colab과 같이 cloud instance를 새로 시작하는 경우 의존성 재설치 및 설치 스크립트가 재실행되어야 하는 경우 사용합니다.
- ComfyUI를 재설치할 경우, custom_nodes 경로만 백업했다가 재설치할 경우 활용 가능합니다.
7. clear
GUI에서 install, update를 하거나 snapshot을 restore하는 경우 예약을 통해서 다음번 ComfyUI를 실행할 경우 실행되는 구조입니다. clear 는 이런 예약 상태를 clear해서, 아무런 사전 실행이 적용되지 않도록 합니다.
File: docs/en/cm-cli.md
`cm-cli`: ComfyUI-Manager CLI
cm-cli is a tool that allows you to use various functions of ComfyUI-Manager from the command line without launching ComfyUI.
-= ComfyUI-Manager CLI (V2.24) =-
python cm-cli.py [OPTIONS]
OPTIONS:
[install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[simple-show|show] [installed|enabled|not-installed|disabled|all|snapshot|snapshot-list] ?[--channel <channel name>] ?[--mode [remote|local|cache]]
save-snapshot ?[--output <snapshot .json/.yaml>]
restore-snapshot <snapshot .json/.yaml> ?[--pip-non-url] ?[--pip-non-local-url] ?[--pip-local-url]
cli-only-mode [enable|disable]
restore-dependencies
clearHow To Use?
- You can execute it via
python cm-cli.py. - For example, if you want to update all custom nodes:
- In the ComfyUI-Manager directory, you can execute the command
python cm-cli.py update all. - If running from the ComfyUI directory, you can specify the path to cm-cli.py like this:
python custom_nodes/ComfyUI-Manager/cm-cli.py update all.
- In the ComfyUI-Manager directory, you can execute the command
Prerequisite
- It must be run in the same Python environment as the one running ComfyUI.
- If using a venv, you must run it with the venv activated.
- If using a portable version, and you are in the directory with the run_nvidia_gpu.bat file, you should execute the command as follows:
.\python_embeded\python.exe ComfyUI\custom_nodes\ComfyUI-Manager\cm-cli.py update all
- The path for ComfyUI can be set with the COMFYUI_PATH environment variable. If omitted, a warning message will appear, and the path will be set relative to the installed location of ComfyUI-Manager:
WARN: The `COMFYUI_PATH` environment variable is not set. Assuming `custom_nodes/ComfyUI-Manager/../../` as the ComfyUI path.
Features
1. --channel, --mode
- For viewing information and managing custom nodes, you can set the information database through --channel and --mode.
- For instance, executing the command
python cm-cli.py update all --channel recent --mode remotewill operate based on the latest information from remote rather than local data embedded in the current ComfyUI-Manager repo and will only target the list in the recent channel. - --channel, --mode are only available with the commands
simple-show, show, install, uninstall, update, disable, enable, fix.
2. Viewing Management Information
[simple-show|show] [installed|enabled|not-installed|disabled|all|snapshot|snapshot-list] ?[--channel <channel name>] ?[--mode [remote|local|cache]]
[show|simple-show]-showprovides detailed information, whilesimple-showdisplays information more simply.
Executing a command like python cm-cli.py show installed will display detailed information about the installed custom nodes.
-= ComfyUI-Manager CLI (V2.24) =-
FETCH DATA from: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
[ ENABLED ] ComfyUI-Manager (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI-Impact-Pack (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI-Inspire-Pack (author: Dr.Lt.Data)
[ ENABLED ] ComfyUI_experiments (author: comfyanonymous)
[ ENABLED ] ComfyUI-SAI_API (author: Stability-AI)
[ ENABLED ] stability-ComfyUI-nodes (author: Stability-AI)
[ ENABLED ] comfyui_controlnet_aux (author: Fannovel16)
[ ENABLED ] ComfyUI-Frame-Interpolation (author: Fannovel16)
[ DISABLED ] ComfyUI-Loopchain (author: Fannovel16)Using a command like python cm-cli.py simple-show installed will simply display information about the installed custom nodes.
-= ComfyUI-Manager CLI (V2.24) =-
FETCH DATA from: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
ComfyUI-Manager
ComfyUI-Impact-Pack
ComfyUI-Inspire-Pack
ComfyUI_experiments
ComfyUI-SAI_API
stability-ComfyUI-nodes
comfyui_controlnet_aux
ComfyUI-Frame-Interpolation
ComfyUI-Loopchain[installed|enabled|not-installed|disabled|all|snapshot|snapshot-list]
enabled,disabled: Shows nodes that have been enabled or disabled among the installed custom nodes.installed: Shows all nodes that have been installed, regardless of whether they are enabled or disabled.not-installed: Shows a list of custom nodes that have not been installed.all: Shows a list of all custom nodes.snapshot: Displays snapshot information of the currently installed custom nodes. When viewed withshow, it is displayed in JSON format, and withsimple-show, it is displayed simply, along with the commit hash.snapshot-list: Shows a list of snapshot files stored in ComfyUI-Manager/snapshots.
3. Managing Custom Nodes
[install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel <channel name>] ?[--mode [remote|local|cache]]
- You can apply management functions by listing the names of custom nodes, such as
python cm-cli.py install ComfyUI-Impact-Pack ComfyUI-Inspire-Pack ComfyUI_experiments. - The names of the custom nodes are as shown by
showand are the names of the git repositories.
(Plans are to update the use of nicknames in the future.)
[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]
The
update, disable, enable, fixfunctions can be specified for all.Detailed Operations
install: Installs the specified custom nodes.reinstall: Removes and then reinstalls the specified custom nodes.uninstall: Uninstalls the specified custom nodes.update: Updates the specified custom nodes.disable: Disables the specified custom nodes.enable: Enables the specified custom nodes.fix: Attempts to fix dependencies for the specified custom nodes.
4. Snapshot Management
python cm-cli.py save-snapshot [--output <snapshot .json/.yaml>]: Saves the current snapshot.- With
--output, you can save a file in .yaml format to any specified path.
- With
python cm-cli.py restore-snapshot <snapshot .json/.yaml>: Restores to the specified snapshot.- If a file exists at the snapshot path, that snapshot is loaded.
- If no file exists at the snapshot path, it is implicitly assumed to be in ComfyUI-Manager/snapshots.
--pip-non-url: Restore for pip packages registered on PyPI.--pip-non-local-url: Restore for pip packages registered at web URLs.--pip-local-url: Restore for pip packages specified by local paths.--user-directory: Set the user directory.--restore-to: The path where the restored custom nodes will be installed. (When this option is applied, only the custom nodes installed in the target path are recognized as installed.)
5. CLI Only Mode
You can set whether to use ComfyUI-Manager solely via CLI.
cli-only-mode [enable|disable]
- This mode can be used if you want to restrict the use of ComfyUI-Manager through the GUI for security or policy reasons.
- When CLI only mode is enabled, ComfyUI-Manager is loaded in a very restricted state, the internal web API is disabled, and the Manager button is not displayed in the main menu.
6. Dependency Restoration
restore-dependencies
- This command can be used if custom nodes are installed under the
ComfyUI/custom_nodespath but their dependencies are not installed. - It is useful when starting a new cloud instance, like Colab, where dependencies need to be reinstalled and installation scripts re-executed.
- It can also be utilized if ComfyUI is reinstalled and only the custom_nodes path has been backed up and restored.
7. Clear
In the GUI, installations, updates, or snapshot restorations are scheduled to execute the next time ComfyUI is launched. The clear command clears this scheduled state, ensuring no pre-execution actions are applied.
File: docs/en/use_aria2.md
Use `aria2` as downloader
Two environment variables are needed to use aria2 as the downloader.
export COMFYUI_MANAGER_ARIA2_SERVER=http://127.0.0.1:6800
export COMFYUI_MANAGER_ARIA2_SECRET=__YOU_MUST_CHANGE_IT__An example docker-compose.yml
services:
aria2:
container_name: aria2
image: p3terx/aria2-pro
environment:
- PUID=1000
- PGID=1000
- UMASK_SET=022
- RPC_SECRET=__YOU_MUST_CHANGE_IT__
- RPC_PORT=5080
- DISK_CACHE=64M
- IPV6_MODE=false
- UPDATE_TRACKERS=false
- CUSTOM_TRACKER_URL=
volumes:
- ./config:/config
- ./downloads:/downloads
- ~/ComfyUI/models:/models
- ~/ComfyUI/custom_nodes:/custom_nodes
ports:
- 6800:6800
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 1mFile: docs/en/v3.38-userdata-security-migration.md
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.iniLook 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:
- Force security level to
strong- All installations are blocked - 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:
strongis forced on outdated ComfyUI versions.normalis the default and recommended for most users.normal-is for developers who need to install unregistered nodes locally.weakshould only be used in isolated development environments.
Changing Security Level
Edit user/__manager/config.ini:
[default]
security_level = normalError 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,
stronglevel 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 = strongblocks 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
File: docs/README.md
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:
- Markdown Format: All documentation is written in Markdown for easy rendering on GitHub and other platforms
- Language-specific Directories: Content is separated by language to facilitate localization
- Feature-focused Documentation: Each major feature has its own documentation file
- Updated with Releases: Documentation is kept in sync with software releases
Contributing to Documentation
When contributing new documentation:
- Place files in the appropriate language directory
- Use clear, concise language appropriate for the target audience
- Include examples where helpful
- Consider adding screenshots or diagrams for complex features
- Maintain consistent formatting with existing documentation
This documentation directory will continue to grow to support the expanding feature set of ComfyUI-Manager.
File: glob/README.md
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:
- Core Layer: Manager modules provide the primary API and business logic
- Utility Layer: Helper modules provide specialized functionality
- 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
File: js/README.md
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.
- node-usage-analyzer.js: Implements the UI for analyzing node usage in workflows.
Sharing Components
- comfyui-share-common.js: Base functionality for workflow sharing features.
- comfyui-share-copus.js: Integration with the ComfyUI Copus 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:
- Integration Layer: Connects with ComfyUI's existing UI system
- Manager Components: Individual functional UI components (node manager, model manager, etc.)
- Sharing Components: Platform-specific sharing implementations
- 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
- node-usage-analyzer.css: Styling for the node usage analyzer UI
This frontend implementation provides a comprehensive yet user-friendly interface for managing the ComfyUI ecosystem.
File: node_db/README.md
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
{
"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
{
"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:
- Provide browsable lists of available nodes and models
- Resolve dependencies for installation
- Track updates and new versions
- Map node classes to their source repositories
- 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.
2. Official Technical Reference & Guides (Comfy-Org/docs)
ComfyUI Documentation
Development
To preview documentation changes locally, first install dependencies and then start the development server:
npm i
npm run devTo sync translations after editing English docs, see Automated translation below (npm run translate).
Create a PR
Create a PR. Once it is accepted Vercel will deploy the change to https://docs.comfy.org/
Generating API Reference Docs
Can either use an OpenAPI file or URL containing the file:
cd registry/api-reference # Keep API files separated by products.
npx @mintlify/scraping@latest openapi-fileThis will only generate the MDX files for each endpoint. You need to add a link to these files in docs.json, and the up-to-date API spec will be shown on that doc page.
Special Note on Renaming Files
- Renaming files can cause some external links to become inaccessible, as they are already used in numerous articles and templates.
- Since we can manage the sidebar navigation can be reorganized via the docs.json file, we generally do not change the original document's file location unless absolutely necessary.
- If you renamed any files and caused the file path to be changed, please update the
redirectslist in thedocs.json
A GitHub Action will check for redirects and fail the PR if they are missing. Redirects should follow this format:
json"redirects": [ { "source": "/path/to/old-file", "destination": "/path/to/new-file" } ]Don't forget to include the corresponding translation files under
zh/,ja/,ko/, etc.!
You can also refer to the Mintlify doc to learn how to add and match a wildcard path.
About built-in node document
ComfyUI now has a built-in node help menu for both built-in nodes and custom nodes. All built-in node documentation will now be maintained in this repo.
Synchronization frequency
We will regularly sync updated documentation from the corresponding repository to docs.comfy.org weekly to ensure content synchronization and updates. If you would like to contribute to the documentation, please submit PRs and updates to this repo.
Node Documentation File Organization
For node documentation, we will use a single-level directory structure under the built-in-node folder for the following reasons:
- ComfyUI may adjust node categories and directories during updates, using multi-level directory hierarchies means frequent adjustments to node documentation
- These frequent adjustments mean we need to frequently add redirects and checks
- Mintlify supports setting document hierarchy in the
docs.jsonfile, so we can make unified changes in that file
Due to historical updates, some existing documents use different folder hierarchies. We will no longer adjust these files, but new files will use a single-level directory
Contributing
Please just create a PR and we will review it within a few days.
Or talk to us on our discord
The documentation is built with Mintlify, please refer to Mintlify documentation to learn how to use it.
i18n Contributions
English MDX at the repo root is the source of truth. Translations mirror the same relative paths under language directories (for example zh/get_started/introduction.mdx, ja/get_started/introduction.mdx, ko/get_started/introduction.mdx). Reusable fragments live in snippets/ with per-language copies under snippets/zh/, snippets/ja/, snippets/ko/, and so on.
Contributing guides in other languages: readme/ (中文, 日本語, 한국어).
Translation policy
Supported locales are maintained through automated translation from English. When English docs change, translations are updated in batch via npm run translate — contributors do not need to hand-translate every page.
Request a new language
Want docs in another language? Open an issue with the locale you need (for example French, German, or Brazilian Portuguese). A maintainer will add the language to translation-config.json and docs.json, then run a full batch translation of all content. You only need to submit the request; no translated MDX PR is required to get started.
Specifications for editing MDX can be found in the Writing Content section of the Mintlify document.
Note:
built-in-nodes/is maintained in embedded-docs and is skipped by the translation script. Do not run bulk translation against that folder.
Automated translation
This repo includes a hash-based translation script. It compares each English file against translationSourceHash stored in the translated file; when the English source changes, the file is fully re-translated.
Prerequisites
- Install Bun
- Copy the env template and add your API key:
cp .env.local.example .env.local
# Set TRANSLATE_API_KEY (OpenAI-compatible: DashScope Qwen-MT, OpenRouter, DeepSeek, etc.)npm scripts
| Command | Description |
|---|---|
npm run translate |
Translate all languages listed in translation-config.json |
npm run translate:dry-run |
List pending files without calling the API |
npm run translate:force |
Re-translate everything, ignoring stored hashes |
npm run translate:snippets |
Translate snippets/ only |
npm run translate:snippets:dry-run |
Preview pending snippet translations |
npm run translate:check-truncation |
Scan for likely truncated translations |
npm run translate:repair-truncated |
Re-translate files listed in the truncation log |
npm run glossary:sync |
Rebuild the terminology glossary from the ComfyUI frontend (see Terminology consistency) |
npm run translate:review |
Score existing translations with an AI judge (see Quality review) |
Pass extra flags after --:
npm run translate -- --lang zh,ja
npm run translate:dry-run -- --lang ja
npm run translate -- installation/manual_install.mdx
npm run translate:check-truncation -- --lang ko
npm run translate:repair-truncated -- --lang koTruncated translations
Long files can occasionally be cut off mid-translation (e.g. unclosed code fences). After a batch run, the script scans newly translated files and writes a repair list to .github/i18n-logs/translate/truncation-issues.json and truncation-issues.txt (gitignored). To scan everything for a language, or to repair:
npm run translate:check-truncation -- --lang ko
npm run translate:repair-truncated -- --lang korepair-truncated reads the JSON log and force re-translates only the flagged files.
How it works
- Input: English MDX (primary) + existing target-language file as context (if present)
- Output: Updated files under
zh/,ja/,ko/, etc., with refreshedtranslationSourceHashin frontmatter (snippets use an HTML comment for the hash) - Review notes (mismatch): When the model reports semantic issues via
=== MISMATCHES ===, they go to.github/i18n-logs/translate/mismatches.jsonandmismatches.txt(gitignored), not into MDX. Only produced duringnpm run translate, not by the truncation scanner. - Truncation log: Structural issues (unclosed code fences, short body) go to
.github/i18n-logs/translate/truncation-issues.json— see Truncated translations above. - Skipped paths:
built-in-nodes/(configured intranslation-config.json→skip_paths) - Chunked files:
changelog/index.mdxis handled by `` version labels. The script compares EN vs target labels, translates only missing versions, and inserts them in EN order. Old blocks are never re-translated unless you use--force. - Directories: Subdirectories are created automatically when files are written; you do not need to
mkdirby hand
Script location: .github/scripts/i18n/ (see translate-i18n.ts, translation-config.json, and the i18n README for full details)
Terminology consistency
To keep the same English term rendered the same way across pages (e.g. avoid "custom node" drifting between two different Korean translations), three complementary mechanisms feed the translator. Each handles a different kind of term:
| Mechanism | Effect | Example | Maintained |
|---|---|---|---|
preserve_terms (in translation-config.json) |
keep the term in English | checkpoint, LoRA, scheduler |
by hand |
glossary/frontend/{lang}.json |
use the frontend's translation | workflow → 워크플로 |
machine-synced |
glossary/overrides/{lang}.json |
correct / extend the frontend | custom node → 커스텀 노드 |
by hand, wins |
The ComfyUI frontend (ComfyUI_frontend/src/locales) is the authoritative source of term translations. npm run glossary:sync mirrors its locale terms into glossary/frontend/{lang}.json (rebuilt wholesale each run — never hand-edit). Hand-maintained corrections live in glossary/overrides/{lang}.json, which wins over the mirror and is the place to record a term decision or drop a noisy frontend term:
// glossary/overrides/ko.json
{
"terms": { "custom node": "커스텀 노드" }, // remap or add (wins over frontend)
"ignore": ["title", "additional", "work"] // drop a noisy frontend term
}At translation time, only terms that actually appear in a document are selected and injected as preferred (not mandatory) hints, so the model keeps natural phrasing when a literal substitution would read awkwardly. ComfyUI proper nouns with no settled translation (model names, checkpoint, …) instead go in preserve_terms to stay in English. See the i18n README for the full design and curation guidance.
npm run glossary:sync # rebuild the frontend mirror, all languages
npm run glossary:sync -- --lang ko # one language
npm run glossary:sync:dry-run # report counts without writingThe frontend locales source resolves in order:
- Remote (default):
frontend_locales_urlintranslation-config.json(GitHub rawmainbranch). Override withFRONTEND_LOCALES_URLor--frontend-url. - Local (optional):
--frontendorFRONTEND_LOCALES_PATHwhen you need an offline or forked checkout.
Quality review
npm run translate:review scores existing translations with an independent (and typically cheaper) AI model — an LLM-as-a-judge — on four axes: accuracy, completeness, terminology (checked against the glossary), and fluency. It is separate from the translation model's own === MISMATCHES === self-notes; here a different model acts as judge.
Results are advisory: the detailed scores and issue list are written to .github/i18n-logs/review/ (quality-report.json / .txt, gitignored) and never block a PR. The reviewed hash is recorded as reviewSourceHash in the translated file's frontmatter (committed to git), so review state is shared across the team and visible per file — mirroring translationSourceHash. By default only translations that are up to date with English and not yet reviewed at that hash are checked.
npm run translate:review # pending reviews, all languages
npm run translate:review -- --lang ko # one language
npm run translate:review -- --all # re-review everything
npm run translate:review -- --sample 20 # N pending files per language
npm run translate:review -- --min-score 4 # report files scoring below 4/5Configure a dedicated cheap judge model via REVIEW_API_KEY / REVIEW_API_BASE_URL / REVIEW_API_MODEL in .env.local (falls back to the TRANSLATE_* model when unset). Use a fast model — evaluation is lighter than translation; reasoning-heavy models are slow under concurrency, so lower REVIEW_CONCURRENCY if you see connection errors.
Adding a new language
See Request a new language above — please open an issue rather than adding a language in a PR yourself.
Maintainers: add one entry under languages in .github/scripts/i18n/translation-config.json (code, name, dir, snippets_dir). Path exclusion, link localization, and English-file scanning are derived automatically by i18n-config.mjs in the same folder — no per-language edits in translate scripts when adding a locale. Then add navigation in docs.json (see Mintlify Localization), and batch-translate:
npm run glossary:sync -- --lang fr # build the terminology glossary for the new locale
npm run translate:dry-run -- --lang fr
npm run translate -- --lang fr
npm run translate:snippets -- --lang frThe glossary is extended automatically: once the language is in translation-config.json, npm run glossary:sync generates glossary/frontend/{lang}.json from the ComfyUI frontend locale (provided the frontend ships that locale). An glossary/overrides/{lang}.json file is optional — add it later only to correct or pin specific terms. See Terminology consistency.
Manual translation
You can still translate by hand instead of using the script:
- Create a file under the language directory with the same filename and path as the English original.
- Localize
importpaths (/snippets/...→/snippets/zh/...) and internal links (/path→/zh/path). - Add the page path to the correct language group in
docs.json.
When English MDX changes, the i18n-sync-check workflow warns if matching translation files were not updated in the same PR, and posts a reminder comment tagging @comfyui-wiki. Update translations manually or re-run npm run translate.
Contributing Workflow Examples
When adding workflow examples to the documentation, please:
- Take your output from ComfyUI (PNG, WebP), and add the models urls to the workflow so a user will have them when they drag in the workflow. You can use this tool to edit the metadata of the PNG or WebP file.
Upload your workflow JSON and preview image to the example_workflows repository
Use the raw GitHub content URL in your documentation. To convert a GitHub file URL to a raw content URL:
- Start with your GitHub file URL:text
https://github.com/Comfy-Org/example_workflows/blob/main/your-workflow.json - Change it to raw.githubusercontent.com and remove '/blob':text
https://raw.githubusercontent.com/Comfy-Org/example_workflows/main/your-workflow.json
You can also click the "Raw" button on the GitHub file page and copy the URL directly.
- Start with your GitHub file URL:
This ensures the workflow metadata is preserved in the docs site when dragging it into ComfyUI.