CV Blob Tracker
TouchDesigner-style glow tracking, minus the TouchDesigner
- image
- image
- blobs
- tracks
This is the node the whole pack exists for. The README says it all: it brings TouchDesigner's signature blob-tracking look into ComfyUI. You know the aesthetic - the clean glowing dots tracking the bright spots in footage, connected by lines that web out like a constellation. That's what this does, and it does it without touching a diffusion model. It's pure OpenCV: bright-spot detection, persistent tracking across frames, and optional plexus connections. If you've ever envied the motion-graphics folks in TouchDesigner, this is your in.
How it works
Each frame goes through a real pipeline, not a threshold slapped on the image: grayscale conversion, then a blur chain (Gaussian + median + bilateral) that knocks down sensor noise and gives blobs stable borders, then percentile-based thresholding that keeps only the genuinely bright spots. Morphological open/close cleans up the leftovers, contours become blobs, and each blob gets a centroid, area, and a stability score based on how round and solid it is.
The tracking part is the clever bit. Blobs from the previous frame are matched to blobs in the current frame by distance (it builds a distance matrix across all candidates), and a match earns a confidence score blending distance, size similarity, and shape. Matches keep their ID, accumulate an age, and grow a trajectory trail of their last ~30 positions. A blob that disappears sticks around in memory for a while before being dropped - which is exactly what makes tracking feel stable instead of twitchy.
The inputs that matter
You've got a stack of sliders, but for a beginner only a few matter:
detection_threshold(0.75) - sensitivity. Lower = more sensitive, picks up dimmer spots. Higher = only the brightest. This is the first thing you'll fight with.min_blob_size(300) /max_blob_size(12000) - blob area in pixels.min_blob_sizefilters out noise glints; if you're getting junk, raise it.blur_radius(20) - stability. Higher extends the tracking borders and smooths jitter.enable_plexus(off) - the constellation lines. Flip it on, thenplexus_distance(200) sets how far apart blobs can be to connect, andmax_connections(15) caps how many lines get drawn so it doesn't turn into spaghetti.
Two optional inputs matter a lot for video: video_id (default "default") keys the tracking memory, and reset_tracking clears it. Give each video clip its own video_id so sequences don't pollute each other.
Outputs
image is a pass-through (same story as the detector - no drawing happens here). The real outputs are blobs (CV_BLOBS) and tracks (CV_TRACKS), and both wire into CV Aesthetic Overlay, which does all the rendering. The video loop is:
VHS Load Video → CV Blob Tracker → CV Aesthetic Overlay → VHS Video Combine
The nodes handle batched frame tensors, so this genuinely works frame-by-frame on a VHS batch.
Installing
Same pack, same drill - ComfyUI Manager (search "ComfyUI-CVOverlay"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/joosthel/ComfyUI-CVOverlay.git
Restart. Dependencies are the heavy opencv/scipy stack (no YOLO needed for this path). If you get "Missing dependencies," pip didn't run - pip install opencv-python scipy fixes it.
Troubleshooting
- Nothing detected. Your footage probably lacks bright spots - this is a bright-spot tracker, not a general object tracker. Glints, lights, specular highlights, sparkle on water: yes. A normal daytime street scene: maybe not. Lower
detection_threshold, lowermin_blob_size. - Twitchy, flickering blobs. Raise
blur_radiusandmin_blob_sizeto stabilize. - Ghost tracks following you around. That's tracking memory from a previous run. Hit
reset_tracking, or changevideo_id. The state lives in the node's class memory until you clear it. - Everything connected to everything. Drop
plexus_distanceandmax_connections; the default distance of 200 is generous.
One honest caveat: this is a small, brand-new pack with zero community discussion behind it. The code is straightforward and MIT-licensed, but "experimental" is the right frame. That said, for a specific job - glowing-spot tracking with plexus lines - there isn't much else in ComfyUI that does it this directly.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| detection_threshold | FLOAT | 0.750.01–1 | Lower = more sensitive, Higher = only brightest spots |
| min_blob_size | INT | 30010–5000 | Minimum blob size in pixels - filters out noise |
| max_blob_size | INT | 12000500–100000 | Maximum blob size in pixels - prevents huge regions |
| blur_radius | INT | 201–100 | Blur radius for stability - higher values extend tracking borders and reduce noise |
| max_blobs | INT | 501–1000 | Maximum number of tracked blobs |
| enable_plexus | BOOLEAN | false | Enable plexus connections between blobs |
| max_connections | INT | 155–100 | Maximum plexus connections |
| plexus_distance | INT | 20050–5000 | Maximum distance for plexus connections |
| video_idopt | STRING | default | Unique ID for this video sequence |
| reset_trackingopt | BOOLEAN | false | Reset all tracking memory |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| blobs | CV_BLOBS | — |
| tracks | CV_TRACKS | — |