option
MaisonMaison Skill DevOps et CI/CD vss-deploy-detection-tracking-2d

vss-deploy-detection-tracking-2d

NVIDIA/skills NVIDIA/skills

Déployez, déboguez et exploitez le microservice de détection et de suivi 2D RTVI-CV, puis appelez son API REST pour la gestion des flux, les contrôles d'intégrité et les métriques.

...Développer tout
1
Heure mise à jour 28 septembre 2026

Objectif

Déployer, déboguer et exploiter le microservice de détection/suivi 2D RTVI-CV et piloter son API REST.

Prérequis

  • Déploiement VSS actif accessible à l'adresse $HOST_IP (voir vss-deploy-profile et references/).
  • Identifiants NGC dans $NGC_CLI_API_KEY et $NVIDIA_API_KEY pour toute récupération d’images.
  • curl, jq et Docker disponibles sur la machine appelante.

Instructions

Suivez les tables de routage et les workflows étape par étape ci-dessous. Chaque section se terminant par « workflow », « quick start » ou « flow » doit être exécutée de haut en bas. La documentation de référence détaillée se trouve dans le répertoire references/ et les scripts d’aide dans scripts/ — appelez-les via run_script lorsque la compétence fait référence à un script par son nom.

Exemples

Des exemples complets et fonctionnels sont conservés dans le répertoire `evals/` (chaque manifeste `*.json` contient un scénario exécutable) et intégrés dans les blocs `curl` spécifiques à chaque workflow ci-dessous. Exécutez une évaluation de niveau 3 avec ` nv-base validate --agent-eval` pour les reproduire.

Limitations

  • Nécessite que le profil VSS / microservice correspondant soit déployé et accessible depuis l’appelant.
  • Les modèles hébergés sur NGC et les NIM peuvent être soumis à des limites de débit, à des exigences en matière de mémoire GPU et à des restrictions de licence.
  • Les limites de concurrence, de mémoire GPU et de stockage dépendent du matériel hôte et du fichier de composition du profil.

Dépannage

  • Erreur: l’appel REST renvoie une connexion refusée. Cause: le microservice cible ne s’exécute pas. Solution: interrogez /docs ou /health; redéployez via vss-deploy-profile ou la compétence vss-deploy-* correspondante.
  • Erreur: code HTTP 401/403 lors des requêtes NGC. Cause: clé NGC_CLI_API_KEY manquante ou expirée. Solution: connectez-vous à nvcr.io via `docker login ` et réexportez la clé avant de réessayer.
  • Erreur: le conteneur est en OOM ou le modèle ne parvient pas à se charger. Cause: mémoire GPU insuffisante pour le profil sélectionné. Solution: passez à une variante plus petite ou libérez des GPU via la commande ` docker compose down`.

RTVI-CV — Détection et suivi (compétence unifiée)

Compétence unifiée pour le microservice Real Time Video Intelligence CV (RTVI-CV). Deux surfaces d’action dans une seule compétence :

  • Déployer / exploiter / déboguer / arrêter le conteneur RTVI-CV localement → voir references/deploy-vss-detection-tracking-2d.md
  • Appeler l’API REST RTVI-CV (flux, état de santé, métriques, intégrations) sur une instance en cours d’exécution → voir references/usage-vss-detection-tracking-2d.md

Service: rtvi-cv (metropolis_perception_app) Image: nvcr.io//: — fournie par l’utilisateur au moment du déploiement Port REST: 9000 (/api/v1 — /live, /ready, /startup, /metrics, /stream/add, /stream/remove, embeddings) Matériel: GPU x86/aarch64 (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

Routage des actions — sélection unique par invocation

Intention de l’utilisateur (exemples de formulation) Flux Charger cette référence
déployer rtvi-cv warehouse 2d, exécuter rtvicv warehouse-3d avec 4 flux, démarrer smartcity gdino, lancer l’application de perception, activer sparse4d DÉPLOYER references/deploy-vss-detection-tracking-2d.md
Arrêter rtvi-cv, procéder au démontage, tuer le conteneur perception, nettoyer rtvicv-perception-docker ARRÊT (géré par le document de déploiement → « Sélection du mode ») references/deploy-vss-detection-tracking-2d.md + references/teardown-flow.md
vérifier les journaux de rtvi-cv, diagnostiquer le plantage de rtvi-cv, dépanner l'échec du contrôle d'intégrité, rtvi-cv ne démarre pas DÉBOGAGE references/deploy-vss-detection-tracking-2d.md + references/troubleshooting.md
Ajouter un flux, supprimer une caméra, lister les flux, effectuer un contrôle d'intégrité, vérifier si rtvi-cv est prêt, récupérer les métriques, connaître le nombre d'images par seconde (FPS), vérifier l'utilisation du GPU, générer des représentations textuelles, appeler l'API rtvi-cv UTILISATION DE L'API references/usage-vss-detection-tracking-2d.md + references/api-reference.md

