Commit Graph
332 Commits
Author SHA1 Message Date
Alexander Brown 910bef52e4 Apply suggestion from @DrJKL 2026-10-24 12:36:09 -07:00
Alexander Brown 5fe4b0cea7 Reload components on clear of any root graph
ComfyUI_frontend is moving to one LGraph instance per workflow tab
(Comfy-Org/ComfyUI_frontend#21571), and app.clean() clears the new graph
before any extension hook fires. The instance patch on app.graph.clear
only reaches the graph that existed at startup, so components would not
be reloaded for later workflows.

Patch clear on the graph prototype and reload components when the
cleared graph is the current root graph. This also stops a subgraph
clear from clearing the root graph, which the old wrapper did by always
calling orig_clear on app.graph.

Amp-Thread-ID: https://ampcode.com/threads/T-d545a10a-f002-4dc5-9a74-f6402a836919
2026-10-24 05:56:26 +00:00
Alexander Brown b0b8bbe4e2 fix: replace PrimeVue styling with Manager-owned theme CSS (#3392)
Amp-Thread-ID: https://ampcode.com/threads/T-5e2d7b14-ee5c-40ff-b11a-1a158c0521c5
2026-10-18 14:57:03 -07:00
Dr.Lt.Data 572f363696 v3: Prevent HTML and URL injection in the Manager UI (#3296) 2026-09-19 08:22:26 +09:00
Dr.Lt.Data 98be899011 harden(ui): escape untrusted text before the batch error dialog (#3128)
The dialog renders HTML, so run the server body and the pack title
(registry-derived) through the existing sanitizeHTML() at both sites. The
title is wrapped in String() so a missing title can't throw inside the error
handler; rendered text is unchanged for ordinary values.
2026-08-15 08:16:23 +09:00
Dr.Lt.Data 4fe65b088e fix(ui): surface the server's reason for a batch 404 (#3128)
The batch install/uninstall paths replaced the server's 404 body with a
false "default channel" lead. Drop the 404 branch so a 404 falls through to
the existing server-text path; uninstall never returns 404 anyway. Fixes
#3128 (section 1), reported by plz12345.
2026-08-15 08:16:23 +09:00
Dr.Lt.Data ffb2f03e92 fix(security-messages): state the actual gate in install-denial messages (#3128)
The install-denial diagnostics named the wrong gate, sending users to
settings that could not resolve their denial:

- SECURITY_MESSAGE_FLAG_GIT_URL / _FLAG_PIP omitted the loopback half of
  the flag-AND-loopback predicate, telling users to enable a flag that
  was often already enabled. They now state both conditions, print the
  live --listen value at every emission site, and explain that both
  values are read once at startup (stop the server, edit, then start).
- SECURITY_MESSAGE_MIDDLE_OR_BELOW instructed setting security_level to
  'middle', a value that does not exist; it now names only real values
  (any level other than 'strong': normal, normal-, weak).
- The blocked-risk arm reused SECURITY_MESSAGE_GENERAL, blaming
  security_level although no value of it can help there; it now emits a
  dedicated SECURITY_MESSAGE_BLOCKED_RISK stating this is not a
  configuration problem.
- SECURITY_MESSAGE_NORMAL_MINUS_MODEL now names its loopback-listener
  condition and the same restart guidance.
- The js/common.js dedicated-403 messages mirror the loopback clause.
2026-08-13 12:38:11 +09:00
Rvage 25f519ed0c Fix: tooltip global listener (#3114)
* remove noise

* fix: remove global tooltip listener
2026-08-02 15:08:27 +09:00
Dr.Lt.Data 79dd5e2358 Merge pull request #2152 from jfcantu/main
New feature: Node Usage Analyzer
2026-07-20 20:13:04 +09:00
Dr.Lt.Data e4c5401dd5 feat(security): dedicated install flags decoupled from security_level (#2991)
* feat(security): add dedicated install flags decoupled from security_level

Gate 'install via git URL' and 'install via pip' with dedicated opt-in
boolean flags (allow_git_url_install / allow_pip_install) in config.ini
[default], fully replacing the security_level term on those surfaces
(REPLACE, not AND — a strict level no longer denies when the flag is on;
a weak level no longer allows when the flag is off).

- glob/manager_server.py: pure predicate is_dedicated_install_allowed
  (flag AND loopback, request-time args.listen); REPLACE gates at
  /customnode/install/git_url and /customnode/install/pip; batch
  unknown-URL arm routes through the same full predicate at the risky
  position (loopback term is load-bearing — the middle entry gate has
  no network-position term; the entry gate itself stays in force);
  unknown-pip in batch stays unconditionally blocked; new
  SECURITY_MESSAGE_FLAG_* denial constants name the responsible flag;
  security_403_response gains flag_token (comfyui_outdated keeps precedence)
- glob/manager_core.py: register both keys (read via get_bool default-false,
  write list, exception fallback); "true"-only truthy; restart-only activation
- js/common.js: 403 dialog copy names the responsible flag at the two
  install call sites
- README.md: security-policy docs for both flags (per-surface scope incl.
  the batch entry-gate qualifier, REPLACE decoupling, loopback bound,
  opt-in config snippet, default-deny + migration note); stale tier lists
  corrected against the actual gates
- CHANGELOG.md: opt-in migration note + accepted residual risk (flags
  bypass the forced-strong outdated-ComfyUI hardening on loopback,
  opt-in only), decoupling claim qualified for the batch entry gate

Tests: unit suite (predicate truth table, REPLACE litmus both directions,
AST binding-proofs against live handlers, subprocess-isolated config
contract) plus a real-server E2E suite that mounts the Manager-under-test
via git worktree (exact-SHA pin, detached) against a real ComfyUI and
exercises both flag surfaces and both arms — deny arms (403 + flag-naming
body/log + no install artifact), git-URL allow arm (real clone), pip allow
arm as a two-phase reservation oracle — with zero-residual self-clean.
Module skips without E2E_COMFYUI_ROOT; unit suite unaffected.

The manager-v4 branch ships the identical policy (shared invariants +
config contract); this tree uses the degraded predicate 'flag AND
loopback' (no personal_cloud-equivalent mode here).

* bump version to v3.41
2026-06-16 03:34:10 +09:00
Terry JiaandTerry Jia 194bcedcfc fix(graphToPrompt): forward arguments to the wrapped function (#2982)
Co-authored-by: Terry Jia <terry@comfy.org>
2026-06-12 07:05:30 +09:00
Dr.Lt.Data 491f847bbc fix(security): harden CSRF with Content-Type gate and OpenAPI sync (#2819)
Defense-in-depth over GET→POST alone: reject the three CORS-safelisted
simple-form Content-Types (x-www-form-urlencoded, multipart/form-data,
text/plain) on 5 no-body POST handlers (snapshot/save,
manager/queue/{reset,start,update_comfyui}, manager/reboot) to block
<form method=POST> CSRF that bypasses method-only gating. Convert 10 pure
state-changing endpoints (fetch_updates, queue/{update_all,reset,start,
update_comfyui}, snapshot/{remove,restore,save}, comfyui_switch_version,
reboot) from GET to POST and split 5 config endpoints
(db_mode/preview_method/channel_url_list/policy/{component,update}) into
GET(read) + POST(write, JSON body). Emit the in_progress + done event pair
from the /manager/queue/install sync-enable fast-path so client UI
finalizes (previously only queue/start's empty worker done fired, leaving
item.restart unset and the Enable button visible after a successful enable).
Harden js/custom-nodes-manager.js completion path: await onQueueCompleted
with try/catch (surfaces silent turbogrid stale-item throws), replace the
{}.length == 0 no-op empty guard, set install_context before queue/install
to avoid a sync-completion race, wrap classList/updateCell in try/catch.
Resynchronize openapi.yaml with the converted routes (method → post, query
params → requestBody JSON schema, sibling post on 5 split endpoints).
Update 31 JS fetchApi call sites across 7 files; add
tests/test_csrf_content_type_helper.py covering 5 Content-Type cases via
aiohttp TestClient.

Reported-by: XlabAI Team of Tencent Xuanwu Lab
CVSS: 8.1 (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H)
2026-04-22 05:04:07 +09:00
PxTicks 0219872906 Fix handleFile monkeypatch for new frontend signature (#2640)
handleFile signature is updated in ComfyUI frontend [handleFile (file: File, openSource?: WorkflowOpenSource, options?: { deferWarnings?: boolean } )]. Using rest parameters to fix and future-proof.
2026-02-27 01:49:20 +09:00
Dr.Lt.Data f4fdd51ce9 feat(preview): disable Manager preview method when ComfyUI native feature is available
- Add detection for ComfyUI PR #11261 (per-queue preview override)
- Return DISABLED status when native feature is detected
- Improve UI loading state and prevent flash of enabled state
- Add accessibility attributes and visual feedback for disabled state
- Show user notification when feature transitions to native
- Version bump to 3.39
2025-12-19 23:05:52 +09:00
DavidandDr.Lt.Data ae6c7dd673 Changed Main Dialog to match aesthetics and close button location as Original ComfyUI Interface (#2349)
* Started changing UI to match the rest of ComfyUI

Completed Main Container

* - Added layout formatting to components of the Manager dialog box
- Pulled name from select and put it into a label (eg "DB: Channel" now has a label of DB and a dropdown with channel, etc)
- Fixed incorrect z-index

* Removed this.close() I added before finding z-index issue.

* Matched buttons and drop downs to match style of ComfyUI interface while keeping the colours the same as OG ComfyUI Manager

* - Took gui building out and put into its own .js
- Applied theme to Nodes Manager
- Made theme respect user theme colors

* - Themed model manager and snapshot manager
- fixed incorrect id in gui builder

* Fix syntax error in color property

---------

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

Requires ComfyUI v0.3.76+ for full functionality.
Backward compatible with older versions (uses legacy path).
2025-12-03 00:42:12 +09:00
rubyrubyp 8e5bf46e14 Fix spelling in font definition (#2189) 2025-10-02 07:36:57 +09:00
umyunsang 79757366e8 docs: fix typos and phrasing in README and docs (en/ko)\n\n- README: grammar, capitalization, option name (--skip-stat-update), double-click, macOS\n- js/README: Copus platform name\n- docs/en: Colab capitalization\n- docs/ko: spacing, wording, typos (예를, 명령, show를, etc.) (#2166) 2025-09-23 07:17:41 +09:00
John Cantu e04ed0eda7 update README.md for node usage analyzeer 2025-09-14 23:10:10 -07:00
John Cantu 02aa67b541 Merge branch 'main' of https://github.com/jfcantu/ComfyUI-Manager 2025-09-14 22:52:41 -07:00
John Cantu 67d03530a3 Changes and new code for Node Usage Analyzer 2025-09-14 22:49:54 -07:00
Christian Byrne e8ec1ce8e3 recurse when finding nodes in workflow (#2070) 2025-08-11 12:47:20 +09:00
copusDevandjohn bd752550a8 feat: change web icon (#2042)
Co-authored-by: john <john@server31.io>
2025-07-30 18:31:56 +09:00
copusDevandjohn bcfe0c2874 feat: copus content add rating (#1962)
Co-authored-by: john <john@server31.io>
2025-07-02 12:32:17 +09:00
Dr.Lt.Data 815784e809 fixed: Fix issue where some nodepacks were displayed redundantly in custom nodes manager. 2025-06-25 00:18:18 +09:00
filtered 85a6fb75b8 Add workaround for delay in link connection (#1873)
New input sockets have no pos, and require a render frame to occur before links can be set to the correct location.
2025-05-27 06:27:45 +09:00
Christian Byrne 0f2c0ab65d [docs] Add README for js directory (#1853)
* [docs] Add README for js directory

* [docs] Update js/README.md based on PR review feedback

* [docs] Update js/README.md with corrected descriptions
2025-05-21 21:44:48 +09:00
moldwebs 48c10d0b95 Show models used in current workflow (#1819)
Simple javascript modify that filter models used in current workflow
2025-05-13 01:48:29 +09:00
Christian Byrne a66bada8a3 Update workflow-metadata.js 2025-04-23 17:24:07 -07:00
Christian Byrne af269d198d trim version string embedded in workflow (#1758) 2025-04-19 09:30:41 +09:00
Yoland Yan 036b63efe7 Change order of manager to be default install lateste (#1747) 2025-04-15 18:46:24 +09:00
Dr.Lt.Data 39eaa76b8a fixed: remove migration code completely
https://github.com/ltdrdata/ComfyUI-Manager/issues/1659
2025-03-14 18:24:30 +09:00
CenFun 7651e5e48b UI improvement (#1625) 2025-03-14 00:51:37 +09:00
Dr.Lt.Data e71e68e298 modified: better error log when failed to update comfyui
https://github.com/ltdrdata/ComfyUI-Manager/issues/1576
2025-03-02 17:42:31 +09:00
Dr.Lt.Data 6969557693 fixed: stuck if cnr node cannot be resolved
https://github.com/ltdrdata/ComfyUI-Manager/issues/1596#issuecomment-2692415656
2025-03-02 17:28:53 +09:00
Dr.Lt.Data 5a5a37dfee fixed: robust initial caching
https://github.com/comfyanonymous/ComfyUI/issues/7003#issuecomment-2690687621

modified: store `db_mode` setting to `config.ini`
https://github.com/ltdrdata/ComfyUI-Manager/issues/1582#issuecomment-2687332355

remove: fetch updates / skip updates
- 'updates' filter will trigger fetching
https://github.com/ltdrdata/ComfyUI-Manager/issues/1584

added: support for `disable_front` or `DISABLE_COMFYUI_MANAGER_FRONT`
2025-03-01 01:06:17 +09:00
Dr.Lt.Data 5ef58652bf remove useless code 2025-02-26 21:19:22 +09:00
Dr.Lt.Data 4fd17b0bf5 improved: advanced missing node detection based on embedded info
https://github.com/ltdrdata/ComfyUI-Manager/issues/1445

feat: Custom Nodes In Workflow
https://github.com/ltdrdata/ComfyUI-Manager/issues/990
https://github.com/ltdrdata/ComfyUI-Manager/issues/127

improved: show version on main dialog
modified: aux_id - use github_id if possible
removed: `fetch updates` button
2025-02-24 21:18:42 +09:00
Dr.Lt.Data a68330fb8f rollback wip code 2025-02-23 11:25:30 +09:00
Dr.Lt.Data 2449ad5c69 update DB 2025-02-23 11:08:07 +09:00
bymyself 48d5ec9e66 Retain workflow versions when serializing node_versions (#1563)
* retain initial node_versions on serialize

* give precedence to workflow version

* set version info on node

* move patch to setup hook

* switch to nodeCreated
2025-02-22 17:42:36 +09:00
Dr.Lt.Data e9df78c0e7 improved: When user do Switch ComfyUI, update the policy accordingly. 2025-02-20 12:20:04 +09:00
Dr.Lt.Data 5dd8ea8aab feat: update policy for updating ComfyUI
https://github.com/ltdrdata/ComfyUI-Manager/issues/1552

fixed: comfyui versions should be based on commit date
https://github.com/ltdrdata/ComfyUI-Manager/issues/1566

fixed: invalid identifying of nightly node packs which has `git@github.com:...` url
fixed: switch comfyui should be based on `master` branch instead of `main` branch
fixed: switch_to_default_branch - more robust switching
refactor: endpoints for policies
2025-02-19 21:34:13 +09:00
Dr.Lt.Data fa1b514440 improved: Update All - Show link on the result board
fixed: Update All - Updates for unknown nodes were not being applied
fixed: corner case crash whilte install/updating

https://github.com/ltdrdata/ComfyUI-Manager/issues/1168
2025-02-16 14:25:57 +09:00
Dr.Lt.Data 3b0709f5f2 improved: cm-cli.py save-snapshot - validate output path
fixed: Update all - Properly display the results of the ComfyUI update.
fixed: Update all - An issue where the action results of the custom nodes manager were reflected in the main dialog.

https://github.com/ltdrdata/ComfyUI-Manager/issues/1548
2025-02-15 09:23:04 +09:00
CenFun 6b832edd2f store user's column width (#1541)
* Resolving conflicts

* ruff --fix
2025-02-14 07:29:11 +09:00
Dr.Lt.Data 6ff6e05408 improve: update all - background updating
modified: update all - don't update ComfyUI
2025-02-13 22:34:36 +09:00
Dr.Lt.Data 9963afa558 modified: remove comfyui-manager from list if desktop mode 2025-02-13 08:46:18 +09:00
Dr.Lt.Data e113e011cb improved: Display the terminal when starting the installation of a model or node packs 2025-02-10 02:56:55 +09:00