Skip to content

Managing Custom Nodes

View, update, remove, and clean up custom nodes in your environment.

Overview

Once you've added custom nodes, ComfyDock provides commands to manage their lifecycle:

  • List - View all installed nodes with version info
  • Update - Pull latest changes from repositories
  • Remove - Uninstall nodes (single or batch)
  • Prune - Clean up unused nodes automatically

Listing installed nodes

View all custom nodes in your environment:

cfd node list

Example output:

Custom nodes in 'my-project':
  â€ĸ comfyui-impact-pack (registry) @ abc12345
  â€ĸ comfyui-controlnet-aux (git) @ def67890
  â€ĸ my-custom-node (development) (dev)

Understanding the output

Each line shows:

  • Node name - The registry ID or directory name
  • Source type - Where the node came from:
  • registry - Installed from ComfyUI registry lookup
  • git - Installed directly from GitHub URL
  • development - Local development node tracked with --dev
  • Version - The git commit hash (short form) or (dev) for development nodes

When no nodes are installed

No custom nodes installed

This means your environment only has ComfyUI's built-in nodes.

Updating nodes

Update a node to the latest version from its repository:

cfd node update comfyui-impact-pack

What happens:

  1. Git pull - Fetches latest changes from the node's repository
  2. Dependency scan - Checks for updated requirements.txt
  3. Dependency update - Installs any new or updated Python packages
  4. Version update - Updates the commit hash in pyproject.toml

Example output (changes detected):

🔄 Updating node: comfyui-impact-pack
✓ Updated to commit abc1234 (10 commits ahead)

Run 'cfd status' to review changes

Example output (no changes):

🔄 Updating node: comfyui-impact-pack
â„šī¸  Already up to date

Auto-confirm updates

Skip the confirmation prompt with --yes:

cfd node update comfyui-impact-pack --yes

Useful for scripting or CI/CD pipelines.

Skip resolution testing

By default, ComfyDock tests that updated dependencies don't conflict. Skip this with:

cfd node update comfyui-impact-pack --no-test

Updating development nodes

Development nodes have a different update behavior:

cfd node update my-custom-node

For development nodes:

  • Does not run git pull (you manage git yourself)
  • Does re-scan requirements.txt and sync dependencies
  • Shows what dependencies were added or removed

Example output:

🔄 Updating node: my-custom-node
✓ Development node dependencies synced
  Added dependencies:
    + opencv-python>=4.8.0
  Removed dependencies:
    - pillow<9.0.0

Run 'cfd status' to review changes

When to update development nodes

Run cfd node update <dev-node> when you:

  • Change requirements.txt in your dev node
  • Want ComfyDock to sync dependencies to your environment
  • See "Dev node updates available" in cfd status

Removing nodes

Remove custom nodes from your environment:

cfd node remove comfyui-impact-pack

What happens:

  1. Removes from pyproject.toml - Node configuration deleted
  2. Deletes directory - Removes custom_nodes/ComfyUI-Impact-Pack/
  3. Preserves in cache - Node is cached globally and can be reinstalled quickly

Example output:

🗑 Removing node: comfyui-impact-pack
✓ Node 'ComfyUI-Impact-Pack' removed from environment
   (cached globally, can reinstall)

Run 'comfydock -e my-env env status' to review changes

Batch removal

Remove multiple nodes at once:

cfd node remove comfyui-impact-pack comfyui-controlnet-aux comfyui-video-helper-suite

Output:

🗑 Removing 3 nodes...
  [1/3] Removing comfyui-impact-pack... ✓
  [2/3] Removing comfyui-controlnet-aux... ✓
  [3/3] Removing comfyui-video-helper-suite... ✓

✅ Removed 3/3 nodes

Run 'comfydock -e my-env env status' to review changes

Removing development nodes

Development nodes are handled differently:

cfd node remove my-custom-node

Output:

🗑 Removing node: my-custom-node
â„šī¸  Development node 'my-custom-node' removed from tracking
   Files preserved at: custom_nodes/my-custom-node.disabled/

Development nodes are:

  • Removed from tracking - No longer in pyproject.toml
  • Directory renamed - Moved to .disabled suffix to prevent ComfyUI from loading it
  • Not deleted - Your code is preserved

Why preserve development nodes?

ComfyDock assumes you want to keep local development work. The directory is disabled (renamed) so ComfyUI won't load it, but your code remains intact.

Remove development nodes with --dev flag

Explicitly remove a development node:

cfd node remove my-custom-node --dev

This has the same behavior as regular removal of dev nodes (renames to .disabled).

Pruning unused nodes

Remove all nodes that aren't used by any tracked workflow:

cfd node prune

