Nodes/ComfyUI-CVOverlay/CV Blob Tracker
ComfyUI Node

CV Blob Tracker

TouchDesigner-style glow tracking, minus the TouchDesigner

By joosthel·Created about a year ago·Updated about a year ago· 5
CV Blob Tracker
  • image
  • image
  • blobs
  • tracks
detection_threshold0.75
min_blob_size300
max_blob_size12000
blur_radius20
max_blobs50
enable_plexusfalse
max_connections15
plexus_distance200
video_iddefault
reset_trackingfalse

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_size filters 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, then plexus_distance (200) sets how far apart blobs can be to connect, and max_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, lower min_blob_size.
  • Twitchy, flickering blobs. Raise blur_radius and min_blob_size to stabilize.
  • Ghost tracks following you around. That's tracking memory from a previous run. Hit reset_tracking, or change video_id. The state lives in the node's class memory until you clear it.
  • Everything connected to everything. Drop plexus_distance and max_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.

CategoryCV/Tracking

Inputs (11)

NameTypeDefaultDescription
imageIMAGE
detection_thresholdFLOAT0.750.01–1Lower = more sensitive, Higher = only brightest spots
min_blob_sizeINT30010–5000Minimum blob size in pixels - filters out noise
max_blob_sizeINT12000500–100000Maximum blob size in pixels - prevents huge regions
blur_radiusINT201–100Blur radius for stability - higher values extend tracking borders and reduce noise
max_blobsINT501–1000Maximum number of tracked blobs
enable_plexusBOOLEANfalseEnable plexus connections between blobs
max_connectionsINT155–100Maximum plexus connections
plexus_distanceINT20050–5000Maximum distance for plexus connections
video_idoptSTRINGdefaultUnique ID for this video sequence
reset_trackingoptBOOLEANfalseReset all tracking memory

Outputs (3)

NameTypeDescription
imageIMAGE
blobsCV_BLOBS
tracksCV_TRACKS