nvidia/deepstream-run-mv3dt
Run and operate the DeepStream Multi-View 3D Tracking reference app, also known as MV3DT. Use when the user asks to set up prerequisites, run shipped MV3DT samples, run Multi-View 3D Tracking on custom synchronized MP4 datasets, import camera calibration, delegate missing calibration to AutoMagicCalib, inspect OSD or BEV visualization, consume MV3DT Kafka metadata, or clean up MV3DT run state in the DeepStream MV3DT app directory.
npx skills add https://github.com/NVIDIA/DeepStream --skill deepstream-run-mv3dt
Activate this skill when the user wants to set up, run, verify, or debug the DeepStream Multi-View 3D Tracking reference app. Typical prompts:
Do not use this skill for single-view 3D tracking, generic DeepStream app development, or live-stream onboarding unless the user explicitly maps that work to this repo's MV3DT pipeline.
Operate the Multi-View 3D Tracking reference app in DeepStream/src/apps/reference_apps/deepstream-tracker-3d-multi-view using the DeepStream Container path. The skill supports setup, shipped sample runs, custom synchronized MP4 datasets, calibration handoff to AutoMagicCalib, display/headless execution, OSD/BEV outputs, and Kafka metadata inspection.
DeepStream/src/apps/reference_apps/deepstream-tracker-3d-multi-view; if it is absent, ask before cloning the public DeepStream repomv3dt_venv prepared by the repo setup scriptThe skill can be installed outside the DeepStream repo. Resolve REPO_ROOT to the MV3DT app directory, not necessarily the Git top-level directory.
MV3DT_APP_SUBDIR="src/apps/reference_apps/deepstream-tracker-3d-multi-view"
is_mv3dt_app_dir() {
test -f "$1/README.md" || return 1
test -d "$1/config_templates" || return 1
test -d "$1/scripts" || return 1
grep -q "Multi-View 3D Tracking" "$1/README.md"
}
GIT_TOP="$(git rev-parse --show-toplevel 2>/dev/null || true)"
CANDIDATES=()
if [ -n "${MV3DT_REPO_ROOT:-}" ]; then CANDIDATES+=("${MV3DT_REPO_ROOT}"); fi
if [ -n "${DEEPSTREAM_REPO_ROOT:-}" ]; then CANDIDATES+=("${DEEPSTREAM_REPO_ROOT}/${MV3DT_APP_SUBDIR}"); fi
CANDIDATES+=("${PWD}")
if [ -n "${GIT_TOP}" ]; then
CANDIDATES+=("${GIT_TOP}" "${GIT_TOP}/${MV3DT_APP_SUBDIR}")
fi
CANDIDATES+=("${HOME}/DeepStream/${MV3DT_APP_SUBDIR}" "${HOME}/deepstream/${MV3DT_APP_SUBDIR}")
REPO_ROOT=""
for candidate in "${CANDIDATES[@]}"; do
if [ -n "$candidate" ] && is_mv3dt_app_dir "$candidate"; then
REPO_ROOT="$(cd "$candidate" && pwd)"
break
fi
done
if [ -z "${REPO_ROOT}" ]; then
cat <<'EOF'
ERROR: MV3DT reference app directory was not found.
Set MV3DT_REPO_ROOT to an existing deepstream-tracker-3d-multi-view app directory, or ask the user to approve cloning the public DeepStream repo and then run:
DEEPSTREAM_REPO_ROOT="${DEEPSTREAM_REPO_ROOT:-$HOME/DeepStream}"
git clone https://github.com/NVIDIA/DeepStream.git "$DEEPSTREAM_REPO_ROOT"
export MV3DT_REPO_ROOT="$DEEPSTREAM_REPO_ROOT/src/apps/reference_apps/deepstream-tracker-3d-multi-view"
Do not clone silently.
EOF
exit 1
fi
cd "${REPO_ROOT}"
export REPO_ROOT MV3DT_REPO_ROOT="${REPO_ROOT}"
If the app directory cannot be resolved, ask the user for an existing checkout path or for approval to clone https://github.com/NVIDIA/DeepStream. Do not clone silently.
Load exactly one primary reference for the user's current request:
| User intent | Reference |
|---|---|
| Install, prepare, or verify prerequisites | references/setup.md |
| Run bundled 4-camera or 12-camera sample | references/sample-run.md |
| Run custom synchronized MP4s | references/custom-dataset.md |
| Missing custom calibration | references/amc-calibration-handoff.md, then return to references/custom-dataset.md |
| View OSD, BEV, screenshots, recordings, or Kafka metadata | references/visualization-metadata.md |
| Stop a run, clean generated artifacts, or stop prerequisite services | references/setup.md |
If setup, datasets, models, Kafka, Mosquitto, Docker GPU runtime, or the Python venv are missing, load references/setup.md before continuing to the user's original workflow.
When sample-run.md or custom-dataset.md needs to regenerate DeepStream configs, load references/generate-configs.md as the canonical shared config-generation reference rather than duplicating the shell logic.
For every run, use this stage order:
| Stage | Action |
|---|---|
| Validate | Check app directory, prerequisites, dataset shape, display/headless mode, Docker GPU support, and output-directory writability. |
| Prepare | State the selected sample/custom dataset, detector, run mode, output directory, expected output surfaces, and the Docker security decision for --privileged --net=host before launch. |
| Execute | Generate configs, start offline BEV capture first in headless mode or when saved BEV MP4 is explicitly requested, then run DeepStream or delegate missing calibration to AutoMagicCalib. |
| Verify | Confirm functional readiness with App run successful, fresh MP4 artifacts when file output is enabled, Kafka offsets/messages, and BEV message/frame counts when BEV MP4 capture runs. |
| Report | Summarize selected options, generated files, artifact paths, file sizes/counts, and any skipped or failed output surface; after a default 4-camera sample run, mention that the 12-camera sample is also available as a follow-up. |
--enable-osd and --enable-file-output plus --enable-msg-broker.--enable-file-output and --enable-msg-broker; start offline BEV capture before DeepStream so the run produces both the tiled DeepStream MP4 and the Kafka-derived BEV MP4.PeopleNetTransformer unless the user asks for RTDETR or PeopleNet2.6.3; carry the selected DETECTOR_MODEL through config generation and AMC camInfo modelInfo normalization. For custom calibration handoff, ask the user to choose the AutoMagicCalib detector instead of silently defaulting.EXPERIMENT_DIR; record RUN_STARTED_AT and do not report old artifacts as current-run success.App run successful.${EXPERIMENT_DIR}/outVideos/tiled_display_raw.mp4 and attempts BEV MP4 capture by default.mv3dt receives current-run protobuf metadata when message broker output is enabled.${EXPERIMENT_DIR}/config_deepstream.txt, ${EXPERIMENT_DIR}/config_tracker.yml, ${EXPERIMENT_DIR}/config_msgconv.txt${EXPERIMENT_DIR}/outVideos/tiled_display_raw.mp4${EXPERIMENT_DIR}/bev_outputs/trajectory_video_<timestamp>.mp4mv3dt${REPO_ROOT}/experiments/deepstream/4cam and ${REPO_ROOT}/experiments/deepstream/12cam| Issue | First action |
|---|---|
| Setup prerequisites missing | Load references/setup.md and run the check-only path before setup. |
| Docker cannot access GPU | Fix NVIDIA Container Toolkit or Docker runtime before launching samples. |
| Display window missing | Check DISPLAY and /tmp/.X11-unix; use the headless saved-output path when no display is available. |
| DeepStream MP4 missing | Confirm configs were generated with --enable-file-output and verify the artifact is newer than RUN_STARTED_AT. |
| BEV MP4 missing or zero messages | Start offline BEV capture with --from-end before DeepStream, use a long enough --first-message-timeout, and verify Kafka offsets move during the run. |
| Kafka client shows no messages | Regenerate configs with --enable-msg-broker and verify topic mv3dt exists. |
| Custom dataset lacks calibration | Load references/amc-calibration-handoff.md; ask detector/settings choices before delegating. |
| Generated files are root-owned | Report the ownership issue and ask before applying a narrow generated-directory permission fix. |
sudo, install packages, pull containers, download models, start or stop services, change host display access, overwrite dataset files, or clear generated state.docker run --privileged --net=host, explicitly state that the container gets broad host, device, network, and mounted-repo access, then get user approval.amc-setup-calibration-stack - Launch the standalone AutoMagicCalib stack when calibration is needed.amc-run-video-calibration - Generate calibration from synchronized local MP4s before returning to MV3DT.<!-- signing marker -->
Take nvidia/deepstream-run-mv3dt from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference docker.
Without those the skill loads but fails at the first command.