Skip to content

Track Detections Node

AI/ML/Tracking

Follows detected objects across the frames of one camera and gives each a stable track id (ByteTrack, with BoT-SORT appearance matching when detections carry embeddings). Run it once per frame: the tracker is kept in memory per user, board, node, Camera pin and Session pin between runs and uses frame timestamps for motion and expiry. Track ids are only unique per tracker instance, named by each track's tracker_id: a new Camera or Session pin value, 10 minutes without frames, eviction when too many trackers are open, or a process restart starts a new tracker with a new tracker_id (a session carried by the detections does not). Deployments that spread runs over several processes keep one independent tracker per process.

tracking_track_detectionsonnx
Inputs13
Outputs3
Security exposure8/10
Packageonnx

Ratings

Scores range from 0 to 10. Higher values mean more impact, exposure, or operational weight.

SecurityAttack surface and exposure impact.
8/10High
PrivacyPotential sensitivity of processed data.
8/10High
PerformanceRuntime or resource pressure.
9/10High
GovernancePolicy, audit, or compliance impact.
7/10High
ReliabilityOperational stability considerations.
7/10High
CostExternal or compute cost impact.
10/10High

Input Pins

13

Input

Execution
exec_in

Initiate Execution

Detections

Struct Array
detections

Boxes detected in this frame. Embeddings from Extract Appearance are used for appearance matching when present. Elements in the lost state (predicted boxes of lost tracks fed back in) are ignored.

BoundingBoxBoundingBox7 fields
x1number:floatrequired
format float
y1number:floatrequired
format float
x2number:floatrequired
format float
y2number:floatrequired
format float
scorenumber:floatrequired
format float
class_idxinteger:int32required
format int32
class_namestring | null
Default []

Camera

String
camera_id

Camera the frame comes from. Empty keeps the camera carried by the detections, or the last one seen. Every value of this pin gets its own tracker, so set it when one node tracks several cameras.

Session

String
session_id

Stream session of the camera. Empty keeps the session carried by the detections, or the last one seen. A new value of this pin starts a fresh tracker with a new tracker_id.

Timestamp (ms)

Integer
timestamp_ms

Frame capture time in Unix milliseconds; 0 uses the current time, never earlier than the last processed frame. A frame up to Max Lost older than the last processed one is skipped; one further back is taken as a clock reset that drops all tracks.

Default 0

High Threshold

Float
high_threshold

Detections scoring at least this take part in the first association

Default 0.5
Range 0 to 1

Low Threshold

Float
low_threshold

Detections scoring at least this, but below the high threshold, can only keep existing tracks alive

Default 0.1
Range 0 to 1

New Track Threshold

Float
new_track_threshold

Minimum score for an unmatched detection to start a new track

Default 0.6
Range 0 to 1

Match Threshold

Float
match_threshold

Maximum matching cost (1 - IoU × score, or appearance distance) of the first association; higher matches more loosely

Default 0.8
Range 0 to 1

Max Lost (ms)

Integer
max_lost_ms

How long a track that lost its object can be re-acquired with the same id

Default 2000

Min Appearance Similarity

Float
min_appearance_similarity

Minimum cosine similarity of embeddings for appearance to count as a match

Default 0.5
Range 0 to 1

Class Aware

Boolean
class_aware

Never match a track with a detection of another class

Default true

Include Lost

Boolean
include_lost

Also output tracks that lost their object. Their boxes are Kalman predictions, not detections: Extract Appearance and Associate Entities treat them as passive, and this node ignores them when they are fed back in.

Default false

Output Pins

3

Output

Execution
exec_out

Done with the Execution

Tracks

Struct Array
tracks

Confirmed tracks matched in this frame (plus lost tracks if enabled), sorted by track id. Track ids are unique per tracker_id.

TrackedObjectTrackedObject20 fields
x1number:floatrequired
format float
y1number:floatrequired
format float
x2number:floatrequired
format float
y2number:floatrequired
format float
scorenumber:floatrequired
format float
class_idxinteger:int32required
format int32
class_namestring | null
embeddingArray<number:float>

Smoothed appearance embedding of the track; empty when no embeddings were supplied

default []
itemsnumber:floatarray item
format float
camera_idstring
default ""
session_idstring
default ""
tracker_idstring

Tracker instance that issued `track_id`. A new tracker (new Camera/Session pin value, 10 minutes without frames, eviction or restart) gets a new one; a clock reset keeps it

default ""
track_idinteger | null

Track id, unique within one tracker instance

format uint64default nullmin 0
timestamp_msinteger:int64

Timestamp of the frame this track state belongs to, in Unix milliseconds

format int64default 0
detection_indexinteger | null

Index of the matched detection in this frame's input, or null for lost tracks

format uint32default nullmin 0
stateTrackState
default "tracked"
variant 1constvariant

Matched to a detection in the latest frame

const "tracked"
variant 2constvariant

Not matched recently; kept alive for re-identification until it expires

const "lost"
hitsinteger:uint32

Number of frames the track was matched in

format uint32default 0min 0
first_seen_msinteger:int64
format int64default 0
last_seen_msinteger:int64
format int64default 0
+2 more fields
Default []

Skipped

Boolean
skipped

True when the frame was older than the last processed one and was ignored

Node Info

Internal name
tracking_track_detections
Category
AI/ML/Tracking
Version
1