General Purpose Controlnet Unit
Preprocessing and ControlNet apply in a single node
- positive
- negative
- image
- mask
- preprocessed_image
- positive
- negative
Normally, running ControlNet in ComfyUI takes at least two nodes: a preprocessor from Fannovel16's comfyui_controlnet_aux to turn your reference image into an edge map or a depth map, then a separate Apply ControlNet node to fold that map into your conditioning. ControlnetUnit collapses both steps into one. Pick a preprocessor, pick a ControlNet checkpoint, wire in your image, and this node hands you back both the preprocessed hint map (for a sanity check) and your positive/negative conditioning with the ControlNet baked in.
The name is a tell
A1111's sd-webui-controlnet extension called each ControlNet slot in its UI a "unit" - Unit 0, Unit 1, and so on. This pack, built to bridge ComfyUI with the Photoshop plugin, borrows that vocabulary directly. If you came up on A1111 before switching, the whole shape of this node - and this pack in general - will feel familiar in a way most native ComfyUI nodes don't.
It depends on comfyui_controlnet_aux, and the README says so directly: "Similarly install (comfyui_controlnet_aux) from ComfyUI-Manager to use controlnet." The preprocessor_name dropdown is that pack's preprocessor roster - Canny, OpenPose, HED, FakeScribble, Inpaint, LeReS depth, AnimeLineArt, LineArt, MediaPipe FaceMesh, MiDaS normal map, and 16 more, 26 total.
One worth knowing before you start
This is a 2023-vintage node, from before ControlNet's modern "union" checkpoints existed - the single-file models that handle canny, depth, and pose all from one checkpoint. control_net_name here expects the older style: one ControlNet checkpoint per condition, so a canny preprocessor needs a canny-trained ControlNet model, a depth preprocessor needs a depth-trained one, and so on. Mixing them - say, feeding a canny edge map into a depth ControlNet model - doesn't error, it just produces conditioning that doesn't mean anything, and your output will look like ControlNet barely did anything at all.
The inputs that matter
preprocessor_name- which controlnet_aux preprocessor to run on your reference image before applying the ControlNet.control_net_name- the ControlNet checkpoint to apply. This dropdown is populated from whatever's actually inComfyUI/models/controlnet- it's empty until you download at least one.strength(0–10, default 1) - how hard the condition pushes. The classic ControlNet-era default is 1.0 for a firm match, dialed down to 0.3–0.7 for looser guidance.start_percent/end_percent(0–1) - when during denoising the condition applies. Ending it early - say 0 to 0.5 - locks in composition during the first half of sampling and lets the model finish the details on its own, the standard trick for structure-heavy work.resolution(64–2048, default 512) - the working resolution for the preprocessor pass.- Optional
image- your reference to preprocess;mask- restricts where the condition applies;threshold_a/threshold_b- generic slots whose actual meaning depends on which preprocessor you picked (Canny's low/high edge thresholds, MediaPipe FaceMesh's max faces and confidence, and so on - this pack's ownGetConfignode documents the full mapping per preprocessor if you want the specifics).
Outputs: preprocessed_image (the hint map itself - worth previewing to confirm your preprocessor did something sane before you sample), plus positive and negative - your original conditioning, now carrying the ControlNet, ready to wire straight into KSampler.
Installing it
ComfyUI Manager: search "Comfy-Photoshop-SD" and install - then separately search and install "ComfyUI's ControlNet Auxiliary Preprocessors" (the comfyui_controlnet_aux pack) if you don't already have it, since ControlNet won't work here without it. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/AbdullahAlfaraj/Comfy-Photoshop-SD
git clone https://github.com/Fannovel16/comfyui_controlnet_aux
Restart afterward. You'll also need at least one ControlNet checkpoint sitting in models/controlnet - none ship with either pack.
Where people get burned
An empty control_net_name dropdown means exactly what it looks like: no ControlNet checkpoint downloaded yet. Preprocessor/model mismatches (above) are the second-most common issue and the hardest to notice, since nothing errors - the image just looks like ControlNet isn't doing much. And this is genuinely a fragile corner of the pack: there's a real user report of Auto-Photoshop-SD's ControlNet integration breaking after an update with no clear cause, resolved only by making sure every piece - the Photoshop plugin, its extensions, and this ComfyUI-side pack - was on a matching current version. If ControlNet was working and suddenly isn't after you updated anything in this chain, version drift between the pieces is the first thing to check before you start second-guessing your settings.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| preprocessor_name | COMBO | 26 options: None, CannyEdgePreprocessor, OpenposePreprocessor, HEDPreprocessor, FakeScribblePreprocessor, InpaintPreprocessor, +20 | |
| control_net_name | COMBO | 0 options: | |
| strength | FLOAT | 1.000–10 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| resolution | INT | 51264–2048 | — |
| imageopt | IMAGE | — | |
| maskopt | MASK | — | |
| threshold_aopt | FLOAT | 0.00 | — |
| threshold_bopt | FLOAT | 0.00 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| preprocessed_image | IMAGE | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |