track β Run the tracking stackΒΆ
Runs the context generator and, unless --record-only is set, the configured
inference pipeline. It can record datasets, launch the VisPy UI, or publish
live exports to a visualizer uplink.
UsageΒΆ
# Live gstreamer cameras, UI enabled
s6 track -i gst -v
# Replay a dataset directory in a loop (headless)
s6 track -i ./datasets/session_001 --repeat
# Push live telemetry into a local visualizer uplink (headless)
s6 track -i gst --uplink
# Override pipeline parameters and run level
s6 track --config configs/pipeline.config.yaml --run-level performance
How it worksΒΆ
Selects a context generator from
s6.app._contextgeneratorsbased on--input:gstβRemoteGSTContextGeneratorgst-localβLocalGSTContextGeneratorgst-local-v2βLocalGSTContextGeneratorV2any dataset directory path β
DatasetContextGenerator
Loads the pipeline from
--configand validates shared config fields withPipelineConfigBasebefore resolvingpipeline_nameto the concrete pipeline class.--run-leveloverrides the config value at load time.Unless
--record-onlyis set, the selected pipeline mutates each newest context in place and writescontext["export"]for downstream consumers.With
-v/--ui,trackstarts a Qt/VisPyMainWindowin the foreground and runs capture plus inference in a spawned worker process owned byTrackRuntime.In UI mode, dataset inputs enable playback controls. Live GST inputs keep streaming and leave replay-only controls disabled.
In UI mode,
-o/--output-datasetstarts recording immediately. If-ois omitted,trackprepares a generatedtemp/track_*dataset path and waits for the Record button before writing frames.With
--uplink [WS_URL],trackruns headless and publishes{"export": ...}snapshots to the visualizer WebSocket. This mode is mutually exclusive with--ui. The spawned worker forwards only the export snapshot across its multiprocessing queue before the publisher serializes it to WebSocket.
Common flagsΒΆ
-i, --inputβ data source (gst,gst-local,gst-local-v2, or a dataset path)-o, --output-datasetβ write a dataset to this directorySupports path placeholders such as
$datetime/$dt,$date,$time,$input,$config,$host,$pid, and$runid.Quote or escape
$...in the shell so the placeholder reachess6 track, for example-o 'temp/data_$datetime'or-o temp/data_\\$datetime.
-x, --output-logβ write logs underlogs/runs/YYYMMDD_HHMMSS.-r, --record-onlyβ skip inference and only record frames.-v, --uiβ enable the VisPy UI.--pathβ parsed by the CLI today, but not consumed by the currenttrackruntime. The supported inputs remaingst,gst-local, and dataset-directory replay.--enable-plotsβ show the plot panel in the UI.--uplink [WS_URL]β push live telemetry snapshots into a visualizer uplink.Uses
ws://127.0.0.1:4173/ws/uplinkwhen passed without a value.Headless only; it cannot be combined with
--ui.
--repeatβ loop dataset playback when the input is a dataset directory.--realtime-playbackβ pace dataset replay using recorded timestamp deltas.--configβ path to a pipeline config file (JSON/YAML).Defaults to
configs/pipeline.config.yaml.
--run-levelβ override the pipeline runtime feature level.Choices:
performance,normal,dev,debug.
Config NotesΒΆ
Pipeline config files define shared fields such as
pipeline_name,platform,run_cpp,run_level, andcalibration_file.The checked-in defaults under
sense-core/configs/currently point atPipelineT1inconfigs/pipeline.config.yaml.GStreamer source settings live in the pipeline config under
platform.gstreamer;s6 trackdoes not require a separate gstreamer config file.gst-local-v2reusesplatform.gstreamer.localbut captures one compositor stream through direct Gst appsink capture instead of usingMultiCameraCapture.In
gst-local-v2, sync-only local capture settings (stale_frame_timeout_sec,max_seq_skew) are ignored because the runtime reads one combined frame stream rather than synchronizing multiple sources.
Retirement noteΒΆ
Database-backed replay has been retired from
s6 track; export remote data to a dataset directory before replaying it locally.See
../retired_streamer.mdfor impacted commands and scripts.