ComfyUI-ControlPanel
ComfyUI ControlPanel (Manager Extension)
ComfyUI-ControlPanel
ComfyUI-ControlPanel restores a few practical control panel workflows that are not exposed in the modern ComfyUI Manager V4 UI unless the legacy UI is enabled.
The extension is packaged as a single ComfyUI custom node pack. Backend routes
live in backend/, the frontend extension lives in frontend/, and ComfyUI
loads the built frontend from dist/index.js through WEB_DIRECTORY = "./dist".
This custom node pack is primarily maintained as a personal-use replacement for ComfyUI-Manager#3048.
Features

- Install a custom node directly from a Git URL.
- Update ComfyUI and Git-installed custom nodes without enabling the legacy Manager UI.
- Replace the Manager repository cache with a safer and more efficient cache path.
- Update or rebuild the Manager cache when Replace Manager Repository Data is enabled.
- Save and restore Manager snapshots through the Comfy CLI.
- Download a latest-version custom-node restore manifest and restore Registry/Git nodes from an uploaded JSON file.
- Open the
custom_nodesand Manager snapshots folders from the panel on local installs. - Show the parsed
comfy --json envoutput in a table-style environment dialog. - Restart ComfyUI from the control panel.
- Inspect the latest status JSON and clear the local operation log.
- Add missing
cnr_id,aux_id, and version metadata when nodes are created or loaded. - Repair Registry metadata across the active workflow, including nested subgraphs, with one Undo step.
Requirements
comfy-cli, with thecomfycommand available onPATH(invenv).- Git available on
PATHfor Git URL installation, updates, and restore manifests. - ComfyUI-Manager enabled for Manager cache, snapshot, and Registry metadata features.
Install
From the Comfy Registry
Install the published package through ComfyUI Manager, or target the current ComfyUI workspace with the Comfy CLI:
comfy node install comfyui-controlpanel
Restart ComfyUI after installation.
From a GitHub Release
As a manual alternative, install from the GitHub Release zip attached to a
version tag, not from GitHub's automatic source archive. The release zip
includes the built frontend file at dist/index.js, which ComfyUI needs at
runtime.
For example, for v1.1.0, download the attached release asset named like:
ComfyUI-ControlPanel-v1.1.0.zip
Extract the ComfyUI-ControlPanel/ folder from the zip into:
ComfyUI/custom_nodes/
Then restart ComfyUI.
From Source
Install the development dependencies before building or testing from source:
pnpm install
uv sync --locked --group dev
For local ComfyUI usage, build the frontend once after installing dependencies:
pnpm build
Security Model
ComfyUI-ControlPanel is local-first. ComfyUI does not provide a built-in user or permission model for custom node HTTP routes, so the panel treats loopback access as the default trust boundary.
By default, all /control-panel/* routes and the frontend panel UI are available
only to localhost clients such as localhost, 127.0.0.1, and ::1. This is
intentional because the panel can install Git repositories, update custom nodes,
restore snapshots, open local folders, and restart ComfyUI.
When remote control is disabled, both the connection peer and HTTP Host must be
loopback. This prevents an external hostname routed through a local reverse proxy
or DNS rebinding from being treated as ordinary localhost access.
State-changing requests must also be same-origin. Requests without an Origin
header are accepted only from loopback clients so local command-line tools remain
usable. ControlPanel follows ComfyUI-Manager's operation policy: Git URL installs
require allow_git_url_install = true when Manager's config.ini is present,
middle-risk operations such as custom-node updates, snapshot restore, and restart
are blocked by security_level = strong, and ComfyUI updates remain low-risk
operations. When Manager's configuration is absent, ControlPanel remains usable
with its own access and same-origin checks rather than requiring Manager.
Commands that install or update code, restore state, or restart ComfyUI run only
after an explicit user action in the panel; loading a workflow does not execute
them. External commands are launched with argument arrays rather than shell
command strings. Custom nodes are installed without dependencies while ComfyUI
is running, and dependency reconciliation is delegated to comfy node uv-sync
after ComfyUI is closed. ComfyUI core updates and their requirements are
delegated to the official Comfy CLI updater.
To allow remote clients on a trusted private deployment, set this in the ControlPanel config file under the ComfyUI user directory:
{
"allow_remote_control": true
}
Do not enable remote control for ComfyUI instances exposed to untrusted networks. Enabling it deliberately transfers responsibility for authenticating and protecting remote clients to the operator; browser requests must still be same-origin and all Manager operation policies continue to apply.
Development
pnpm dev
pnpm typecheck
pnpm test
pnpm test:unit
pnpm test runs the frontend and backend unit test suites.
The backend is split by responsibility:
backend/manager_api.pykeeps the ComfyUI-facing compatibility facade.backend/manager_routes.pyregisters HTTP routes.backend/manager_jobs.pytracks background update jobs.backend/manager_process.pyruns external commands and opens local folders.backend/manager_cache.pyhandles Manager and Comfy Registry cache data.backend/manager_settings.pyreads and writes ControlPanel/Manager settings.backend/manager_git.pyhandles Git-based update flows.backend/manager_cli.pyformats Comfy CLI responses.backend/manager_runtime.pyhandles runtime paths and restart helpers.
Release
Version tags publish the same built extension to the Comfy Registry and to a
GitHub Release zip. Add a repository Actions secret named
REGISTRY_ACCESS_TOKEN containing the publishing key for the alyac Registry
publisher before creating a release tag.
Use uv to update the version in pyproject.toml and uv.lock together:
uv version --bump patch
The private frontend package.json intentionally has no independent version.
After committing the version change, create and push a matching tag:
git tag vX.Y.Z
git push origin vX.Y.Z
To create the same installable archive locally after pnpm build:
./scripts/New-CustomNodesZip.ps1 -Version v1.1.0
The archive is written to release/ and contains a single
ComfyUI-ControlPanel/ folder ready to extract under custom_nodes/.
The release workflow:
- Checks out the tagged source.
- Installs frontend dependencies with Node.js 24 and pnpm.
- Builds the frontend, including its TypeScript check.
- Verifies that the tag matches the version in
pyproject.toml. - Verifies that
dist/index.jsexists and publishes the package to the Comfy Registry. - Runs
scripts/New-CustomNodesZip.ps1and uploadsComfyUI-ControlPanel-vX.Y.Z.zipto the GitHub Release.
About dist/index.js in tag releases
dist/ is intentionally ignored by Git. The Registry workflow builds it before
publishing, and [tool.comfy].includes forces it into the Registry package. The
GitHub automatic source archives still omit dist/index.js, so manual installs
must use the attached release zip instead.
The separate CI workflow is manual-only and can be run when an extra validation
pass is useful before tagging.
v1.1.0 notes
v1.1.0 is expected to be released from a tag-built GitHub Release artifact.
Compared with the early v1.0.0 shape, the control panel now includes Manager
cache rebuild/update actions, snapshot save/restore, local folder open actions,
Comfy CLI environment display, status JSON inspection, and a modularized backend
implementation.
Docs
License
MIT because template was MIT.