mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-03-15 22:17:37 +08:00
* feat(cli): expand --uv-compile to all node management commands with conflict attribution Add --uv-compile flag to reinstall, update, fix, restore-snapshot, restore-dependencies, and install-deps commands. Each skips per-node pip installs and runs batch uv pip compile after all operations. Change CollectedDeps.sources type to dict[str, list[tuple[str, str]]] to store (pack_path, pkg_spec) per requester. On resolution failure, _run_unified_resolve() cross-references conflict packages with sources using word-boundary regex and displays which node packs requested each conflicting package. Update EN/KO user docs and DESIGN/PRD developer docs to cover the expanded commands and conflict attribution output. Strengthen unit tests for sources tuple format and compile failure attribution. Bump version to 4.1b3. * refactor(cli): extract _finalize_resolve helper, add CNR nightly fallback and pydantic guard - Extract `_finalize_resolve()` to eliminate 7x duplicated uv-compile error handling blocks in cm_cli (~-85 lines) - Move conflict attribution regex to `attribute_conflicts()` in unified_dep_resolver.py for direct testability - Update 4 attribution tests to call production function instead of re-implementing regex - Add CNR nightly fallback: when node is absent from nightly manifest, fall back to cnr_map repository URL (glob + legacy) - Add pydantic Union guard: use getattr for is_unknown in uninstall and disable handlers to prevent Union type mismatch - Add E2E test suites for endpoint install/uninstall and uv-compile CLI commands (conflict + success cases) - Add nightly CNR fallback regression tests
175 lines
9.9 KiB
Markdown
175 lines
9.9 KiB
Markdown
# `cm-cli`: ComfyUI-Manager CLI
|
|
|
|
`cm-cli` 는 ComfyUI를 실행시키지 않고 command line에서 ComfyUI-Manager의 여러가지 기능을 사용할 수 있도록 도와주는 도구입니다.
|
|
|
|
|
|
```
|
|
-= ComfyUI-Manager CLI (V2.24) =-
|
|
|
|
|
|
cm-cli [OPTIONS]
|
|
|
|
OPTIONS:
|
|
[install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel <channel name>] ?[--mode [remote|local|cache]]
|
|
[install|reinstall|update|fix] node_name ... ?[--uv-compile]
|
|
[update|disable|enable|fix] all ?[--channel <channel name>] ?[--mode [remote|local|cache]]
|
|
[update|fix] all ?[--uv-compile]
|
|
[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] ?[--uv-compile]
|
|
restore-dependencies ?[--uv-compile]
|
|
install-deps <deps.json> ?[--channel <channel name>] ?[--mode [remote|local|cache]] ?[--uv-compile]
|
|
uv-compile
|
|
clear
|
|
```
|
|
|
|
## How To Use?
|
|
* `cm-cli` 명령으로 실행할 수 있습니다.
|
|
* 예를 들어 custom node를 모두 업데이트 하고 싶다면
|
|
* `cm-cli update all` 명령을 실행할 수 있습니다.
|
|
|
|
## Prerequisite
|
|
* ComfyUI 를 실행하는 python과 동일한 python 환경에서 실행해야 합니다.
|
|
* venv를 사용할 경우 해당 venv를 activate 한 상태에서 실행해야 합니다.
|
|
* portable 버전을 사용할 경우 run_nvidia_gpu.bat 파일이 있는 경로인 경우, 다음과 같은 방식으로 명령을 실행해야 합니다.
|
|
`.\python_embeded\python.exe -m cm_cli update all`
|
|
* ComfyUI 의 경로는 `COMFYUI_PATH` 환경 변수로 설정해야 합니다.
|
|
|
|
## Features
|
|
|
|
### 1. --channel, --mode
|
|
* 정보 보기 기능과 커스텀 노드 관리 기능의 경우는 --channel과 --mode를 통해 정보 DB를 설정할 수 있습니다.
|
|
* 예를 들어 `cm-cli 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`는 간단하게 정보를 보여줍니다.
|
|
|
|
|
|
`cm-cli 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)
|
|
```
|
|
|
|
`cm-cli 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]]`
|
|
|
|
* `cm-cli 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`: 지정된 커스텀 노드의 의존성을 고치기 위한 시도를 합니다.
|
|
|
|
#### `--uv-compile` 플래그 (`install`, `reinstall`, `update`, `fix`)
|
|
|
|
`--uv-compile` 플래그를 사용하면 노드별 pip 설치를 건너뛰고, 모든 작업이 완료된 후 `uv pip compile`로 전체 의존성을 한 번에 일괄 해결합니다.
|
|
|
|
* `uv`가 설치된 환경에서만 동작합니다.
|
|
* 여러 노드 팩 간의 의존성 충돌을 방지합니다.
|
|
* 해결 실패 시 충돌 패키지와 해당 패키지를 요청한 노드 팩 목록을 표시합니다.
|
|
* `reinstall --uv-compile`은 `--no-deps`와 동시에 사용할 수 없습니다.
|
|
|
|
```bash
|
|
cm-cli install ComfyUI-Impact-Pack ComfyUI-Inspire-Pack --uv-compile
|
|
cm-cli update all --uv-compile
|
|
cm-cli fix ComfyUI-Impact-Pack --uv-compile
|
|
```
|
|
|
|
|
|
### 4. 스냅샷 관리 기능
|
|
* `cm-cli save-snapshot ?[--output <snapshot .json/.yaml>]`: 현재의 snapshot을 저장합니다.
|
|
* --output 으로 임의의 경로에 .yaml 파일과 format으로 저장할 수 있습니다.
|
|
* `cm-cli 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. 의존성 설치
|
|
|
|
`restore-dependencies ?[--uv-compile]`
|
|
|
|
* `ComfyUI/custom_nodes` 하위 경로에 커스텀 노드들이 설치되어 있긴 하지만, 의존성이 설치되지 않은 경우 사용할 수 있습니다.
|
|
* Colab과 같이 cloud instance를 새로 시작하는 경우 의존성 재설치 및 설치 스크립트가 재실행되어야 하는 경우 사용합니다.
|
|
* ComfyUI를 재설치할 경우, custom_nodes 경로만 백업했다가 재설치할 경우 활용 가능합니다.
|
|
* `--uv-compile` 플래그를 사용하면 노드별 pip 설치를 건너뛰고 일괄 해결합니다.
|
|
|
|
### 6. 의존성 파일로 설치
|
|
|
|
`install-deps <deps.json> ?[--channel <channel name>] ?[--mode [remote|local|cache]] ?[--uv-compile]`
|
|
|
|
* 의존성 spec 파일(`.json`) 또는 워크플로우 파일(`.png`/`.json`)에 명시된 커스텀 노드를 설치합니다.
|
|
* `--uv-compile` 플래그를 사용하면 모든 노드 설치 후 일괄 의존성 해결을 수행합니다.
|
|
|
|
### 7. uv-compile
|
|
|
|
`uv-compile ?[--user-directory <path>]`
|
|
|
|
* 설치된 모든 커스텀 노드 팩의 의존성을 `uv pip compile`로 일괄 해결하고 설치합니다.
|
|
* ComfyUI를 재시작하지 않고 의존성 환경을 복구하거나 초기 설정 시 활용할 수 있습니다.
|
|
* `uv`가 설치된 환경에서만 동작합니다.
|
|
|
|
```bash
|
|
cm-cli uv-compile
|
|
cm-cli uv-compile --user-directory /path/to/comfyui
|
|
```
|
|
|
|
### 8. clear
|
|
|
|
GUI에서 install, update를 하거나 snapshot을 restore하는 경우 예약을 통해서 다음번 ComfyUI를 실행할 경우 실행되는 구조입니다. `clear` 는 이런 예약 상태를 clear해서, 아무런 사전 실행이 적용되지 않도록 합니다.
|