OpenCV CV_8UC_0
The Type Code Behind Every Normal Image
- int
OpenCV CV_8UC_0 is the least exciting node in this pack, and the one with the best claim to being "the default." Feed it a channels count and it returns the OpenCV type constant for an unsigned 8-bit image: CV_8UC(1) = 0, CV_8UC(3) = 16. Every ordinary BGR or grayscale frame you've ever processed in OpenCV is CV_8UC under the hood - this node just makes the constant explicit instead of typed by hand.
It ships in geroldmeisinger/opencv-comfyui, the auto-generated pack wrapping ~635 top-level cv2 functions as ComfyUI nodes. The README's warning applies here as much as anywhere: these nodes are mechanically generated, ugly, and you should expect dragons. But CV_8UC_0 is about as dragon-free as it gets - it's a one-line cv2.CV_8UC(channels) call.
Why the constant matters
OpenCV packs depth + channel count into a single integer with depth + (channels - 1) * 8. Unsigned 8-bit is depth 0, so CV_8UC(3) = 16, CV_8UC(1) = 0, CV_8UC(4) = 24. When this pack's nodes expose a type-style parameter, 16 is what "normal color image" means to OpenCV. The node exists so you can build that value in-graph, and so a workflow self-documents what kind of array it expects instead of sprinkling magic numbers.
This is also the node that most directly ties into the pack's central translation problem. ComfyUI's IMAGE is a torch tensor - RGB, float32, 0–1, shape (batch, H, W, C). OpenCV's world is numpy arrays - BGR or grayscale, uint8, 0–255, shape (H, W, C). The Image2Nparray and Nparrays2Image conversion nodes bridge them, and CV_8UC_0 describes what lives on the OpenCV side of that bridge: the ordinary unsigned byte image.
Inputs and outputs
channels(INT) - channel count;3for color,1for grayscale.int(INT, output) - the packed type code,0 + (channels - 1) * 8.
Install and the usual pack caveats
Install via ComfyUI Manager (search opencv-comfyui) or:
cd ComfyUI/custom_nodes
git clone https://github.com/geroldmeisinger/opencv-comfyui
pip install opencv-contrib-python
Then restart ComfyUI. No weights to download - the only dependency beyond numpy/torch is the OpenCV contrib build. Use opencv-contrib-python, not the README's typo'd opencv-python-contrib; if you hit Cannot import name 'guidedFilter' you've got conflicting OpenCV installs, a known issue with a documented fix.
One useful error to recognize: error: (-215:Assertion failed) img.type() == CV_8UC1 means a function wanted a single-channel unsigned 8-bit image and got something else. That's OpenCV telling you, in so many words, "give me CV_8UC(1)." Convert to grayscale first with cvtColor (code 6), or match the channel count this node computes for you.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| channels | INT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| int | INT | — |