Contents

Command line reference

Commands are flat: st <command> [flags], with st container <action> and st docs bundle the two subgroups. Arguments after a bare -- are forwarded to the underlying binary.

Command Purpose
st build Configure + build; test targets built by default (--no-test to skip)
st test Run a CTest label group: --suite unit / integration / regression / functional / all
st eval MOT label benchmark + TrackEval metrics (not a CTest suite)
st infer YOLOX video inference pipeline through tracker_bridge
st run Run a built executable, by name or from a picker
st clean Remove build/ and package/
st deploy {cpp,python} Assemble package/ from the current build
st status What is built, what is missing, which data sets are present
st setup [--dry-run] [--yes] [--toolchain NAME] [--no-gpu] Provision the dependencies in cli/sushistack.deps.toml, then run the doctor
st doctor [--for GROUP] Check readiness per group (build, test, infer, eval); non-zero exit when a required check fails
st link [--workspace PATH] Register this checkout in a SushiStack workspace
st unlink [--workspace PATH] Remove this checkout from a SushiStack workspace
st config Resolved configuration and the origin of every value
st paths Resolved project directories
st env [--all] Environment cmake and the test binaries execute under
st container build / st container run Image build / bind-mounted container
st docs bundle --release X.Y.Z Pack the published manual pages into the documentation bundle
st --version / st --describe Installed version / command catalogue as JSON

Configuration is layered: built-in defaults → cli/config.toml → cli/config.local.toml → ST_* environment variables (ST_BUILD_DIR, ST_BUILD_TYPE, ST_GENERATOR, ST_CMAKE, ST_DOCKER_IMAGE, ST_TRACKER, …). st config prints which layer each value came from.

st build

Flag Effect
--type, -t <type> release (default) / debug / relwithdebinfo / minsizerel
--no-test Build the library only; test targets are built by default
--clean Remove the build directory before configuring
--jobs, -j <n> Parallel build jobs (default: CPU count)
-D VAR=VALUE Extra -D option forwarded to cmake (repeatable)
--deploy {cpp,python} After a successful build, assemble a redistributable package/ for the chosen consumer (details)

st test