What it does:

  1. Analyzes all workflows in your environment
  2. Identifies nodes not referenced by any workflow
  3. Prompts for confirmation
  4. Removes unused nodes

Example output:

Found 2 unused node(s):

  â€ĸ comfyui-old-pack
  â€ĸ comfyui-experimental-feature

Remove 2 node(s)? [y/N]: y

🗑 Pruning 2 unused nodes...
  [1/2] Removing comfyui-old-pack... ✓
  [2/2] Removing comfyui-experimental-feature... ✓

✓ Removed 2 node(s)

Auto-confirm pruning

Skip the confirmation prompt:

cfd node prune --yes

Exclude specific nodes

Keep certain nodes even if unused:

cfd node prune --exclude comfyui-dev-tools comfyui-experimental-feature

This removes unused nodes except the excluded ones.

When no unused nodes exist

✓ No unused nodes found

All installed nodes are referenced by at least one workflow.

When to use prune

Use cfd node prune when:

  • Cleaning up after testing many nodes
  • Reducing environment size before export
  • Keeping only workflow-essential nodes
  • Preparing a production environment

Viewing node status

The cfd status command shows node-related information:

cfd status

Example output:

Environment: my-project ✓

đŸ“Ļ Nodes (3 installed):
  ✓ comfyui-impact-pack @ abc1234
  ✓ comfyui-controlnet-aux @ def6789
  ⚠ comfyui-old-node @ ghi0123 (update available)

🔧 Dev node updates available:
  â€ĸ my-custom-node

Status indicators

  • ✓ Green checkmark - Node installed and up to date
  • ⚠ Warning - Update available or issue detected
  • Dev node updates - Development node requirements.txt changed since last sync

Syncing development node changes

When you see "Dev node updates available":

cfd node update my-custom-node

This re-syncs the node's dependencies to your environment.

Node types explained

ComfyDock tracks three types of nodes:

Registry nodes

cfd node add comfyui-impact-pack
  • Source: ComfyUI registry lookup
  • Management: Full ComfyDock control (update, remove)
  • Version tracking: Git commit hash
  • Listed as: comfyui-impact-pack (registry) @ abc1234

Git nodes

cfd node add https://github.com/user/custom-node
  • Source: Direct GitHub URL
  • Management: Full ComfyDock control
  • Version tracking: Git commit hash
  • Listed as: custom-node (git) @ def5678

Development nodes

cfd node add my-local-node --dev
  • Source: Local development directory
  • Management: You handle git, ComfyDock handles dependencies
  • Version tracking: Marked as dev
  • Listed as: my-local-node (development) (dev)

Common workflows

Update all nodes

ComfyDock doesn't have a built-in "update all" command, but you can script it:

# List node names and update each
cfd node list | grep 'â€ĸ' | awk '{print $2}' | while read node; do
    cfd node update "$node" --yes
done

Use with caution

Updating all nodes at once can introduce breaking changes. Test in a non-production environment first.

Clean up after workflow testing

# Remove unused nodes after experimenting
cfd node prune --yes

# Commit the cleanup
cfd commit -m "Pruned unused nodes"

Temporarily disable a node

Instead of removing:

# Manually rename the directory
cd ~/comfydock/environments/my-env/ComfyUI/custom_nodes/
mv ComfyUI-SomeNode ComfyUI-SomeNode.disabled

ComfyUI won't load .disabled directories. Re-enable by renaming back.

Keep development nodes in sync

Create a git hook in your dev node repository:

# In your dev node repo: .git/hooks/post-checkout
#!/bin/bash
cfd node update my-custom-node

This auto-syncs dependencies when you checkout branches.

Troubleshooting

Node not found when updating

✗ Failed to update node 'unknown-node'
   Node not found in environment

Solutions:

  1. Check installed nodes:
    cfd node list
    
  2. Verify spelling matches the listed name
  3. The node may have been removed - reinstall:
    cfd node add unknown-node
    

Update fails with git errors

✗ Failed to update node 'comfyui-impact-pack'
   Git pull failed: uncommitted changes in repository

Solutions:

  1. Check the node directory for local changes:
    cd ~/comfydock/environments/my-env/ComfyUI/custom_nodes/ComfyUI-Impact-Pack
    git status
    
  2. Commit or stash changes:
    git stash
    
  3. Try updating again:
    cfd node update comfyui-impact-pack
    

Prune removes important nodes

If you accidentally pruned nodes you need:

# Rollback to previous version
cfd rollback

# Or reinstall specific nodes
cfd node add comfyui-important-pack

Development node not detected

If cfd node list doesn't show your dev node:

  1. Verify it was added with --dev:
    cfd node add my-node --dev
    
  2. Check pyproject.toml:
    grep my-node .cec/pyproject.toml
    

Next steps