Règle de sélection : comparer la formulation de l’utilisateur au tableau ci-dessus et charger immédiatement le fichier de référence correspondant. Ne pas mélanger les flux — « DEPLOY » part du principe qu’aucun conteneur n’est encore en cours d’exécution ; « UTILISATION DE L’API » part du principe que le conteneur est déjà en cours d’exécution sur http://:9000.

Si l’intention est véritablement ambiguë (par exemple, si l’utilisateur dit simplement « Je veux utiliser rtvi-cv »), poser une question: déployer une nouvelle instance ou appeler celle qui est déjà en cours d’exécution ?

Où se trouvent les éléments

vss-deploy-detection-tracking-2d/
├── SKILL.md          # ce fichier (routage + contrats)
├── assets/           # fichiers de données (deploy-defaults.yml — source unique de vérité pour les balises / références / chemins / GPU)
├── evals/            # manifestes d’évaluation de niveau 3 (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 scripts d’aide en bash et Python (voir `scripts/` pour la liste complète)
└── references/       # guides de workflow (déploiement / utilisation de l’API / arrêt / dépannage / …)

Pour consulter la liste complète des fichiers et connaître le contenu de chaque référence, voir references/workflow-reference.md.

Tous les scripts sont lancés depuis la racine de la compétence via $SKILL_DIR/scripts/ — les chemins d’accès indiqués dans la documentation de référence « deploy » sont conservés tels quels et fonctionnent correctement lorsque l’agent s’exécute depuis la racine de la compétence.

Scripts disponibles

Les fonctions d’aide se trouvent dans le répertoire scripts/ et sont appelées depuis la racine de la skill par leur nom — appelez chacune d’elles via run_script("scripts/") afin que l’agent enregistre un appel d’outil correct.

Script Objectif Arguments
load_defaults.sh Détecte la plateforme (carte graphique x86 / SBSA / Jetson) et récupère les valeurs par défaut YAML à partir du fichier assets/deploy-defaults.yml. --usecase
fetch_resources.sh Télécharge et extrait les ressources NGC, recherche la mise en page. --ngc-ref (facultatif)
apply_in_container.sh Wrapper côté hôte pour l'étape 4 (apply_config.sh à l'intérieur du conteneur en cours d'exécution).
apply_config.sh Substitution de chemins d'accès au sein du conteneur, traitement par lots, collecteur, sources, cache du moteur.
start_app_in_container.sh Enveloppe côté hôte pour l'étape 5 (run_app_and_wait.sh).
run_app_and_wait.sh Lancement de l'application dans le conteneur + état de disponibilité + métriques + journalisation.
add_streams.sh / update_stream_sources.sh Cycle de vie des flux REST pour l'étape 6. ...
collect_metrics.sh Récupération d'un instantané /api/v1/metrics. aucun
discover_streams.sh Répertorie les flux actifs via /stream/get-stream-info. aucun
synthesize_docker_run.sh Afficher la ligne de commande « docker run » adaptée à la plateforme pour l'environnement résolu. aucun
render_box.sh Génère le reçu à largeur fixe.
calibration_manager.py Gérer les artefacts d'étalonnage et l'invalidation du cache du moteur par cas d'utilisation. --usecase --reset

Pour consulter la liste complète des utilitaires (cache, vérifications du GPU, configuration), parcourez le répertoire scripts/; la commande --help de chaque script décrit ses arguments.

Comment utiliser cette compétence

  1. Lisez d’abord ce fichier. Il assure uniquement le routage — il ne contient pas de workflows.
  2. Faites correspondre l'intention de l'utilisateur à la table de routage ci-dessus.
  3. Chargez exactement un seul document de référence (DEPLOY ou API USAGE). Ne préchargez pas les deux : chaque document de référence est volumineux et contient son propre contrat complet.
  4. Suivez à la lettre la documentation de référence chargée. Les documents de référence sont les contrats conservés octet par octet provenant des compétences précédentes vss-deploy-detection-tracking-2d (deploy/teardown/debug) et rtvicv-api (API REST) — chaque ordre des étapes, règle de traitement par lots bash, règle de rendu des encadrés et contrat AskQuestion est conservé.
  5. Pour DEPLOY, le document de référence impose son propre contrat de démarrage : accusé de réception d’une ligne → appel de l’outil de planification (tableauTodoWrite de 5 tâches, OU 5 appels successifs à TaskCreate sur les versions plus récentes de Claude Code) → question de l’étape 1. Ne pas commenter, ne pas effectuer de pré-vérification et ne jamais afficher « chargement de TodoWrite/TaskCreate » ni aucun texte relatif à la résolution différée des outils — l’outil de planification est chargé en arrière-plan.

