Blob Tracker
Track moving blobs and objects in video by connected-component analysis.
What it does
Blob Tracker finds contiguous regions in an image and tracks them frame to frame as stable IDs. A segmentation model pulls a mask out of the image, or a mask is fed in directly; the individual blobs in that mask are isolated, then matched against the previous frame to carry position, velocity and identity forward.
Each tracked blob carries a centroid, velocity, area, bounding box, orientation, an age and a stable ID that survives frame to frame. Bounding-box shapes come out ready to composite or to use as an analytic-shape input.
When to use it
People, hands, props or any moving shape from a camera or video feed, each with a persistent identity across frames
Per-blob motion data (position, velocity, size) driving other nodes
A mask that already exists, from another vision node, a threshold or a key, needing only blob isolation and tracking
| Parameter | Type | Default | What it does |
|---|---|---|---|
image | Raster | — | Image to detect and track blobs in (Camera, Video, Image, or pre-computed mask) |
model | String | "u2net_lite" | Segmentation model. Use 'none' if input is already a mask. One of: u2net_lite, modnet, none. |
threshold | Number | 0.500 | Threshold for converting soft mask to binary (higher = stricter) |
min_area | Number | 0.001 | Minimum blob area as fraction of image (0.001 = 0.1%) |
max_area | Number | 0.900 | Maximum blob area as fraction of image |
max_blobs | Number | 20 | Maximum number of blobs to track |
sort_mode | String | "area" | How to sort blobs (affects which survive max_blobs cutoff). One of: area, left_to_right, top_to_bottom, nearest_to_center. |
max_distance | Number | 0.150 | Maximum distance (normalized) a blob can move between frames |
persistence | Number | 15 | Frames to keep a lost blob alive before removing |
process_noise | Number | 0.010 | Kalman process noise (higher = more responsive, less smooth) |
measurement_noise | Number | 0.100 | Kalman measurement noise (higher = smoother, more lag) |
distance_weight | Number | 1 | Weight for centroid distance in cost matrix (higher = prioritize position) |
iou_weight | Number | 0.500 | Weight for bounding box IoU in cost matrix (higher = prioritize shape overlap) |
area_weight | Number | 0.300 | Weight for area similarity in cost matrix (higher = prioritize size) |
enabled | Boolean | true | Enable blob tracking |
Gotchas
On an already-binary input, a mask or a matte from a Key node, set Model to "none". Running a segmentation model over a mask wastes time and can distort the edges.
Min Area and Max Area are fractions of the image, not pixels: 0.001 means a blob must cover at least 0.1% of the frame to count. Raise Min Area to ignore noise flecks; lower Max Area if a large background region is being counted as a blob.
Distance Weight, IoU Weight and Area Weight shape how blobs are matched between frames: position, shape overlap and size similarity respectively. When IDs swap between two blobs that pass close to each other, raise IoU Weight or Area Weight so shape and size break the tie instead of proximity alone.
Persistence sets how many frames a blob is kept alive after it is lost (covered, off-screen, or momentarily undetected) before its ID is dropped. Too low and fast-moving or briefly-occluded blobs lose their identity and restart as new blobs; too high and stale blobs linger and can steal a match from a real new one.
Worked example
Add a Blob Tracker and wire a Camera or Video node into Image.
Leave Model at "u2net_lite" for general subjects, or switch to "modnet" for people. Raise Threshold if the mask is picking up background noise.
Set Min Area to filter out small flecks, and Max Blobs to cap how many blobs are tracked at once.
Read the blobs output for full per-blob data, or wire centroids / velocities directly into whatever should follow the motion.