[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-vss-deploy-detection-tracking-3d":3,"mdc--3g1i23-key":34,"related-repo-nvidia-vss-deploy-detection-tracking-3d":3652,"related-org-nvidia-vss-deploy-detection-tracking-3d":3756},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"vss-deploy-detection-tracking-3d","deploy 3D detection and tracking services","Deploy and operate the RTVI-CV-3D microservice as MV3DT (`MODE=mv3dt`): per-camera DeepStream perception plus BEV Fusion over calibrated cameras. Supports the bundled sample dataset, custom video files, and RTSP streams, and chains to `vss-generate-video-calibration` when calibration is missing. Use `vss-deploy-profile` for the full warehouse blueprint and `vss-deploy-detection-tracking-2d` for single-camera 2D detection.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"Deployment","deployment","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Engineering","engineering",{"name":21,"slug":22,"type":15},"Computer Vision","computer-vision",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-17T05:28:57.916185","Apache-2.0",281,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fvss-deploy-detection-tracking-3d","---\nname: vss-deploy-detection-tracking-3d\ndescription: >\n  Deploy and operate the RTVI-CV-3D microservice as MV3DT (`MODE=mv3dt`):\n  per-camera DeepStream perception plus BEV Fusion over calibrated cameras.\n  Supports the bundled sample dataset, custom video files, and RTSP streams,\n  and chains to `vss-generate-video-calibration` when calibration is missing.\n  Use `vss-deploy-profile` for the full warehouse blueprint and\n  `vss-deploy-detection-tracking-2d` for single-camera 2D detection.\nlicense: Apache-2.0\nmetadata:\n  version: \"3.2.1\"\n  github-url: \"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\"\n  tags: \"nvidia blueprint rtvi-cv-3d mv3dt detection tracking 3d warehouse\"\n---\n\n## Purpose\n\nDeploy and operate the RTVI-CV-3D microservice as MV3DT (`MODE=mv3dt`) — per-camera DeepStream perception plus BEV Fusion over multiple calibrated cameras — on the bundled sample dataset, custom videos, or live RTSP, without the full warehouse agent \u002F LLM \u002F VLM stack.\n\n## Instructions\n\nWork top-to-bottom: answer the routing questions (Q0–Q3) under [Routing](#routing), then follow the reference for the chosen path. Detailed step-by-step procedures live in `references\u002F` (deploy, calibration chain, camera configuration, verification, teardown, troubleshooting).\n\n## Examples\n\n- Enable multi-camera tracking on the sample dataset.\n- Deploy RTVI-CV-3D on my videos here: `\u003Cpath\u002Fto\u002Fvideos>`.\n- Run MV3DT on RTSP streams after calibration.\n\n# VSS Deploy Detection & Tracking — 3D (RTVI-CV-3D \u002F MV3DT)\n\nBring up the RTVI-CV-3D microservice as the MV3DT stack (`MODE=mv3dt`) from the warehouse blueprint: per-camera DeepStream perception (`vss-rtvi-cv-mv3dt`) + BEV Fusion (`vss-rtvi-cv-bev-fusion`) + mosquitto MQTT bus + broker + VST sensor stack — without the agent \u002F LLM \u002F VLM stack that comes with the full warehouse blueprint.\n\nThe actual compose machinery lives in `deploy\u002Fdocker\u002Findustry-profiles\u002Fwarehouse-operations\u002Fwarehouse-mv3dt-app\u002F`. This skill drives the env overrides, calibration chain, and verification.\n\n## Routing\n\nAsk the user **at most four questions**, then dispatch.\n\n### Q0 — Profile size (overlays or not)\n\nDefault to **extended** unless the user explicitly asks for minimal. Extended deploys ELK + `vss-video-analytics-api-mv3dt` + `vss-kibana-init-mv3dt` + `vss-import-calibration-output-mv3dt` on top of MV3DT core — these are what the VST video wall needs to render bounding-box overlays. Without them, the video wall works but shows raw streams without overlays.\n\n| User answer | `MINIMAL_PROFILE` | What you get | When to choose |\n|---|---|---|---|\n| **extended** (default) | `\"\"` | MV3DT core + ELK + analytics API + Kibana. **Overlays work in VST video wall.** Recommended for a complete e2e experience. | \"I want the full e2e experience\", \"I want to see bounding boxes\", or no preference stated |\n| **minimal** | `\"true\"` | MV3DT core only. ~5 fewer containers. **No overlays in VST.** Metadata still on Kafka\u002FRedis. | \"I only need the data\", \"edge \u002F Thor host\", \"minimum footprint\" |\n\n> **Note on selective ELK:** there's no \"minimal + ELK only\" middle path in the current compose. Every `${MINIMAL_PROFILE:+_extended}`-gated service comes up together (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). `bash`'s `:+` parameter expansion produces the `_extended` suffix when `MINIMAL_PROFILE` is set; extended switches the gating string back to plain `bp_wh_kafka_mv3dt` which the active compose profile already matches. Either you accept the full extended bundle or you stay minimal.\n\n### Q1 — Data source\n\nAsk this unless the source is explicit in the user's first message. A bare request\nlike \"deploy rtvi-cv-3d\" routes to this MV3DT skill (`MODE=mv3dt`), but does\n**not** imply `sample`.\n\n- **sample** — the bundled 4-camera synthetic dataset (`warehouse-4cams-20mx20m-synthetic`). Calibration ships in-tree; no AMC run needed.\n- **videos** — the user has local video files (any `*.mp4` named after their cameras). Standalone AMC (`auto_calib` profile) will run if calibration is missing.\n- **rtsp** — the user has live RTSP URLs. Calibration via VIOS-driven AMC; final deploy also needs a Sensor Info File (`camera_info.json`) with those RTSP URLs.\n\n### Q2 — Calibration coverage (skip for `sample`)\n\nFor `videos` and `rtsp`, check whether calibration is already on disk at the mount path the perception container expects:\n\n```bash\nDATASET=\"${SAMPLE_VIDEO_DATASET:?}\"          # the user's dataset slug; see Q3\nCAL_DIR=\"${VSS_APPS_DIR}\u002Findustry-profiles\u002Fwarehouse-operations\u002Fwarehouse-mv3dt-app\u002Fcalibration\u002Fsample-data\u002F${DATASET}\"\n\n# Look for ANY of: calibration.json, plus camInfo\u002F*.yml or *.yaml with either\n# 'cam_*' or 'Camera*' naming (the shipped sample uses Camera*.yml, AMC may\n# produce cam_*.yaml — broaden accordingly)\ntest -f \"${CAL_DIR}\u002Fcalibration.json\" \\\n  && ls \"${CAL_DIR}\u002FcamInfo\u002F\"*.{yml,yaml} 2>\u002Fdev\u002Fnull\n```\n\nIf the user supplied a calibration path themselves, validate that path instead — don't recompute. See `configure-cameras.md` for camera-name normalization and authoritative camera-count discovery (parses `calibration.json`).\n\n### Q3 — Detector + dataset slug (only when Q2 triggers AMC)\n\n- `resnet` (default, fast) or `transformer` (slower, better under occlusion) — passed to the AMC `\u002Fv1\u002Fcalibrate\u002F\u003Cid>` API at Step B (see `vss-generate-video-calibration\u002FSKILL.md:48-62`).\n- A short kebab-case dataset slug used as `SAMPLE_VIDEO_DATASET` (e.g. `customer-aisle-4cams`). This drives the calibration mount path and gets persisted in `.env`.\n\n### Routing table\n\n| Q1 | Q2 result | Path |\n|---|---|---|\n| `sample` | (cal ships in-tree and already normalized) | [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) directly |\n| `videos` | cal present | [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) → [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) |\n| `videos` | cal missing | [`references\u002Fcalibration-workflow.md`](references\u002Fcalibration-workflow.md) (videos mode) → [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) → [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) |\n| `rtsp` | cal present | [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) → [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) |\n| `rtsp` | cal missing | [`references\u002Fcalibration-workflow.md`](references\u002Fcalibration-workflow.md) (rtsp mode) → [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) → [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) |\n\nEvery path converges on [`references\u002Fverify-and-view.md`](references\u002Fverify-and-view.md) once `up -d` completes. [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md) and [`references\u002Fteardown.md`](references\u002Fteardown.md) are linked but off the happy path.\n\n**Disambiguation rule.** In this skill, \"RTVI-CV-3D\" means the MV3DT microservice deployment and uses `MODE=mv3dt`. Route to [`..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse.md`](..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse.md) only when the user asks for the full warehouse blueprint, Sparse4D, `MODE=3d`, or `warehouse-3d-app`. This skill is for **MV3DT only** without the agent stack \u002F LLM \u002F VLM.\n\n## Prerequisites\n\n### 1. Repo path\n\nLocate `video-search-and-summarization\u002F` on disk. All compose commands run from `\u003Crepo>\u002Fdeploy\u002Fdocker\u002F`. If unknown, ask the user.\n\n### 2. NGC CLI + key\n\n`$NGC_CLI_API_KEY` must be set and must have access to `nvidia\u002Fvss-core\u002F*` images. See `vss-deploy-profile\u002Freferences\u002Fngc.md` for setup if missing.\n\nIf the user previously ran `ngc config set` but `$NGC_CLI_API_KEY` isn't exported in this shell, the key is already on disk:\n\n```bash\nNGC_CLI_API_KEY=$(awk -F'= ' '\u002F^apikey\u002F{print $2}' ~\u002F.ngc\u002Fconfig 2>\u002Fdev\u002Fnull)\ntest -n \"${NGC_CLI_API_KEY}\" && echo \"key sourced from ~\u002F.ngc\u002Fconfig\"\n```\n\nMake sure the key value also lands in `industry-profiles\u002Fwarehouse-operations\u002F.env:164` (`NGC_CLI_API_KEY=...`) — compose only reads it from there at `up` time, not from your shell env.\n\n### 3. `HARDWARE_PROFILE` slug\n\n> The public MV3DT supported stream counts are listed in the Warehouse Quickstart Guide under \"MV3DT Vision AI Profile Supported Deployment Options.\" Use the matching `HARDWARE_PROFILE` slug below.\n\nPick from `nvidia-smi --query-gpu=name --format=csv,noheader`:\n\n| GPU name | `HARDWARE_PROFILE` | MV3DT supported streams |\n|---|---|---|\n| RTX PRO 6000 Blackwell | `RTXPRO6000BW` | 18 |\n| H100 (NVL, SXM HBM3) | `H100` | 13 |\n| L40S | `L40S` | 7 |\n| IGX Thor | `IGX-THOR` | 4 |\n| DGX Spark | `DGX-SPARK` | 4 |\n\nIf the user's GPU is not listed here, check `industry-profiles\u002Fwarehouse-operations\u002F.env` for available `HARDWARE_PROFILE` values, then confirm the matching profile exists in `blueprint-configurator\u002Fblueprint_config.yml` before using it. Do not infer a stream count from the slug alone.\n\n**The per-GPU MV3DT cap is enforced at deploy time.** `vss-configurator-mv3dt` computes `final_stream_count = min(NUM_STREAMS, max_streams_supported)` and applies a `keep_count` file-management op against `${VSS_DATA_DIR}\u002Fvideos\u002F${SAMPLE_VIDEO_DATASET}\u002F` so only `final_stream_count` `.mp4` files remain (sorted lexicographically, last N kept). If your GPU's MV3DT supported stream count (above table) is below your camera count, perception \u002F `mdx-raw` \u002F `mdx-bev` run with the supported stream count. Either pick a GPU with a higher supported stream count or surface the cap explicitly to the user so they're aware which streams will be processed.\n\n### 4. App data on disk\n\n`VSS_DATA_DIR` must point at the **extracted `vss-warehouse-app-data` directory** (separate from the repo). Pointing it at the repo's `deploy\u002Fdocker\u002F` causes the deploy to stall: the configurator can't find the dataset, redis can't open its log file, and perception stays in `Created`. Verify the path before deploy.\n\nPre-flight check before deploy:\n\n```bash\nDATA_DIR=\"${VSS_DATA_DIR:?VSS_DATA_DIR not set in .env}\"\nDATASET=\"${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}\"\n\nfor sub in videos models data_log; do\n  test -d \"${DATA_DIR}\u002F${sub}\" || { echo \"ERROR: ${DATA_DIR}\u002F${sub} missing\"; exit 1; }\ndone\n\n# For sample \u002F videos modes — videos directory must exist\ntest -d \"${DATA_DIR}\u002Fvideos\u002F${DATASET}\" \\\n  || { echo \"ERROR: ${DATA_DIR}\u002Fvideos\u002F${DATASET} missing — wrong slug or app-data not extracted\"; exit 1; }\n\n# Sanity: video count should match calibration count.\n# Some published app-data tarballs are known to ship the sample dataset with\n# fewer videos than the dataset name implies — verify and source any missing\n# cams separately if your GPU's mv3dt cap is high enough to use them all.\nls \"${DATA_DIR}\u002Fvideos\u002F${DATASET}\u002F\"*.mp4 2>\u002Fdev\u002Fnull | wc -l\n\n# Ensure every per-service subdir under data_log\u002F exists. kafka \u002F elasticsearch \u002F\n# redis \u002F postgres and the video-analytics API upload path (`\u002Fweb-api-app\u002Ffiles`)\n# run as non-root UIDs against these bind mounts. Without write access the daemons\n# or calibration\u002Fimage import can fail with permission errors.\nmkdir -p \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fanalytics_cache\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fcalibration_toolkit\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Felastic\u002Fdata\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Felastic\u002Flogs\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fkafka\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fredis\u002Fdata\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fredis\u002Flog\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fvss_video_analytics_api\"\n\n# Grant write access to the specific container UIDs only — scoped ACLs, NOT 777 and\n# NOT chown. UIDs (per data-directory.md): postgres=70, redis=999, elasticsearch \u002F VST \u002F\n# kafka=1000. The first call covers existing files; the second sets *default* ACLs so\n# files\u002Fdirs the daemons create at runtime (e.g. postgres PGDATA) inherit the access.\nACL='u:70:rwx,u:999:rwx,u:1000:rwx'\nsetfacl -R    -m \"$ACL\" \"${DATA_DIR}\u002Fdata_log\"\nsetfacl -R -d -m \"$ACL\" \"${DATA_DIR}\u002Fdata_log\"\n```\n\n> **Scoped ACLs, not `chmod 777`.** This grants only the known container UIDs access — it does\n> **not** make `data_log` world-writable, and it does **not** `chown` (which would break postgres \u002F\n> Elasticsearch, since they re-own their dirs on first start). Prefer this for agent-driven runs and\n> shared hosts. The canonical [`..\u002Fvss-deploy-profile\u002Freferences\u002Fdata-directory.md`](..\u002Fvss-deploy-profile\u002Freferences\u002Fdata-directory.md)\n> documents the broad `chmod -R 777` and the per-container UID table; this skill uses the scoped-ACL\n> equivalent instead. **Ask the user for confirmation before changing host permissions.**\n>\n> Requires a POSIX-ACL filesystem (ext4 \u002F xfs — the default) and the `acl` package (`setfacl`). If a\n> daemon still logs a permission error after deploy, find its UID\n> (`docker inspect \u003Ccontainer> --format '{{.Config.User}}'`) and add `-m u:\u003Cuid>:rwx` to both calls.\n\nIf app-data isn't extracted yet: download via `ngc registry resource download-version \"nvidia\u002Fvss-warehouse\u002Fvss-warehouse-app-data:\u003Cversion>\"` and `tar -xvf` (see [`references\u002Fdeploy-rtvi-cv-3d-stack.md`](references\u002Fdeploy-rtvi-cv-3d-stack.md) for tag discovery and full steps).\n\n### 5. Pre-flight (system)\n\n`nvidia-smi`, NVIDIA Docker runtime visible (`docker info | grep -i runtimes`), and `docker run --rm --gpus all ubuntu:24.04 nvidia-smi` all green. Full driver \u002F kernel \u002F sysctl checks live in `vss-deploy-profile\u002Freferences\u002Fprerequisites.md`.\n\nIf any check fails, fix before continuing — don't proceed to deploy.\n\n### 6. Browser reachability (cloud \u002F corp-VPN hosts only)\n\nIf the user will view the VST video wall through a browser on a different network than the deploy host (cloud VM, corp VPN, ssh-tunnelled session), upstream firewall rules may block VST WebRTC (STUN to `stun.l.google.com:19302`, plus random UDP for media). See [`references\u002Fverify-and-view.md#browser-reachability`](references\u002Fverify-and-view.md) for symptoms and workarounds. Also: some hosts block the AMC microservice's default port (TCP\u002F8010); if the user reports the AMC UI on `:5000` works but its data calls fail, retry with a different `VSS_AUTO_CALIBRATION_PORT`.\n\n## Troubleshooting\n\nWhen any deploy, calibration, or verification step fails, stop and classify the failure before retrying. The quick checks below cover the most common MV3DT errors; use [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md) for full diagnostic commands and fixes, [`..\u002Fvss-generate-video-calibration\u002FSKILL.md`](..\u002Fvss-generate-video-calibration\u002FSKILL.md) for AMC workflow failures, and [`..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse-debug.md`](..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse-debug.md) for broader warehouse-stack issues.\n\n| Symptom | Likely cause | First check or fix |\n|---|---|---|\n| `vss-rtvi-cv-bev-fusion` is unhealthy or `\u002Ftmp\u002Ffusion_ready` is missing | Broker not ready, `MAX_EXPECTED_SENSORS` mismatch, or `STREAM_TYPE` mismatch | Check `broker-health-check`, `docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion`, and `mdx-raw` \u002F `mdx-bev`; then re-run [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) if stream counts differ |\n| Perception shows `Active sources : 0`, no FPS, or fewer cameras than expected | Stale VST sensor state, wrong dataset slug, missing calibration, or per-GPU stream cap | Verify `SAMPLE_VIDEO_DATASET`, `NUM_STREAMS`, `camInfo\u002F`, and the VST sensor list; if old sensors remain, follow [`references\u002Fteardown.md`](references\u002Fteardown.md) before redeploying |\n| `vss-rtvi-cv-mv3dt` exits with `MqttCommunicator` \"invalid node\" or tracker submit failures | Camera names in videos, `calibration.json`, and `camInfo\u002F` do not match the `Camera`, `Camera_01`, ... convention | Normalize all camera names together with [`references\u002Fconfigure-cameras.md`](references\u002Fconfigure-cameras.md) Step 0, then clear stale VST state and redeploy |\n| AMC project creation, upload, calibration, or MV3DT export fails | AutoMagicCalib service\u002FAPI issue outside this MV3DT deploy path | Use [`..\u002Fvss-generate-video-calibration\u002FSKILL.md`](..\u002Fvss-generate-video-calibration\u002FSKILL.md) to deploy\u002Fdebug AMC, then return to [`references\u002Fcalibration-workflow.md`](references\u002Fcalibration-workflow.md) after export succeeds |\n| `vss-behavior-analytics-mv3dt` restarts with calibration schema validation errors | AMC export has empty `group`, `region`, or `place` fields | Apply the placeholder patch in [`references\u002Fcalibration-workflow.md`](references\u002Fcalibration-workflow.md) Step 4a, or populate those fields in AMC before export |\n| Extended profile has no overlays and `vss-import-calibration-output-mv3dt` logs `imageMetadata.json not found` | AMC MV3DT export did not produce `images\u002FTop.png` and `images\u002FimageMetadata.json` | Synthesize both files with [`references\u002Fcalibration-workflow.md`](references\u002Fcalibration-workflow.md) Step 4b, then restart the one-shot importer |\n| Image pulls, model load, or first-start engine build fail | Missing \u002F expired `NGC_CLI_API_KEY`, incorrect `VSS_DATA_DIR`, missing BodyPose3DNet files, or GPU OOM | Re-check NGC auth, confirm `${VSS_DATA_DIR}\u002Fmodels\u002Fmv3dt\u002FBodyPose3DNet\u002F`, tail `vss-rtvi-cv-mv3dt` logs, and free or change `RT_CV_DEVICE_ID` if the GPU is exhausted |\n\nBefore destructive recovery (`docker compose down -v`, clearing `data_log`, deleting VST sensor state, or changing host ACLs), explain the impact and get user confirmation. Capture the failing command, relevant `.env` values, `docker compose ps`, and the last container logs before making state-reset changes.\n\n## How it fits together\n\n```\nSKILL.md (this file — Q0\u002FQ1\u002FQ2\u002FQ3 routing)\n  └─ if cal missing ─> calibration-workflow.md\n  │                     └─ chains to vss-generate-video-calibration (deploy + drive API)\n  │                     └─ fetches \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc (plus vggt when refinement is enabled)\n  │                     └─ lands calibration files at warehouse-mv3dt-app\u002Fcalibration\u002Fsample-data\u002F\u003Cslug>\u002F\n  ├─> configure-cameras.md (camera-name normalization, NUM_STREAMS sync, VST sensor trim)\n  └─> deploy-rtvi-cv-3d-stack.md (compose up with bp_wh_kafka_mv3dt + extended\u002Fminimal)\n        └─> verify-and-view.md (FPS, fusion_ready, mdx-bev, VST video wall + WebRTC checks)\n```\n\n## Related Skills\n\n- [`vss-generate-video-calibration`](..\u002Fvss-generate-video-calibration\u002FSKILL.md) — the AMC skill. Owns AMC deployment, RTSP capture, calibration API, and the `\u002Fv1\u002Fresult\u002F...\u002Fmv3dt_result` export hook this skill consumes. `calibration-workflow.md` chains into it.\n- [`vss-deploy-profile`](..\u002Fvss-deploy-profile\u002FSKILL.md) — cross-profile umbrella. Use that instead when the user wants the **full warehouse blueprint** (with agents \u002F LLM \u002F VLM), not just MV3DT.\n- [`vss-manage-video-io-storage`](..\u002Fvss-manage-video-io-storage\u002FSKILL.md) — VIOS \u002F VST API skill. Useful for the VST video wall (overlay viz) and for sensor management referenced in `configure-cameras.md`.\n\nThe repo's authoritative warehouse-blueprint reference at [`..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse.md`](..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse.md) covers 2D \u002F 3D \u002F MV3DT inside the full warehouse stack — this skill is the **MV3DT-only** companion that trims the agent \u002F LLM \u002F VLM layer.\n",{"data":35,"body":40},{"name":4,"description":6,"license":26,"metadata":36},{"version":37,"github-url":38,"tags":39},"3.2.1","https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization","nvidia blueprint rtvi-cv-3d mv3dt detection tracking 3d warehouse",{"type":41,"children":42},"root",[43,52,67,73,95,101,129,136,164,177,182,195,202,237,354,415,421,447,511,524,543,775,796,802,866,872,1094,1139,1190,1196,1202,1223,1229,1256,1276,1403,1432,1446,1461,1474,1612,1640,1713,1719,1761,1766,2779,2886,2916,2922,2956,2961,2967,3006,3012,3049,3491,3526,3532,3542,3548,3624,3646],{"type":44,"tag":45,"props":46,"children":48},"element","h2",{"id":47},"purpose",[49],{"type":50,"value":51},"text","Purpose",{"type":44,"tag":53,"props":54,"children":55},"p",{},[56,58,65],{"type":50,"value":57},"Deploy and operate the RTVI-CV-3D microservice as MV3DT (",{"type":44,"tag":59,"props":60,"children":62},"code",{"className":61},[],[63],{"type":50,"value":64},"MODE=mv3dt",{"type":50,"value":66},") — per-camera DeepStream perception plus BEV Fusion over multiple calibrated cameras — on the bundled sample dataset, custom videos, or live RTSP, without the full warehouse agent \u002F LLM \u002F VLM stack.",{"type":44,"tag":45,"props":68,"children":70},{"id":69},"instructions",[71],{"type":50,"value":72},"Instructions",{"type":44,"tag":53,"props":74,"children":75},{},[76,78,85,87,93],{"type":50,"value":77},"Work top-to-bottom: answer the routing questions (Q0–Q3) under ",{"type":44,"tag":79,"props":80,"children":82},"a",{"href":81},"#routing",[83],{"type":50,"value":84},"Routing",{"type":50,"value":86},", then follow the reference for the chosen path. Detailed step-by-step procedures live in ",{"type":44,"tag":59,"props":88,"children":90},{"className":89},[],[91],{"type":50,"value":92},"references\u002F",{"type":50,"value":94}," (deploy, calibration chain, camera configuration, verification, teardown, troubleshooting).",{"type":44,"tag":45,"props":96,"children":98},{"id":97},"examples",[99],{"type":50,"value":100},"Examples",{"type":44,"tag":102,"props":103,"children":104},"ul",{},[105,111,124],{"type":44,"tag":106,"props":107,"children":108},"li",{},[109],{"type":50,"value":110},"Enable multi-camera tracking on the sample dataset.",{"type":44,"tag":106,"props":112,"children":113},{},[114,116,122],{"type":50,"value":115},"Deploy RTVI-CV-3D on my videos here: ",{"type":44,"tag":59,"props":117,"children":119},{"className":118},[],[120],{"type":50,"value":121},"\u003Cpath\u002Fto\u002Fvideos>",{"type":50,"value":123},".",{"type":44,"tag":106,"props":125,"children":126},{},[127],{"type":50,"value":128},"Run MV3DT on RTSP streams after calibration.",{"type":44,"tag":130,"props":131,"children":133},"h1",{"id":132},"vss-deploy-detection-tracking-3d-rtvi-cv-3d-mv3dt",[134],{"type":50,"value":135},"VSS Deploy Detection & Tracking — 3D (RTVI-CV-3D \u002F MV3DT)",{"type":44,"tag":53,"props":137,"children":138},{},[139,141,146,148,154,156,162],{"type":50,"value":140},"Bring up the RTVI-CV-3D microservice as the MV3DT stack (",{"type":44,"tag":59,"props":142,"children":144},{"className":143},[],[145],{"type":50,"value":64},{"type":50,"value":147},") from the warehouse blueprint: per-camera DeepStream perception (",{"type":44,"tag":59,"props":149,"children":151},{"className":150},[],[152],{"type":50,"value":153},"vss-rtvi-cv-mv3dt",{"type":50,"value":155},") + BEV Fusion (",{"type":44,"tag":59,"props":157,"children":159},{"className":158},[],[160],{"type":50,"value":161},"vss-rtvi-cv-bev-fusion",{"type":50,"value":163},") + mosquitto MQTT bus + broker + VST sensor stack — without the agent \u002F LLM \u002F VLM stack that comes with the full warehouse blueprint.",{"type":44,"tag":53,"props":165,"children":166},{},[167,169,175],{"type":50,"value":168},"The actual compose machinery lives in ",{"type":44,"tag":59,"props":170,"children":172},{"className":171},[],[173],{"type":50,"value":174},"deploy\u002Fdocker\u002Findustry-profiles\u002Fwarehouse-operations\u002Fwarehouse-mv3dt-app\u002F",{"type":50,"value":176},". This skill drives the env overrides, calibration chain, and verification.",{"type":44,"tag":45,"props":178,"children":180},{"id":179},"routing",[181],{"type":50,"value":84},{"type":44,"tag":53,"props":183,"children":184},{},[185,187,193],{"type":50,"value":186},"Ask the user ",{"type":44,"tag":188,"props":189,"children":190},"strong",{},[191],{"type":50,"value":192},"at most four questions",{"type":50,"value":194},", then dispatch.",{"type":44,"tag":196,"props":197,"children":199},"h3",{"id":198},"q0-profile-size-overlays-or-not",[200],{"type":50,"value":201},"Q0 — Profile size (overlays or not)",{"type":44,"tag":53,"props":203,"children":204},{},[205,207,212,214,220,222,228,229,235],{"type":50,"value":206},"Default to ",{"type":44,"tag":188,"props":208,"children":209},{},[210],{"type":50,"value":211},"extended",{"type":50,"value":213}," unless the user explicitly asks for minimal. Extended deploys ELK + ",{"type":44,"tag":59,"props":215,"children":217},{"className":216},[],[218],{"type":50,"value":219},"vss-video-analytics-api-mv3dt",{"type":50,"value":221}," + ",{"type":44,"tag":59,"props":223,"children":225},{"className":224},[],[226],{"type":50,"value":227},"vss-kibana-init-mv3dt",{"type":50,"value":221},{"type":44,"tag":59,"props":230,"children":232},{"className":231},[],[233],{"type":50,"value":234},"vss-import-calibration-output-mv3dt",{"type":50,"value":236}," on top of MV3DT core — these are what the VST video wall needs to render bounding-box overlays. Without them, the video wall works but shows raw streams without overlays.",{"type":44,"tag":238,"props":239,"children":240},"table",{},[241,274],{"type":44,"tag":242,"props":243,"children":244},"thead",{},[245],{"type":44,"tag":246,"props":247,"children":248},"tr",{},[249,255,264,269],{"type":44,"tag":250,"props":251,"children":252},"th",{},[253],{"type":50,"value":254},"User answer",{"type":44,"tag":250,"props":256,"children":257},{},[258],{"type":44,"tag":59,"props":259,"children":261},{"className":260},[],[262],{"type":50,"value":263},"MINIMAL_PROFILE",{"type":44,"tag":250,"props":265,"children":266},{},[267],{"type":50,"value":268},"What you get",{"type":44,"tag":250,"props":270,"children":271},{},[272],{"type":50,"value":273},"When to choose",{"type":44,"tag":275,"props":276,"children":277},"tbody",{},[278,317],{"type":44,"tag":246,"props":279,"children":280},{},[281,291,300,312],{"type":44,"tag":282,"props":283,"children":284},"td",{},[285,289],{"type":44,"tag":188,"props":286,"children":287},{},[288],{"type":50,"value":211},{"type":50,"value":290}," (default)",{"type":44,"tag":282,"props":292,"children":293},{},[294],{"type":44,"tag":59,"props":295,"children":297},{"className":296},[],[298],{"type":50,"value":299},"\"\"",{"type":44,"tag":282,"props":301,"children":302},{},[303,305,310],{"type":50,"value":304},"MV3DT core + ELK + analytics API + Kibana. ",{"type":44,"tag":188,"props":306,"children":307},{},[308],{"type":50,"value":309},"Overlays work in VST video wall.",{"type":50,"value":311}," Recommended for a complete e2e experience.",{"type":44,"tag":282,"props":313,"children":314},{},[315],{"type":50,"value":316},"\"I want the full e2e experience\", \"I want to see bounding boxes\", or no preference stated",{"type":44,"tag":246,"props":318,"children":319},{},[320,328,337,349],{"type":44,"tag":282,"props":321,"children":322},{},[323],{"type":44,"tag":188,"props":324,"children":325},{},[326],{"type":50,"value":327},"minimal",{"type":44,"tag":282,"props":329,"children":330},{},[331],{"type":44,"tag":59,"props":332,"children":334},{"className":333},[],[335],{"type":50,"value":336},"\"true\"",{"type":44,"tag":282,"props":338,"children":339},{},[340,342,347],{"type":50,"value":341},"MV3DT core only. ~5 fewer containers. ",{"type":44,"tag":188,"props":343,"children":344},{},[345],{"type":50,"value":346},"No overlays in VST.",{"type":50,"value":348}," Metadata still on Kafka\u002FRedis.",{"type":44,"tag":282,"props":350,"children":351},{},[352],{"type":50,"value":353},"\"I only need the data\", \"edge \u002F Thor host\", \"minimum footprint\"",{"type":44,"tag":355,"props":356,"children":357},"blockquote",{},[358],{"type":44,"tag":53,"props":359,"children":360},{},[361,366,368,374,376,382,384,390,392,398,400,405,407,413],{"type":44,"tag":188,"props":362,"children":363},{},[364],{"type":50,"value":365},"Note on selective ELK:",{"type":50,"value":367}," there's no \"minimal + ELK only\" middle path in the current compose. Every ",{"type":44,"tag":59,"props":369,"children":371},{"className":370},[],[372],{"type":50,"value":373},"${MINIMAL_PROFILE:+_extended}",{"type":50,"value":375},"-gated service comes up together (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). ",{"type":44,"tag":59,"props":377,"children":379},{"className":378},[],[380],{"type":50,"value":381},"bash",{"type":50,"value":383},"'s ",{"type":44,"tag":59,"props":385,"children":387},{"className":386},[],[388],{"type":50,"value":389},":+",{"type":50,"value":391}," parameter expansion produces the ",{"type":44,"tag":59,"props":393,"children":395},{"className":394},[],[396],{"type":50,"value":397},"_extended",{"type":50,"value":399}," suffix when ",{"type":44,"tag":59,"props":401,"children":403},{"className":402},[],[404],{"type":50,"value":263},{"type":50,"value":406}," is set; extended switches the gating string back to plain ",{"type":44,"tag":59,"props":408,"children":410},{"className":409},[],[411],{"type":50,"value":412},"bp_wh_kafka_mv3dt",{"type":50,"value":414}," which the active compose profile already matches. Either you accept the full extended bundle or you stay minimal.",{"type":44,"tag":196,"props":416,"children":418},{"id":417},"q1-data-source",[419],{"type":50,"value":420},"Q1 — Data source",{"type":44,"tag":53,"props":422,"children":423},{},[424,426,431,433,438,440,446],{"type":50,"value":425},"Ask this unless the source is explicit in the user's first message. A bare request\nlike \"deploy rtvi-cv-3d\" routes to this MV3DT skill (",{"type":44,"tag":59,"props":427,"children":429},{"className":428},[],[430],{"type":50,"value":64},{"type":50,"value":432},"), but does\n",{"type":44,"tag":188,"props":434,"children":435},{},[436],{"type":50,"value":437},"not",{"type":50,"value":439}," imply ",{"type":44,"tag":59,"props":441,"children":443},{"className":442},[],[444],{"type":50,"value":445},"sample",{"type":50,"value":123},{"type":44,"tag":102,"props":448,"children":449},{},[450,467,493],{"type":44,"tag":106,"props":451,"children":452},{},[453,457,459,465],{"type":44,"tag":188,"props":454,"children":455},{},[456],{"type":50,"value":445},{"type":50,"value":458}," — the bundled 4-camera synthetic dataset (",{"type":44,"tag":59,"props":460,"children":462},{"className":461},[],[463],{"type":50,"value":464},"warehouse-4cams-20mx20m-synthetic",{"type":50,"value":466},"). Calibration ships in-tree; no AMC run needed.",{"type":44,"tag":106,"props":468,"children":469},{},[470,475,477,483,485,491],{"type":44,"tag":188,"props":471,"children":472},{},[473],{"type":50,"value":474},"videos",{"type":50,"value":476}," — the user has local video files (any ",{"type":44,"tag":59,"props":478,"children":480},{"className":479},[],[481],{"type":50,"value":482},"*.mp4",{"type":50,"value":484}," named after their cameras). Standalone AMC (",{"type":44,"tag":59,"props":486,"children":488},{"className":487},[],[489],{"type":50,"value":490},"auto_calib",{"type":50,"value":492}," profile) will run if calibration is missing.",{"type":44,"tag":106,"props":494,"children":495},{},[496,501,503,509],{"type":44,"tag":188,"props":497,"children":498},{},[499],{"type":50,"value":500},"rtsp",{"type":50,"value":502}," — the user has live RTSP URLs. Calibration via VIOS-driven AMC; final deploy also needs a Sensor Info File (",{"type":44,"tag":59,"props":504,"children":506},{"className":505},[],[507],{"type":50,"value":508},"camera_info.json",{"type":50,"value":510},") with those RTSP URLs.",{"type":44,"tag":196,"props":512,"children":514},{"id":513},"q2-calibration-coverage-skip-for-sample",[515,517,522],{"type":50,"value":516},"Q2 — Calibration coverage (skip for ",{"type":44,"tag":59,"props":518,"children":520},{"className":519},[],[521],{"type":50,"value":445},{"type":50,"value":523},")",{"type":44,"tag":53,"props":525,"children":526},{},[527,529,534,536,541],{"type":50,"value":528},"For ",{"type":44,"tag":59,"props":530,"children":532},{"className":531},[],[533],{"type":50,"value":474},{"type":50,"value":535}," and ",{"type":44,"tag":59,"props":537,"children":539},{"className":538},[],[540],{"type":50,"value":500},{"type":50,"value":542},", check whether calibration is already on disk at the mount path the perception container expects:",{"type":44,"tag":544,"props":545,"children":549},"pre",{"className":546,"code":547,"language":381,"meta":548,"style":548},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","DATASET=\"${SAMPLE_VIDEO_DATASET:?}\"          # the user's dataset slug; see Q3\nCAL_DIR=\"${VSS_APPS_DIR}\u002Findustry-profiles\u002Fwarehouse-operations\u002Fwarehouse-mv3dt-app\u002Fcalibration\u002Fsample-data\u002F${DATASET}\"\n\n# Look for ANY of: calibration.json, plus camInfo\u002F*.yml or *.yaml with either\n# 'cam_*' or 'Camera*' naming (the shipped sample uses Camera*.yml, AMC may\n# produce cam_*.yaml — broaden accordingly)\ntest -f \"${CAL_DIR}\u002Fcalibration.json\" \\\n  && ls \"${CAL_DIR}\u002FcamInfo\u002F\"*.{yml,yaml} 2>\u002Fdev\u002Fnull\n","",[550],{"type":44,"tag":59,"props":551,"children":552},{"__ignoreMap":548},[553,592,639,649,658,667,676,719],{"type":44,"tag":554,"props":555,"children":558},"span",{"class":556,"line":557},"line",1,[559,565,571,576,581,586],{"type":44,"tag":554,"props":560,"children":562},{"style":561},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[563],{"type":50,"value":564},"DATASET",{"type":44,"tag":554,"props":566,"children":568},{"style":567},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[569],{"type":50,"value":570},"=",{"type":44,"tag":554,"props":572,"children":573},{"style":567},[574],{"type":50,"value":575},"\"${",{"type":44,"tag":554,"props":577,"children":578},{"style":561},[579],{"type":50,"value":580},"SAMPLE_VIDEO_DATASET",{"type":44,"tag":554,"props":582,"children":583},{"style":567},[584],{"type":50,"value":585},":?}\"",{"type":44,"tag":554,"props":587,"children":589},{"style":588},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[590],{"type":50,"value":591},"          # the user's dataset slug; see Q3\n",{"type":44,"tag":554,"props":593,"children":595},{"class":556,"line":594},2,[596,601,605,609,614,619,625,630,634],{"type":44,"tag":554,"props":597,"children":598},{"style":561},[599],{"type":50,"value":600},"CAL_DIR",{"type":44,"tag":554,"props":602,"children":603},{"style":567},[604],{"type":50,"value":570},{"type":44,"tag":554,"props":606,"children":607},{"style":567},[608],{"type":50,"value":575},{"type":44,"tag":554,"props":610,"children":611},{"style":561},[612],{"type":50,"value":613},"VSS_APPS_DIR",{"type":44,"tag":554,"props":615,"children":616},{"style":567},[617],{"type":50,"value":618},"}",{"type":44,"tag":554,"props":620,"children":622},{"style":621},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[623],{"type":50,"value":624},"\u002Findustry-profiles\u002Fwarehouse-operations\u002Fwarehouse-mv3dt-app\u002Fcalibration\u002Fsample-data\u002F",{"type":44,"tag":554,"props":626,"children":627},{"style":567},[628],{"type":50,"value":629},"${",{"type":44,"tag":554,"props":631,"children":632},{"style":561},[633],{"type":50,"value":564},{"type":44,"tag":554,"props":635,"children":636},{"style":567},[637],{"type":50,"value":638},"}\"\n",{"type":44,"tag":554,"props":640,"children":642},{"class":556,"line":641},3,[643],{"type":44,"tag":554,"props":644,"children":646},{"emptyLinePlaceholder":645},true,[647],{"type":50,"value":648},"\n",{"type":44,"tag":554,"props":650,"children":652},{"class":556,"line":651},4,[653],{"type":44,"tag":554,"props":654,"children":655},{"style":588},[656],{"type":50,"value":657},"# Look for ANY of: calibration.json, plus camInfo\u002F*.yml or *.yaml with either\n",{"type":44,"tag":554,"props":659,"children":661},{"class":556,"line":660},5,[662],{"type":44,"tag":554,"props":663,"children":664},{"style":588},[665],{"type":50,"value":666},"# 'cam_*' or 'Camera*' naming (the shipped sample uses Camera*.yml, AMC may\n",{"type":44,"tag":554,"props":668,"children":670},{"class":556,"line":669},6,[671],{"type":44,"tag":554,"props":672,"children":673},{"style":588},[674],{"type":50,"value":675},"# produce cam_*.yaml — broaden accordingly)\n",{"type":44,"tag":554,"props":677,"children":679},{"class":556,"line":678},7,[680,686,691,696,700,704,709,714],{"type":44,"tag":554,"props":681,"children":683},{"style":682},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[684],{"type":50,"value":685},"test",{"type":44,"tag":554,"props":687,"children":688},{"style":621},[689],{"type":50,"value":690}," -f",{"type":44,"tag":554,"props":692,"children":693},{"style":567},[694],{"type":50,"value":695}," \"${",{"type":44,"tag":554,"props":697,"children":698},{"style":561},[699],{"type":50,"value":600},{"type":44,"tag":554,"props":701,"children":702},{"style":567},[703],{"type":50,"value":618},{"type":44,"tag":554,"props":705,"children":706},{"style":621},[707],{"type":50,"value":708},"\u002Fcalibration.json",{"type":44,"tag":554,"props":710,"children":711},{"style":567},[712],{"type":50,"value":713},"\"",{"type":44,"tag":554,"props":715,"children":716},{"style":561},[717],{"type":50,"value":718}," \\\n",{"type":44,"tag":554,"props":720,"children":722},{"class":556,"line":721},8,[723,728,734,738,742,746,751,755,760,765,770],{"type":44,"tag":554,"props":724,"children":725},{"style":567},[726],{"type":50,"value":727},"  &&",{"type":44,"tag":554,"props":729,"children":731},{"style":730},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[732],{"type":50,"value":733}," ls",{"type":44,"tag":554,"props":735,"children":736},{"style":567},[737],{"type":50,"value":695},{"type":44,"tag":554,"props":739,"children":740},{"style":561},[741],{"type":50,"value":600},{"type":44,"tag":554,"props":743,"children":744},{"style":567},[745],{"type":50,"value":618},{"type":44,"tag":554,"props":747,"children":748},{"style":621},[749],{"type":50,"value":750},"\u002FcamInfo\u002F",{"type":44,"tag":554,"props":752,"children":753},{"style":567},[754],{"type":50,"value":713},{"type":44,"tag":554,"props":756,"children":757},{"style":561},[758],{"type":50,"value":759},"*",{"type":44,"tag":554,"props":761,"children":762},{"style":621},[763],{"type":50,"value":764},".{yml,yaml}",{"type":44,"tag":554,"props":766,"children":767},{"style":567},[768],{"type":50,"value":769}," 2>",{"type":44,"tag":554,"props":771,"children":772},{"style":621},[773],{"type":50,"value":774},"\u002Fdev\u002Fnull\n",{"type":44,"tag":53,"props":776,"children":777},{},[778,780,786,788,794],{"type":50,"value":779},"If the user supplied a calibration path themselves, validate that path instead — don't recompute. See ",{"type":44,"tag":59,"props":781,"children":783},{"className":782},[],[784],{"type":50,"value":785},"configure-cameras.md",{"type":50,"value":787}," for camera-name normalization and authoritative camera-count discovery (parses ",{"type":44,"tag":59,"props":789,"children":791},{"className":790},[],[792],{"type":50,"value":793},"calibration.json",{"type":50,"value":795},").",{"type":44,"tag":196,"props":797,"children":799},{"id":798},"q3-detector-dataset-slug-only-when-q2-triggers-amc",[800],{"type":50,"value":801},"Q3 — Detector + dataset slug (only when Q2 triggers AMC)",{"type":44,"tag":102,"props":803,"children":804},{},[805,839],{"type":44,"tag":106,"props":806,"children":807},{},[808,814,816,822,824,830,832,838],{"type":44,"tag":59,"props":809,"children":811},{"className":810},[],[812],{"type":50,"value":813},"resnet",{"type":50,"value":815}," (default, fast) or ",{"type":44,"tag":59,"props":817,"children":819},{"className":818},[],[820],{"type":50,"value":821},"transformer",{"type":50,"value":823}," (slower, better under occlusion) — passed to the AMC ",{"type":44,"tag":59,"props":825,"children":827},{"className":826},[],[828],{"type":50,"value":829},"\u002Fv1\u002Fcalibrate\u002F\u003Cid>",{"type":50,"value":831}," API at Step B (see ",{"type":44,"tag":59,"props":833,"children":835},{"className":834},[],[836],{"type":50,"value":837},"vss-generate-video-calibration\u002FSKILL.md:48-62",{"type":50,"value":795},{"type":44,"tag":106,"props":840,"children":841},{},[842,844,849,851,857,859,865],{"type":50,"value":843},"A short kebab-case dataset slug used as ",{"type":44,"tag":59,"props":845,"children":847},{"className":846},[],[848],{"type":50,"value":580},{"type":50,"value":850}," (e.g. ",{"type":44,"tag":59,"props":852,"children":854},{"className":853},[],[855],{"type":50,"value":856},"customer-aisle-4cams",{"type":50,"value":858},"). This drives the calibration mount path and gets persisted in ",{"type":44,"tag":59,"props":860,"children":862},{"className":861},[],[863],{"type":50,"value":864},".env",{"type":50,"value":123},{"type":44,"tag":196,"props":867,"children":869},{"id":868},"routing-table",[870],{"type":50,"value":871},"Routing table",{"type":44,"tag":238,"props":873,"children":874},{},[875,896],{"type":44,"tag":242,"props":876,"children":877},{},[878],{"type":44,"tag":246,"props":879,"children":880},{},[881,886,891],{"type":44,"tag":250,"props":882,"children":883},{},[884],{"type":50,"value":885},"Q1",{"type":44,"tag":250,"props":887,"children":888},{},[889],{"type":50,"value":890},"Q2 result",{"type":44,"tag":250,"props":892,"children":893},{},[894],{"type":50,"value":895},"Path",{"type":44,"tag":275,"props":897,"children":898},{},[899,929,967,1014,1049],{"type":44,"tag":246,"props":900,"children":901},{},[902,910,915],{"type":44,"tag":282,"props":903,"children":904},{},[905],{"type":44,"tag":59,"props":906,"children":908},{"className":907},[],[909],{"type":50,"value":445},{"type":44,"tag":282,"props":911,"children":912},{},[913],{"type":50,"value":914},"(cal ships in-tree and already normalized)",{"type":44,"tag":282,"props":916,"children":917},{},[918,927],{"type":44,"tag":79,"props":919,"children":921},{"href":920},"references\u002Fdeploy-rtvi-cv-3d-stack.md",[922],{"type":44,"tag":59,"props":923,"children":925},{"className":924},[],[926],{"type":50,"value":920},{"type":50,"value":928}," directly",{"type":44,"tag":246,"props":930,"children":931},{},[932,940,945],{"type":44,"tag":282,"props":933,"children":934},{},[935],{"type":44,"tag":59,"props":936,"children":938},{"className":937},[],[939],{"type":50,"value":474},{"type":44,"tag":282,"props":941,"children":942},{},[943],{"type":50,"value":944},"cal present",{"type":44,"tag":282,"props":946,"children":947},{},[948,957,959],{"type":44,"tag":79,"props":949,"children":951},{"href":950},"references\u002Fconfigure-cameras.md",[952],{"type":44,"tag":59,"props":953,"children":955},{"className":954},[],[956],{"type":50,"value":950},{"type":50,"value":958}," → ",{"type":44,"tag":79,"props":960,"children":961},{"href":920},[962],{"type":44,"tag":59,"props":963,"children":965},{"className":964},[],[966],{"type":50,"value":920},{"type":44,"tag":246,"props":968,"children":969},{},[970,978,983],{"type":44,"tag":282,"props":971,"children":972},{},[973],{"type":44,"tag":59,"props":974,"children":976},{"className":975},[],[977],{"type":50,"value":474},{"type":44,"tag":282,"props":979,"children":980},{},[981],{"type":50,"value":982},"cal missing",{"type":44,"tag":282,"props":984,"children":985},{},[986,995,997,1005,1006],{"type":44,"tag":79,"props":987,"children":989},{"href":988},"references\u002Fcalibration-workflow.md",[990],{"type":44,"tag":59,"props":991,"children":993},{"className":992},[],[994],{"type":50,"value":988},{"type":50,"value":996}," (videos mode) → ",{"type":44,"tag":79,"props":998,"children":999},{"href":950},[1000],{"type":44,"tag":59,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":50,"value":950},{"type":50,"value":958},{"type":44,"tag":79,"props":1007,"children":1008},{"href":920},[1009],{"type":44,"tag":59,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":50,"value":920},{"type":44,"tag":246,"props":1015,"children":1016},{},[1017,1025,1029],{"type":44,"tag":282,"props":1018,"children":1019},{},[1020],{"type":44,"tag":59,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":50,"value":500},{"type":44,"tag":282,"props":1026,"children":1027},{},[1028],{"type":50,"value":944},{"type":44,"tag":282,"props":1030,"children":1031},{},[1032,1040,1041],{"type":44,"tag":79,"props":1033,"children":1034},{"href":950},[1035],{"type":44,"tag":59,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":50,"value":950},{"type":50,"value":958},{"type":44,"tag":79,"props":1042,"children":1043},{"href":920},[1044],{"type":44,"tag":59,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":50,"value":920},{"type":44,"tag":246,"props":1050,"children":1051},{},[1052,1060,1064],{"type":44,"tag":282,"props":1053,"children":1054},{},[1055],{"type":44,"tag":59,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":50,"value":500},{"type":44,"tag":282,"props":1061,"children":1062},{},[1063],{"type":50,"value":982},{"type":44,"tag":282,"props":1065,"children":1066},{},[1067,1075,1077,1085,1086],{"type":44,"tag":79,"props":1068,"children":1069},{"href":988},[1070],{"type":44,"tag":59,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":50,"value":988},{"type":50,"value":1076}," (rtsp mode) → ",{"type":44,"tag":79,"props":1078,"children":1079},{"href":950},[1080],{"type":44,"tag":59,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":50,"value":950},{"type":50,"value":958},{"type":44,"tag":79,"props":1087,"children":1088},{"href":920},[1089],{"type":44,"tag":59,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":50,"value":920},{"type":44,"tag":53,"props":1095,"children":1096},{},[1097,1099,1108,1110,1116,1118,1127,1128,1137],{"type":50,"value":1098},"Every path converges on ",{"type":44,"tag":79,"props":1100,"children":1102},{"href":1101},"references\u002Fverify-and-view.md",[1103],{"type":44,"tag":59,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":50,"value":1101},{"type":50,"value":1109}," once ",{"type":44,"tag":59,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":50,"value":1115},"up -d",{"type":50,"value":1117}," completes. ",{"type":44,"tag":79,"props":1119,"children":1121},{"href":1120},"references\u002Ftroubleshooting.md",[1122],{"type":44,"tag":59,"props":1123,"children":1125},{"className":1124},[],[1126],{"type":50,"value":1120},{"type":50,"value":535},{"type":44,"tag":79,"props":1129,"children":1131},{"href":1130},"references\u002Fteardown.md",[1132],{"type":44,"tag":59,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":50,"value":1130},{"type":50,"value":1138}," are linked but off the happy path.",{"type":44,"tag":53,"props":1140,"children":1141},{},[1142,1147,1149,1154,1156,1165,1167,1173,1175,1181,1183,1188],{"type":44,"tag":188,"props":1143,"children":1144},{},[1145],{"type":50,"value":1146},"Disambiguation rule.",{"type":50,"value":1148}," In this skill, \"RTVI-CV-3D\" means the MV3DT microservice deployment and uses ",{"type":44,"tag":59,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":50,"value":64},{"type":50,"value":1155},". Route to ",{"type":44,"tag":79,"props":1157,"children":1159},{"href":1158},"..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse.md",[1160],{"type":44,"tag":59,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":50,"value":1158},{"type":50,"value":1166}," only when the user asks for the full warehouse blueprint, Sparse4D, ",{"type":44,"tag":59,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":50,"value":1172},"MODE=3d",{"type":50,"value":1174},", or ",{"type":44,"tag":59,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":50,"value":1180},"warehouse-3d-app",{"type":50,"value":1182},". This skill is for ",{"type":44,"tag":188,"props":1184,"children":1185},{},[1186],{"type":50,"value":1187},"MV3DT only",{"type":50,"value":1189}," without the agent stack \u002F LLM \u002F VLM.",{"type":44,"tag":45,"props":1191,"children":1193},{"id":1192},"prerequisites",[1194],{"type":50,"value":1195},"Prerequisites",{"type":44,"tag":196,"props":1197,"children":1199},{"id":1198},"_1-repo-path",[1200],{"type":50,"value":1201},"1. Repo path",{"type":44,"tag":53,"props":1203,"children":1204},{},[1205,1207,1213,1215,1221],{"type":50,"value":1206},"Locate ",{"type":44,"tag":59,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":50,"value":1212},"video-search-and-summarization\u002F",{"type":50,"value":1214}," on disk. All compose commands run from ",{"type":44,"tag":59,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":50,"value":1220},"\u003Crepo>\u002Fdeploy\u002Fdocker\u002F",{"type":50,"value":1222},". If unknown, ask the user.",{"type":44,"tag":196,"props":1224,"children":1226},{"id":1225},"_2-ngc-cli-key",[1227],{"type":50,"value":1228},"2. NGC CLI + key",{"type":44,"tag":53,"props":1230,"children":1231},{},[1232,1238,1240,1246,1248,1254],{"type":44,"tag":59,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":50,"value":1237},"$NGC_CLI_API_KEY",{"type":50,"value":1239}," must be set and must have access to ",{"type":44,"tag":59,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":50,"value":1245},"nvidia\u002Fvss-core\u002F*",{"type":50,"value":1247}," images. See ",{"type":44,"tag":59,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":50,"value":1253},"vss-deploy-profile\u002Freferences\u002Fngc.md",{"type":50,"value":1255}," for setup if missing.",{"type":44,"tag":53,"props":1257,"children":1258},{},[1259,1261,1267,1269,1274],{"type":50,"value":1260},"If the user previously ran ",{"type":44,"tag":59,"props":1262,"children":1264},{"className":1263},[],[1265],{"type":50,"value":1266},"ngc config set",{"type":50,"value":1268}," but ",{"type":44,"tag":59,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":50,"value":1237},{"type":50,"value":1275}," isn't exported in this shell, the key is already on disk:",{"type":44,"tag":544,"props":1277,"children":1279},{"className":546,"code":1278,"language":381,"meta":548,"style":548},"NGC_CLI_API_KEY=$(awk -F'= ' '\u002F^apikey\u002F{print $2}' ~\u002F.ngc\u002Fconfig 2>\u002Fdev\u002Fnull)\ntest -n \"${NGC_CLI_API_KEY}\" && echo \"key sourced from ~\u002F.ngc\u002Fconfig\"\n",[1280],{"type":44,"tag":59,"props":1281,"children":1282},{"__ignoreMap":548},[1283,1353],{"type":44,"tag":554,"props":1284,"children":1285},{"class":556,"line":557},[1286,1291,1296,1301,1306,1311,1316,1320,1325,1330,1334,1339,1343,1348],{"type":44,"tag":554,"props":1287,"children":1288},{"style":561},[1289],{"type":50,"value":1290},"NGC_CLI_API_KEY",{"type":44,"tag":554,"props":1292,"children":1293},{"style":567},[1294],{"type":50,"value":1295},"=$(",{"type":44,"tag":554,"props":1297,"children":1298},{"style":730},[1299],{"type":50,"value":1300},"awk",{"type":44,"tag":554,"props":1302,"children":1303},{"style":621},[1304],{"type":50,"value":1305}," -F",{"type":44,"tag":554,"props":1307,"children":1308},{"style":567},[1309],{"type":50,"value":1310},"'",{"type":44,"tag":554,"props":1312,"children":1313},{"style":621},[1314],{"type":50,"value":1315},"= ",{"type":44,"tag":554,"props":1317,"children":1318},{"style":567},[1319],{"type":50,"value":1310},{"type":44,"tag":554,"props":1321,"children":1322},{"style":567},[1323],{"type":50,"value":1324}," '",{"type":44,"tag":554,"props":1326,"children":1327},{"style":621},[1328],{"type":50,"value":1329},"\u002F^apikey\u002F{print $2}",{"type":44,"tag":554,"props":1331,"children":1332},{"style":567},[1333],{"type":50,"value":1310},{"type":44,"tag":554,"props":1335,"children":1336},{"style":621},[1337],{"type":50,"value":1338}," ~\u002F.ngc\u002Fconfig",{"type":44,"tag":554,"props":1340,"children":1341},{"style":567},[1342],{"type":50,"value":769},{"type":44,"tag":554,"props":1344,"children":1345},{"style":621},[1346],{"type":50,"value":1347},"\u002Fdev\u002Fnull",{"type":44,"tag":554,"props":1349,"children":1350},{"style":567},[1351],{"type":50,"value":1352},")\n",{"type":44,"tag":554,"props":1354,"children":1355},{"class":556,"line":594},[1356,1360,1365,1369,1373,1378,1383,1388,1393,1398],{"type":44,"tag":554,"props":1357,"children":1358},{"style":682},[1359],{"type":50,"value":685},{"type":44,"tag":554,"props":1361,"children":1362},{"style":621},[1363],{"type":50,"value":1364}," -n",{"type":44,"tag":554,"props":1366,"children":1367},{"style":567},[1368],{"type":50,"value":695},{"type":44,"tag":554,"props":1370,"children":1371},{"style":561},[1372],{"type":50,"value":1290},{"type":44,"tag":554,"props":1374,"children":1375},{"style":567},[1376],{"type":50,"value":1377},"}\"",{"type":44,"tag":554,"props":1379,"children":1380},{"style":567},[1381],{"type":50,"value":1382}," &&",{"type":44,"tag":554,"props":1384,"children":1385},{"style":682},[1386],{"type":50,"value":1387}," echo",{"type":44,"tag":554,"props":1389,"children":1390},{"style":567},[1391],{"type":50,"value":1392}," \"",{"type":44,"tag":554,"props":1394,"children":1395},{"style":621},[1396],{"type":50,"value":1397},"key sourced from ~\u002F.ngc\u002Fconfig",{"type":44,"tag":554,"props":1399,"children":1400},{"style":567},[1401],{"type":50,"value":1402},"\"\n",{"type":44,"tag":53,"props":1404,"children":1405},{},[1406,1408,1414,1416,1422,1424,1430],{"type":50,"value":1407},"Make sure the key value also lands in ",{"type":44,"tag":59,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":50,"value":1413},"industry-profiles\u002Fwarehouse-operations\u002F.env:164",{"type":50,"value":1415}," (",{"type":44,"tag":59,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":50,"value":1421},"NGC_CLI_API_KEY=...",{"type":50,"value":1423},") — compose only reads it from there at ",{"type":44,"tag":59,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":50,"value":1429},"up",{"type":50,"value":1431}," time, not from your shell env.",{"type":44,"tag":196,"props":1433,"children":1435},{"id":1434},"_3-hardware_profile-slug",[1436,1438,1444],{"type":50,"value":1437},"3. ",{"type":44,"tag":59,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":50,"value":1443},"HARDWARE_PROFILE",{"type":50,"value":1445}," slug",{"type":44,"tag":355,"props":1447,"children":1448},{},[1449],{"type":44,"tag":53,"props":1450,"children":1451},{},[1452,1454,1459],{"type":50,"value":1453},"The public MV3DT supported stream counts are listed in the Warehouse Quickstart Guide under \"MV3DT Vision AI Profile Supported Deployment Options.\" Use the matching ",{"type":44,"tag":59,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":50,"value":1443},{"type":50,"value":1460}," slug below.",{"type":44,"tag":53,"props":1462,"children":1463},{},[1464,1466,1472],{"type":50,"value":1465},"Pick from ",{"type":44,"tag":59,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":50,"value":1471},"nvidia-smi --query-gpu=name --format=csv,noheader",{"type":50,"value":1473},":",{"type":44,"tag":238,"props":1475,"children":1476},{},[1477,1501],{"type":44,"tag":242,"props":1478,"children":1479},{},[1480],{"type":44,"tag":246,"props":1481,"children":1482},{},[1483,1488,1496],{"type":44,"tag":250,"props":1484,"children":1485},{},[1486],{"type":50,"value":1487},"GPU name",{"type":44,"tag":250,"props":1489,"children":1490},{},[1491],{"type":44,"tag":59,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":50,"value":1443},{"type":44,"tag":250,"props":1497,"children":1498},{},[1499],{"type":50,"value":1500},"MV3DT supported streams",{"type":44,"tag":275,"props":1502,"children":1503},{},[1504,1526,1548,1569,1591],{"type":44,"tag":246,"props":1505,"children":1506},{},[1507,1512,1521],{"type":44,"tag":282,"props":1508,"children":1509},{},[1510],{"type":50,"value":1511},"RTX PRO 6000 Blackwell",{"type":44,"tag":282,"props":1513,"children":1514},{},[1515],{"type":44,"tag":59,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":50,"value":1520},"RTXPRO6000BW",{"type":44,"tag":282,"props":1522,"children":1523},{},[1524],{"type":50,"value":1525},"18",{"type":44,"tag":246,"props":1527,"children":1528},{},[1529,1534,1543],{"type":44,"tag":282,"props":1530,"children":1531},{},[1532],{"type":50,"value":1533},"H100 (NVL, SXM HBM3)",{"type":44,"tag":282,"props":1535,"children":1536},{},[1537],{"type":44,"tag":59,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":50,"value":1542},"H100",{"type":44,"tag":282,"props":1544,"children":1545},{},[1546],{"type":50,"value":1547},"13",{"type":44,"tag":246,"props":1549,"children":1550},{},[1551,1556,1564],{"type":44,"tag":282,"props":1552,"children":1553},{},[1554],{"type":50,"value":1555},"L40S",{"type":44,"tag":282,"props":1557,"children":1558},{},[1559],{"type":44,"tag":59,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":50,"value":1555},{"type":44,"tag":282,"props":1565,"children":1566},{},[1567],{"type":50,"value":1568},"7",{"type":44,"tag":246,"props":1570,"children":1571},{},[1572,1577,1586],{"type":44,"tag":282,"props":1573,"children":1574},{},[1575],{"type":50,"value":1576},"IGX Thor",{"type":44,"tag":282,"props":1578,"children":1579},{},[1580],{"type":44,"tag":59,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":50,"value":1585},"IGX-THOR",{"type":44,"tag":282,"props":1587,"children":1588},{},[1589],{"type":50,"value":1590},"4",{"type":44,"tag":246,"props":1592,"children":1593},{},[1594,1599,1608],{"type":44,"tag":282,"props":1595,"children":1596},{},[1597],{"type":50,"value":1598},"DGX Spark",{"type":44,"tag":282,"props":1600,"children":1601},{},[1602],{"type":44,"tag":59,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":50,"value":1607},"DGX-SPARK",{"type":44,"tag":282,"props":1609,"children":1610},{},[1611],{"type":50,"value":1590},{"type":44,"tag":53,"props":1613,"children":1614},{},[1615,1617,1623,1625,1630,1632,1638],{"type":50,"value":1616},"If the user's GPU is not listed here, check ",{"type":44,"tag":59,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":50,"value":1622},"industry-profiles\u002Fwarehouse-operations\u002F.env",{"type":50,"value":1624}," for available ",{"type":44,"tag":59,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":50,"value":1443},{"type":50,"value":1631}," values, then confirm the matching profile exists in ",{"type":44,"tag":59,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":50,"value":1637},"blueprint-configurator\u002Fblueprint_config.yml",{"type":50,"value":1639}," before using it. Do not infer a stream count from the slug alone.",{"type":44,"tag":53,"props":1641,"children":1642},{},[1643,1648,1650,1656,1658,1664,1666,1672,1674,1680,1682,1688,1689,1695,1697,1703,1705,1711],{"type":44,"tag":188,"props":1644,"children":1645},{},[1646],{"type":50,"value":1647},"The per-GPU MV3DT cap is enforced at deploy time.",{"type":50,"value":1649}," ",{"type":44,"tag":59,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":50,"value":1655},"vss-configurator-mv3dt",{"type":50,"value":1657}," computes ",{"type":44,"tag":59,"props":1659,"children":1661},{"className":1660},[],[1662],{"type":50,"value":1663},"final_stream_count = min(NUM_STREAMS, max_streams_supported)",{"type":50,"value":1665}," and applies a ",{"type":44,"tag":59,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":50,"value":1671},"keep_count",{"type":50,"value":1673}," file-management op against ",{"type":44,"tag":59,"props":1675,"children":1677},{"className":1676},[],[1678],{"type":50,"value":1679},"${VSS_DATA_DIR}\u002Fvideos\u002F${SAMPLE_VIDEO_DATASET}\u002F",{"type":50,"value":1681}," so only ",{"type":44,"tag":59,"props":1683,"children":1685},{"className":1684},[],[1686],{"type":50,"value":1687},"final_stream_count",{"type":50,"value":1649},{"type":44,"tag":59,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":50,"value":1694},".mp4",{"type":50,"value":1696}," files remain (sorted lexicographically, last N kept). If your GPU's MV3DT supported stream count (above table) is below your camera count, perception \u002F ",{"type":44,"tag":59,"props":1698,"children":1700},{"className":1699},[],[1701],{"type":50,"value":1702},"mdx-raw",{"type":50,"value":1704}," \u002F ",{"type":44,"tag":59,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":50,"value":1710},"mdx-bev",{"type":50,"value":1712}," run with the supported stream count. Either pick a GPU with a higher supported stream count or surface the cap explicitly to the user so they're aware which streams will be processed.",{"type":44,"tag":196,"props":1714,"children":1716},{"id":1715},"_4-app-data-on-disk",[1717],{"type":50,"value":1718},"4. App data on disk",{"type":44,"tag":53,"props":1720,"children":1721},{},[1722,1728,1730,1743,1745,1751,1753,1759],{"type":44,"tag":59,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":50,"value":1727},"VSS_DATA_DIR",{"type":50,"value":1729}," must point at the ",{"type":44,"tag":188,"props":1731,"children":1732},{},[1733,1735,1741],{"type":50,"value":1734},"extracted ",{"type":44,"tag":59,"props":1736,"children":1738},{"className":1737},[],[1739],{"type":50,"value":1740},"vss-warehouse-app-data",{"type":50,"value":1742}," directory",{"type":50,"value":1744}," (separate from the repo). Pointing it at the repo's ",{"type":44,"tag":59,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":50,"value":1750},"deploy\u002Fdocker\u002F",{"type":50,"value":1752}," causes the deploy to stall: the configurator can't find the dataset, redis can't open its log file, and perception stays in ",{"type":44,"tag":59,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":50,"value":1758},"Created",{"type":50,"value":1760},". Verify the path before deploy.",{"type":44,"tag":53,"props":1762,"children":1763},{},[1764],{"type":50,"value":1765},"Pre-flight check before deploy:",{"type":44,"tag":544,"props":1767,"children":1769},{"className":546,"code":1768,"language":381,"meta":548,"style":548},"DATA_DIR=\"${VSS_DATA_DIR:?VSS_DATA_DIR not set in .env}\"\nDATASET=\"${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}\"\n\nfor sub in videos models data_log; do\n  test -d \"${DATA_DIR}\u002F${sub}\" || { echo \"ERROR: ${DATA_DIR}\u002F${sub} missing\"; exit 1; }\ndone\n\n# For sample \u002F videos modes — videos directory must exist\ntest -d \"${DATA_DIR}\u002Fvideos\u002F${DATASET}\" \\\n  || { echo \"ERROR: ${DATA_DIR}\u002Fvideos\u002F${DATASET} missing — wrong slug or app-data not extracted\"; exit 1; }\n\n# Sanity: video count should match calibration count.\n# Some published app-data tarballs are known to ship the sample dataset with\n# fewer videos than the dataset name implies — verify and source any missing\n# cams separately if your GPU's mv3dt cap is high enough to use them all.\nls \"${DATA_DIR}\u002Fvideos\u002F${DATASET}\u002F\"*.mp4 2>\u002Fdev\u002Fnull | wc -l\n\n# Ensure every per-service subdir under data_log\u002F exists. kafka \u002F elasticsearch \u002F\n# redis \u002F postgres and the video-analytics API upload path (`\u002Fweb-api-app\u002Ffiles`)\n# run as non-root UIDs against these bind mounts. Without write access the daemons\n# or calibration\u002Fimage import can fail with permission errors.\nmkdir -p \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fanalytics_cache\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fcalibration_toolkit\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Felastic\u002Fdata\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Felastic\u002Flogs\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fkafka\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fredis\u002Fdata\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fredis\u002Flog\" \\\n  \"${DATA_DIR}\u002Fdata_log\u002Fvss_video_analytics_api\"\n\n# Grant write access to the specific container UIDs only — scoped ACLs, NOT 777 and\n# NOT chown. UIDs (per data-directory.md): postgres=70, redis=999, elasticsearch \u002F VST \u002F\n# kafka=1000. The first call covers existing files; the second sets *default* ACLs so\n# files\u002Fdirs the daemons create at runtime (e.g. postgres PGDATA) inherit the access.\nACL='u:70:rwx,u:999:rwx,u:1000:rwx'\nsetfacl -R    -m \"$ACL\" \"${DATA_DIR}\u002Fdata_log\"\nsetfacl -R -d -m \"$ACL\" \"${DATA_DIR}\u002Fdata_log\"\n",[1770],{"type":44,"tag":59,"props":1771,"children":1772},{"__ignoreMap":548},[1773,1831,1863,1870,1914,2041,2049,2056,2064,2109,2191,2199,2208,2217,2226,2235,2311,2319,2328,2337,2346,2355,2373,2403,2432,2461,2490,2519,2548,2577,2602,2610,2619,2628,2637,2646,2673,2726],{"type":44,"tag":554,"props":1774,"children":1775},{"class":556,"line":557},[1776,1781,1785,1789,1793,1798,1802,1807,1812,1817,1822,1827],{"type":44,"tag":554,"props":1777,"children":1778},{"style":561},[1779],{"type":50,"value":1780},"DATA_DIR",{"type":44,"tag":554,"props":1782,"children":1783},{"style":567},[1784],{"type":50,"value":570},{"type":44,"tag":554,"props":1786,"children":1787},{"style":567},[1788],{"type":50,"value":575},{"type":44,"tag":554,"props":1790,"children":1791},{"style":561},[1792],{"type":50,"value":1727},{"type":44,"tag":554,"props":1794,"children":1795},{"style":567},[1796],{"type":50,"value":1797},":?",{"type":44,"tag":554,"props":1799,"children":1800},{"style":561},[1801],{"type":50,"value":1727},{"type":44,"tag":554,"props":1803,"children":1804},{"style":561},[1805],{"type":50,"value":1806}," not",{"type":44,"tag":554,"props":1808,"children":1809},{"style":561},[1810],{"type":50,"value":1811}," set",{"type":44,"tag":554,"props":1813,"children":1814},{"style":561},[1815],{"type":50,"value":1816}," in",{"type":44,"tag":554,"props":1818,"children":1819},{"style":621},[1820],{"type":50,"value":1821}," .",{"type":44,"tag":554,"props":1823,"children":1824},{"style":561},[1825],{"type":50,"value":1826},"env",{"type":44,"tag":554,"props":1828,"children":1829},{"style":567},[1830],{"type":50,"value":638},{"type":44,"tag":554,"props":1832,"children":1833},{"class":556,"line":594},[1834,1838,1842,1846,1850,1855,1859],{"type":44,"tag":554,"props":1835,"children":1836},{"style":561},[1837],{"type":50,"value":564},{"type":44,"tag":554,"props":1839,"children":1840},{"style":567},[1841],{"type":50,"value":570},{"type":44,"tag":554,"props":1843,"children":1844},{"style":567},[1845],{"type":50,"value":575},{"type":44,"tag":554,"props":1847,"children":1848},{"style":561},[1849],{"type":50,"value":580},{"type":44,"tag":554,"props":1851,"children":1852},{"style":567},[1853],{"type":50,"value":1854},":-",{"type":44,"tag":554,"props":1856,"children":1857},{"style":561},[1858],{"type":50,"value":464},{"type":44,"tag":554,"props":1860,"children":1861},{"style":567},[1862],{"type":50,"value":638},{"type":44,"tag":554,"props":1864,"children":1865},{"class":556,"line":641},[1866],{"type":44,"tag":554,"props":1867,"children":1868},{"emptyLinePlaceholder":645},[1869],{"type":50,"value":648},{"type":44,"tag":554,"props":1871,"children":1872},{"class":556,"line":651},[1873,1879,1884,1889,1894,1899,1904,1909],{"type":44,"tag":554,"props":1874,"children":1876},{"style":1875},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1877],{"type":50,"value":1878},"for",{"type":44,"tag":554,"props":1880,"children":1881},{"style":561},[1882],{"type":50,"value":1883}," sub ",{"type":44,"tag":554,"props":1885,"children":1886},{"style":1875},[1887],{"type":50,"value":1888},"in",{"type":44,"tag":554,"props":1890,"children":1891},{"style":621},[1892],{"type":50,"value":1893}," videos",{"type":44,"tag":554,"props":1895,"children":1896},{"style":621},[1897],{"type":50,"value":1898}," models",{"type":44,"tag":554,"props":1900,"children":1901},{"style":621},[1902],{"type":50,"value":1903}," data_log",{"type":44,"tag":554,"props":1905,"children":1906},{"style":567},[1907],{"type":50,"value":1908},";",{"type":44,"tag":554,"props":1910,"children":1911},{"style":1875},[1912],{"type":50,"value":1913}," do\n",{"type":44,"tag":554,"props":1915,"children":1916},{"class":556,"line":660},[1917,1922,1927,1931,1935,1939,1944,1948,1953,1957,1962,1967,1971,1975,1980,1984,1988,1992,1996,2000,2004,2008,2013,2017,2021,2026,2032,2036],{"type":44,"tag":554,"props":1918,"children":1919},{"style":682},[1920],{"type":50,"value":1921},"  test",{"type":44,"tag":554,"props":1923,"children":1924},{"style":621},[1925],{"type":50,"value":1926}," -d",{"type":44,"tag":554,"props":1928,"children":1929},{"style":567},[1930],{"type":50,"value":695},{"type":44,"tag":554,"props":1932,"children":1933},{"style":561},[1934],{"type":50,"value":1780},{"type":44,"tag":554,"props":1936,"children":1937},{"style":567},[1938],{"type":50,"value":618},{"type":44,"tag":554,"props":1940,"children":1941},{"style":621},[1942],{"type":50,"value":1943},"\u002F",{"type":44,"tag":554,"props":1945,"children":1946},{"style":567},[1947],{"type":50,"value":629},{"type":44,"tag":554,"props":1949,"children":1950},{"style":561},[1951],{"type":50,"value":1952},"sub",{"type":44,"tag":554,"props":1954,"children":1955},{"style":567},[1956],{"type":50,"value":1377},{"type":44,"tag":554,"props":1958,"children":1959},{"style":567},[1960],{"type":50,"value":1961}," ||",{"type":44,"tag":554,"props":1963,"children":1964},{"style":567},[1965],{"type":50,"value":1966}," {",{"type":44,"tag":554,"props":1968,"children":1969},{"style":682},[1970],{"type":50,"value":1387},{"type":44,"tag":554,"props":1972,"children":1973},{"style":567},[1974],{"type":50,"value":1392},{"type":44,"tag":554,"props":1976,"children":1977},{"style":621},[1978],{"type":50,"value":1979},"ERROR: ",{"type":44,"tag":554,"props":1981,"children":1982},{"style":567},[1983],{"type":50,"value":629},{"type":44,"tag":554,"props":1985,"children":1986},{"style":561},[1987],{"type":50,"value":1780},{"type":44,"tag":554,"props":1989,"children":1990},{"style":567},[1991],{"type":50,"value":618},{"type":44,"tag":554,"props":1993,"children":1994},{"style":621},[1995],{"type":50,"value":1943},{"type":44,"tag":554,"props":1997,"children":1998},{"style":567},[1999],{"type":50,"value":629},{"type":44,"tag":554,"props":2001,"children":2002},{"style":561},[2003],{"type":50,"value":1952},{"type":44,"tag":554,"props":2005,"children":2006},{"style":567},[2007],{"type":50,"value":618},{"type":44,"tag":554,"props":2009,"children":2010},{"style":621},[2011],{"type":50,"value":2012}," missing",{"type":44,"tag":554,"props":2014,"children":2015},{"style":567},[2016],{"type":50,"value":713},{"type":44,"tag":554,"props":2018,"children":2019},{"style":567},[2020],{"type":50,"value":1908},{"type":44,"tag":554,"props":2022,"children":2023},{"style":682},[2024],{"type":50,"value":2025}," exit",{"type":44,"tag":554,"props":2027,"children":2029},{"style":2028},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2030],{"type":50,"value":2031}," 1",{"type":44,"tag":554,"props":2033,"children":2034},{"style":567},[2035],{"type":50,"value":1908},{"type":44,"tag":554,"props":2037,"children":2038},{"style":567},[2039],{"type":50,"value":2040}," }\n",{"type":44,"tag":554,"props":2042,"children":2043},{"class":556,"line":669},[2044],{"type":44,"tag":554,"props":2045,"children":2046},{"style":1875},[2047],{"type":50,"value":2048},"done\n",{"type":44,"tag":554,"props":2050,"children":2051},{"class":556,"line":678},[2052],{"type":44,"tag":554,"props":2053,"children":2054},{"emptyLinePlaceholder":645},[2055],{"type":50,"value":648},{"type":44,"tag":554,"props":2057,"children":2058},{"class":556,"line":721},[2059],{"type":44,"tag":554,"props":2060,"children":2061},{"style":588},[2062],{"type":50,"value":2063},"# For sample \u002F videos modes — videos directory must exist\n",{"type":44,"tag":554,"props":2065,"children":2067},{"class":556,"line":2066},9,[2068,2072,2076,2080,2084,2088,2093,2097,2101,2105],{"type":44,"tag":554,"props":2069,"children":2070},{"style":682},[2071],{"type":50,"value":685},{"type":44,"tag":554,"props":2073,"children":2074},{"style":621},[2075],{"type":50,"value":1926},{"type":44,"tag":554,"props":2077,"children":2078},{"style":567},[2079],{"type":50,"value":695},{"type":44,"tag":554,"props":2081,"children":2082},{"style":561},[2083],{"type":50,"value":1780},{"type":44,"tag":554,"props":2085,"children":2086},{"style":567},[2087],{"type":50,"value":618},{"type":44,"tag":554,"props":2089,"children":2090},{"style":621},[2091],{"type":50,"value":2092},"\u002Fvideos\u002F",{"type":44,"tag":554,"props":2094,"children":2095},{"style":567},[2096],{"type":50,"value":629},{"type":44,"tag":554,"props":2098,"children":2099},{"style":561},[2100],{"type":50,"value":564},{"type":44,"tag":554,"props":2102,"children":2103},{"style":567},[2104],{"type":50,"value":1377},{"type":44,"tag":554,"props":2106,"children":2107},{"style":561},[2108],{"type":50,"value":718},{"type":44,"tag":554,"props":2110,"children":2112},{"class":556,"line":2111},10,[2113,2118,2122,2126,2130,2134,2138,2142,2146,2150,2154,2158,2162,2167,2171,2175,2179,2183,2187],{"type":44,"tag":554,"props":2114,"children":2115},{"style":567},[2116],{"type":50,"value":2117},"  ||",{"type":44,"tag":554,"props":2119,"children":2120},{"style":567},[2121],{"type":50,"value":1966},{"type":44,"tag":554,"props":2123,"children":2124},{"style":682},[2125],{"type":50,"value":1387},{"type":44,"tag":554,"props":2127,"children":2128},{"style":567},[2129],{"type":50,"value":1392},{"type":44,"tag":554,"props":2131,"children":2132},{"style":621},[2133],{"type":50,"value":1979},{"type":44,"tag":554,"props":2135,"children":2136},{"style":567},[2137],{"type":50,"value":629},{"type":44,"tag":554,"props":2139,"children":2140},{"style":561},[2141],{"type":50,"value":1780},{"type":44,"tag":554,"props":2143,"children":2144},{"style":567},[2145],{"type":50,"value":618},{"type":44,"tag":554,"props":2147,"children":2148},{"style":621},[2149],{"type":50,"value":2092},{"type":44,"tag":554,"props":2151,"children":2152},{"style":567},[2153],{"type":50,"value":629},{"type":44,"tag":554,"props":2155,"children":2156},{"style":561},[2157],{"type":50,"value":564},{"type":44,"tag":554,"props":2159,"children":2160},{"style":567},[2161],{"type":50,"value":618},{"type":44,"tag":554,"props":2163,"children":2164},{"style":621},[2165],{"type":50,"value":2166}," missing — wrong slug or app-data not extracted",{"type":44,"tag":554,"props":2168,"children":2169},{"style":567},[2170],{"type":50,"value":713},{"type":44,"tag":554,"props":2172,"children":2173},{"style":567},[2174],{"type":50,"value":1908},{"type":44,"tag":554,"props":2176,"children":2177},{"style":682},[2178],{"type":50,"value":2025},{"type":44,"tag":554,"props":2180,"children":2181},{"style":2028},[2182],{"type":50,"value":2031},{"type":44,"tag":554,"props":2184,"children":2185},{"style":567},[2186],{"type":50,"value":1908},{"type":44,"tag":554,"props":2188,"children":2189},{"style":567},[2190],{"type":50,"value":2040},{"type":44,"tag":554,"props":2192,"children":2194},{"class":556,"line":2193},11,[2195],{"type":44,"tag":554,"props":2196,"children":2197},{"emptyLinePlaceholder":645},[2198],{"type":50,"value":648},{"type":44,"tag":554,"props":2200,"children":2202},{"class":556,"line":2201},12,[2203],{"type":44,"tag":554,"props":2204,"children":2205},{"style":588},[2206],{"type":50,"value":2207},"# Sanity: video count should match calibration count.\n",{"type":44,"tag":554,"props":2209,"children":2211},{"class":556,"line":2210},13,[2212],{"type":44,"tag":554,"props":2213,"children":2214},{"style":588},[2215],{"type":50,"value":2216},"# Some published app-data tarballs are known to ship the sample dataset with\n",{"type":44,"tag":554,"props":2218,"children":2220},{"class":556,"line":2219},14,[2221],{"type":44,"tag":554,"props":2222,"children":2223},{"style":588},[2224],{"type":50,"value":2225},"# fewer videos than the dataset name implies — verify and source any missing\n",{"type":44,"tag":554,"props":2227,"children":2229},{"class":556,"line":2228},15,[2230],{"type":44,"tag":554,"props":2231,"children":2232},{"style":588},[2233],{"type":50,"value":2234},"# cams separately if your GPU's mv3dt cap is high enough to use them all.\n",{"type":44,"tag":554,"props":2236,"children":2238},{"class":556,"line":2237},16,[2239,2244,2248,2252,2256,2260,2264,2268,2272,2276,2280,2284,2288,2292,2296,2301,2306],{"type":44,"tag":554,"props":2240,"children":2241},{"style":730},[2242],{"type":50,"value":2243},"ls",{"type":44,"tag":554,"props":2245,"children":2246},{"style":567},[2247],{"type":50,"value":695},{"type":44,"tag":554,"props":2249,"children":2250},{"style":561},[2251],{"type":50,"value":1780},{"type":44,"tag":554,"props":2253,"children":2254},{"style":567},[2255],{"type":50,"value":618},{"type":44,"tag":554,"props":2257,"children":2258},{"style":621},[2259],{"type":50,"value":2092},{"type":44,"tag":554,"props":2261,"children":2262},{"style":567},[2263],{"type":50,"value":629},{"type":44,"tag":554,"props":2265,"children":2266},{"style":561},[2267],{"type":50,"value":564},{"type":44,"tag":554,"props":2269,"children":2270},{"style":567},[2271],{"type":50,"value":618},{"type":44,"tag":554,"props":2273,"children":2274},{"style":621},[2275],{"type":50,"value":1943},{"type":44,"tag":554,"props":2277,"children":2278},{"style":567},[2279],{"type":50,"value":713},{"type":44,"tag":554,"props":2281,"children":2282},{"style":561},[2283],{"type":50,"value":759},{"type":44,"tag":554,"props":2285,"children":2286},{"style":621},[2287],{"type":50,"value":1694},{"type":44,"tag":554,"props":2289,"children":2290},{"style":567},[2291],{"type":50,"value":769},{"type":44,"tag":554,"props":2293,"children":2294},{"style":621},[2295],{"type":50,"value":1347},{"type":44,"tag":554,"props":2297,"children":2298},{"style":567},[2299],{"type":50,"value":2300}," |",{"type":44,"tag":554,"props":2302,"children":2303},{"style":730},[2304],{"type":50,"value":2305}," wc",{"type":44,"tag":554,"props":2307,"children":2308},{"style":621},[2309],{"type":50,"value":2310}," -l\n",{"type":44,"tag":554,"props":2312,"children":2314},{"class":556,"line":2313},17,[2315],{"type":44,"tag":554,"props":2316,"children":2317},{"emptyLinePlaceholder":645},[2318],{"type":50,"value":648},{"type":44,"tag":554,"props":2320,"children":2322},{"class":556,"line":2321},18,[2323],{"type":44,"tag":554,"props":2324,"children":2325},{"style":588},[2326],{"type":50,"value":2327},"# Ensure every per-service subdir under data_log\u002F exists. kafka \u002F elasticsearch \u002F\n",{"type":44,"tag":554,"props":2329,"children":2331},{"class":556,"line":2330},19,[2332],{"type":44,"tag":554,"props":2333,"children":2334},{"style":588},[2335],{"type":50,"value":2336},"# redis \u002F postgres and the video-analytics API upload path (`\u002Fweb-api-app\u002Ffiles`)\n",{"type":44,"tag":554,"props":2338,"children":2340},{"class":556,"line":2339},20,[2341],{"type":44,"tag":554,"props":2342,"children":2343},{"style":588},[2344],{"type":50,"value":2345},"# run as non-root UIDs against these bind mounts. Without write access the daemons\n",{"type":44,"tag":554,"props":2347,"children":2349},{"class":556,"line":2348},21,[2350],{"type":44,"tag":554,"props":2351,"children":2352},{"style":588},[2353],{"type":50,"value":2354},"# or calibration\u002Fimage import can fail with permission errors.\n",{"type":44,"tag":554,"props":2356,"children":2358},{"class":556,"line":2357},22,[2359,2364,2369],{"type":44,"tag":554,"props":2360,"children":2361},{"style":730},[2362],{"type":50,"value":2363},"mkdir",{"type":44,"tag":554,"props":2365,"children":2366},{"style":621},[2367],{"type":50,"value":2368}," -p",{"type":44,"tag":554,"props":2370,"children":2371},{"style":561},[2372],{"type":50,"value":718},{"type":44,"tag":554,"props":2374,"children":2376},{"class":556,"line":2375},23,[2377,2382,2386,2390,2395,2399],{"type":44,"tag":554,"props":2378,"children":2379},{"style":567},[2380],{"type":50,"value":2381},"  \"${",{"type":44,"tag":554,"props":2383,"children":2384},{"style":561},[2385],{"type":50,"value":1780},{"type":44,"tag":554,"props":2387,"children":2388},{"style":567},[2389],{"type":50,"value":618},{"type":44,"tag":554,"props":2391,"children":2392},{"style":621},[2393],{"type":50,"value":2394},"\u002Fdata_log\u002Fanalytics_cache",{"type":44,"tag":554,"props":2396,"children":2397},{"style":567},[2398],{"type":50,"value":713},{"type":44,"tag":554,"props":2400,"children":2401},{"style":561},[2402],{"type":50,"value":718},{"type":44,"tag":554,"props":2404,"children":2406},{"class":556,"line":2405},24,[2407,2411,2415,2419,2424,2428],{"type":44,"tag":554,"props":2408,"children":2409},{"style":567},[2410],{"type":50,"value":2381},{"type":44,"tag":554,"props":2412,"children":2413},{"style":561},[2414],{"type":50,"value":1780},{"type":44,"tag":554,"props":2416,"children":2417},{"style":567},[2418],{"type":50,"value":618},{"type":44,"tag":554,"props":2420,"children":2421},{"style":621},[2422],{"type":50,"value":2423},"\u002Fdata_log\u002Fcalibration_toolkit",{"type":44,"tag":554,"props":2425,"children":2426},{"style":567},[2427],{"type":50,"value":713},{"type":44,"tag":554,"props":2429,"children":2430},{"style":561},[2431],{"type":50,"value":718},{"type":44,"tag":554,"props":2433,"children":2435},{"class":556,"line":2434},25,[2436,2440,2444,2448,2453,2457],{"type":44,"tag":554,"props":2437,"children":2438},{"style":567},[2439],{"type":50,"value":2381},{"type":44,"tag":554,"props":2441,"children":2442},{"style":561},[2443],{"type":50,"value":1780},{"type":44,"tag":554,"props":2445,"children":2446},{"style":567},[2447],{"type":50,"value":618},{"type":44,"tag":554,"props":2449,"children":2450},{"style":621},[2451],{"type":50,"value":2452},"\u002Fdata_log\u002Felastic\u002Fdata",{"type":44,"tag":554,"props":2454,"children":2455},{"style":567},[2456],{"type":50,"value":713},{"type":44,"tag":554,"props":2458,"children":2459},{"style":561},[2460],{"type":50,"value":718},{"type":44,"tag":554,"props":2462,"children":2464},{"class":556,"line":2463},26,[2465,2469,2473,2477,2482,2486],{"type":44,"tag":554,"props":2466,"children":2467},{"style":567},[2468],{"type":50,"value":2381},{"type":44,"tag":554,"props":2470,"children":2471},{"style":561},[2472],{"type":50,"value":1780},{"type":44,"tag":554,"props":2474,"children":2475},{"style":567},[2476],{"type":50,"value":618},{"type":44,"tag":554,"props":2478,"children":2479},{"style":621},[2480],{"type":50,"value":2481},"\u002Fdata_log\u002Felastic\u002Flogs",{"type":44,"tag":554,"props":2483,"children":2484},{"style":567},[2485],{"type":50,"value":713},{"type":44,"tag":554,"props":2487,"children":2488},{"style":561},[2489],{"type":50,"value":718},{"type":44,"tag":554,"props":2491,"children":2493},{"class":556,"line":2492},27,[2494,2498,2502,2506,2511,2515],{"type":44,"tag":554,"props":2495,"children":2496},{"style":567},[2497],{"type":50,"value":2381},{"type":44,"tag":554,"props":2499,"children":2500},{"style":561},[2501],{"type":50,"value":1780},{"type":44,"tag":554,"props":2503,"children":2504},{"style":567},[2505],{"type":50,"value":618},{"type":44,"tag":554,"props":2507,"children":2508},{"style":621},[2509],{"type":50,"value":2510},"\u002Fdata_log\u002Fkafka",{"type":44,"tag":554,"props":2512,"children":2513},{"style":567},[2514],{"type":50,"value":713},{"type":44,"tag":554,"props":2516,"children":2517},{"style":561},[2518],{"type":50,"value":718},{"type":44,"tag":554,"props":2520,"children":2522},{"class":556,"line":2521},28,[2523,2527,2531,2535,2540,2544],{"type":44,"tag":554,"props":2524,"children":2525},{"style":567},[2526],{"type":50,"value":2381},{"type":44,"tag":554,"props":2528,"children":2529},{"style":561},[2530],{"type":50,"value":1780},{"type":44,"tag":554,"props":2532,"children":2533},{"style":567},[2534],{"type":50,"value":618},{"type":44,"tag":554,"props":2536,"children":2537},{"style":621},[2538],{"type":50,"value":2539},"\u002Fdata_log\u002Fredis\u002Fdata",{"type":44,"tag":554,"props":2541,"children":2542},{"style":567},[2543],{"type":50,"value":713},{"type":44,"tag":554,"props":2545,"children":2546},{"style":561},[2547],{"type":50,"value":718},{"type":44,"tag":554,"props":2549,"children":2551},{"class":556,"line":2550},29,[2552,2556,2560,2564,2569,2573],{"type":44,"tag":554,"props":2553,"children":2554},{"style":567},[2555],{"type":50,"value":2381},{"type":44,"tag":554,"props":2557,"children":2558},{"style":561},[2559],{"type":50,"value":1780},{"type":44,"tag":554,"props":2561,"children":2562},{"style":567},[2563],{"type":50,"value":618},{"type":44,"tag":554,"props":2565,"children":2566},{"style":621},[2567],{"type":50,"value":2568},"\u002Fdata_log\u002Fredis\u002Flog",{"type":44,"tag":554,"props":2570,"children":2571},{"style":567},[2572],{"type":50,"value":713},{"type":44,"tag":554,"props":2574,"children":2575},{"style":561},[2576],{"type":50,"value":718},{"type":44,"tag":554,"props":2578,"children":2580},{"class":556,"line":2579},30,[2581,2585,2589,2593,2598],{"type":44,"tag":554,"props":2582,"children":2583},{"style":567},[2584],{"type":50,"value":2381},{"type":44,"tag":554,"props":2586,"children":2587},{"style":561},[2588],{"type":50,"value":1780},{"type":44,"tag":554,"props":2590,"children":2591},{"style":567},[2592],{"type":50,"value":618},{"type":44,"tag":554,"props":2594,"children":2595},{"style":621},[2596],{"type":50,"value":2597},"\u002Fdata_log\u002Fvss_video_analytics_api",{"type":44,"tag":554,"props":2599,"children":2600},{"style":567},[2601],{"type":50,"value":1402},{"type":44,"tag":554,"props":2603,"children":2605},{"class":556,"line":2604},31,[2606],{"type":44,"tag":554,"props":2607,"children":2608},{"emptyLinePlaceholder":645},[2609],{"type":50,"value":648},{"type":44,"tag":554,"props":2611,"children":2613},{"class":556,"line":2612},32,[2614],{"type":44,"tag":554,"props":2615,"children":2616},{"style":588},[2617],{"type":50,"value":2618},"# Grant write access to the specific container UIDs only — scoped ACLs, NOT 777 and\n",{"type":44,"tag":554,"props":2620,"children":2622},{"class":556,"line":2621},33,[2623],{"type":44,"tag":554,"props":2624,"children":2625},{"style":588},[2626],{"type":50,"value":2627},"# NOT chown. UIDs (per data-directory.md): postgres=70, redis=999, elasticsearch \u002F VST \u002F\n",{"type":44,"tag":554,"props":2629,"children":2631},{"class":556,"line":2630},34,[2632],{"type":44,"tag":554,"props":2633,"children":2634},{"style":588},[2635],{"type":50,"value":2636},"# kafka=1000. The first call covers existing files; the second sets *default* ACLs so\n",{"type":44,"tag":554,"props":2638,"children":2640},{"class":556,"line":2639},35,[2641],{"type":44,"tag":554,"props":2642,"children":2643},{"style":588},[2644],{"type":50,"value":2645},"# files\u002Fdirs the daemons create at runtime (e.g. postgres PGDATA) inherit the access.\n",{"type":44,"tag":554,"props":2647,"children":2649},{"class":556,"line":2648},36,[2650,2655,2659,2663,2668],{"type":44,"tag":554,"props":2651,"children":2652},{"style":561},[2653],{"type":50,"value":2654},"ACL",{"type":44,"tag":554,"props":2656,"children":2657},{"style":567},[2658],{"type":50,"value":570},{"type":44,"tag":554,"props":2660,"children":2661},{"style":567},[2662],{"type":50,"value":1310},{"type":44,"tag":554,"props":2664,"children":2665},{"style":621},[2666],{"type":50,"value":2667},"u:70:rwx,u:999:rwx,u:1000:rwx",{"type":44,"tag":554,"props":2669,"children":2670},{"style":567},[2671],{"type":50,"value":2672},"'\n",{"type":44,"tag":554,"props":2674,"children":2676},{"class":556,"line":2675},37,[2677,2682,2687,2692,2696,2701,2705,2709,2713,2717,2722],{"type":44,"tag":554,"props":2678,"children":2679},{"style":730},[2680],{"type":50,"value":2681},"setfacl",{"type":44,"tag":554,"props":2683,"children":2684},{"style":621},[2685],{"type":50,"value":2686}," -R",{"type":44,"tag":554,"props":2688,"children":2689},{"style":621},[2690],{"type":50,"value":2691},"    -m",{"type":44,"tag":554,"props":2693,"children":2694},{"style":567},[2695],{"type":50,"value":1392},{"type":44,"tag":554,"props":2697,"children":2698},{"style":561},[2699],{"type":50,"value":2700},"$ACL",{"type":44,"tag":554,"props":2702,"children":2703},{"style":567},[2704],{"type":50,"value":713},{"type":44,"tag":554,"props":2706,"children":2707},{"style":567},[2708],{"type":50,"value":695},{"type":44,"tag":554,"props":2710,"children":2711},{"style":561},[2712],{"type":50,"value":1780},{"type":44,"tag":554,"props":2714,"children":2715},{"style":567},[2716],{"type":50,"value":618},{"type":44,"tag":554,"props":2718,"children":2719},{"style":621},[2720],{"type":50,"value":2721},"\u002Fdata_log",{"type":44,"tag":554,"props":2723,"children":2724},{"style":567},[2725],{"type":50,"value":1402},{"type":44,"tag":554,"props":2727,"children":2729},{"class":556,"line":2728},38,[2730,2734,2738,2742,2747,2751,2755,2759,2763,2767,2771,2775],{"type":44,"tag":554,"props":2731,"children":2732},{"style":730},[2733],{"type":50,"value":2681},{"type":44,"tag":554,"props":2735,"children":2736},{"style":621},[2737],{"type":50,"value":2686},{"type":44,"tag":554,"props":2739,"children":2740},{"style":621},[2741],{"type":50,"value":1926},{"type":44,"tag":554,"props":2743,"children":2744},{"style":621},[2745],{"type":50,"value":2746}," -m",{"type":44,"tag":554,"props":2748,"children":2749},{"style":567},[2750],{"type":50,"value":1392},{"type":44,"tag":554,"props":2752,"children":2753},{"style":561},[2754],{"type":50,"value":2700},{"type":44,"tag":554,"props":2756,"children":2757},{"style":567},[2758],{"type":50,"value":713},{"type":44,"tag":554,"props":2760,"children":2761},{"style":567},[2762],{"type":50,"value":695},{"type":44,"tag":554,"props":2764,"children":2765},{"style":561},[2766],{"type":50,"value":1780},{"type":44,"tag":554,"props":2768,"children":2769},{"style":567},[2770],{"type":50,"value":618},{"type":44,"tag":554,"props":2772,"children":2773},{"style":621},[2774],{"type":50,"value":2721},{"type":44,"tag":554,"props":2776,"children":2777},{"style":567},[2778],{"type":50,"value":1402},{"type":44,"tag":355,"props":2780,"children":2781},{},[2782,2850],{"type":44,"tag":53,"props":2783,"children":2784},{},[2785,2797,2799,2803,2805,2811,2813,2817,2818,2824,2826,2835,2837,2843,2845],{"type":44,"tag":188,"props":2786,"children":2787},{},[2788,2790,2796],{"type":50,"value":2789},"Scoped ACLs, not ",{"type":44,"tag":59,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":50,"value":2795},"chmod 777",{"type":50,"value":123},{"type":50,"value":2798}," This grants only the known container UIDs access — it does\n",{"type":44,"tag":188,"props":2800,"children":2801},{},[2802],{"type":50,"value":437},{"type":50,"value":2804}," make ",{"type":44,"tag":59,"props":2806,"children":2808},{"className":2807},[],[2809],{"type":50,"value":2810},"data_log",{"type":50,"value":2812}," world-writable, and it does ",{"type":44,"tag":188,"props":2814,"children":2815},{},[2816],{"type":50,"value":437},{"type":50,"value":1649},{"type":44,"tag":59,"props":2819,"children":2821},{"className":2820},[],[2822],{"type":50,"value":2823},"chown",{"type":50,"value":2825}," (which would break postgres \u002F\nElasticsearch, since they re-own their dirs on first start). Prefer this for agent-driven runs and\nshared hosts. The canonical ",{"type":44,"tag":79,"props":2827,"children":2829},{"href":2828},"..\u002Fvss-deploy-profile\u002Freferences\u002Fdata-directory.md",[2830],{"type":44,"tag":59,"props":2831,"children":2833},{"className":2832},[],[2834],{"type":50,"value":2828},{"type":50,"value":2836},"\ndocuments the broad ",{"type":44,"tag":59,"props":2838,"children":2840},{"className":2839},[],[2841],{"type":50,"value":2842},"chmod -R 777",{"type":50,"value":2844}," and the per-container UID table; this skill uses the scoped-ACL\nequivalent instead. ",{"type":44,"tag":188,"props":2846,"children":2847},{},[2848],{"type":50,"value":2849},"Ask the user for confirmation before changing host permissions.",{"type":44,"tag":53,"props":2851,"children":2852},{},[2853,2855,2861,2863,2868,2870,2876,2878,2884],{"type":50,"value":2854},"Requires a POSIX-ACL filesystem (ext4 \u002F xfs — the default) and the ",{"type":44,"tag":59,"props":2856,"children":2858},{"className":2857},[],[2859],{"type":50,"value":2860},"acl",{"type":50,"value":2862}," package (",{"type":44,"tag":59,"props":2864,"children":2866},{"className":2865},[],[2867],{"type":50,"value":2681},{"type":50,"value":2869},"). If a\ndaemon still logs a permission error after deploy, find its UID\n(",{"type":44,"tag":59,"props":2871,"children":2873},{"className":2872},[],[2874],{"type":50,"value":2875},"docker inspect \u003Ccontainer> --format '{{.Config.User}}'",{"type":50,"value":2877},") and add ",{"type":44,"tag":59,"props":2879,"children":2881},{"className":2880},[],[2882],{"type":50,"value":2883},"-m u:\u003Cuid>:rwx",{"type":50,"value":2885}," to both calls.",{"type":44,"tag":53,"props":2887,"children":2888},{},[2889,2891,2897,2898,2904,2906,2914],{"type":50,"value":2890},"If app-data isn't extracted yet: download via ",{"type":44,"tag":59,"props":2892,"children":2894},{"className":2893},[],[2895],{"type":50,"value":2896},"ngc registry resource download-version \"nvidia\u002Fvss-warehouse\u002Fvss-warehouse-app-data:\u003Cversion>\"",{"type":50,"value":535},{"type":44,"tag":59,"props":2899,"children":2901},{"className":2900},[],[2902],{"type":50,"value":2903},"tar -xvf",{"type":50,"value":2905}," (see ",{"type":44,"tag":79,"props":2907,"children":2908},{"href":920},[2909],{"type":44,"tag":59,"props":2910,"children":2912},{"className":2911},[],[2913],{"type":50,"value":920},{"type":50,"value":2915}," for tag discovery and full steps).",{"type":44,"tag":196,"props":2917,"children":2919},{"id":2918},"_5-pre-flight-system",[2920],{"type":50,"value":2921},"5. Pre-flight (system)",{"type":44,"tag":53,"props":2923,"children":2924},{},[2925,2931,2933,2939,2941,2947,2949,2955],{"type":44,"tag":59,"props":2926,"children":2928},{"className":2927},[],[2929],{"type":50,"value":2930},"nvidia-smi",{"type":50,"value":2932},", NVIDIA Docker runtime visible (",{"type":44,"tag":59,"props":2934,"children":2936},{"className":2935},[],[2937],{"type":50,"value":2938},"docker info | grep -i runtimes",{"type":50,"value":2940},"), and ",{"type":44,"tag":59,"props":2942,"children":2944},{"className":2943},[],[2945],{"type":50,"value":2946},"docker run --rm --gpus all ubuntu:24.04 nvidia-smi",{"type":50,"value":2948}," all green. Full driver \u002F kernel \u002F sysctl checks live in ",{"type":44,"tag":59,"props":2950,"children":2952},{"className":2951},[],[2953],{"type":50,"value":2954},"vss-deploy-profile\u002Freferences\u002Fprerequisites.md",{"type":50,"value":123},{"type":44,"tag":53,"props":2957,"children":2958},{},[2959],{"type":50,"value":2960},"If any check fails, fix before continuing — don't proceed to deploy.",{"type":44,"tag":196,"props":2962,"children":2964},{"id":2963},"_6-browser-reachability-cloud-corp-vpn-hosts-only",[2965],{"type":50,"value":2966},"6. Browser reachability (cloud \u002F corp-VPN hosts only)",{"type":44,"tag":53,"props":2968,"children":2969},{},[2970,2972,2978,2980,2989,2991,2997,2999,3005],{"type":50,"value":2971},"If the user will view the VST video wall through a browser on a different network than the deploy host (cloud VM, corp VPN, ssh-tunnelled session), upstream firewall rules may block VST WebRTC (STUN to ",{"type":44,"tag":59,"props":2973,"children":2975},{"className":2974},[],[2976],{"type":50,"value":2977},"stun.l.google.com:19302",{"type":50,"value":2979},", plus random UDP for media). See ",{"type":44,"tag":79,"props":2981,"children":2982},{"href":1101},[2983],{"type":44,"tag":59,"props":2984,"children":2986},{"className":2985},[],[2987],{"type":50,"value":2988},"references\u002Fverify-and-view.md#browser-reachability",{"type":50,"value":2990}," for symptoms and workarounds. Also: some hosts block the AMC microservice's default port (TCP\u002F8010); if the user reports the AMC UI on ",{"type":44,"tag":59,"props":2992,"children":2994},{"className":2993},[],[2995],{"type":50,"value":2996},":5000",{"type":50,"value":2998}," works but its data calls fail, retry with a different ",{"type":44,"tag":59,"props":3000,"children":3002},{"className":3001},[],[3003],{"type":50,"value":3004},"VSS_AUTO_CALIBRATION_PORT",{"type":50,"value":123},{"type":44,"tag":45,"props":3007,"children":3009},{"id":3008},"troubleshooting",[3010],{"type":50,"value":3011},"Troubleshooting",{"type":44,"tag":53,"props":3013,"children":3014},{},[3015,3017,3025,3027,3036,3038,3047],{"type":50,"value":3016},"When any deploy, calibration, or verification step fails, stop and classify the failure before retrying. The quick checks below cover the most common MV3DT errors; use ",{"type":44,"tag":79,"props":3018,"children":3019},{"href":1120},[3020],{"type":44,"tag":59,"props":3021,"children":3023},{"className":3022},[],[3024],{"type":50,"value":1120},{"type":50,"value":3026}," for full diagnostic commands and fixes, ",{"type":44,"tag":79,"props":3028,"children":3030},{"href":3029},"..\u002Fvss-generate-video-calibration\u002FSKILL.md",[3031],{"type":44,"tag":59,"props":3032,"children":3034},{"className":3033},[],[3035],{"type":50,"value":3029},{"type":50,"value":3037}," for AMC workflow failures, and ",{"type":44,"tag":79,"props":3039,"children":3041},{"href":3040},"..\u002Fvss-deploy-profile\u002Freferences\u002Fwarehouse-debug.md",[3042],{"type":44,"tag":59,"props":3043,"children":3045},{"className":3044},[],[3046],{"type":50,"value":3040},{"type":50,"value":3048}," for broader warehouse-stack issues.",{"type":44,"tag":238,"props":3050,"children":3051},{},[3052,3073],{"type":44,"tag":242,"props":3053,"children":3054},{},[3055],{"type":44,"tag":246,"props":3056,"children":3057},{},[3058,3063,3068],{"type":44,"tag":250,"props":3059,"children":3060},{},[3061],{"type":50,"value":3062},"Symptom",{"type":44,"tag":250,"props":3064,"children":3065},{},[3066],{"type":50,"value":3067},"Likely cause",{"type":44,"tag":250,"props":3069,"children":3070},{},[3071],{"type":50,"value":3072},"First check or fix",{"type":44,"tag":275,"props":3074,"children":3075},{},[3076,3162,3219,3288,3326,3382,3436],{"type":44,"tag":246,"props":3077,"children":3078},{},[3079,3097,3118],{"type":44,"tag":282,"props":3080,"children":3081},{},[3082,3087,3089,3095],{"type":44,"tag":59,"props":3083,"children":3085},{"className":3084},[],[3086],{"type":50,"value":161},{"type":50,"value":3088}," is unhealthy or ",{"type":44,"tag":59,"props":3090,"children":3092},{"className":3091},[],[3093],{"type":50,"value":3094},"\u002Ftmp\u002Ffusion_ready",{"type":50,"value":3096}," is missing",{"type":44,"tag":282,"props":3098,"children":3099},{},[3100,3102,3108,3110,3116],{"type":50,"value":3101},"Broker not ready, ",{"type":44,"tag":59,"props":3103,"children":3105},{"className":3104},[],[3106],{"type":50,"value":3107},"MAX_EXPECTED_SENSORS",{"type":50,"value":3109}," mismatch, or ",{"type":44,"tag":59,"props":3111,"children":3113},{"className":3112},[],[3114],{"type":50,"value":3115},"STREAM_TYPE",{"type":50,"value":3117}," mismatch",{"type":44,"tag":282,"props":3119,"children":3120},{},[3121,3123,3129,3131,3137,3139,3144,3145,3150,3152,3160],{"type":50,"value":3122},"Check ",{"type":44,"tag":59,"props":3124,"children":3126},{"className":3125},[],[3127],{"type":50,"value":3128},"broker-health-check",{"type":50,"value":3130},", ",{"type":44,"tag":59,"props":3132,"children":3134},{"className":3133},[],[3135],{"type":50,"value":3136},"docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion",{"type":50,"value":3138},", and ",{"type":44,"tag":59,"props":3140,"children":3142},{"className":3141},[],[3143],{"type":50,"value":1702},{"type":50,"value":1704},{"type":44,"tag":59,"props":3146,"children":3148},{"className":3147},[],[3149],{"type":50,"value":1710},{"type":50,"value":3151},"; then re-run ",{"type":44,"tag":79,"props":3153,"children":3154},{"href":950},[3155],{"type":44,"tag":59,"props":3156,"children":3158},{"className":3157},[],[3159],{"type":50,"value":950},{"type":50,"value":3161}," if stream counts differ",{"type":44,"tag":246,"props":3163,"children":3164},{},[3165,3178,3183],{"type":44,"tag":282,"props":3166,"children":3167},{},[3168,3170,3176],{"type":50,"value":3169},"Perception shows ",{"type":44,"tag":59,"props":3171,"children":3173},{"className":3172},[],[3174],{"type":50,"value":3175},"Active sources : 0",{"type":50,"value":3177},", no FPS, or fewer cameras than expected",{"type":44,"tag":282,"props":3179,"children":3180},{},[3181],{"type":50,"value":3182},"Stale VST sensor state, wrong dataset slug, missing calibration, or per-GPU stream cap",{"type":44,"tag":282,"props":3184,"children":3185},{},[3186,3188,3193,3194,3200,3201,3207,3209,3217],{"type":50,"value":3187},"Verify ",{"type":44,"tag":59,"props":3189,"children":3191},{"className":3190},[],[3192],{"type":50,"value":580},{"type":50,"value":3130},{"type":44,"tag":59,"props":3195,"children":3197},{"className":3196},[],[3198],{"type":50,"value":3199},"NUM_STREAMS",{"type":50,"value":3130},{"type":44,"tag":59,"props":3202,"children":3204},{"className":3203},[],[3205],{"type":50,"value":3206},"camInfo\u002F",{"type":50,"value":3208},", and the VST sensor list; if old sensors remain, follow ",{"type":44,"tag":79,"props":3210,"children":3211},{"href":1130},[3212],{"type":44,"tag":59,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":50,"value":1130},{"type":50,"value":3218}," before redeploying",{"type":44,"tag":246,"props":3220,"children":3221},{},[3222,3240,3273],{"type":44,"tag":282,"props":3223,"children":3224},{},[3225,3230,3232,3238],{"type":44,"tag":59,"props":3226,"children":3228},{"className":3227},[],[3229],{"type":50,"value":153},{"type":50,"value":3231}," exits with ",{"type":44,"tag":59,"props":3233,"children":3235},{"className":3234},[],[3236],{"type":50,"value":3237},"MqttCommunicator",{"type":50,"value":3239}," \"invalid node\" or tracker submit failures",{"type":44,"tag":282,"props":3241,"children":3242},{},[3243,3245,3250,3251,3256,3258,3264,3265,3271],{"type":50,"value":3244},"Camera names in videos, ",{"type":44,"tag":59,"props":3246,"children":3248},{"className":3247},[],[3249],{"type":50,"value":793},{"type":50,"value":3138},{"type":44,"tag":59,"props":3252,"children":3254},{"className":3253},[],[3255],{"type":50,"value":3206},{"type":50,"value":3257}," do not match the ",{"type":44,"tag":59,"props":3259,"children":3261},{"className":3260},[],[3262],{"type":50,"value":3263},"Camera",{"type":50,"value":3130},{"type":44,"tag":59,"props":3266,"children":3268},{"className":3267},[],[3269],{"type":50,"value":3270},"Camera_01",{"type":50,"value":3272},", ... convention",{"type":44,"tag":282,"props":3274,"children":3275},{},[3276,3278,3286],{"type":50,"value":3277},"Normalize all camera names together with ",{"type":44,"tag":79,"props":3279,"children":3280},{"href":950},[3281],{"type":44,"tag":59,"props":3282,"children":3284},{"className":3283},[],[3285],{"type":50,"value":950},{"type":50,"value":3287}," Step 0, then clear stale VST state and redeploy",{"type":44,"tag":246,"props":3289,"children":3290},{},[3291,3296,3301],{"type":44,"tag":282,"props":3292,"children":3293},{},[3294],{"type":50,"value":3295},"AMC project creation, upload, calibration, or MV3DT export fails",{"type":44,"tag":282,"props":3297,"children":3298},{},[3299],{"type":50,"value":3300},"AutoMagicCalib service\u002FAPI issue outside this MV3DT deploy path",{"type":44,"tag":282,"props":3302,"children":3303},{},[3304,3306,3314,3316,3324],{"type":50,"value":3305},"Use ",{"type":44,"tag":79,"props":3307,"children":3308},{"href":3029},[3309],{"type":44,"tag":59,"props":3310,"children":3312},{"className":3311},[],[3313],{"type":50,"value":3029},{"type":50,"value":3315}," to deploy\u002Fdebug AMC, then return to ",{"type":44,"tag":79,"props":3317,"children":3318},{"href":988},[3319],{"type":44,"tag":59,"props":3320,"children":3322},{"className":3321},[],[3323],{"type":50,"value":988},{"type":50,"value":3325}," after export succeeds",{"type":44,"tag":246,"props":3327,"children":3328},{},[3329,3340,3367],{"type":44,"tag":282,"props":3330,"children":3331},{},[3332,3338],{"type":44,"tag":59,"props":3333,"children":3335},{"className":3334},[],[3336],{"type":50,"value":3337},"vss-behavior-analytics-mv3dt",{"type":50,"value":3339}," restarts with calibration schema validation errors",{"type":44,"tag":282,"props":3341,"children":3342},{},[3343,3345,3351,3352,3358,3359,3365],{"type":50,"value":3344},"AMC export has empty ",{"type":44,"tag":59,"props":3346,"children":3348},{"className":3347},[],[3349],{"type":50,"value":3350},"group",{"type":50,"value":3130},{"type":44,"tag":59,"props":3353,"children":3355},{"className":3354},[],[3356],{"type":50,"value":3357},"region",{"type":50,"value":1174},{"type":44,"tag":59,"props":3360,"children":3362},{"className":3361},[],[3363],{"type":50,"value":3364},"place",{"type":50,"value":3366}," fields",{"type":44,"tag":282,"props":3368,"children":3369},{},[3370,3372,3380],{"type":50,"value":3371},"Apply the placeholder patch in ",{"type":44,"tag":79,"props":3373,"children":3374},{"href":988},[3375],{"type":44,"tag":59,"props":3376,"children":3378},{"className":3377},[],[3379],{"type":50,"value":988},{"type":50,"value":3381}," Step 4a, or populate those fields in AMC before export",{"type":44,"tag":246,"props":3383,"children":3384},{},[3385,3403,3421],{"type":44,"tag":282,"props":3386,"children":3387},{},[3388,3390,3395,3397],{"type":50,"value":3389},"Extended profile has no overlays and ",{"type":44,"tag":59,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":50,"value":234},{"type":50,"value":3396}," logs ",{"type":44,"tag":59,"props":3398,"children":3400},{"className":3399},[],[3401],{"type":50,"value":3402},"imageMetadata.json not found",{"type":44,"tag":282,"props":3404,"children":3405},{},[3406,3408,3414,3415],{"type":50,"value":3407},"AMC MV3DT export did not produce ",{"type":44,"tag":59,"props":3409,"children":3411},{"className":3410},[],[3412],{"type":50,"value":3413},"images\u002FTop.png",{"type":50,"value":535},{"type":44,"tag":59,"props":3416,"children":3418},{"className":3417},[],[3419],{"type":50,"value":3420},"images\u002FimageMetadata.json",{"type":44,"tag":282,"props":3422,"children":3423},{},[3424,3426,3434],{"type":50,"value":3425},"Synthesize both files with ",{"type":44,"tag":79,"props":3427,"children":3428},{"href":988},[3429],{"type":44,"tag":59,"props":3430,"children":3432},{"className":3431},[],[3433],{"type":50,"value":988},{"type":50,"value":3435}," Step 4b, then restart the one-shot importer",{"type":44,"tag":246,"props":3437,"children":3438},{},[3439,3444,3463],{"type":44,"tag":282,"props":3440,"children":3441},{},[3442],{"type":50,"value":3443},"Image pulls, model load, or first-start engine build fail",{"type":44,"tag":282,"props":3445,"children":3446},{},[3447,3449,3454,3456,3461],{"type":50,"value":3448},"Missing \u002F expired ",{"type":44,"tag":59,"props":3450,"children":3452},{"className":3451},[],[3453],{"type":50,"value":1290},{"type":50,"value":3455},", incorrect ",{"type":44,"tag":59,"props":3457,"children":3459},{"className":3458},[],[3460],{"type":50,"value":1727},{"type":50,"value":3462},", missing BodyPose3DNet files, or GPU OOM",{"type":44,"tag":282,"props":3464,"children":3465},{},[3466,3468,3474,3476,3481,3483,3489],{"type":50,"value":3467},"Re-check NGC auth, confirm ",{"type":44,"tag":59,"props":3469,"children":3471},{"className":3470},[],[3472],{"type":50,"value":3473},"${VSS_DATA_DIR}\u002Fmodels\u002Fmv3dt\u002FBodyPose3DNet\u002F",{"type":50,"value":3475},", tail ",{"type":44,"tag":59,"props":3477,"children":3479},{"className":3478},[],[3480],{"type":50,"value":153},{"type":50,"value":3482}," logs, and free or change ",{"type":44,"tag":59,"props":3484,"children":3486},{"className":3485},[],[3487],{"type":50,"value":3488},"RT_CV_DEVICE_ID",{"type":50,"value":3490}," if the GPU is exhausted",{"type":44,"tag":53,"props":3492,"children":3493},{},[3494,3496,3502,3504,3509,3511,3516,3518,3524],{"type":50,"value":3495},"Before destructive recovery (",{"type":44,"tag":59,"props":3497,"children":3499},{"className":3498},[],[3500],{"type":50,"value":3501},"docker compose down -v",{"type":50,"value":3503},", clearing ",{"type":44,"tag":59,"props":3505,"children":3507},{"className":3506},[],[3508],{"type":50,"value":2810},{"type":50,"value":3510},", deleting VST sensor state, or changing host ACLs), explain the impact and get user confirmation. Capture the failing command, relevant ",{"type":44,"tag":59,"props":3512,"children":3514},{"className":3513},[],[3515],{"type":50,"value":864},{"type":50,"value":3517}," values, ",{"type":44,"tag":59,"props":3519,"children":3521},{"className":3520},[],[3522],{"type":50,"value":3523},"docker compose ps",{"type":50,"value":3525},", and the last container logs before making state-reset changes.",{"type":44,"tag":45,"props":3527,"children":3529},{"id":3528},"how-it-fits-together",[3530],{"type":50,"value":3531},"How it fits together",{"type":44,"tag":544,"props":3533,"children":3537},{"className":3534,"code":3536,"language":50},[3535],"language-text","SKILL.md (this file — Q0\u002FQ1\u002FQ2\u002FQ3 routing)\n  └─ if cal missing ─> calibration-workflow.md\n  │                     └─ chains to vss-generate-video-calibration (deploy + drive API)\n  │                     └─ fetches \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc (plus vggt when refinement is enabled)\n  │                     └─ lands calibration files at warehouse-mv3dt-app\u002Fcalibration\u002Fsample-data\u002F\u003Cslug>\u002F\n  ├─> configure-cameras.md (camera-name normalization, NUM_STREAMS sync, VST sensor trim)\n  └─> deploy-rtvi-cv-3d-stack.md (compose up with bp_wh_kafka_mv3dt + extended\u002Fminimal)\n        └─> verify-and-view.md (FPS, fusion_ready, mdx-bev, VST video wall + WebRTC checks)\n",[3538],{"type":44,"tag":59,"props":3539,"children":3540},{"__ignoreMap":548},[3541],{"type":50,"value":3536},{"type":44,"tag":45,"props":3543,"children":3545},{"id":3544},"related-skills",[3546],{"type":50,"value":3547},"Related Skills",{"type":44,"tag":102,"props":3549,"children":3550},{},[3551,3581,3603],{"type":44,"tag":106,"props":3552,"children":3553},{},[3554,3563,3565,3571,3573,3579],{"type":44,"tag":79,"props":3555,"children":3556},{"href":3029},[3557],{"type":44,"tag":59,"props":3558,"children":3560},{"className":3559},[],[3561],{"type":50,"value":3562},"vss-generate-video-calibration",{"type":50,"value":3564}," — the AMC skill. Owns AMC deployment, RTSP capture, calibration API, and the ",{"type":44,"tag":59,"props":3566,"children":3568},{"className":3567},[],[3569],{"type":50,"value":3570},"\u002Fv1\u002Fresult\u002F...\u002Fmv3dt_result",{"type":50,"value":3572}," export hook this skill consumes. ",{"type":44,"tag":59,"props":3574,"children":3576},{"className":3575},[],[3577],{"type":50,"value":3578},"calibration-workflow.md",{"type":50,"value":3580}," chains into it.",{"type":44,"tag":106,"props":3582,"children":3583},{},[3584,3594,3596,3601],{"type":44,"tag":79,"props":3585,"children":3587},{"href":3586},"..\u002Fvss-deploy-profile\u002FSKILL.md",[3588],{"type":44,"tag":59,"props":3589,"children":3591},{"className":3590},[],[3592],{"type":50,"value":3593},"vss-deploy-profile",{"type":50,"value":3595}," — cross-profile umbrella. Use that instead when the user wants the ",{"type":44,"tag":188,"props":3597,"children":3598},{},[3599],{"type":50,"value":3600},"full warehouse blueprint",{"type":50,"value":3602}," (with agents \u002F LLM \u002F VLM), not just MV3DT.",{"type":44,"tag":106,"props":3604,"children":3605},{},[3606,3616,3618,3623],{"type":44,"tag":79,"props":3607,"children":3609},{"href":3608},"..\u002Fvss-manage-video-io-storage\u002FSKILL.md",[3610],{"type":44,"tag":59,"props":3611,"children":3613},{"className":3612},[],[3614],{"type":50,"value":3615},"vss-manage-video-io-storage",{"type":50,"value":3617}," — VIOS \u002F VST API skill. Useful for the VST video wall (overlay viz) and for sensor management referenced in ",{"type":44,"tag":59,"props":3619,"children":3621},{"className":3620},[],[3622],{"type":50,"value":785},{"type":50,"value":123},{"type":44,"tag":53,"props":3625,"children":3626},{},[3627,3629,3637,3639,3644],{"type":50,"value":3628},"The repo's authoritative warehouse-blueprint reference at ",{"type":44,"tag":79,"props":3630,"children":3631},{"href":1158},[3632],{"type":44,"tag":59,"props":3633,"children":3635},{"className":3634},[],[3636],{"type":50,"value":1158},{"type":50,"value":3638}," covers 2D \u002F 3D \u002F MV3DT inside the full warehouse stack — this skill is the ",{"type":44,"tag":188,"props":3640,"children":3641},{},[3642],{"type":50,"value":3643},"MV3DT-only",{"type":50,"value":3645}," companion that trims the agent \u002F LLM \u002F VLM layer.",{"type":44,"tag":3647,"props":3648,"children":3649},"style",{},[3650],{"type":50,"value":3651},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3653,"total":3755},[3654,3671,3683,3697,3709,3726,3741],{"slug":3655,"name":3655,"fn":3656,"description":3657,"org":3658,"tags":3659,"stars":23,"repoUrl":24,"updatedAt":3670},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3660,3663,3666,3667],{"name":3661,"slug":3662,"type":15},"Data Analysis","data-analysis",{"name":3664,"slug":3665,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":3668,"slug":3669,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":3672,"name":3672,"fn":3673,"description":3674,"org":3675,"tags":3676,"stars":23,"repoUrl":24,"updatedAt":3682},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3677,3678,3681],{"name":13,"slug":14,"type":15},{"name":3679,"slug":3680,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":3684,"name":3684,"fn":3685,"description":3686,"org":3687,"tags":3688,"stars":23,"repoUrl":24,"updatedAt":3696},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3689,3692,3693],{"name":3690,"slug":3691,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":3694,"slug":3695,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":3698,"name":3698,"fn":3699,"description":3700,"org":3701,"tags":3702,"stars":23,"repoUrl":24,"updatedAt":3708},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3703,3704,3705],{"name":3661,"slug":3662,"type":15},{"name":9,"slug":8,"type":15},{"name":3706,"slug":3707,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":3710,"name":3710,"fn":3711,"description":3712,"org":3713,"tags":3714,"stars":23,"repoUrl":24,"updatedAt":3725},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3715,3718,3721,3722],{"name":3716,"slug":3717,"type":15},"Automation","automation",{"name":3719,"slug":3720,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":3723,"slug":3724,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":3727,"name":3727,"fn":3728,"description":3729,"org":3730,"tags":3731,"stars":23,"repoUrl":24,"updatedAt":3740},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3732,3733,3736,3737],{"name":13,"slug":14,"type":15},{"name":3734,"slug":3735,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":3738,"slug":3739,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":3742,"name":3742,"fn":3743,"description":3744,"org":3745,"tags":3746,"stars":23,"repoUrl":24,"updatedAt":3754},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3747,3748,3751],{"name":9,"slug":8,"type":15},{"name":3749,"slug":3750,"type":15},"Quantum Computing","quantum-computing",{"name":3752,"slug":3753,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":3757,"total":3908},[3758,3776,3792,3803,3815,3829,3842,3856,3867,3876,3890,3899],{"slug":3759,"name":3759,"fn":3760,"description":3761,"org":3762,"tags":3763,"stars":3773,"repoUrl":3774,"updatedAt":3775},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3764,3767,3770],{"name":3765,"slug":3766,"type":15},"Documentation","documentation",{"name":3768,"slug":3769,"type":15},"MCP","mcp",{"name":3771,"slug":3772,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":3777,"name":3777,"fn":3778,"description":3779,"org":3780,"tags":3781,"stars":3789,"repoUrl":3790,"updatedAt":3791},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3782,3785,3786],{"name":3783,"slug":3784,"type":15},"Containers","containers",{"name":13,"slug":14,"type":15},{"name":3787,"slug":3788,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":3793,"name":3793,"fn":3794,"description":3795,"org":3796,"tags":3797,"stars":3789,"repoUrl":3790,"updatedAt":3802},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3798,3801],{"name":3799,"slug":3800,"type":15},"CI\u002FCD","ci-cd",{"name":13,"slug":14,"type":15},"2026-07-14T05:25:59.97109",{"slug":3804,"name":3804,"fn":3805,"description":3806,"org":3807,"tags":3808,"stars":3789,"repoUrl":3790,"updatedAt":3814},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3809,3810,3811],{"name":3799,"slug":3800,"type":15},{"name":13,"slug":14,"type":15},{"name":3812,"slug":3813,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":3816,"name":3816,"fn":3817,"description":3818,"org":3819,"tags":3820,"stars":3789,"repoUrl":3790,"updatedAt":3828},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3821,3824,3825],{"name":3822,"slug":3823,"type":15},"Debugging","debugging",{"name":3812,"slug":3813,"type":15},{"name":3826,"slug":3827,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":3830,"name":3830,"fn":3831,"description":3832,"org":3833,"tags":3834,"stars":3789,"repoUrl":3790,"updatedAt":3841},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3835,3838],{"name":3836,"slug":3837,"type":15},"Best Practices","best-practices",{"name":3839,"slug":3840,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":3843,"name":3843,"fn":3844,"description":3845,"org":3846,"tags":3847,"stars":3789,"repoUrl":3790,"updatedAt":3855},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3848,3851,3854],{"name":3849,"slug":3850,"type":15},"Machine Learning","machine-learning",{"name":3852,"slug":3853,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":3857,"name":3857,"fn":3858,"description":3859,"org":3860,"tags":3861,"stars":3789,"repoUrl":3790,"updatedAt":3866},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3862,3865],{"name":3863,"slug":3864,"type":15},"QA","qa",{"name":3706,"slug":3707,"type":15},"2026-07-14T05:25:53.673039",{"slug":3868,"name":3868,"fn":3869,"description":3870,"org":3871,"tags":3872,"stars":3789,"repoUrl":3790,"updatedAt":3875},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3873,3874],{"name":13,"slug":14,"type":15},{"name":3679,"slug":3680,"type":15},"2026-07-14T05:25:49.362534",{"slug":3877,"name":3877,"fn":3878,"description":3879,"org":3880,"tags":3881,"stars":3789,"repoUrl":3790,"updatedAt":3889},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3882,3885,3886],{"name":3883,"slug":3884,"type":15},"Code Review","code-review",{"name":3812,"slug":3813,"type":15},{"name":3887,"slug":3888,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":3891,"name":3891,"fn":3892,"description":3893,"org":3894,"tags":3895,"stars":3789,"repoUrl":3790,"updatedAt":3898},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3896,3897],{"name":3863,"slug":3864,"type":15},{"name":3706,"slug":3707,"type":15},"2026-07-14T05:25:54.928983",{"slug":3900,"name":3900,"fn":3901,"description":3902,"org":3903,"tags":3904,"stars":3789,"repoUrl":3790,"updatedAt":3907},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3905,3906],{"name":3716,"slug":3717,"type":15},{"name":3799,"slug":3800,"type":15},"2026-07-30T05:29:03.275638",496]