Runs tests through CTest labels. Each test target carries one label, assigned in tests/*/CMakeLists.txt on its gtest_discover_tests call, so a new test file, or a whole target, is picked up with no CLI change.

Suite Label selection Contents
unit -L '^unit$' unit_test: deterministic component tests, no external data
integration -L '^integration$' integration_test: end-to-end coverage through the C API
regression -L '^regression$' regression_test: MOT scenarios, pass/fail only (metrics: st eval)
functional -L '^(unit|integration|regression)$' all three; the default
all no -L every registered test
Flag Effect
--suite, -s <name> Label group to run (default functional)
--filter, -f <regex> ctest -R over Suite.Case test names
--repeat, -r <n> ctest --repeat until-fail:<n>: re-run each test until it fails; flaky-test hunting
--jobs, -j <n> Run up to N tests concurrently (ctest --parallel)
st test                              # functional: unit + integration + regression
st test --suite unit
st test --suite unit -f 'RectTest'
st test --suite integration --repeat 3
st test --suite all -j 8

For GTest-level knobs (shuffle, break-on-failure) run the binary directly instead:

st run unit_test -- --gtest_shuffle --gtest_break_on_failure

st eval

The MOT label benchmark. Not a CTest suite: it runs regression_test over det.txt-backed scenarios, parses the per-sequence [ PERF ] timings out of its output, then runs TrackEval and prints a metrics table (HOTA / DetA / AssA / MOTA / IDF1 / IDSW / FP / FN / Lat). st test --suite regression answers only pass/fail for the same binary.

Flag Effect
--scenario <name> Sequence filter (exact match or case-insensitive substring)
--tracker <name> sushitrack (default), bytetrack, or ocsort
--compare Run all three trackers side-by-side
--eval-only Skip the binary; re-score existing pred/*.txt files
--trackeval Use the official third_party/TrackEval/scripts/run_mot_challenge.py instead of the internal runner
--export <dir> Export TrackEval JSON/CSV to <dir>
--private Only *-YOLOX sequences (MOT only)
--public All sequences except *-YOLOX (MOT only)
st eval
st eval --compare
st eval --scenario MOT17-04-DPM --compare
st eval --eval-only --export ./results
st eval --trackeval --private

The internal runner needs the evaluator’s own dependencies (numpy, scipy, TrackEval) from environment.yml; --trackeval bypasses it. Scenarios registered in tests/regression/ScenarioList.h: full MOT17 train set (21 sequences across DPM/FRCNN/SDP detectors plus -YOLOX variants for each), MOT20 (-01/-02/-03/-05 with -YOLOX variants), and DanceTrack sequences (dancetrack0001, 0002, 0006, 0008, 0012, 0015, …).

st infer

Launches the YOLOX-driven video inference pipeline (tests/regression/inference/demo.py), which loads tracker_bridge.{dll,so} via ctypes. Arguments after -- are forwarded to demo.py untouched.

Flag Default Effect
--source <path> required Video file path or camera index
--tracker <name> sushitrack Tracker selector (sushitrack / bytetrack / ocsort)
-n, --name <name> yolox-s YOLOX architecture
-c, --ckpt <path> – Pre-trained YOLOX weights
--device {cpu,gpu} gpu Inference device
--conf <float> 0.1 Detection confidence floor
--nms <float> 0.45 NMS IoU threshold
--tsize <H W> – Inference resolution; pass the same value twice for a square size
--num-classes <int> 80 Class count (set 1 for MOT)
--legacy off Legacy YOLOX normalisation (BGR→RGB, 0–1 scale, ImageNet mean/std)
--stress off Headless max-throughput mode
--no-save off Disable output-video writer
--save_name <name> – Output filename override
--mot-label off Append detections to output/det.txt in MOT format
--no-screen off Disable UI display
--reid off Enable OSNet ReID embedding extraction (fills feat per detection)
--reid-model <path> osnet_x1_0.onnx Path to the ReID ONNX model
st infer -n yolox-x -c third_party/weight/mot17x.pth.tar --source third_party/video/MOT17-04.mp4 --num-classes 1 --legacy

st infer -n yolox-x -c third_party/weight/mot17x.pth.tar --source tests/regression/evaluator/data/MOT20-01/img1 --num-classes 1 --legacy

st infer --source 0 --tracker sushitrack --no-save --no-screen --stress

--source also accepts an image-sequence directory (<path>/img1), not just a video file or camera index. tests/regression/evaluator/data/ already holds 76 real tracker benchmark sequences (MOT17, MOT20, DanceTrack) used by the regression suite. Any of their names works, e.g. tests/regression/evaluator/data/MOT20-01/img1 or tests/regression/evaluator/data/dancetrack0001/img1.

If the YOLOX checkpoint filename contains mot17 and --tsize is omitted/640, the pipeline overrides tsize to (800, 1440) to match the MOT17 training resolution.

st clean

Removes the build directory and the assembled package directory (build/ and package/ by default; both overridable in the paths section of cli/config.toml).

st clean

st run

Runs an executable from the build tree. The target is matched by exact name first, then by substring; with no target, or with --select, st lists the executables and asks which one to run. Arguments after -- go to the executable.

Flag Effect
--select, -s Show the picker even when a target is given
st run
st run unit_test
st run unit_test -- --gtest_filter='TrackletTest.*'

st deploy

st deploy {cpp,python} assembles package/ from the current build without building first; st build --deploy {cpp,python} does both. The layouts are under Deploy packages.

st deploy cpp
st deploy python

st container build / st container run

docker build / docker run are issued directly; there are no shell wrappers. run mounts the repo at the configured docker.workdir and passes --gpus all unless --no-gpu is given: docker run -it --rm --gpus all -v "<root>:/workspace/sushitrack" -w /workspace/sushitrack sushitrack bash. Args after -- replace the default bash with the command run inside the container.

st container build
st container build --no-cache
st container run
st container run -- bash -lc "echo hi"

st docker build and st docker run are the old spellings. They still run, are left out of st --help and st --describe, print one notice naming the new spelling when standard error is a terminal, and are removed after 2027-03-25. ST_NO_DEPRECATION_NOTICE=1 silences the notice.

st docs bundle

Packs the manual pages docs/publish.toml lists into docs-bundle-<release>.tar.gz, the archive docs.sushisystems.io reads, and writes docs-bundle-<release>.tar.gz.sha256 beside it. The command comes from sushicore and behaves the same in every Sushi CLI.

Flag Meaning
--release X.Y.Z The release the bundle is named after, three integers. Required; v1.2.3 and 1.2.3-rc1 are refused
--out DIR The folder the archive is written to. Default: build/docs/bundle under the repository root

It prints the archive’s path with its page count, then sha256 and the digest. The bundle records the checked-out commit, so the command needs a git checkout. SushiTrack publishes no API reference: the bundle holds pages alone, and a bare st docs prints the group’s help and exits with code 2.

Every Markdown file under getting_started/, guides/, architecture/ and reference/ is published. The command stops with one line and exit code 1 when a page has no level-one heading, when docs/README.md does not link it, or when one of its links names a file that does not exist.

st docs bundle --release 1.2.3
st docs bundle --release 1.2.3 --out build/site

Diagnostics

All four are read-only.

Command Prints
st status The build tree, the library, the test binaries, tracker_bridge, the data sets and package/, each with its state
st config Every resolved setting, its value and the layer it came from
st paths Every resolved project directory and whether it exists
st env The build-relevant variables of the environment cmake, ctest and the test binaries run under; --all, -a prints every variable

Provisioning

setup, doctor, link and unlink come from sushicore and behave the same in every Sushi CLI.

Command Flags
st setup --dry-run shows what would be installed; --yes answers the LLVM-download prompt; --toolchain NAME (repeatable) also installs intel-llvm, adaptivecpp or oneapi; --no-gpu skips the GPU toolkit
st doctor --for GROUP limits the report to build, test, infer or eval
st link / st unlink --workspace PATH names the SushiStack workspace

Root options

Option Effect
--version Prints sushitrack-cli <version>, the installed package version, and exits
--describe Prints every visible command and its parameters as JSON and exits
--help Prints the help page; a bare st prints the same page

Exit codes

Code Meaning
0 The command succeeded
1 The command failed: a missing build tree, binary or script, a failed deploy or evaluation, a directory st clean could not remove, no sequence for st eval to score, a malformed cli/config.toml, an unknown build type or tracker, a required st doctor check, or a page st docs bundle refuses
2 A usage error: an unknown command or option, --private with --public, a missing --source, st docs bundle without --release, a bare st docs
127 A tool the command needs (cmake, ctest, docker) is not installed
130 Interrupted with Ctrl+C
other The exit code of the child process (cmake, ctest, docker, the executable st run started)