Extensions/opencv-comfyui
ComfyUI Extension

opencv-comfyui

A ComfyUI extension with 637 custom nodes.

By geroldmeisinger·Created about a year ago·Updated about a year ago· 35
geroldmeisinger/opencv-comfyui
Nodes637
On cloudLocal install
Categoryimage/OpenCV
Stars35
Updatedabout a year ago

Nodes (637)

OpenCV absdiff_0

OpenCV absdiff_0

image/OpenCV
OpenCV absdiff_1

OpenCV absdiff_1

image/OpenCV
OpenCV accumulate_0

OpenCV accumulate_0

image/OpenCV
OpenCV accumulate_1

OpenCV accumulate_1

image/OpenCV
OpenCV accumulateProduct_0

OpenCV accumulateProduct_0

image/OpenCV
OpenCV accumulateProduct_1

OpenCV accumulateProduct_1

image/OpenCV
OpenCV accumulateSquare_0

OpenCV accumulateSquare_0

image/OpenCV
OpenCV accumulateSquare_1

OpenCV accumulateSquare_1

image/OpenCV
OpenCV accumulateWeighted_0

OpenCV accumulateWeighted_0

image/OpenCV
OpenCV accumulateWeighted_1

OpenCV accumulateWeighted_1

image/OpenCV
OpenCV adaptiveThreshold_0

OpenCV adaptiveThreshold_0

image/OpenCV
OpenCV adaptiveThreshold_1

OpenCV adaptiveThreshold_1

image/OpenCV
OpenCV add_0

OpenCV add_0

image/OpenCV
OpenCV add_1

OpenCV add_1

image/OpenCV
OpenCV addText_0

A text node that draws in place and returns nothing — skip it

image/OpenCV
OpenCV addWeighted_0

Blend two images with weights — OpenCV addWeighted_0

image/OpenCV
OpenCV addWeighted_1

OpenCV addWeighted_1

image/OpenCV
OpenCV applyColorMap_0

OpenCV applyColorMap_0

image/OpenCV
OpenCV applyColorMap_1

OpenCV applyColorMap_1

image/OpenCV
OpenCV applyColorMap_2

OpenCV applyColorMap_2

image/OpenCV
OpenCV applyColorMap_3

Give your grayscale a paint job with a custom OpenCV colormap

image/OpenCV
OpenCV approxPolyDP_0

Turn jagged contour edges into clean polygons with Douglas-Peucker

image/OpenCV
OpenCV approxPolyDP_1

ApproxPolyDP_1 — the identical twin of the polygon simplifier

image/OpenCV
OpenCV approxPolyN_0

Force a contour into exactly N sides

image/OpenCV
OpenCV approxPolyN_1

The identical twin of the N-sided polygon fitter

image/OpenCV
OpenCV arcLength_0

The perimeter node that every contour recipe starts with

image/OpenCV
OpenCV arcLength_1

ArcLength_1 — the duplicate perimeter node you can ignore

image/OpenCV
OpenCV arrowedLine_0

Draw annotated arrows on your outputs with OpenCV

image/OpenCV
OpenCV arrowedLine_1