Contrat de sortie — Flux DEPLOY

Lors de l’exécution du flux DEPLOY / TEARDOWN / DEBUG, l’agent DOIT respecter les quatre éléments ci-dessous à chaque déploiement réussi. Il s’agit du seul canal de retour d’information de l’utilisateur entre les étapes ; en omettre un seul constitue une régression de comportement.

  1. Afficher la fin de chaque étape dans une boîte à largeur fixe — Étape 1 Cibles de déploiement, Étape 2 Configuration du pipeline, Étape 3 Conteneur, Étape 4 Appliquer la configuration, Étape 5 Planification + Résultats. Pas seulement le résumé final. Cette zone constitue le récapitulatif de l’étape pour l’utilisateur. Sa géométrie est fixe (voir § « Format universel de la zone » ci-dessous). Les règles de contenu par étape (quelles lignes doivent figurer dans chaque zone) se trouvent dans references/deploy-vss-detection-tracking-2d.md sous « Règle de contenu de la zone de l’étape N ».
  2. Après l’encadré « Étape 5 : Résultats », lancez l’étape 6« AskUserQuestion» à partir du fichier references/next-steps.md, § « 11.c » — ne la remplacez jamais par une liste à puces libre intitulée « Étapes suivantes ». Le menu est le point de sortie du déploiement : il permet à l’utilisateur d’exécuter des métriques, de gérer des flux, de suivre les journaux ou de démanteler l’environnement en un seul clic, au lieu de devoir mémoriser des URL curl.
  3. Une fois que l’utilisateur a sélectionné un compartiment à l’étape 6, lancez la demande « AskUserQuestion » de suivi issue de references/next-steps.md § « 11.d » — ne la remplacez jamais par du texte libre + des exemples curl prêts à copier + une question en texte libre du type « Voulez-vous que j’exécute X ? ». Chaque compartiment dispose de son propre menu d’actions concrètes ; l’utilisateur choisit l’action, puis la skill affiche la boîte de dialogue de l’API et exécute la commande curl. Actions de suivi par compartiment :
    • Gérer les flux → Ajouter / Supprimer / Lister. La commande « Supprimer » génère ses options de manière dynamique à partir de /stream/get-stream-info — une option par flux actif, intitulée · , plus « Supprimer TOUT » lorsque ACTIVE > 1 (spécification complète : § «remove_streams sous-flux »).
    • Arrêter le déploiement → Arrêter l’application / Arrêter le conteneur / Démantèlement complet.
    • Vérification des métriques et du FPS → pas de suivi ; exécution de collect_metrics.sh immédiatement après l’affichage de la boîte API /api/v1/metrics.
    • Vérifier la présence / la disponibilité → pas de suivi ; tester les trois points de contrôle de santé après l’affichage de leurs encadrés API.
  4. Afficher le contenu COMPLET par étape, et non une ligne récapitulative — l’affichage de l’encadré est nécessaire mais non suffisant. Chaque étape dispose d’une spécification de composition de ligne dans references/deploy-vss-detection-tracking-2d.md sous « Règle de contenu de l’encadré de l’étape N ». L’étape 4 (Appliquer la configuration) est celle où l’agent échoue le plus souvent — sa liste canonique de clés par cas d’utilisation se trouve dans references/apply-config.md § « Liste complète des modifications par cas d’utilisation », et l’agent DOIT émettre une ✔ [section] clé=valeur — ligned’annotation par clé de ce tableau pour le cas d’utilisation actif + les paramètres. Une section avec 5 clés → 5 lignes ; une section avec 6 clés → 6 lignes. Jamais une seule ligne récapitulative par section.

