CNCC ControlNet
CNCC ControlNet applies no ControlNet — that's the whole point
- image
- original_image
- controlnet_image
- pose_keypoint
Yes, the node called CNCC ControlNet is the one that doesn't apply a ControlNet. Blame the naming, not the design. This is the preprocessor half of the CNCC pack: a preset-driven wrapper around comfyui_controlnet_aux that takes an image in and gives you back the preprocessed map, with no checkpoint loaded and no conditioning touched.
Why you'd want that
Three reasons, and the first is the boring one: you want to see the map. Depth extraction on a busy photo is a coin flip - the model happily emits a grey smear, and you only find out after a four-minute sample. This node makes the map an image you can look at, in a graph with no sampler in it.
Second, batch work. Run a folder of frames through your DWPose preset, save the maps, feed them wherever. No ControlNet is loaded, so it's a straight function of the preset.
Third - and this one has aged well - the map is increasingly the deliverable. In 2026 a preprocessed depth or pose map is a perfectly good input image for an edit model: one condition, one shot, describable in a sentence, no checkpoint needed. Hand the map to Qwen-Image-Edit or Klein when the job is simple; load a real ControlNet when you want partial strength or two conditions blended. This node is the front half of both paths, and it stops at the map so you can pick.
How it works
A preset is a small JSON record naming a preprocessor class from comfyui_controlnet_aux (DWPreprocessor, CannyEdgePreprocessor, …) plus the parameter values you tuned. Presets live in the pack's own presets/ folder and are shared by every CNCC node in your install.
At run time the node picks its source image - from the image input if connected, otherwise from its own drop area - looks the class up in ComfyUI's live NODE_CLASS_MAPPINGS, instantiates it, and calls it with your saved parameters. Whatever that aux node would have produced with its widgets, you get here, minus the widgets. Then both images come back.
The source image survives the trip: image_io applies EXIF orientation, converts to RGB and normalizes to a 0–1 float tensor. Nothing exotic, which is why the pack needs no dependencies of its own.
Inputs and outputs
Only one required input, cn_name - the Preset dropdown, populated from your saved presets. With none saved it holds the single placeholder <プリセット未作成>; the Japanese leaking through is a small oversight and a useful signal that there's no preset yet. Point it at a preset you later deleted and it errors rather than silently doing nothing.
Then image (optional IMAGE) and uploaded_image (an optional STRING, which is the node's drag-and-drop area). Worth stressing because it trips people: the drop zone is only used when image is not connected. Wire an IMAGE into the socket and the zone greys out, and anything you drop there is ignored.
Outputs are original_image and controlnet_image, both IMAGE. controlnet_image is the map - that's the one you send to Preview/Save Image or onward as a control map. original_image is the pass-through source, mostly there so you can compare the two without a second Load Image.
Install
comfyui_controlnet_aux is the one real requirement. Install that first, then the pack - Manager search for ComfyUI-CNCC, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ketle-man/ComfyUI-CNCC
# restart ComfyUI
No further dependencies; the pack's pyproject.toml declares none. It lands under category CNCC, and unlike its sibling it has no search aliases, so type CNCC rather than controlnet.
Before it does anything useful you need a preset. Click Settings on the node, open the CN Settings tab, pick a preprocessor from the CN list, tune its parameters, name it and save. Tick save thumbnail for a visual index in the Preset Selector tab, where you can also bulk-preview a dropped image against every preset - the fastest way to find out which preprocessor your particular image wants. Two more buttons live on the node body: a View toggle that swaps the preview between source and CN result, and Run Preview, which runs the preset without queueing the graph.
Where people get burned
The dropdown won't show a preset you just saved. Names are collected when ComfyUI assembles the node's inputs, so reload the page and the combo picks it up.
controlnet_aux preprocessor 'X' not found. The aux pack isn't installed, or it's older than the preprocessor you picked. Update it via Manager.
DWPose throws cv2.error: ... cv::dnn::gather. Real, and documented in the README - you'll usually see "Onnxruntime not found or doesn't come with acceleration providers, switch to OpenCV with CPU device" just before it. Without a GPU onnxruntime, the aux pack drives its bbox detector through OpenCV's DNN backend, which chokes on yolo_nas_*_fp16.onnx. Install onnxruntime-gpu, or set the preset's bbox_detector to yolox_l.torchscript.pt so it routes through torch.jit instead.
Presets don't survive a reinstall. They're local files in the custom node directory and gitignored, so back up custom_nodes/ComfyUI-CNCC/presets/ - your workflow PNG won't carry them.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| cn_name | COMBO | <プリセット未作成> | 1 options: <プリセット未作成> |
| imageopt | IMAGE | — | |
| uploaded_imageopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| original_image | IMAGE | — |
| controlnet_image | IMAGE | — |
| pose_keypoint | POSE_KEYPOINT | — |