The twin of the arrow-drawing node (yes, they're identical)

image/OpenCV
OpenCV batchDistance_0

BatchDistance_0 — the nearest-neighbor distance node nobody expects

image/OpenCV
OpenCV batchDistance_1

BatchDistance_1 — the duplicate nearest-neighbor node (skip this page)

image/OpenCV
OpenCV bilateralFilter_0

Smooth skin and noise without smearing the edges

image/OpenCV
OpenCV bilateralFilter_1

BilateralFilter_1 — the identical twin of the edge-preserving blur

image/OpenCV
OpenCV bitwise_and_0

The AND node for images and masks

image/OpenCV
OpenCV bitwise_and_1

The twin AND node — same intersection, second badge

image/OpenCV
OpenCV bitwise_not_0

The one-input node that flips pixels

image/OpenCV
OpenCV bitwise_not_1

The twin invert node — same flip, same badge number energy

image/OpenCV
OpenCV bitwise_or_0

The union node

image/OpenCV
OpenCV bitwise_or_1

The twin OR node — same union, second badge

image/OpenCV
OpenCV bitwise_xor_0

XOR — the mask node for 'where do these differ'

image/OpenCV
OpenCV bitwise_xor_1

OpenCV bitwise_xor_1

image/OpenCV
OpenCV blendLinear_0

BlendLinear is the per-pixel version of alpha you didn't know you wanted

image/OpenCV
OpenCV blendLinear_1

The twin of blendLinear_0 — same blend, second overload

image/OpenCV
OpenCV blur_0

OpenCV blur_0 and when to actually use it

image/OpenCV
OpenCV blur_1

The same box blur, a second overload, zero drama

image/OpenCV
OpenCV borderInterpolate_0

The OpenCV helper node you'll almost certainly never use

image/OpenCV
OpenCV boundingRect_0

Get the tight rectangle around any point set

image/OpenCV
OpenCV boundingRect_1

The same box math, the redundant twin

image/OpenCV
OpenCV boxFilter_0

The general blur where normalize is the switch

image/OpenCV
OpenCV boxFilter_1

The redundant twin of the general box filter

image/OpenCV
OpenCV boxPoints_0

Turn a rotated rectangle into four drawable corners

image/OpenCV
OpenCV boxPoints_1

Same rotated-rect corners, duplicate overload

image/OpenCV
OpenCV broadcast_0

Numpy-style array stretching, with the pack's rough edges showing

image/OpenCV
OpenCV broadcast_1

The same numpy-style stretch, second overload, same rough edges

image/OpenCV
OpenCV calcCovarMatrix_0

The mathiest node in the pack, and that's fine

image/OpenCV
OpenCV calcCovarMatrix_1

Covariance math, identical twin edition

image/OpenCV
OpenCV calcOpticalFlowFarneback_0

Farneback is the real deal, and it's rough

image/OpenCV
OpenCV calcOpticalFlowFarneback_1

The duplicate overload of dense flow

image/OpenCV
OpenCV calcOpticalFlowPyrLK_0

Track feature points with PyrLK

image/OpenCV
OpenCV calcOpticalFlowPyrLK_1

The twin of sparse flow tracking

image/OpenCV
OpenCV calibrationMatrixValues_0

Your camera's FOV and focal length, solved in-graph instead of by hand

image/OpenCV
OpenCV calibrationMatrixValues_1

The identical twin of the FOV node — and why that's normal for this pack

image/OpenCV
OpenCV CamShift_0

A real-time tracker that mostly wants a live video feed

image/OpenCV
OpenCV CamShift_1

CamShift_1 — the duplicate tracker node, and why the pack is full of these

image/OpenCV
OpenCV Canny_0

Canny edge detection in ComfyUI — the ControlNet preprocessor you can tune by hand

image/OpenCV
OpenCV Canny_1

Canny_1 — the same edge detector, same nodes, different number

image/OpenCV
OpenCV Canny_2

The overload for when you've already done the Sobel

image/OpenCV
OpenCV Canny_3

Canny_3 — the gradient-based Canny, and its identical twin, explained

image/OpenCV
OpenCV cartToPolar_0

Gradient magnitude and direction in one shot — the cartToPolar node

image/OpenCV
OpenCV cartToPolar_1

CartToPolar_1 — the twin of the vector-to-angle node (there's no difference)

image/OpenCV
OpenCV checkChessboard_0

Is it a chessboard? The gatekeeper of camera-calibration frame selection

image/OpenCV
OpenCV checkChessboard_1

CheckChessboard_1 — the twin boolean, still just asking 'is it a chessboard?'

image/OpenCV
OpenCV checkHardwareSupport_0

Does your CPU actually have AVX2?

image/OpenCV
OpenCV checkRange_0

Catch out-of-bounds arrays before they wreck your pipeline

image/OpenCV
OpenCV checkRange_1

CheckRange_1 — the duplicate debug node that still catches bad array values

image/OpenCV
OpenCV circle_0

Draw a circle on your image — OpenCV's drawing node in ComfyUI

image/OpenCV
OpenCV circle_1

Circle_1 — the same drawing node, same BGR traps, different number

image/OpenCV
OpenCV clipLine_0

Clip a line to a rectangle and keep only the part that fits — pure geometry

image/OpenCV
OpenCV colorChange_0

Recolor a masked region without repainting it — OpenCV's colorChange effect

image/OpenCV
OpenCV colorChange_1

ColorChange_1 — the twin recolor node with the same three multipliers

image/OpenCV
OpenCV compare_0

Turn 'where do these images differ' into an actual mask (OpenCV compare_0)

image/OpenCV
OpenCV compare_1

Compare_0's identical twin — and the reason both exist

image/OpenCV
OpenCV compareHist_0

One number that says 'these two images have the same color feel' (OpenCV compareHist_0)

image/OpenCV
OpenCV compareHist_1

CompareHist_0's twin — same node, second overload slot

image/OpenCV
OpenCV completeSymm_0

The OpenCV node that isn't about images at all (completeSymm_0)

image/OpenCV
OpenCV completeSymm_1

CompleteSymm_0's twin — the symmetrizer, duplicated

image/OpenCV
OpenCV composeRT_0

Compose two rotations and translations (composeRT_0)

image/OpenCV
OpenCV composeRT_1

ComposeRT_0, again — the overload slot you can ignore

image/OpenCV
OpenCV computeCorrespondEpilines_0

Stereo geometry without leaving the graph (computeCorrespondEpilines_0)

image/OpenCV
OpenCV computeCorrespondEpilines_1

ComputeCorrespondEpilines_0, duplicated

image/OpenCV
OpenCV computeECC_0

A single number that says 'these two images are this aligned' (OpenCV computeECC_0)

image/OpenCV
OpenCV computeECC_1

ComputeECC_0's twin — same alignment score, second slot

image/OpenCV
OpenCV connectedComponents_0

Count the blobs in your mask (OpenCV connectedComponents_0)

image/OpenCV
OpenCV connectedComponents_1

ConnectedComponents_0's twin — same blob counter, spare slot

image/OpenCV
OpenCV connectedComponentsWithAlgorithm_0

Faster blob counting when your mask has ten thousand pieces (connectedComponentsWithAlgorithm_0)

image/OpenCV
OpenCV connectedComponentsWithAlgorithm_1

The algorithm-picking blob counter, duplicated (connectedComponentsWithAlgorithm_1)

image/OpenCV
OpenCV connectedComponentsWithStats_0

Per-blob sizes, boxes, and centroids (connectedComponentsWithStats_0)

image/OpenCV
OpenCV connectedComponentsWithStats_1

The stats workhorse, duplicated (connectedComponentsWithStats_1)

image/OpenCV
OpenCV connectedComponentsWithStatsWithAlgorithm_0

Blob stats plus a pick-your-algorithm knob (connectedComponentsWithStatsWithAlgorithm_0)

image/OpenCV
OpenCV connectedComponentsWithStatsWithAlgorithm_1

The kitchen-sink blob node, duplicated (connectedComponentsWithStatsWithAlgorithm_1)

image/OpenCV
OpenCV contourArea_0

ContourArea without leaving the graph

image/OpenCV
OpenCV contourArea_1

ContourArea_0 or contourArea_1? Honestly, either

image/OpenCV
OpenCV convertFp16_0

Halving your arrays with convertFp16 — but not your images

image/OpenCV
OpenCV convertFp16_1

ConvertFp16_1 — the twin nobody needs to distinguish

image/OpenCV
OpenCV convertMaps_0

Remap map plumbing, for the geometry nerds

image/OpenCV
OpenCV convertMaps_1

ConvertMaps_1 — the second overload, the same map converter

image/OpenCV
OpenCV convertPointsFromHomogeneous_0

The projective-geometry errand

image/OpenCV
OpenCV convertPointsFromHomogeneous_1

ConvertPointsFromHomogeneous_1 — the other overload, same math

image/OpenCV
OpenCV convertPointsToHomogeneous_0

ConvertPointsToHomogeneous, explained

image/OpenCV
OpenCV convertPointsToHomogeneous_1

ConvertPointsToHomogeneous_1 — same node, one suffix over

image/OpenCV
OpenCV convertScaleAbs_0

ConvertScaleAbs

image/OpenCV
OpenCV convertScaleAbs_1

ConvertScaleAbs_1 — the identical twin of the pack's best node

image/OpenCV
OpenCV convexHull_0

Rubber-band outlines with convexHull — the shape-analysis workhorse

image/OpenCV
OpenCV convexHull_1

ConvexHull_1 — the second copy of the rubber-band outline node

image/OpenCV
OpenCV convexityDefects_0

The finger-valley detector, now in your graph

image/OpenCV
OpenCV convexityDefects_1

ConvexityDefects_1 — the twin, and the finger-valley caveat

image/OpenCV
OpenCV copyMakeBorder_0

CopyMakeBorder

image/OpenCV
OpenCV copyMakeBorder_1

CopyMakeBorder_1 — the padding twin with the same string trap

image/OpenCV
OpenCV copyTo_0

Mask-aware copying, the compositing glue you're missing

image/OpenCV
OpenCV copyTo_1

CopyTo_1 — the mask-copy node, suffix and all

image/OpenCV
OpenCV cornerEigenValsAndVecs_0

CornerEigenValsAndVecs_0

image/OpenCV
OpenCV cornerEigenValsAndVecs_1

CornerEigenValsAndVecs_1 — the identical twin nobody explains

image/OpenCV
OpenCV cornerHarris_0

CornerHarris_0 — the classic corner detector, raw and honest

image/OpenCV
OpenCV cornerHarris_1

CornerHarris_1 — same Harris detector, but let's talk about the k knob

image/OpenCV
OpenCV cornerMinEigenVal_0

CornerMinEigenVal_0 — the Shi-Tomasi corner score, the one goodFeaturesToTrack trusts

image/OpenCV
OpenCV cornerMinEigenVal_1

CornerMinEigenVal_1 — the twin, and why the min eigenvalue beats Harris

image/OpenCV
OpenCV cornerSubPix_0

CornerSubPix_0 — make your corners sub-pixel precise (yes, really)

image/OpenCV
OpenCV cornerSubPix_1

CornerSubPix_1 — the twin, and a worked example of the string inputs

image/OpenCV
OpenCV correctMatches_0

CorrectMatches_0 — enforce the epipolar constraint on your point pairs

image/OpenCV
OpenCV correctMatches_1

CorrectMatches_1 — the twin, plus how to get the F matrix it needs

image/OpenCV
OpenCV countNonZero_0

CountNonZero_0 — the tiny node that answers 'how much mask is there?'

image/OpenCV
OpenCV countNonZero_1

CountNonZero_1 — the twin, and the mask-coverage trick worth stealing

image/OpenCV
OpenCV createHanningWindow_0

CreateHanningWindow_0 — a frequency-domain window, for the DFT crowd

image/OpenCV
OpenCV createHanningWindow_1

CreateHanningWindow_1 — the twin, and the anti-leakage habit

image/OpenCV
OpenCV cubeRoot_0

CubeRoot_0 — a single math function wearing a node costume

image/OpenCV
OpenCV currentUIFramework_0

CurrentUIFramework_0 — a node that tells you which GUI OpenCV thinks it has

image/OpenCV
OpenCV CV_16FC_0

CV_16FC_0 — a type-constant calculator, and the code it saves you

image/OpenCV
OpenCV CV_16SC_0

CV_16SC_0 — the signed 16-bit type constant, decoded

image/OpenCV
OpenCV CV_16UC_0

CV_16UC_0 — the unsigned 16-bit type constant, in one node

image/OpenCV
OpenCV CV_32FC_0

CV_32FC_0 — the type constant you'll actually need (float32)

image/OpenCV
OpenCV CV_32SC_0

A Node That Just Calculates an INT — and Why That's Not Useless

image/OpenCV
OpenCV CV_64FC_0

The Type-Code Calculator for OpenCV's Float Images

image/OpenCV
OpenCV CV_8SC_0

The Type Code Nobody Asks For (Until They Need It)

image/OpenCV
OpenCV CV_8UC_0

The Type Code Behind Every Normal Image

image/OpenCV
OpenCV CV_MAKETYPE_0

The Generic Type-Code Builder (and the Formula Behind All Those CV_* Nodes)

image/OpenCV
OpenCV cvtColor_0

The Node That Makes This Pack Usable (BGR, Gray, and Everything Between)

image/OpenCV
OpenCV cvtColor_1

The Twin That's Identical to cvtColor_0 (Just Pick One)

image/OpenCV
OpenCV cvtColorTwoPlane_0

For When Your Image Comes in Two Stacked Planes

image/OpenCV
OpenCV cvtColorTwoPlane_1

The Overload Twin of the Two-Plane Converter

image/OpenCV
OpenCV dct_0

The Discrete Cosine Transform, or How JPEG-Thinking Leaks Into ComfyUI

image/OpenCV
OpenCV dct_1

The Identical Twin of the DCT Node (Frequency Work, Either Way)

image/OpenCV
OpenCV decolor_0

The Grayscale Conversion That Respects Color Contrast

image/OpenCV
OpenCV decolor_1

The Twin of the Contrast-Preserving Decolorization Node

image/OpenCV
OpenCV decomposeEssentialMat_0

Extracting Camera Motion From an Essential Matrix

image/OpenCV
OpenCV decomposeEssentialMat_1

The Twin for Camera-Motion Decomposition

image/OpenCV
OpenCV decomposeProjectionMatrix_0

Pulling Camera Intrinsics, Pose, and Euler Angles Out of a Projection Matrix

image/OpenCV
OpenCV decomposeProjectionMatrix_1

The Twin That Splits a Camera Matrix Into Seven Outputs

image/OpenCV
OpenCV demosaicing_0

Turning Raw Bayer Sensor Data Into a Real Color Image

image/OpenCV
OpenCV demosaicing_1

The Twin of the Raw-Sensor Demosaicing Node

image/OpenCV
OpenCV destroyAllWindows_0

The Node That Closes Windows That Were Never Open

image/OpenCV
OpenCV destroyWindow_0

The node that closes a window you can't open

image/OpenCV
OpenCV detailEnhance_0

Detail enhancement that doesn't blow out your edges

image/OpenCV
OpenCV detailEnhance_1

The twin of detailEnhance_0 — and it's identical

image/OpenCV
OpenCV determinant_0

A matrix math node in an image pack — probably not yours

image/OpenCV
OpenCV determinant_1

The duplicate determinant node — and why that's normal here

image/OpenCV
OpenCV dft_0

Fourier transforms in ComfyUI — the deep end, done properly

image/OpenCV
OpenCV dft_1

The second overload, same Fourier transform

image/OpenCV
OpenCV dilate_0

Grow your masks with OpenCV's dilate

image/OpenCV
OpenCV dilate_1

Dilate_1 is dilate_0 with a different suffix — grow your masks anyway

image/OpenCV
OpenCV displayOverlay_0

Draws text on an OpenCV window you probably don't have

image/OpenCV
OpenCV displayStatusBar_0

A status-bar writer for a window that isn't there

image/OpenCV
OpenCV distanceTransform_0

Turn a hard mask into a soft one with OpenCV's distance transform

image/OpenCV
OpenCV distanceTransform_1

The identical twin of the mask-feathering node

image/OpenCV
OpenCV distanceTransformWithLabels_0

Which background is each mask pixel closest to?

image/OpenCV
OpenCV distanceTransformWithLabels_1

The twin of the WithLabels distance transform — pick either

image/OpenCV
OpenCV divide_0

Flat-field correction and ratio masks

image/OpenCV
OpenCV divide_1

Same per-pixel division, no difference

image/OpenCV
OpenCV divide_2

Invert an image by a constant, cleanly

image/OpenCV
OpenCV divide_3

The twin of the scalar division node

image/OpenCV
OpenCV divSpectrums_0

Frequency-domain division — the inverse filter's best friend

image/OpenCV
OpenCV divSpectrums_1

The frequency-domain division node almost nobody needs (but it's here)

image/OpenCV
OpenCV dnn_unregisterLayer_0

The OpenCV node with nothing to wire (and no reason to use it)

image/OpenCV
OpenCV drawChessboardCorners_0

See your camera-calibration corners in green (or red)

image/OpenCV
OpenCV drawChessboardCorners_1

The other chessboard-corner drawer — and why it's identical

image/OpenCV
OpenCV drawFrameAxes_0

Draw a 3D axis frame onto a photo — the pose checker

image/OpenCV
OpenCV drawFrameAxes_1

DrawFrameAxes, take two — same pose, same axes, no difference

image/OpenCV
OpenCV drawMarker_0

Put a dot, cross, or diamond on the image — without leaving the cv2 pipeline

image/OpenCV
OpenCV drawMarker_1

DrawMarker, second overload — same markers, still BGR

image/OpenCV
OpenCV edgePreservingFilter_0

Smooth skin or flatten colors without killing the edges

image/OpenCV
OpenCV edgePreservingFilter_1

The edge-preserving filter, second overload — and the two knobs that matter

image/OpenCV
OpenCV eigen_0

Pure math, zero pixels, and that's fine

image/OpenCV
OpenCV eigen_1

The second eigen overload — symmetric matrices only, same answer

image/OpenCV
OpenCV eigenNonSymmetric_0

The even nerdier eigenvalue node — for matrices with no manners

image/OpenCV
OpenCV eigenNonSymmetric_1

EigenNonSymmetric, overload two — same math, still no pixels

image/OpenCV
OpenCV ellipse_0

Draw an ellipse (or just an arc) with literal coordinates

image/OpenCV
OpenCV ellipse_1

Ellipse, overload two — same arcs, same literal gotchas

image/OpenCV
OpenCV ellipse_2

Draw a rotated bounding box as an ellipse — the detection visualizer

image/OpenCV
OpenCV ellipse_3

The RotatedRect ellipse, overload two — same box, same BGR

image/OpenCV
OpenCV EMD_0

A real similarity metric, with setup work

image/OpenCV
OpenCV EMD_1

Earth Mover's Distance, overload two — same metric, same setup cost

image/OpenCV
OpenCV equalizeHist_0

The fastest way to fix a flat, washed-out image in ComfyUI

image/OpenCV
OpenCV equalizeHist_1

EqualizeHist_1 is the same node as _0 — here's why it exists

image/OpenCV
OpenCV erode_0

The mask-cleanup move that removes tiny white specks

image/OpenCV
OpenCV erode_1

Erode_1 — the identical twin of erode_0, minus the confusion

image/OpenCV
OpenCV estimateAffine2D_0

The node that finds the transform between two sets of matching points

image/OpenCV
OpenCV estimateAffine2D_1

EstimateAffine2D_1 — a byte-identical twin, so just use _0

image/OpenCV
OpenCV estimateAffine3D_0

3D point-set alignment in ComfyUI — niche, but here's how it works

image/OpenCV
OpenCV estimateAffine3D_1

EstimateAffine3D_1 — the twin you can safely ignore

image/OpenCV
OpenCV estimateAffine3D_2

Rigid 3D alignment with a scale factor — estimateAffine3D_2 explained

image/OpenCV
OpenCV estimateAffine3D_3

EstimateAffine3D_3 — the twin of _2, same rigid alignment, same output

image/OpenCV
OpenCV estimateAffinePartial2D_0

The 2D transform for rotation + scale + shift — no shear allowed

image/OpenCV
OpenCV estimateAffinePartial2D_1

EstimateAffinePartial2D_1 — identical twin, use _0 instead

image/OpenCV
OpenCV estimateChessboardSharpness_0

Measuring focus sharpness of a calibration board — yes, in ComfyUI

image/OpenCV
OpenCV estimateChessboardSharpness_1

EstimateChessboardSharpness_1 — the duplicate you can ignore

image/OpenCV
OpenCV estimateTranslation3D_0

Pure 3D translation between point sets — the simplest alignment node

image/OpenCV
OpenCV estimateTranslation3D_1

EstimateTranslation3D_1 — the twin, and it's identical

image/OpenCV
OpenCV exp_0

The exponential node — a math utility, not an image effect

image/OpenCV
OpenCV exp_1

Exp_1 — the identical twin of the exponential node

image/OpenCV
OpenCV extractChannel_0

Pull one color channel out of an image — the split trick that matters

image/OpenCV
OpenCV extractChannel_1

ExtractChannel_1 — the twin, same channel-picking, no difference

image/OpenCV
OpenCV fastAtan2_0

The OpenCV node that isn't even about images — and the (y, x) trap that waits in it

image/OpenCV
OpenCV fastNlMeansDenoising_0

FastNlMeansDenoising_0

image/OpenCV
OpenCV fastNlMeansDenoising_1

The twin nobody can tell apart (and why that's fine)

image/OpenCV
OpenCV fastNlMeansDenoisingColored_0

FastNlMeansDenoisingColored_0

image/OpenCV
OpenCV fastNlMeansDenoisingColored_1

The other twin, and it's a short story

image/OpenCV
OpenCV fillConvexPoly_0

FillConvexPoly_0 and the literal-string color gotcha

image/OpenCV
OpenCV fillConvexPoly_1

Same drawing node, second overload, zero differences

image/OpenCV
OpenCV filter2D_0

Run any convolution kernel you can dream up

image/OpenCV
OpenCV filter2D_1

The second overload of the general convolution

image/OpenCV
OpenCV filterSpeckles_0

Cleaning the snow out of a disparity map

image/OpenCV
OpenCV filterSpeckles_1

The twin for disparity cleanup, identical in every way that matters

image/OpenCV
OpenCV find4QuadCornerSubpix_0

Subpixel corner refinement for calibration work

image/OpenCV
OpenCV find4QuadCornerSubpix_1

The second overload, identical to the first

image/OpenCV
OpenCV findChessboardCorners_0

The classic checkerboard detector, straight from OpenCV

image/OpenCV
OpenCV findChessboardCorners_1

The twin of the classic checkerboard detector

image/OpenCV
OpenCV findChessboardCornersSB_0

The checkerboard detector that's actually good

image/OpenCV
OpenCV findChessboardCornersSB_1

The twin of the good checkerboard detector

image/OpenCV
OpenCV findChessboardCornersSBWithMeta_0

Robust checkerboard corners, plus a quality score for each

image/OpenCV
OpenCV findChessboardCornersSBWithMeta_1

The twin that adds the same quality scores

image/OpenCV
OpenCV findEssentialMat_0

Recover camera motion between two views, the hard way

image/OpenCV
OpenCV findEssentialMat_1

Find how two camera views relate — cv2.findEssentialMat without the pain

image/OpenCV
OpenCV findEssentialMat_2

Essential matrix when you only know the focal length

image/OpenCV
OpenCV findEssentialMat_3

FindEssentialMat_2's identical twin — just pick one

image/OpenCV
OpenCV findEssentialMat_4

Essential matrix for two different calibrated cameras

image/OpenCV
OpenCV findEssentialMat_5

FindEssentialMat_4, the duplicate you can safely ignore

image/OpenCV
OpenCV findFundamentalMat_0

Relate two camera views with zero calibration — the fundamental matrix

image/OpenCV
OpenCV findFundamentalMat_1

FindFundamentalMat_0's twin — same matrix, different sticker

image/OpenCV
OpenCV findFundamentalMat_2

The older, simpler fundamental matrix — no maxIters knob

image/OpenCV
OpenCV findFundamentalMat_3

FindFundamentalMat_2's twin — the no-frills fundamental matrix

image/OpenCV
OpenCV findHomography_0

Perspective warp without calibration — findHomography

image/OpenCV
OpenCV findHomography_1

FindHomography_0's twin — perspective warp, pick your sticker

image/OpenCV
OpenCV findNonZero_0

Where is your mask actually white? findNonZero finds out

image/OpenCV
OpenCV findNonZero_1

FindNonZero's twin — a point list, either way

image/OpenCV
OpenCV findTransformECC_0

Align images that drifted — and get a goodness score while you're at it

image/OpenCV
OpenCV findTransformECC_1

FindTransformECC_0's twin — same alignment, same score

image/OpenCV
OpenCV findTransformECC_2

Image alignment with optional mask — the friendlier ECC variant

image/OpenCV
OpenCV findTransformECC_3

FindTransformECC_2's twin — optional mask, identical math

image/OpenCV
OpenCV fitEllipse_0

Fit an ellipse to your blob in one step

image/OpenCV
OpenCV fitEllipse_1

FitEllipse_0's twin — same ellipse, either name

image/OpenCV
OpenCV fitEllipseAMS_0

The careful ellipse fitter — fitEllipseAMS when outliers lurk

image/OpenCV
OpenCV fitEllipseAMS_1

The OpenCV ellipse fitter that answers in a string

image/OpenCV
OpenCV fitEllipseDirect_0

Fastest ellipse fit in the pack, and it talks in strings

image/OpenCV
OpenCV fitEllipseDirect_1

FitEllipseDirect_1 is the same node as fitEllipseDirect_0. Really.

image/OpenCV
OpenCV fitLine_0

Find the direction in a streak of points

image/OpenCV
OpenCV fitLine_1

Yes, fitLine_1 is the same as fitLine_0. Here's why that happens

image/OpenCV
OpenCV flip_0

Mirror or flip an image with one integer

image/OpenCV
OpenCV flip_1

The duplicate flip node, and what it says about this pack

image/OpenCV
OpenCV flipND_0

Flip an image around a named axis, not a magic number

image/OpenCV
OpenCV flipND_1

Same axis flip, second stub

image/OpenCV
OpenCV floodFill_0

The flood fill node that speaks in tuples and strings

image/OpenCV
OpenCV floodFill_1

The same paint bucket, second stub

image/OpenCV
OpenCV GaussianBlur_0

A proper Gaussian blur without touching the diffusion model

image/OpenCV
OpenCV GaussianBlur_1

GaussianBlur_1 is GaussianBlur_0 with a different badge

image/OpenCV
OpenCV gemm_0

Generalized matrix multiply for people doing math in ComfyUI

image/OpenCV
OpenCV gemm_1

Matrix multiply, duplicate edition

image/OpenCV
OpenCV getAffineTransform_0

Compute a 2×3 affine matrix from three point pairs

image/OpenCV
OpenCV getAffineTransform_1

The affine transform solver, and its identical twin

image/OpenCV
OpenCV getBuildInformation_0

Show me your OpenCV

image/OpenCV
OpenCV getCPUFeaturesLine_0

One string that tells you what your CPU can do

image/OpenCV
OpenCV getCPUTickCount_0

A stopwatch that counts CPU ticks, because OpenCV says so

image/OpenCV
OpenCV getDefaultAlgorithmHint_0

This Node Answers a Question Nobody Asks (and That's Fine)

image/OpenCV
OpenCV getDefaultNewCameraMatrix_0

The Boring Half of Undistorting Your Photos

image/OpenCV
OpenCV getDefaultNewCameraMatrix_1

The Twin of getDefaultNewCameraMatrix — They're the Same Node

image/OpenCV
OpenCV getDerivKernels_0

Build Your Own Edge-Detection Filters

image/OpenCV
OpenCV getDerivKernels_1

The Same Edge-Kernel Generator, Under a Second Name

image/OpenCV
OpenCV getFontScaleFromHeight_0

The Node That Sizes Text So Captions Don't Overflow Your Image

image/OpenCV
OpenCV getGaborKernel_0

The Fiddliest Filter in This Pack, and Worth It

image/OpenCV
OpenCV getGaussianKernel_0

The 1D Gaussian Blur Kernel — Blur's Building Block

image/OpenCV
OpenCV getHardwareFeatureName_0

The Node That Names Your CPU's Feature Flags

image/OpenCV
OpenCV getLogLevel_0

Find Out How Loud OpenCV Is Being Right Now

image/OpenCV
OpenCV getNumberOfCPUs_0

How Many CPUs Does OpenCV See? (It's Not Always What You Think)

image/OpenCV
OpenCV getNumThreads_0

How Many Threads Is OpenCV Actually Using Right Now?

image/OpenCV
OpenCV getOptimalDFTSize_0

The Fast-FFT Size Calculator for Frequency-Domain Work

image/OpenCV
OpenCV getOptimalNewCameraMatrix_0

The Node That Makes Undistortion Actually Work

image/OpenCV
OpenCV getOptimalNewCameraMatrix_1

The Undistortion Helper's Identical Twin

image/OpenCV
OpenCV getPerspectiveTransform_0

The One Node in This Pack You'll Actually Build Workflows Around

image/OpenCV
OpenCV getPerspectiveTransform_1

The Perspective Homography Node, Duplicated for Your Convenience (Not Really)

image/OpenCV
OpenCV getRectSubPix_0

Crop With Sub-Pixel Precision, Not Pixel Luck

image/OpenCV
OpenCV getRectSubPix_1

Sub-Pixel Cropping, Take Two (Literally the Same Node)

image/OpenCV
OpenCV getRotationMatrix2D_0

Rotate and Zoom Anything, the Affine Way

image/OpenCV
OpenCV getStructuringElement_0

The kernel factory you didn't know you needed

image/OpenCV
OpenCV getTextSize_0

Measure your captions before you draw them

image/OpenCV
OpenCV getThreadNum_0

It outputs a number. It is not useful. That's fine.

image/OpenCV
OpenCV getTickCount_0

OpenCV's stopwatch, frozen mid-tick

image/OpenCV
OpenCV getTickFrequency_0

The other half of OpenCV's stopwatch

image/OpenCV
OpenCV getTrackbarPos_0

A slider you cannot see, on a window that doesn't exist

image/OpenCV
OpenCV getValidDisparityROI_0

The stereo node whose partners don't ship in the pack

image/OpenCV
OpenCV getVersionMajor_0

The single digit that tells you which OpenCV era you're on

image/OpenCV
OpenCV getVersionMinor_0

The version number that actually changes under you

image/OpenCV
OpenCV getVersionRevision_0

The build number nobody asked for

image/OpenCV
OpenCV getVersionString_0

The one version node you'll actually remember

image/OpenCV
OpenCV getWindowImageRect_0

Window geometry for a window that's never opened

image/OpenCV
OpenCV getWindowProperty_0

Reading window properties you can't create

image/OpenCV
OpenCV goodFeaturesToTrack_0

The corner detector that's quietly one of the pack's best nodes

image/OpenCV
OpenCV goodFeaturesToTrack_1

The identical twin of the corner detector

image/OpenCV
OpenCV goodFeaturesToTrack_2

Corner detection with a mask and a blur you control

image/OpenCV
OpenCV goodFeaturesToTrack_3

The duplicate twin, with one honest difference

image/OpenCV
OpenCV goodFeaturesToTrackWithQuality_0

Corners, with a receipt showing how good each one is

image/OpenCV
OpenCV goodFeaturesToTrackWithQuality_1

The quality variant's exact duplicate

image/OpenCV
OpenCV grabCut_0

Interactive foreground cutout, before SAM existed

image/OpenCV
OpenCV grabCut_1

Cutting a subject out of a photo, 1990s-style, with OpenCV grabCut

image/OpenCV
OpenCV hasNonZero_0

Is there anything in this image?

image/OpenCV
OpenCV hasNonZero_1

The second copy of OpenCV's 'is anything nonzero?' check

image/OpenCV
OpenCV haveImageReader_0

Before you load that file, ask OpenCV if it can read it at all

image/OpenCV
OpenCV haveImageWriter_0

Ask OpenCV whether it can save to a filename, before you try

image/OpenCV
OpenCV haveOpenVX_0

The node with no inputs that will almost certainly say 'False'

image/OpenCV
OpenCV HoughCircles_0

Finding every coin in the photo, the OpenCV way

image/OpenCV
OpenCV HoughCircles_1

The duplicate copy of circle detection you can just ignore

image/OpenCV
OpenCV HoughLines_0

Finding straight lines in a photo with a 60-year-old voting trick

image/OpenCV
OpenCV HoughLines_1

The identical twin of HoughLines — same votes, same lines

image/OpenCV
OpenCV HoughLinesP_0

Finite segments, not infinite lines

image/OpenCV
OpenCV HoughLinesP_1

The duplicate of the line-segment detector — use either one

image/OpenCV
OpenCV HoughLinesPointSet_0

Finding lines in a scatter of points, not an image

image/OpenCV
OpenCV HoughLinesPointSet_1

The second copy of 'find lines in a point cloud' — same niche

image/OpenCV
OpenCV HoughLinesWithAccumulator_0

Hough lines that tell you how confident the detector was

image/OpenCV
OpenCV HoughLinesWithAccumulator_1

The duplicate of 'Hough lines with confidence scores'

image/OpenCV
OpenCV HuMoments_0

Seven numbers that describe a shape no matter how you flip it

image/OpenCV
OpenCV HuMoments_1

The duplicate shape-fingerprint node — same seven numbers

image/OpenCV
OpenCV idct_0

The inverse DCT node

image/OpenCV
OpenCV idct_1

The duplicate inverse-DCT node — same transform, same dragons

image/OpenCV
OpenCV idft_0

The inverse Fourier transform, for when you actually work in frequency space

image/OpenCV
OpenCV idft_1

Idft_1 — the identical twin of idft_0, and that's fine

image/OpenCV
OpenCV illuminationChange_0

Synthesize lighting changes with a mask — the data-augmentation trick

image/OpenCV
OpenCV illuminationChange_1

Same relighting node as _0, because OpenCV listed the overload twice

image/OpenCV
Image2Nparray

The one node that lets every other OpenCV node see your image

image/OpenCV
OpenCV imcount_0

How many images are hiding in that file? A tiny but real utility

image/OpenCV
OpenCV imdecode_0

Decode an image from bytes instead of a path — the fileless loader

image/OpenCV
OpenCV imdecode_1

Imdecode_1 — same byte-decoder as _0, numbered because OpenCV overloaded it

image/OpenCV
OpenCV imread_0

Load an image from any path on the server, the way cv2 does

image/OpenCV
OpenCV imread_1

The imread with a dst you should ignore — here's why it exists

image/OpenCV
OpenCV imread_2

Imread_2 — the second twin with a dst, and you still don't need it

image/OpenCV
OpenCV imshow_0

The node that pops a window on the server — and why that's a trap

image/OpenCV
OpenCV imshow_1

Imshow_1 — another copy of the same debug window node

image/OpenCV
OpenCV imshow_2

Imshow_2 — the third identical debug window, for completeness

image/OpenCV
OpenCV initInverseRectificationMap_0

The inverse-rectification map builder for when you need to undo the undo

image/OpenCV
OpenCV initInverseRectificationMap_1

InitInverseRectificationMap_1 — the same inverse-map builder, one more time

image/OpenCV
OpenCV initUndistortRectifyMap_0

Camera calibration's map builder — only reach for this if you have calibration data

image/OpenCV
OpenCV initUndistortRectifyMap_1

InitUndistortRectifyMap_1 — the identical twin of the calibration map builder

image/OpenCV
OpenCV inpaint_0

The fast, deterministic way to remove text, dust, and watermarks

image/OpenCV
OpenCV inpaint_1

Inpaint_1 — the same classical inpaint, because OpenCV listed it twice

image/OpenCV
OpenCV inRange_0

Keep only the pixels inside a color range

image/OpenCV
OpenCV inRange_1

The identical twin of the color-mask node

image/OpenCV
OpenCV insertChannel_0

Swap one channel into an image

image/OpenCV
OpenCV insertChannel_1

The duplicate overload, minus the surprises

image/OpenCV
OpenCV integral_0

The summed-area table nobody looks at

image/OpenCV
OpenCV integral_1

Same summed-area table, second overload

image/OpenCV
OpenCV integral2_0

The summed-area table, plus squared sums

image/OpenCV
OpenCV integral2_1

The duplicate with the variance trick inside

image/OpenCV
OpenCV integral3_0

The full triple — sum, squared sum, and tilted

image/OpenCV
OpenCV integral3_1

The tilted-table twin nobody should overthink

image/OpenCV
OpenCV intersectConvexConvex_0

How much do these two polygons overlap?

image/OpenCV
OpenCV intersectConvexConvex_1

The geometry twin, same overlap math

image/OpenCV
OpenCV invert_0

Matrix inverse, NOT inverted colors

image/OpenCV
OpenCV invert_1

The same matrix inverse, minus the confusion

image/OpenCV
OpenCV invertAffineTransform_0

Undo a warp with one matrix

image/OpenCV
OpenCV invertAffineTransform_1

The same undo-matrix, second overload

image/OpenCV
OpenCV isContourConvex_0

One boolean about your contour

image/OpenCV
OpenCV isContourConvex_1

The boolean twin nobody needs to fear

image/OpenCV
OpenCV kmeans_0

Clustering and color quantization, the raw way

image/OpenCV
OpenCV kmeans_1

The duplicate clustering node, strings and all

image/OpenCV
OpenCV Laplacian_0

OpenCV Laplacian_0 for line art and sharpening

image/OpenCV
OpenCV Laplacian_1

OpenCV Laplacian_1 — the duplicate edge detector (and why it exists)

image/OpenCV
OpenCV line_0

Draw an annotation line without touching a single pixel of your workflow

image/OpenCV
OpenCV line_1

OpenCV line_1 — yes, it's the same as line_0, here's how to use the line drawer anyway

image/OpenCV
OpenCV linearPolar_0

Unwrap a circular image into a straight line

image/OpenCV
OpenCV linearPolar_1

OpenCV linearPolar_1 — the polar unwrap node, minus the mystery

image/OpenCV
OpenCV log_0

The natural-log transform nobody puts in their workflow (until they need it)

image/OpenCV
OpenCV log_1

OpenCV log_1 — the other natural-log node, and the story behind the duplicate

image/OpenCV
OpenCV logPolar_0

The foveal transform that turns rotation and zoom into shifts

image/OpenCV
OpenCV logPolar_1

OpenCV logPolar_1 — same foveal transform, different overload number

image/OpenCV
OpenCV LUT_0

Apply a lookup table for instant color grading and stylization

image/OpenCV
OpenCV LUT_1

OpenCV LUT_1 — the duplicate lookup-table node, and how to actually feed it a LUT

image/OpenCV
OpenCV magnitude_0

Combine Sobel X and Y gradients into a real edge map

image/OpenCV
OpenCV magnitude_1

OpenCV magnitude_1 — gradient magnitude, the duplicate you can ignore

image/OpenCV
OpenCV Mahalanobis_0

A statistical distance that outputs a number, not an image

image/OpenCV
OpenCV Mahalanobis_1

OpenCV Mahalanobis_1 — the same statistical-distance node, minus the duplicate confusion

image/OpenCV
OpenCV matchShapes_0

Compare two contours and get a similarity score

image/OpenCV
OpenCV matchShapes_1

OpenCV matchShapes_1 — the duplicate contour-similarity scorer, and how to use the score

image/OpenCV
OpenCV matchTemplate_0

Find a small image inside a big one, no model required

image/OpenCV
OpenCV matchTemplate_1

OpenCV matchTemplate_1 — the duplicate pattern finder, and the five methods decoded

image/OpenCV
OpenCV matMulDeriv_0

The matrix-derivative node that has no idea it's in a diffusion tool

image/OpenCV
OpenCV matMulDeriv_1

The twin of the matrix-derivative node (they're the same)

image/OpenCV
OpenCV max_0

The 'brighter pixel wins' node

image/OpenCV
OpenCV max_1

The identical twin of OpenCV's brighter-pixel node

image/OpenCV
OpenCV mean_0

How bright is your image, actually? OpenCV mean_0

image/OpenCV
OpenCV mean_1

The average-pixel node's other overload

image/OpenCV
OpenCV meanShift_0

The 1990s tracker hiding in your node list

image/OpenCV
OpenCV meanShift_1

The same object tracker, other overload

image/OpenCV
OpenCV meanStdDev_0

Brightness and contrast as actual numbers

image/OpenCV
OpenCV meanStdDev_1

The image-statistics node that returns arrays, not strings

image/OpenCV
OpenCV medianBlur_0

The noise killer Gaussian blur can't be

image/OpenCV
OpenCV medianBlur_1

Smoothing without the halo

image/OpenCV
OpenCV min_0

The 'darker pixel wins' compositing trick

image/OpenCV
OpenCV min_1

The identical twin of the darker-pixel-wins node

image/OpenCV
OpenCV minAreaRect_0

Find the angle of anything

image/OpenCV
OpenCV minAreaRect_1

The rotated-bounding-box twin

image/OpenCV
OpenCV minEnclosingCircle_0

The smallest circle that holds a blob

image/OpenCV
OpenCV minEnclosingCircle_1

The circle-measuring node's twin

image/OpenCV
OpenCV minEnclosingTriangle_0

The triangle that squeezes your points

image/OpenCV
OpenCV minEnclosingTriangle_1

The tightest triangle around your points

image/OpenCV
OpenCV minMaxLoc_0

Find the darkest and brightest pixel in your image in one pass

image/OpenCV
OpenCV minMaxLoc_1

MinMaxLoc_1 is minMaxLoc_0's identical twin — pick the _0, here's why they both exist

image/OpenCV
OpenCV moments_0

Get the area, centroid, and orientation of any detected shape

image/OpenCV
OpenCV moments_1

The duplicate you can ignore, and the same stringified stats

image/OpenCV
OpenCV morphologyEx_0

Kill specks, fill holes, and extract edges

image/OpenCV
OpenCV morphologyEx_1

MorphologyEx_1 — the same mask cleaner, and the story behind every _0/_1 pair

image/OpenCV
OpenCV moveWindow_0

Honestly, you can skip this one — moveWindow_0 is auto-gen cruft

image/OpenCV
OpenCV mulSpectrums_0

Multiply two Fourier spectra — the pack's deepest rabbit hole

image/OpenCV
OpenCV mulSpectrums_1

MulSpectrums_1 — frequency-domain multiply, the duplicate edition

image/OpenCV
OpenCV multiply_0

Per-pixel multiply with saturation — gain, dimming, and blend without the math pitfalls

image/OpenCV
OpenCV multiply_1

Multiply_1 — the saturating multiply twin (identical, just numbered differently)

image/OpenCV
OpenCV mulTransposed_0

XᵀX, for the rare ComfyUI workflow that needs linear algebra

image/OpenCV
OpenCV mulTransposed_1

MulTransposed_1 — the Gram-matrix node's identical twin

image/OpenCV
OpenCV namedWindow_0

A window creator with nothing to put in the window

image/OpenCV
OpenCV norm_0

L1, L2, and infinity norms as a single number

image/OpenCV
OpenCV norm_1

Norm_1 — identical to norm_0, the single-array norm twin

image/OpenCV
OpenCV norm_2

How different are two images? The L2/L1 distance, as one number

image/OpenCV
OpenCV norm_3

Norm_3 — identical to norm_2, the two-image distance twin

image/OpenCV
OpenCV normalize_0

Stretch any flat image to full range — the fix for everything that looks black

image/OpenCV
OpenCV normalize_1

Normalize_1 — the range-stretch twin (and the required-dst gotcha)

image/OpenCV
Nparrays2Image

Turning nparrays back into images

image/OpenCV
OpenCV patchNaNs_0

Patch broken pixels before they poison your tensor

image/OpenCV
OpenCV patchNaNs_1

PatchNaNs_1 is patchNaNs_0's identical twin — here's why they're both here

image/OpenCV
OpenCV PCABackProject_0

Reconstructing data (and images) from a few components

image/OpenCV
OpenCV PCABackProject_1

The other half of the PCA round-trip (and a compression trick)

image/OpenCV
OpenCV PCACompute_0

The node that learns the PCA model everything else depends on

image/OpenCV
OpenCV PCACompute_1

Identical twin of PCACompute_0 — grab either and move on

image/OpenCV
OpenCV PCACompute_2

'keep enough components to explain X% of the variance'

image/OpenCV
OpenCV PCACompute2_0

Like PCACompute, but it also tells you how much each axis matters

image/OpenCV
OpenCV PCACompute2_1

Same as PCACompute2_0, because OpenCV declares everything twice

image/OpenCV
OpenCV PCACompute2_2

Eigenvalues plus a variance target — the 'just keep the good stuff' PCA

image/OpenCV
OpenCV PCACompute2_3

Retained-variance PCA with eigenvalues, UMat twin edition

image/OpenCV
OpenCV PCACompute_3

The retained-variance PCA learner, UMat twin edition

image/OpenCV
OpenCV PCAProject_0

Squeezing high-dimensional data (or images) into a few numbers

image/OpenCV
OpenCV PCAProject_1

The duplicate that's identical to PCAProject_0 (and why that's fine)

image/OpenCV
OpenCV pencilSketch_0

Turning photos into pencil drawings, no model required

image/OpenCV
OpenCV pencilSketch_1

The identical twin — and why this node is the one that breaks installs

image/OpenCV
OpenCV perspectiveTransform_0

Warping points through a homography (not pixels — points)

image/OpenCV
OpenCV perspectiveTransform_1

The UMat twin of the point-warping node

image/OpenCV
OpenCV phase_0

The angle of every vector in a field — where flow, gradients, and orientation live

image/OpenCV
OpenCV phase_1

Turn an (x, y) vector field into a direction map with OpenCV phase_1

image/OpenCV
OpenCV phaseCorrelate_0

How far did the frame move? Sub-pixel shift detection with OpenCV phaseCorrelate_0

image/OpenCV
OpenCV phaseCorrelate_1

PhaseCorrelate_1 — the twin, the response value, and when this node is actually worth it

image/OpenCV
OpenCV pointPolygonTest_0

Is that point inside the region? Hit-testing with OpenCV pointPolygonTest_0

image/OpenCV
OpenCV pointPolygonTest_1

PointPolygonTest_1 — the literal-syntax trap and how to hit-test without losing an hour

image/OpenCV
OpenCV polarToCart_0

Converting flow magnitude and angle with OpenCV polarToCart_0

image/OpenCV
OpenCV polarToCart_1

PolarToCart_1 — the honest truth about this node and when it earns its place

image/OpenCV
OpenCV pollKey_0

OpenCV pollKey_0 — the most useless node in this pack, and why it exists

image/OpenCV
OpenCV pow_0

OpenCV pow_0 and the per-pixel exponent

image/OpenCV
OpenCV pow_1

Pow_1 — the same exponent math, minus the mystery (and what power values actually do)

image/OpenCV
OpenCV preCornerDetect_0

OpenCV preCornerDetect_0 and the corner-response map

image/OpenCV
OpenCV preCornerDetect_1

PreCornerDetect_1 — what that float map is actually for, and why your image looks like static

image/OpenCV
OpenCV projectPoints_0

Projecting world points onto an image with OpenCV projectPoints_0

image/OpenCV
OpenCV projectPoints_1

ProjectPoints_1 — should you actually install the camera-calibration dragon?

image/OpenCV
OpenCV PSNR_0

How damaged is that image really? Measuring quality with OpenCV PSNR_0

image/OpenCV
OpenCV PSNR_1

PSNR_1 — a honest before/after metric for your upscale and denoise passes

image/OpenCV
OpenCV putText_0

Watermarks, labels, and annotations with OpenCV putText_0

image/OpenCV
OpenCV putText_1

PutText_1 — fonts, anti-aliasing, and the color trap that gets everyone

image/OpenCV
OpenCV pyrDown_0

Downscaling with OpenCV pyrDown_0

image/OpenCV
OpenCV pyrDown_1

PyrDown_1 — build a real image pyramid without leaving your graph

image/OpenCV
OpenCV pyrMeanShiftFiltering_0

Flatten an image into poster-like color blobs with OpenCV mean shift

image/OpenCV
OpenCV pyrMeanShiftFiltering_1

The duplicate of the mean-shift flattening node — and why that's fine

image/OpenCV
OpenCV pyrUp_0

Double the resolution with OpenCV's pyramid upsampler

image/OpenCV
OpenCV pyrUp_1

An identical twin that needs no intro

image/OpenCV
OpenCV randn_0

Fill an image with Gaussian noise, OpenCV-style

image/OpenCV
OpenCV randn_1

The Gaussian-noise node's identical twin

image/OpenCV
OpenCV randShuffle_0

Scramble a picture into static with OpenCV randShuffle

image/OpenCV
OpenCV randShuffle_1

It's the same node

image/OpenCV
OpenCV randu_0

Uniform random noise over a canvas, the raw OpenCV way

image/OpenCV
OpenCV randu_1

The uniform-noise node's doppelgänger

image/OpenCV
OpenCV readOpticalFlow_0

Load a .flo optical-flow file straight into your graph

image/OpenCV
OpenCV recoverPose_0

Recover camera rotation and translation from two photos

image/OpenCV
OpenCV recoverPose_1

The exact twin of the two-camera pose node

image/OpenCV
OpenCV recoverPose_2

Decompose an essential matrix into rotation and translation

image/OpenCV
OpenCV recoverPose_3

The twin of the essential-matrix pose node

image/OpenCV
OpenCV recoverPose_4

Recover pose with just focal length and principal point

image/OpenCV
OpenCV recoverPose_5

The twin of the focal-length pose node

image/OpenCV
OpenCV recoverPose_6

Recover pose AND the 3D points behind your matches

image/OpenCV
OpenCV recoverPose_7

The twin of the pose-plus-triangulation node

image/OpenCV
OpenCV rectangle_0

Draw boxes on an image — the BGR gotcha included

image/OpenCV
OpenCV rectangle_1

Draw rectangles on images in ComfyUI — the OpenCV way

image/OpenCV
OpenCV rectangle_2

Draw a box from x, y, width, height — rectangle_2 vs rectangle_1

image/OpenCV
OpenCV rectangle_3

Rectangle_3 — the rectangle node you'll never notice

image/OpenCV
OpenCV rectangleIntersectionArea_0

How much do two boxes overlap? rectangleIntersectionArea_0

image/OpenCV
OpenCV reduce_0

Sum, average, or max a whole row or column at once — reduce_0

image/OpenCV
OpenCV reduce_1

Reduce_1 — the same column/row reduction, twice for free

image/OpenCV
OpenCV reduceArgMax_0

Find the brightest row or column — reduceArgMax_0

image/OpenCV
OpenCV reduceArgMax_1

ReduceArgMax_1 — the argmax twin nobody needs to pick between

image/OpenCV
OpenCV reduceArgMin_0

Locate the darkest scanline with reduceArgMin_0

image/OpenCV
OpenCV reduceArgMin_1

ReduceArgMin_1 — the duplicate you can safely ignore

image/OpenCV
OpenCV remap_0

Bend any image any way you like — remap_0 is the master warp

image/OpenCV
OpenCV remap_1

Remap_1 — the same warp, second copy

image/OpenCV
OpenCV repeat_0

Tile one image into a grid — repeat_0 builds your contact sheet

image/OpenCV
OpenCV repeat_1

Repeat_1 — the tiling node, once more with feeling

image/OpenCV
OpenCV reprojectImageTo3D_0

Turn a disparity map into 3D points — reprojectImageTo3D_0

image/OpenCV
OpenCV reprojectImageTo3D_1

ReprojectImageTo3D_1 — the stereo-depth duplicate

image/OpenCV
OpenCV resize_0

Exact, fast resizing with real OpenCV interpolation — resize_0

image/OpenCV
OpenCV resize_1

Resize_1 — the resize twin you can skip

image/OpenCV
OpenCV resizeWindow_0

ResizeWindow_0 — the node that resizes a window that doesn't exist

image/OpenCV
OpenCV resizeWindow_1

ResizeWindow_1 — the other phantom-window resizer

image/OpenCV
OpenCV Rodrigues_0

Flip a 3D rotation between vector and matrix mid-workflow

image/OpenCV
OpenCV Rodrigues_1

Your twin, but the UMat one

image/OpenCV
OpenCV rotate_0

90-degree flips, instant and lossless

image/OpenCV
OpenCV rotate_1

The same 90-degree flips, UMat edition

image/OpenCV
OpenCV rotatedRectangleIntersection_0

Do two rotated boxes actually overlap?

image/OpenCV
OpenCV rotatedRectangleIntersection_1

The overlap test, UMat twin

image/OpenCV
OpenCV RQDecomp3x3_0

Split a camera matrix into rotation and shear

image/OpenCV
OpenCV RQDecomp3x3_1

The same 3x3 decomposition, UMat edition

image/OpenCV
OpenCV sampsonDistance_0

The geometer's outlier detector

image/OpenCV
OpenCV sampsonDistance_1

The same geometric distance, UMat wrapper

image/OpenCV
OpenCV scaleAdd_0

The two-image blend you'll actually use

image/OpenCV
OpenCV scaleAdd_1

The blend, UMat twin edition

image/OpenCV
OpenCV Scharr_0

Sobel's sharper little brother for gradient edges

image/OpenCV
OpenCV Scharr_1

The sharper gradient, UMat edition

image/OpenCV
OpenCV seamlessClone_0

Paste a subject in and nobody sees the seam

image/OpenCV
OpenCV seamlessClone_1

Poisson blending, UMat overload

image/OpenCV
OpenCV selectROI_0

Click and drag a region mid-workflow

image/OpenCV
OpenCV selectROI_1

The named-window ROI picker, UMat edition

image/OpenCV
OpenCV selectROI_2

The ROI picker that skips the window name

image/OpenCV
OpenCV selectROI_3

Default-window ROI picker, UMat edition

image/OpenCV
OpenCV sepFilter2D_0

OpenCV's separable filter in ComfyUI

image/OpenCV
OpenCV sepFilter2D_1

SepFilter2D_1 is a duplicate — here's the deal with the _0/_1 numbering

image/OpenCV
OpenCV setIdentity_0

Make a clean identity matrix without leaving ComfyUI

image/OpenCV
OpenCV setIdentity_1

The duplicate identity-matrix node, and why the pack has twins

image/OpenCV
OpenCV setLogLevel_0

Make OpenCV shut up, or make it talk

image/OpenCV
OpenCV setNumThreads_0

The global cap on OpenCV's CPU threads

image/OpenCV
OpenCV setRNGSeed_0

Make OpenCV's randomness reproducible

image/OpenCV
OpenCV setTrackbarMax_0

A GUI slider control, deep inside a headless server

image/OpenCV
OpenCV setTrackbarMin_0

The other end of the slider you're probably not using

image/OpenCV
OpenCV setTrackbarPos_0

Moving a slider that lives in a window nobody opens

image/OpenCV
OpenCV setUseOpenVX_0

The node that's a no-op on stock OpenCV

image/OpenCV
OpenCV setUseOptimized_0

The debugging switch that turns off OpenCV's fast paths

image/OpenCV
OpenCV setWindowProperty_0

Fullscreen and friends on a window that may not exist

image/OpenCV
OpenCV setWindowTitle_0

Renaming an OpenCV pop-up you probably don't have

image/OpenCV
OpenCV Sobel_0

The classic edge detector, now inside your ComfyUI graph

image/OpenCV
OpenCV Sobel_1

Same edge detector, second overload — use it the same way

image/OpenCV
OpenCV solve_0

Solve a linear system inside your ComfyUI graph

image/OpenCV
OpenCV solve_1

The duplicate linear-solver node (and what it solves)

image/OpenCV
OpenCV solveCubic_0

Real roots of a cubic equation, because sometimes the graph needs math

image/OpenCV
OpenCV solveCubic_1

The twin cubic-root node and the 'not every nparray is an image' trap

image/OpenCV
OpenCV solveLP_0

A linear programming solver, as a ComfyUI node. Yes, really.

image/OpenCV
OpenCV solveLP_1

SolveLP_1 — the same LP solver, one overload over

image/OpenCV
OpenCV solveLP_2

The cleaner solveLP — same solver, fewer required knobs

image/OpenCV
OpenCV solveLP_3

SolveLP_3 — the duplicate of the duplicate, and that's fine

image/OpenCV
OpenCV solvePnP_0

Solve the camera pose from 3D-to-2D point matches, inside ComfyUI

image/OpenCV
OpenCV solvePnP_1

SolvePnP_1 — the same pose solver, from the duplicate overload

image/OpenCV
OpenCV solvePnPRansac_0

SolvePnP with RANSAC — pose estimation that shrugs off bad matches

image/OpenCV
OpenCV solvePnPRansac_1

SolvePnPRansac_1 — the RANSAC pose solver's duplicate twin

image/OpenCV
OpenCV solvePnPRefineLM_0

Polish a rough camera pose with Levenberg-Marquardt

image/OpenCV
OpenCV solvePnPRefineLM_1

SolvePnPRefineLM_1 — the refinement twin, generated twice

image/OpenCV
OpenCV solvePnPRefineVVS_0

Virtual Visual Servoing, with a lambda knob

image/OpenCV
OpenCV solvePnPRefineVVS_1

SolvePnPRefineVVS_1 — the virtual-servoing refiner's duplicate

image/OpenCV
OpenCV solvePoly_0

A polynomial root finder in ComfyUI, because OpenCV ships one

image/OpenCV
OpenCV solvePoly_1

SolvePoly_1 — the root finder's identical twin

image/OpenCV
OpenCV sort_0

Pixel-sort a photo inside ComfyUI — the glitch art node

image/OpenCV
OpenCV sort_1

Sort_1 — the pixel-sorter's duplicate overload

image/OpenCV
OpenCV sortIdx_0

Sort values, keep the indices — sortIdx is the permutation node

image/OpenCV
OpenCV sortIdx_1

SortIdx_1 — the permutation node's duplicate twin

image/OpenCV
OpenCV spatialGradient_0

Both image derivatives in one pass — spatialGradient for edge maps

image/OpenCV
OpenCV spatialGradient_1

SpatialGradient_1 — the Scharr derivative node's twin

image/OpenCV
OpenCV sqrBoxFilter_0

Squared pixels, boxed up — the local-variance building block

image/OpenCV
OpenCV sqrBoxFilter_1

The other sqrBoxFilter — no, really, it's the same node

image/OpenCV
OpenCV sqrt_0

Square roots, pixel by pixel — finish the variance recipe

image/OpenCV
OpenCV sqrt_1

Sqrt_1 — the twin that's identical, and why that's fine

image/OpenCV
OpenCV stackBlur_0

Photoshop's stack blur, fast enough for big soft glows

image/OpenCV
OpenCV stackBlur_1

Stack blur, take two — identical, and that's the point

image/OpenCV
OpenCV startWindowThread_0

The node that starts a window thread and nothing else

image/OpenCV
OpenCV stereoRectify_0

Calibrated stereo rectification — for the 0.1% doing real 3D

image/OpenCV
OpenCV stereoRectify_1

StereoRectify, the second overload — same camera math

image/OpenCV
OpenCV stereoRectifyUncalibrated_0

Stereo rectification without calibration — just feature matches

image/OpenCV
OpenCV stereoRectifyUncalibrated_1

The other uncalibrated rectifier — it's the same homography math

image/OpenCV
OpenCV stylization_0

Painterly stylization that's actually deterministic

image/OpenCV
OpenCV stylization_1

Stylization, twin edition — painterly, deterministic, same node

image/OpenCV
OpenCV subtract_0

Saturated subtraction — the difference operator that won't wrap

image/OpenCV
OpenCV subtract_1

Subtract_1 — same saturating diff, second overload

image/OpenCV
OpenCV sumElems_0

Adds up every pixel, returns a string — a stats oddity

image/OpenCV
OpenCV sumElems_1

SumElems_1 — the duplicate that returns a string scalar

image/OpenCV
OpenCV SVBackSubst_0

SVD back-substitution — linear algebra for the workflow masochist

image/OpenCV
OpenCV SVBackSubst_1

SVBackSubst_1 — same SVD solve, second overload

image/OpenCV
OpenCV SVDecomp_0

Singular value decomposition, if you ever need to factor a matrix

image/OpenCV
OpenCV SVDecomp_1

Singular value decomposition is now a ComfyUI node. Yes, really.

image/OpenCV
OpenCV textureFlattening_0

Make your seamless-clone composites stop looking pasted

image/OpenCV
OpenCV textureFlattening_1

TextureFlattening_1 — the same flattening, with a second number

image/OpenCV
OpenCV threshold_0

Threshold

image/OpenCV
OpenCV threshold_1

Threshold_1 — a second mask maker that's the same mask maker

image/OpenCV
OpenCV trace_0

The node that returns a string instead of an image

image/OpenCV
OpenCV trace_1

Trace_1 — a math utility wearing an OpenCV costume

image/OpenCV
OpenCV transform_0

Color-grade any image with one matrix multiply

image/OpenCV
OpenCV transform_1

Transform_1 — the same per-pixel matrix node, one number later

image/OpenCV
OpenCV transpose_0

The node that flips your array on its diagonal

image/OpenCV
OpenCV transpose_1

Transpose_1 — the mirror image of the mirror node

image/OpenCV
OpenCV triangulatePoints_0

From two cameras to a point cloud, inside a ComfyUI graph

image/OpenCV
OpenCV triangulatePoints_1

TriangulatePoints_1 — the stereo twin with the same point to make

image/OpenCV
OpenCV undistort_0

Straighten real-camera lens distortion before it hits the sampler

image/OpenCV
OpenCV undistort_1

Undistort_1 — the second overload of the lens-fix node

image/OpenCV
OpenCV undistortImagePoints_0

When your 'image' is actually a grid of points

image/OpenCV
OpenCV undistortImagePoints_1

UndistortImagePoints_1 — the points-image twin, for calibration completists

image/OpenCV
OpenCV undistortPoints_0

Fix distorted keypoints, not pixels — the math twin of undistort

image/OpenCV
OpenCV undistortPoints_1

UndistortPoints_1 — the keypoint-correction twin you can swap freely

image/OpenCV
OpenCV undistortPointsIter_0

The same lens math, with an iteration budget

image/OpenCV
OpenCV undistortPointsIter_1

Fix the geometry of your points, not your pixels

image/OpenCV
OpenCV useOpenVX_0

A status light for a hardware acceleration you almost certainly don't have

image/OpenCV
OpenCV useOptimized_0

Is OpenCV actually using its fast paths?

image/OpenCV
OpenCV validateDisparity_0

The quality gate for stereo depth maps

image/OpenCV
OpenCV validateDisparity_1

Same stereo validator, second overload — same inputs, same caveats

image/OpenCV
OpenCV waitKey_0

The keyboard-wait node that mostly just blocks your graph

image/OpenCV
OpenCV waitKeyEx_0

WaitKey, but with extended key codes — same ComfyUI caveats apply

image/OpenCV
OpenCV warpAffine_0

The node that rotates, shifts, and skews your images with a 2×3 matrix

image/OpenCV
OpenCV warpAffine_1

The second warpAffine overload — pick either, it's the same matrix math

image/OpenCV
OpenCV warpPerspective_0

Straighten any photo of a screen, sign, or page with a 3×3 homography

image/OpenCV
OpenCV warpPerspective_1

WarpPerspective, take two — the overloads are twins, so just use one

image/OpenCV
OpenCV warpPolar_0

The polar remap node

image/OpenCV
OpenCV warpPolar_1

The second polar warp overload — same vortex, same flags, pick one

image/OpenCV
OpenCV watershed_0

Split touching objects into separate mattes with marker-based segmentation

image/OpenCV
OpenCV watershed_1

The twin of the segmentation node — identical inputs, no wrong choice

image/OpenCV
OpenCV writeOpticalFlow_0

Export your optical flow to .flo so real video tools can use it

image/OpenCV
OpenCV writeOpticalFlow_1

The second .flo writer overload — same file format, same two inputs

image/OpenCV
Readme

OpenCV-ComfyUI

Custom nodes for ComfyUI that implement all top-level standalone functions of OpenCV Python cv2, auto-generated from their type definitions.

Quickstart

cv2 basic workflow

  1. Install OpenCV:
    pip install opencv-python-contrib
    
  2. Convert between Comfy image and OpenCV nparray using:
    • Image2Nparray
    • Nparrays2Image
  3. Avoid the optional out-parameters (usually called dst).
  4. Convert color channels with cvtColor. Use:
    • 6 for BGR2GRAY
    • 8 for GRAY2BGR
  5. Use literal strings for composite parameters (e.g., [3, 3] for ksize).

These nodes are auto-generated from source and so they are ugly and complex to use. Expect dragons!

Please leave some feedback! If I see the project being used I will develop it further.

Documentation

For function references, see the official OpenCV documentation, start with Image processing filters.

Installation

You probably already have OpenCV already installed via some other custom node, otherwise install with:

pip install opencv-python-contrib

If you get:

Cannot import name 'guidedFilter' from 'cv2.ximgproc'

you likely have conflicting packages. It's a known source of problems, see solution.

Image Representation

| Feature | ComfyUI IMAGE | OpenCV images | |------------------|-----------------------------------------|---------------------------------------| | Type | torch tensor | numpy ndarray | | Shape | (batch, height, width, channels) | (height, width, channels) | | Color Format | Always RGB, never RGBA | Mostly BGR or grayscale | | Value Range | 0.0..1.0 | 0..255 | | Data Type | np.float32 | np.uint8 |

You have to use cvtColor to convert between them. Common enums for color conversion:

BGR2BGRA  =  0
RGB2RGBA  =  0
BGRA2BGR  =  1
RGBA2RGB  =  1
BGR2RGBA  =  2
RGB2BGRA  =  2
RGBA2BGR  =  3
BGRA2RGB  =  3
BGR2RGB   =  4
RGB2BGR   =  4
BGRA2RGBA =  5
RGBA2BGRA =  5
BGR2GRAY  =  6
RGB2GRAY  =  7
GRAY2BGR  =  8
GRAY2RGB  =  8
GRAY2BGRA =  9
GRAY2RGBA =  9
BGRA2GRAY = 10
RGBA2GRAY = 11

(we should use COMBO for them, I know)

Troubleshooting

invalid syntax (<unknown>, line 0)

  • Some of the input parameters require composite types and they are implemented using ast.parse() to convert from Python literal strings to objects, but the syntax you used is wrong (e.g. for Size use (30, 40)).
Image2Nparray
Only images with batch_size==1 are supported! batch_size=2
  • Use the ImageFromBatch node (length=1) to select your image and create a image with batch_size=1.

error: (-215:Assertion failed) img.type() == CV_8UC1 in function

  • The function requires a grayscale image. Convert it with cvtColor (code=6) first.
Nparrays2Image
'NoneType' object has no attribute 'shape'
  • Not every return type of nparray is actually an image. Some are just a 1-dimensional array of floats, but you are using it as an image. Check the OpenCV documentation. Please also note that the OpenCV nodes were auto-generated and not every function is useful within ComfyUI without further processing.

Development

Image batches

Comfy IMAGE is actually a batch of images, usually with just one, but we have to handle the case with multiple images:

  1. We could iterate over the batch and call the OpenCV function for each image, but then we have to collect the output in lists as well. This works as long as the output is just a image, not a tuple. If it is tuple (e.g. (nparray, int)) either the user has to select the list index everytime or we treat all inputs as lists too.
  2. We could always use batch index 0 but this may be surprising behaviour for the user.
  3. We could just support batch_size=1. I settled with this for now because it's easier.

Image versus nparray

For handling Comfy image versus OpenCV nparray we have the following choices:

  1. Always use Comfy IMAGE for input and output
    • fails for functions requiring grayscale images (like Canny), because we always convert from RGB to BGR to RGB.
    • we could convert to the required type automatically, but I don't have annotations telling me which function requires which type.
    • type conversions in OpenCV is supposed to be more intentional and there can be multiple correct types.
  2. Provide both IMAGE and nparray as input and output
    • the automatic conversion issue above partely applies here and usage would become surprising (IMAGE is always RGB, nparray is whatever the function outputs)
    • providing both inputs is ambigious (Maybe Comfy supports multiple types for one parameters, I don't know)
  3. Provide conversion nodes and only use nparray
    • I settled with this because it more closly matches the OpenCV style were cvtColor conversions are intentional anyway.

Parsing OpenCV

Function definitions were extracted using ast.parse() on venv/lib/python3.11/site-packages/cv2/__init__.pyi. This includes only top-level standalone functions - not classes or anything hidden in sub-modules.

Attemps to use inspect.signature(cv2.MedianBlur) or inspect.getmembers(cv2.MedianBlur) failed due to missing type annotations (ValueError: no signature found for builtin <built-in function MedianBlur>). OpenCV functions are implemented as C++ extensions, and they do not have Python type annotations (__annotations__). Unlike pure Python functions, built-in functions and extension functions do not store signature metadata in a way that Python's reflection tools can access directly.

Most functions are overloaded and they were numbered.

Types

I then analyzed how many different types and paramter names are used (see analyze_functions) to filter out complicated or unsupported functions for now. You can find the infos in cv2.tsv.

  • 776 functions in total.
  • Parameters use:
    • simple types: int, float, str, bool,
    • composite types (exhaustivly: Moments, Point, Point2d, Point2f, Rect, Rect2d, RotatedRect, Scalar, Size, TermCriteria),
    • and images
  • Images are represented with the following types:
    • UMat
    • cv2.typing.MatLike
    • cv2.typing.MatLike | None and UMat | None usually used for dst, but some dst are not None. used as src only in reprojectImageTo3D.
    • cv2.cuda.GpuMat but only used in imshow
    • numpy.ndarray but only used as return type in all variants of imencode
  • Return types include:
    • Simple types
    • Composite types (Size, Rect etc.)
    • many tuples with all types above
    • _typing.Sequence which is not supported yet
    • _typing.Callable which is not supported yet
    • many class types (like Tonemap etc.), which are not supported yet

After filtering out all unsupported types there were 635 functions left.

For the composite types we could:

  • provide extra widgets to construct them (todo),
  • split them up in their simple types so Rect would become Rect_0_int_0, Rect_0_int_1, Rect_0_int_2, Rect_0_3 (ugly)
  • or use STRING and parse them with ast.literal_eval(). This is what I used.

Out parameters

OpenCV often modifies input images in-place with call-by-reference out-parameters, but this does not align with ComfyUI's paradigm. Example:

def medianBlur(src: cv2.typing.MatLike, ksize: int, dst: cv2.typing.MatLike | None = ...) -> cv2.typing.MatLike: ...

Most of them are defined as cv2.typing.MatLike | None or UMat | None but that's no always the case. Some are not None:

def normalize(src: cv2.typing.MatLike, dst: cv2.typing.MatLike, alpha: float = ..., beta: float = ..., norm_type: int = ..., dtype: int = ..., mask: cv2.typing.MatLike | None = ...) -> cv2.typing.MatLike: ...

I considered some alternative approaches:

  • We could assume the first image is always the input image but we cannot assume the second parameter is always an out-parameter because some functions use multiple input images.
  • We cannot derive the out-parameter from the return type (assuming the out-parameter is always used as a return), because return types are sometimes tuples with multiple images.
  • The position of the out-parameter is inconsistent, sometimes followed by another input image.
  • We cannot derive the out-parameter from the parameter name alone. There are 167 unique parameters names (skipping the first one) and the naming is inconsistent.
  • I don't know of any strictly typed OpenCV definition file which would of course be the best choise. We can of course parse the original sources, headers or C++ sources and derive: out-parameters, value ranges, allowed channel types etc. and construct this definition file, but that's another story.

I just included them as optional inputs for now if the type includes None.

Classes

Ignored for now. Classes don't really fit the ComfyUI style but they would be possible if we pass around chained instances for every method call.

proposal on how to use classes in ComfyUI

Todo

  • Widgets for composite types instead of literals
  • More convenience functions like enums for cvtColor, Preview Nparray node etc.
  • Support image batches with batch_size > 1
  • Parse doxygen docs and include them as help-strings
  • Automatic conversion between channels
  • Provide utility nodes for common patterns (like convert Hough lines to image)
  • Parse C++ code for value ranges and detect out-parameters
  • Better handling of out-parameters (or removal)
  • Blacklist functions which don't make sense in ComfyUI (like return type None)
  • Categorize nodes and keep the namespace clean
  • Generate custom nodes for classes too

I'm happy to take any contributions! :)