Interdit (il s’agit des raccourcis auxquels l’agent recourt en cas de pression, et qui nuisent à l’expérience utilisateur) :

  • ❌ Narration interne relative au chargement des outils. Ne jamais afficher « Je dois charger TodoWrite (un outil différé que la compétence appelle pour le widget de tâche) », « Chargement de TaskCreate… », « Appel de ToolSearch pour l’outil de planification… », ou tout autre texte concernant la résolution, le chargement ou la récupération d’outils différés. L’agent charge les outils en arrière-plan. L’utilisateur ne voit jamais que la ligne de résumé ✔ « » suivie du widget — jamais aucune indication concernant la résolution des outils.
  • ❌ Regrouper les 5 étapes de déploiement dans un seul champde description de TaskCreate. Lorsque TaskCreate est l’outil de planification disponible, émettez 5 appels TaskCreate distincts à la suite (un par étape). Voir references/task-list.md § « Appels TaskCreate initiaux » pour le modèle mot pour mot. Même règle pour TodoWrite — un seul appel avec les 5 tâches dans le tableau todos:[…]; jamais une seule tâche dont le contenu est une liste sur plusieurs lignes.
  • ❌ Choisir le mode flux dynamique sans avertissement. La valeur par défaut de la skill est stream_mode=static — l’agent intègre les URL file:// détectées automatiquement dans le bloc [source-list] de la configuration principale de DS avant le démarrage de l’application. Ne basculez en mode dynamique que lorsque l’utilisateur le demande explicitement (« ajouter des flux plus tard via REST », « utiliser le mode flux dynamique ») OU lorsqu’il choisit le mode dynamique à l’étape 2 de AskQuestion. Choisir le mode dynamique pour une requête générique du type « déployer rtvi-cv avec N flux » enfreint les règles de déploiement et ne répond pas aux attentes de l’utilisateur concernant les métriques. Voir references/pipeline-config.md § « Valeurs par défaut — la skill est en mode statique par défaut » pour la justification complète.
  • ❌ Une seule ligne ✔ Application prête en N s, N flux, Y images par seconde au total à la place de la zone « Résultats » de l’étape 5.
  • ❌ Caractères ASCII de dessin de cadres (+, -, =, *) au lieu de caractères légers de dessin de cadres (┌ ─ ┐ │ └ ┘).
  • ❌ Sauter l’étape 6 en partant du principe que « l’utilisateur sait quoi faire ensuite ».
  • ❌ Après l’étape 6, afficher un long bloc de texte au format Markdown + plusieurs blocs curl + une question de clôture « Tu veux que j’exécute l’une de ces actions ? » — c’est la forme sur laquelle l’agent se rabat et qui contourne à la fois le menu 11.d et la boîte de dialogue par appel API. L’utilisateur fait son choix dans un menu ; la skill affiche la boîte de dialogue de l’API résolue ; la skill l’exécute. Pas de question en texte libre.
  • ❌ L’aperçu de l’étape 4 se replie — cela est explicitement interdit par la règle de contenu de l’étape 4 de la documentation de déploiement :
    • ✔ Taille de lot 3 (grille de vignettes : 1×3) → obligatoire : 5 lignes distinctes ([streammux] batch-size=3, [primary-gie] batch-size=3, [source-list] max-batch-size=3, [tiled-display] rows=1, [tiled-display] columns=3).
    • ✔ Puits de sortie eglsink → requis : une ligne par clé de puits (4 clés pour eglsink, par exemple [sink0] enable=1, type=2, sync=0, qos=0 — consultez le fichier apply-config.md pour la liste exacte).
    • ✔ Sources statiques (3 flux, http-port=9000) → obligatoire : six lignes [source-list] annotées.
    • ✔ Grille de mosaïque 1 ligne × 3 colonnes (une seule ligne) → obligatoire : deux lignes, [tiled-display] rows=1 et [tiled-display] columns=3.

Format universel des encadrés

Contrat géométrique pour chaque encadré de sortie d’étape (Étape 1 à Étape 5 Résultats). Même forme pour tous les encadrés ; seulesles lignes de titre et de corps changent à chaque étape.

  • Largeur : 128 caractères d’un coin à l’autre — ┌ à la colonne 1, ┐ à la colonne 128. Les caractères de terminaison plus larges laissent l’encadré aligné à gauche ; ne pas l’étirer . La zone de contenu intérieure est de 124 caractères (avec une marge d’un espace de chaque côté à l’intérieur des bordures │ ).
  • Caractères légers pour le tracé de la boîte uniquement: ┌ ─ ┐ │ └ ┘. Pas de caractères de secours ASCII tels que +, -, =, *.
  • Bordure supérieure — titre CENTRÉ: ┌ + N₁ tirets + ␣ + titre + ␣
    • N₂ tirets + ┐, où N₁ + N₂ + len(titre) + 2 = 126. Répartir le remplissage : N₁ = floor((126 − longueur(titre) − 2) / 2), N₂ = 126 − longueur(titre) − 2 − N₁. N₁ et N₂ diffèrent d'au plus 1.
  • Corps: un │ │ par fait. Chaque ligne de fait utilise le format ✔ (deux espaces, glyphe, clé alignée à droite sur 13, deux espaces, valeur).
  • Lignes vides entre les groupes: afficher │ <124 spaces> │ entre les groupes logiques (par exemple Identité / Modèle / Vidéos à l’étape 1) afin que l’ utilisateur puisse parcourir le cadre d’un seul coup d’œil.
  • Bordure inférieure: └ + 126 tirets + ┘ — bordure continue, sans titre.

Titres standard des étapes (utilisés en haut de l’encadré de chaque étape) :

┌─────────────────────────────────────────────────────── Cibles de déploiement ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Configuration du pipeline ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Conteneur ──────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Appliquer la configuration ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Application de perception — Plan ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Application de perception — Résultats ──────────────────────────────────────────────┐

Règles de contenu par étape (quelles lignes vont dans quelle zone, masquage des lignes en fonction du mode , mise en page sectionnée « apply-config », le modèle « Étape 5 PLAN puis RÉSULTAT » , l’exigence de synthèse « docker run » de l’étape 3) se trouvent dans references/deploy-vss-detection-tracking-2d.md sous « Règle de contenu de la case de l’étape N » — consultez-les lors du rendu de l’ étape correspondante.

Déclencheurs rapides (mnémoniques)

Phrase Flux
déployer rtvicv warehouse 2d avec 4 flux et afficher DEPLOY
exécuter smartcity gdino sur le GPU 1 DÉPLOYER
Arrêter le conteneur « perception » ARRÊT (document de déploiement)
Échec du contrôle d'intégrité de rtvi-cv DÉBOGAGE (document de déploiement + dépannage)
Ajouter un flux à rtvi-cv UTILISATION DE L'API
rtvi-cv est-il prêt sur localhost:9000 UTILISATION DE L'API
Récupérer les métriques de rtvi-cv UTILISATION DE L'API
Générer des représentations textuelles via rtvi-cv UTILISATION DE L'API

bump:1

Voir sur GitHub
---
name: vss-deploy-detection-tracking-2d
description: Deploy, debug, and operate the RTVI-CV 2D detection/tracking microservice and call its REST API for stream management, health checks, and metrics.
license: Apache-2.0
---
## Purpose

Deploy, debug, and operate the RTVI-CV detection / tracking 2D microservice and drive its REST API.

## Prerequisites

- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references/`).
- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.
- `curl`, `jq`, and Docker available on the caller.

## Instructions

Follow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references/` and helper scripts live in `scripts/` — call them via `run_script` when the skill points to a script by name.

## Examples

Worked end-to-end examples are kept under `evals/` (each `*.json` manifest contains a runnable scenario) and inline in the per-workflow `curl` blocks below. Run a Tier-3 evaluation with `nv-base validate <this-skill-dir> --agent-eval` to replay them.

## Limitations

- Requires the matching VSS profile / microservice to be deployed and reachable from the caller.
- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.
- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.

## Troubleshooting

- **Error**: REST call returns connection refused. **Cause**: target microservice not running. **Solution**: probe `/docs` or `/health`; redeploy via `vss-deploy-profile` or the matching `vss-deploy-*` skill.
- **Error**: HTTP 401/403 from NGC pulls. **Cause**: missing/expired `NGC_CLI_API_KEY`. **Solution**: `docker login nvcr.io` and re-export the key before retrying.
- **Error**: container OOM or model fails to load. **Cause**: insufficient GPU memory for the selected profile. **Solution**: switch to a smaller variant or free GPUs via `docker compose down`.

# RTVI-CV — Detection & Tracking (Unified Skill)

Unified skill for the **Real Time Video Intelligence CV (RTVI-CV)** microservice. Two action surfaces in one skill:

- **Deploy / operate / debug / tear down** the RTVI-CV container locally → see [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
- **Call the RTVI-CV REST API** (streams, health, metrics, embeddings) on a running instance → see [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md)

> **Service**: `rtvi-cv` (`metropolis_perception_app`)
> **Image**: `nvcr.io/<org>/<repo>:<tag>` — user-supplied at deploy time
> **REST port**: `9000` (`/api/v1` — `/live`, `/ready`, `/startup`, `/metrics`, `/stream/add`, `/stream/remove`, embeddings)
> **Hardware**: x86/aarch64 dGPU (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

---

## Action routing — pick once per invocation

| User intent (sample phrasing) | Flow | Load this reference |
|-------------------------------|------|---------------------|
| `deploy rtvi-cv warehouse 2d`, `run rtvicv warehouse-3d with 4 streams`, `start smartcity gdino`, `launch perception app`, `bring up sparse4d` | **DEPLOY** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) |
| `stop rtvi-cv`, `tear down`, `kill the perception container`, `cleanup rtvicv-perception-docker` | **TEARDOWN** (handled by deploy doc → "Mode Selection") | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/teardown-flow.md`](references/teardown-flow.md) |
| `check rtvi-cv logs`, `diagnose rtvi-cv crashing`, `troubleshoot healthcheck failing`, `rtvi-cv won't start` | **DEBUG** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/troubleshooting.md`](references/troubleshooting.md) |
| `add a stream`, `remove camera`, `list streams`, `health check`, `is rtvi-cv ready`, `get metrics`, `what's the FPS`, `check GPU usage`, `generate text embeddings`, `call rtvi-cv api` | **API USAGE** | [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md) + [`references/api-reference.md`](references/api-reference.md) |

**Selection rule:** match the user's phrasing against the table above and immediately load the corresponding reference file. Do not mix the flows — DEPLOY assumes no running container yet; API USAGE assumes the container is already running on `http://<host>:9000`.

If intent is genuinely ambiguous (e.g., the user says just "I want to use rtvi-cv"), ask one `AskQuestion`: deploy a new instance, or call an already-running one?

---

## What lives where

```
vss-deploy-detection-tracking-2d/
├── SKILL.md          # this file (routing + contracts)
├── assets/           # data files (deploy-defaults.yml — single source of truth for tags / refs / paths / GPU)
├── evals/            # Tier-3 eval manifests (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 bash + python helpers (see `scripts/` for the full inventory)
└── references/       # workflow runbooks (deploy / api-usage / teardown / troubleshooting / …)
```

For the full per-file inventory and what each reference covers, see
[`references/workflow-reference.md`](references/workflow-reference.md).

All scripts are invoked from the skill root via `$SKILL_DIR/scripts/<name>` — paths inside the deploy reference doc are preserved verbatim and resolve correctly when the agent runs from skill root.

---

## Available Scripts

Helpers live in `scripts/` and are invoked from the skill root by name —
call each via `run_script("scripts/<name>")` so the agent records a
proper tool invocation.

| Script | Purpose | Arguments |
| --- | --- | --- |
| `load_defaults.sh` | Detect platform (x86 dGPU / SBSA / Jetson) and resolve YAML defaults from `assets/deploy-defaults.yml`. | `--usecase <name>` |
| `fetch_resources.sh` | Download + extract NGC resources, scan for layout. | `--ngc-ref <ref>` (optional) |
| `apply_in_container.sh` | Host-side wrapper for Step 4 (`apply_config.sh` inside the running container). | `<container_name>` |
| `apply_config.sh` | In-container path-substitution, batch, sink, sources, engine cache. | `<usecase> <stream_count> <sink_type>` |
| `start_app_in_container.sh` | Host-side wrapper for Step 5 (`run_app_and_wait.sh`). | `<container_name>` |
| `run_app_and_wait.sh` | In-container app launch + readiness + metrics + log. | `<config_path>` |
| `add_streams.sh` / `update_stream_sources.sh` | REST stream lifecycle for Step 6. | `<rtsp_or_file_uri>...` |
| `collect_metrics.sh` | Pull `/api/v1/metrics` snapshot. | none |
| `discover_streams.sh` | Enumerate active streams via `/stream/get-stream-info`. | none |
| `synthesize_docker_run.sh` | Print the platform-correct `docker run` line for the resolved env. | none |
| `render_box.sh` | Render the fixed-width step receipt. | `<step_label>` |
| `calibration_manager.py` | Manage calibration artefacts + per-use-case engine cache invalidation. | `--usecase <name> --reset` |

For the full inventory of helpers (cache, GPU checks, setup) browse
`scripts/`; each script's `--help` describes its arguments.

## How to use this skill

1. **Read this file first.** It only routes — it does not contain workflows.
2. **Match the user's intent** against the routing table above.
3. **Load exactly one reference doc** (DEPLOY or API USAGE). Don't preload both — each reference is large and contains its own full contract.
4. **Follow the loaded reference exactly.** The reference docs are the byte-for-byte preserved contracts from the predecessor skills `vss-deploy-detection-tracking-2d` (deploy/teardown/debug) and `rtvicv-api` (REST API) — every step ordering invariant, bash-batching rule, box-rendering rule, and `AskQuestion` contract is retained.
5. **For DEPLOY**, the reference doc enforces its own startup contract: one-line acknowledgement → planning-tool call (`TodoWrite` array of 5 todos, OR 5 successive `TaskCreate` calls on newer Claude Code) → Step 1 question. Do not narrate, do not pre-flight, and never print "loading TodoWrite/TaskCreate" or any deferred-tool resolution prose — the planning tool is loaded silently.

---

## Output contract — DEPLOY flow

When running the DEPLOY / TEARDOWN / DEBUG flow, the agent MUST honour
all four items below on every successful deploy. These are the user's
only feedback channel between steps; skipping any of them is a
behaviour regression.

1. **Render every step's exit in a fixed-width box** — Step 1 *Deploy
   targets*, Step 2 *Pipeline configuration*, Step 3 *Container*, Step 4
   *Apply configuration*, Step 5 *Plan* + *Results*. Not just the final
   summary. The box is the user's step receipt. Geometry is fixed (see
   § "Universal box format" below). Per-step **content** rules (what
   rows go inside each box) live in [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule".
2. **After the Step 5 Results box, issue the Step 6 `AskUserQuestion`**
   from [`references/next-steps.md`](references/next-steps.md) § "11.c"
   — never replace it with a free-form *Next steps* bullet list. The
   menu is the deploy's exit handle: it lets the user run metrics,
   manage streams, tail logs, or tear down with one click instead of
   having to remember curl URLs.
3. **After the user picks a Step 6 bucket, issue the follow-up
   `AskUserQuestion`** from [`references/next-steps.md`](references/next-steps.md)
   § "11.d" — never substitute prose + ready-to-copy curl examples + a
   free-text "want me to run X?" question. Each bucket has its own
   menu of concrete actions; the user picks the action, then the skill
   emits the API box and runs the curl. Per-bucket follow-ups:
   - **Manage streams** → Add / Remove / List. **Remove builds its
     options dynamically from `/stream/get-stream-info`** — one option
     per active stream labelled `<camera_id> · <camera_url>` plus
     "Remove ALL" when `ACTIVE > 1` (full spec: § "`remove_streams`
     sub-flow").
   - **Stop the deployment** → Stop app / Stop container / Full teardown.
   - **Check metrics & FPS** → no follow-up; run `collect_metrics.sh`
     directly after printing the `/api/v1/metrics` API box.
   - **Check liveness / readiness** → no follow-up; probe all three
     health endpoints after printing their API boxes.
4. **Render the FULL per-step content, not an overview row** —
   rendering the box is necessary but not sufficient. Each step has a
   row composition spec in
   [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule". **Step 4 (Apply configuration) is
   where the agent collapses most often** — its canonical
   per-use-case key list lives in
   [`references/apply-config.md`](references/apply-config.md)
   § "Per-use-case complete edit list", and the agent MUST emit one
   `✔ [section] key=value  — annotation` row per key in that table for
   the active use case + settings. A section with 5 keys → 5 rows; a
   section with 6 keys → 6 rows. Never one overview row per section.

Forbidden (these are the shortcuts the agent falls back to under
pressure, and they break the user's UX):

- ❌ **Internal tool-loading narration.** Never print "I need to load
  TodoWrite (a deferred tool the skill calls for the task widget)",
  "Loading TaskCreate…", "Calling ToolSearch for the planning tool…",
  or any other text about resolving / loading / fetching deferred tools.
  The agent loads tools **silently**. The user only ever sees the `✔
  <pinned-values>` summary line followed by the widget — never any
  scaffolding around tool resolution.
- ❌ **Collapsing all 5 deploy steps into a single `TaskCreate`'s
  `description` field.** When `TaskCreate` is the available planning
  tool, issue **5 separate `TaskCreate` calls** back-to-back (one per
  step). See `references/task-list.md` § "Initial `TaskCreate` calls"
  for the verbatim template. Same rule for `TodoWrite` — one call with
  all 5 todos in the `todos:[…]` array; never one todo whose `content`
  is a multi-line list.
- ❌ **Silently choosing `dynamic` stream-mode.** The skill default is
  `stream_mode=static` — the agent bakes auto-discovered `file://` URLs
  into the DS main config's `[source-list]` block before app start.
  Switch to `dynamic` only when the user explicitly asks ("add streams
  later via REST", "use dynamic stream mode") OR when they pick `dynamic`
  in the Step 2 AskQuestion. Picking `dynamic` for a generic "deploy
  rtvi-cv with N streams" query breaks the deploy rubric and the
  user's `/metrics` expectations. See
  [`references/pipeline-config.md`](references/pipeline-config.md)
  § "Defaults — the skill is static-mode by default" for the full
  rationale.
- ❌ A one-line `✔ App ready in Ns, N streams, fps total Y` in place of
  the Step 5 Results box.
- ❌ ASCII box-drawing chars (`+`, `-`, `=`, `*`) instead of light
  box-drawing chars (`┌ ─ ┐ │ └ ┘`).
- ❌ Skipping Step 6 on the assumption "the user knows what to do next".
- ❌ After Step 6, dumping a markdown wall of prose + multiple curl
  blocks + a closing "want me to run any of these?" — that's the
  shape the agent falls back to and it bypasses both the 11.d menu
  and the per-API-call box. The user picks from a menu; the skill
  shows the resolved API box; the skill runs it. No free-text Q.
- ❌ Step 4 overview collapses — these are explicitly banned by the
  deploy doc's Step 4 content rule:
    - `✔ Batch size 3 (tile grid: 1×3)` → required: 5 separate rows
      (`[streammux] batch-size=3`, `[primary-gie] batch-size=3`,
      `[source-list] max-batch-size=3`, `[tiled-display] rows=1`,
      `[tiled-display] columns=3`).
    - `✔ Output sink eglsink` → required: one row per sink key
      (4 keys for eglsink, e.g. `[sink0] enable=1`, `type=2`,
      `sync=0`, `qos=0` — read apply-config.md for the exact list).
    - `✔ Sources static (3 streams, http-port=9000)` → required: six
      annotated `[source-list]` rows.
    - `✔ Tile grid 1 row × 3 cols` (single row) → required: two
      rows, `[tiled-display] rows=1` and `[tiled-display] columns=3`.

## Universal box format

The geometry contract for every step-exit box (Step 1 through Step 5
Results). The same shape across every box; only the **title** and the
**body rows** change per step.

- **Width: 128 chars** corner-to-corner — `┌` at column 1, `┐` at
  column 128. Wider terminals leave the box flush-left; do not stretch
  it. Inner content area is **124 chars** (with one space margin on
  each side inside the `│` borders).
- **Light box-drawing chars only**: `┌ ─ ┐ │ └ ┘`. No `+`, `-`, `=`,
  `*` ASCII fallbacks.
- **Top border — title CENTERED**: `┌` + N₁ dashes + `␣` + title + `␣`
  + N₂ dashes + `┐`, where `N₁ + N₂ + len(title) + 2 = 126`. Distribute
  the pad: `N₁ = floor((126 − len(title) − 2) / 2)`,
  `N₂ = 126 − len(title) − 2 − N₁`. N₁ and N₂ differ by at most 1.
- **Body**: one `│ <content padded to inner-content 124> │` per fact.
  Each fact line uses the `  ✔ <key-padded-to-13>  <value>` form (two
  spaces in, glyph, key right-padded to 13, two spaces, value).
- **Blank lines between groups**: render `│ <124 spaces> │` between
  logical groups (e.g. Identity / Model / Videos in Step 1) so the
  user can scan the box at a glance.
- **Bottom border**: `└` + 126 dashes + `┘` — solid border, no title.

Standard step titles (used at the top of each step's box):

```
┌─────────────────────────────────────────────────────── Deploy targets ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Pipeline configuration ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Container ──────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Apply configuration ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Perception Application — Plan ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Perception Application — Results ──────────────────────────────────────────────┐
```

Per-step content rules (which rows go in which box, mode-aware row
hiding, the apply-config sectioned layout, the Step 5 PLAN-then-RESULT
pattern, the Step 3 `docker run` synthesis requirement) live in
[`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
under "Step N box content rule" — read those when rendering the
corresponding step.

## Quick triggers (mnemonic)

| Phrase | Flow |
|--------|------|
| `deploy rtvicv warehouse 2d with 4 streams and display` | DEPLOY |
| `run smartcity gdino on gpu 1` | DEPLOY |
| `stop the perception container` | TEARDOWN (deploy doc) |
| `rtvi-cv healthcheck failing` | DEBUG (deploy doc + troubleshooting) |
| `add a stream to rtvi-cv` | API USAGE |
| `is rtvi-cv ready on localhost:9000` | API USAGE |
| `get rtvi-cv metrics` | API USAGE |
| `generate text embeddings via rtvi-cv` | API USAGE |

bump:1

Tous les fichiers

51 fichiers

Installer vss-deploy-detection-tracking-2d

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-2d # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera
Dépôt NVIDIA/skills

Compétences similaires

klingai-upgrade-migration
Heure mise à jour 3 juillet 2026
Verification &amp; Quality Assurance
Heure mise à jour 29 juin 2026
base44-cli
Heure mise à jour 29 juin 2026
Railway CLI Management
Heure mise à jour 2 juillet 2026
OR