Open a real ComfyUI setup, the kind someone actually generates with, and the base install is a rounding error. The weight is in eight or so custom node packs bolted on top: a manager to install the rest, an IPAdapter, AnimateDiff, a ControlNet preprocessor pack, a video pack, a detailer pack, a face-swap pack, a general utility suite. Almost every workflow you find on Civitai or in a Reddit thread leans on some subset of these same eight. So on a fresh box, before you touch your own workflow, you are installing these same eight again.
This is a reference for doing that install correctly the first time: the exact package each pack solves, its Comfy Registry ID so you can script the install instead of clicking through a UI, and the specific dependency trap each one has caused in its own issue tracker or its own README. Not "custom nodes can conflict," which everyone already knows, but which conflicts, sourced from the repos themselves.
TL;DR: Eight node packs cover most ComfyUI setups: ComfyUI-Manager (installs the rest), IPAdapter Plus (image conditioning, now in maintenance mode), AnimateDiff-Evolved (motion), controlnet_aux (ControlNet preprocessors), VideoHelperSuite (video I/O, needs ffmpeg), Impact-Pack (detailers, no longer auto-installs its own deps as of v7.6), ReActor (face swap, no longer needs a C++ compiler as of its 0.7.0 rewrite), and WAS Node Suite (210+ utility nodes, pins
opencv-python-headless<=4.7.0.72in a way that can fight VideoHelperSuite's unpinnedopencv-python). Each has a Comfy Registry ID you can pass tocomfy node install <id>for a scripted, non-interactive install.
Table of contents
- The 8 packs, registry IDs first
- ComfyUI-Manager
- IPAdapter Plus
- AnimateDiff-Evolved
- controlnet_aux
- VideoHelperSuite
- Impact-Pack
- ReActor
- WAS Node Suite
- The dependency fight nobody names
- What this means for a fresh box
The 8 packs, registry IDs first
Every pack on the Comfy Registry has a stable ID, independent of who forked or renamed the GitHub repo. That ID is what you pass to comfy node install, comfy-cli's scripted installer, so a fresh box can pull an exact node set with one command per pack instead of a search box.
| Pack | Registry ID | What it's for |
|---|---|---|
| ComfyUI-Manager | comfyui-manager | Installs and updates the other seven |
| IPAdapter Plus | comfyui_ipadapter_plus | Image-to-image conditioning |
| AnimateDiff-Evolved | comfyui-animatediff-evolved | Motion modules for animation |
| controlnet_aux | comfyui_controlnet_aux | ControlNet preprocessors (canny, pose) |
| VideoHelperSuite | comfyui-videohelpersuite | Video load/combine, needs ffmpeg |
| Impact-Pack | comfyui-impact-pack | Detailers, detectors, upscalers |
| ReActor | comfyui-reactor | Face swap |
| WAS Node Suite | was-node-suite-comfyui | 210+ general utility nodes |
comfy node install comfyui-manager comfyui_ipadapter_plus comfyui-animatediff-evolved \
comfyui_controlnet_aux comfyui-videohelpersuite comfyui-impact-pack \
comfyui-reactor was-node-suite-comfyui
That single command is the whole install, in theory. In practice each pack has a wrinkle worth knowing before you run it.
ComfyUI-Manager
The one you install first, because it installs the rest. git clone https://github.com/Comfy-Org/ComfyUI-Manager comfyui-manager into custom_nodes, or comfy node install comfyui-manager. Two things about it are easy to get wrong. First, path exactness: the install docs are explicit that Manager's files must sit at exactly ComfyUI/custom_nodes/comfyui-manager, not nested one level deeper by an unzip tool, or its own path resolution breaks. Second, as of v3.16 it supports uv for dependency resolution (set use_uv in config.ini), which is meaningfully faster than pip for the kind of large, conflict-prone install this whole post is about.
IPAdapter Plus
The node that made image-to-image conditioning ("a one-image LoRA") a standard part of most workflows. comfy node install comfyui_ipadapter_plus, or clone cubiq/ComfyUI_IPAdapter_plus. The gotcha here is not dependency conflict, it is version coupling: the README states plainly that "IPAdapter always requires the latest version of ComfyUI. If something doesn't work be sure to upgrade." That is a live constraint you re-check on every fresh box, and it has gotten harder to satisfy cleanly since April 2025, when the maintainer put the repo in maintenance-only mode: "I do not use ComfyUI as my main way to interact with Gen AI anymore as a result I'm setting the repository in 'maintenance only' mode." It still works and is still the reference implementation most workflows expect, but treat "latest ComfyUI, semi-maintained node" as the actual constraint, not "just install it."
AnimateDiff-Evolved
Motion modules for animation, maintained by Kosinkadink. comfy node install comfyui-animatediff-evolved, or search "AnimateDiff Evolved" in Manager and confirm the author is Kosinkadink before installing, per the repo's own README — there is more than one AnimateDiff node pack in circulation and they are not interchangeable. The node install is the fast part; the motion modules themselves are separate multi-hundred-MB downloads from Hugging Face or CivitAI that live under models/animatediff_models, so a snapshot of custom_nodes alone does not bring your animation setup back, the model files have to come with it.
controlnet_aux
ControlNet preprocessors, canny, depth, pose, and the rest, packaged as one AIO node plus individual ones for threshold control. comfy node install comfyui_controlnet_aux, or clone it directly and run pip install -r requirements.txt if you skip Manager, since the manual path does not auto-resolve dependencies the way a Manager-driven install does. The real cost here is not the node install, it is that most preprocessors download their own annotator model on first use, so the first canny or pose call on a fresh box is also a first-run download, not just a fast local pass.
VideoHelperSuite
Video load/combine nodes, the backbone of most video-gen workflows on top of AnimateDiff, WAN, or Hunyuan. comfy node install comfyui-videohelpersuite. Its actual dependency list is short and telling: opencv-python and imageio-ffmpeg, per its own pyproject.toml. The practical trap is not the node, it's the encode step: Video Combine shells out to ffmpeg with a configurable argument list, and an unusual codec choice like libsvtav1 needs a recent-enough ffmpeg build to exist, something the README calls out directly as a "may not exist in older versions of ffmpeg" caveat.
Impact-Pack
Detector, Detailer, and iterative-upscaler nodes, the pack most face/hand-fixing workflows depend on. comfy node install comfyui-impact-pack. This one changed under people's feet: as of v7.6, per its own changelog, "Automatic installation is no longer supported. Please install using ComfyUI-Manager, or manually install requirements.txt and run install.py to complete the installation." A script that used to just clone the repo and expect it to self-configure on first ComfyUI launch will now silently sit half-installed. If you want the Ultralytics-based face/hand detectors, you also need the separate Impact-Subpack, a companion repo, not a bundled dependency.
ReActor
Face swap, comfy node install comfyui-reactor. Worth naming the history here because it changed recently and a lot of guides online are stale: for years ReActor required insightface, which meant a working C++ build toolchain (Visual C++ Build Tools on Windows, a compiler on Linux) just to install a face-swap node. As of the 0.7.0 rewrite, the repo states plainly: "No Insightface required! No C++ Build Tools required! Instalation process is much easier now!" If you're following an older tutorial that walks through installing build tools first, that step is gone. What is not gone: face and detection models (buffalo_l, inswapper_128) download on first launch into models/insightface, so those bytes are part of what a snapshot needs to carry, or you re-download them on every fresh box regardless of how fast the node install itself is.
WAS Node Suite
210-plus general utility nodes covering image processing, text, and math, comfy node install was-node-suite-comfyui. It has the heaviest dependency list of the eight: per its Comfy Registry entry, it pulls in cmake, scikit-image, scikit-learn, scipy, rembg, timm, and a version-capped opencv-python-headless<=4.7.0.72. cmake matters specifically because a minimal cloud GPU image, the kind that skips build tooling to stay small, may not have it, and a couple of WAS's dependencies build native extensions against it.
The dependency fight nobody names
Here is a conflict you can verify without installing anything: WAS Node Suite's own registry manifest pins opencv-python-headless<=4.7.0.72, a hard upper bound. VideoHelperSuite's manifest asks for plain opencv-python, unpinned. Both packages provide the same cv2 import, and pip resolves whichever constraint set wins the install order, which is exactly the kind of "two custom node packs disagree on a shared dependency" failure the ComfyUI core team described generally: "sometimes these dependencies conflict which can 'brick' a ComfyUI installation." This is not a hypothetical instance of that problem, it's a concrete one you can hit by installing two of the most common node packs together, and it is exactly the kind of thing a fresh pip install -r requirements.txt per node, run in whatever order Manager happens to process them, will not catch until something imports the wrong cv2.
What this means for a fresh box
None of this is a reason to avoid these packs, they are the standard toolkit for a reason. It is a reason to stop treating "install my custom nodes" as one step. It is eight separate git states, eight separate dependency resolutions that can step on each other, and, for several of these packs, a chunk of model weights that live entirely outside the node folder and won't come back with a git clone. A ComfyUI-Manager snapshot pins the commits, which helps, but as we've written before, a snapshot is a manifest, not the resolved install, so restoring one still re-runs every pip install in this post.
What actually survives a fresh box unchanged is a snapshot of the box itself, custom_nodes with every pack already cloned at a working commit, the venv with the dependency fight already resolved one way, and the model folders with the weights already sitting where each node expects them. That's what workspace backups capture: a point-in-time snapshot of the directories you name, restorable on a different GPU or a different provider, so the eight-node install in this post is something you do once, not once per box. For the setup to sync continuously instead of a one-time capture, see portable workspaces.
About the author
I am Ansh, and I work on the infrastructure layer at Aquanode, the plumbing under the models rather than the models themselves. I pulled the registry IDs, dependency manifests, and README warnings in this post directly from each project's own repository and the Comfy Registry API, not from a tutorial about a tutorial. I would rather script an install once than click through the same eight installs on every new box.
Sources
- ComfyUI-Manager. GitHub
- ComfyUI_IPAdapter_plus. GitHub
- ComfyUI-AnimateDiff-Evolved. GitHub
- comfyui_controlnet_aux. GitHub
- ComfyUI-VideoHelperSuite. GitHub
- ComfyUI-Impact-Pack. GitHub
- ComfyUI-ReActor. GitHub
- was-node-suite-comfyui. GitHub
- Comfy Registry API,
api.comfy.org/nodes/<id>. Comfy Registry - Jedrzej Kosinski and Jacob Segal, "Dependency Resolution and Custom Node Standards". ComfyUI blog