Skip to content

feat: add Custom Node Manager#9047

Open
Pfannkuchensack wants to merge 5 commits intoinvoke-ai:mainfrom
Pfannkuchensack:feature/custom-node-manager
Open

feat: add Custom Node Manager#9047
Pfannkuchensack wants to merge 5 commits intoinvoke-ai:mainfrom
Pfannkuchensack:feature/custom-node-manager

Conversation

@Pfannkuchensack
Copy link
Copy Markdown
Collaborator

Summary

Adds a Custom Node Manager as a new tab in the sidebar, allowing users to install, manage, and remove community node packs directly from the UI — no manual file copying or restarts required.

Backend:

  • New API router (/api/v2/custom_nodes/) with endpoints for list, install (git clone), uninstall, and reload
  • Runtime node loading/unloading via InvocationRegistry.unregister_pack() — no restart needed
  • Automatic pip install of requirements.txt dependencies
  • Automatic detection and import of workflow .json files from node pack repos (tagged with node-pack:<name> for filtering, removed on uninstall)
  • OpenAPI schema cache invalidation so the workflow editor reflects changes immediately

Frontend:

  • New "Nodes" tab with circuit icon (PiCircuitryBold) in the sidebar between Models and Queue
  • Two-panel layout matching the Model Manager pattern:
    • Left: installed node packs list with reload and per-pack uninstall
    • Right: tabbed install UI (Git Repository URL / Scan Folder) with install log table
  • Security warning banner about trusting node pack authors
  • RTK Query endpoints with cache tag invalidation for CustomNodePacks, Schema, and Workflow

Docs:

  • User guide: docs/nodes/customNodeManager.md
  • Developer guide: docs/nodes/creatingNodePack.md (repo structure, __init__.py, workflows, best practices)

Related Issues / Discussions

N/A — new feature

QA Instructions

  1. Start the dev server (backend + frontend)
  2. Click the new Nodes tab (circuit icon) in the left sidebar
  3. Install a node pack: paste a Git URL into the "Git Repository URL" tab and click Install. Verify:
    • The pack appears in the left panel with node count and type badges
    • If the repo contains workflow .json files, they appear in the workflow library (tagged node-pack:<name>)
    • The install log at the bottom shows the result
  4. Reload: click the Reload button and verify it picks up manually added packs
  5. Uninstall: click Uninstall on a pack and verify:
    • The pack disappears from the list
    • The nodes are no longer available in the workflow editor (no restart needed)
    • Imported workflows from that pack are removed from the library
  6. Edge cases: try installing with an invalid URL, a repo without __init__.py, an already-installed pack

Merge Plan

No special considerations. No DB schema changes — workflows are stored via the existing workflow library API.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Tests added / updated (if applicable) — 21 backend + 10 frontend tests
  • ❗Changes to a redux slice have a corresponding migration
  • Documentation added / updated (if applicable) — user guide + developer guide
  • Updated What's New copy (if doing a release after this PR)

…from the UI

Adds a new "Nodes" tab (circuit icon) to the sidebar with a two-panel layout:
- Left: list of installed custom node packs with reload and uninstall
- Right: tabbed install UI (Git URL / Scan Folder) with install log

Backend API endpoints (POST install, DELETE uninstall, POST reload, GET list)
handle git clone, pip dependency install, runtime node loading/unloading,
and automatic workflow import from node pack repositories. Workflows are
tagged with node-pack:<name> and removed on uninstall.

Includes user and developer documentation, plus 31 tests (21 backend, 10 frontend).
@github-actions github-actions bot added api python PRs that change python files invocations PRs that change invocations frontend PRs that change frontend files python-tests PRs that change python tests docs PRs that change docs labels Apr 12, 2026
@Pfannkuchensack
Copy link
Copy Markdown
Collaborator Author

image image

@iwr-redmond
Copy link
Copy Markdown

One of the most annoying problems with ComfyUI's custom nodes is conflicting dependencies, which has gotten so bad that ComfyUI is now developing an isolation solution to mitigate it. Has there been any thought at this stage about how to protect the base install from incompatible dependencies in requirements.txt?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api docs PRs that change docs frontend PRs that change frontend files invocations PRs that change invocations python PRs that change python files python-tests PRs that change python tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants