вариант
ДомДом Skill DevOps и CI/CD vss-deploy-dense-captioning

vss-deploy-dense-captioning

NVIDIA/skills NVIDIA/skills

Разверните автономный микросервис RT-VLM для генерации плотных субтитров и протестируйте конечные точки его REST API для загрузки файлов, генерации субтитров, потоковой передачи, автозаполнения в чате и интеграции с Kafka.

...Расширить все
2
Обновлено время 27 сентября 2026 г.

Цель

Запустить микросервис RT-VLM для плотного субтитрирования в автономном режиме и протестировать все предоставляемые им конечные точки (загрузка файлов, generate_captions, добавление/удаление потоков, автозаполнение в чате, темы Kafka).

Необходимые условия

Для автономного развертывания RT-VLM:

  • Docker, Docker Compose, NVIDIA Container Toolkit и доступный графический процессор (GPU).
  • Учетные данные реестра NGC в переменной $NGC_CLI_API_KEY для входа в Docker на nvcr.io, загрузки образов и локальной загрузки моделей/артефактов NGC.
  • curl, jq и любой рабочий каталог с правами на запись для автономной копии compose.

Для вызовов API в отношении существующего сервиса:

  • Запущенный сервис RT-VLM, доступный по адресу $BASE_URL.
  • Токен Bearer в $RTVI_VLM_API_KEY или $NGC_CLI_API_KEY, в зависимости от того, как был настроен сервис.

Для развертывания полного профиля VSS:

  • Используйте файл ../vss-deploy-profile/SKILL.md; данный скилл не развертывает полные профили VSS.

Инструкции

Следуйте таблицам маршрутизации и пошаговым рабочим процессам, приведённым ниже. Каждый раздел, название которого заканчивается на «workflow», «quick start» или «flow», следует выполнять сверху вниз. Подробные справочные материалы находятся в каталоге references/; выполняйте описанные рабочие процессы напрямую, если в будущих версиях не будет указан конкретный вспомогательный инструмент.

Примеры

Готовые примеры от начала до конца хранятся в папке evals/ (каждый манифест *.json содержит запускаемый сценарий) и встроены в блоки curl для каждого рабочего процесса ниже. Запустите оценку уровня 3 с помощью nv-base validate --agent-eval, чтобы воспроизвести их.

Ограничения

  • Требуется либо автономный сервис RT-VLM, развернутый с помощью данного навыка, либо существующий сервис RT-VLM, доступный для вызывающего пользователя.
  • На модели и NIM, размещённые в NGC, могут распространяться ограничения по скорости, требования к памяти GPU и лицензионные ограничения.
  • Ограничения на параллелизм, память GPU и хранилище зависят от аппаратного обеспечения хоста и файла compose профиля.
  • Не включайте файлы NGC_CLI_API_KEY, RTVI_VLM_API_KEY и .env в репозиторий git и в журналы; не выводите значения учетных данных и не включайте их в итоговые ответы.
  • Доступ к группе Docker и команда sudo фактически предоставляют привилегии уровня root. Используйте неинтерактивный защитный механизм sudo -n при развертывании и останавливайте процесс, чтобы владелец хоста мог выполнить действие, если sudo без ввода пароля недоступен.

Устранение неполадок

  • Ошибка: REST-вызов возвращает отказ в подключении. Причина: целевой микросервис не запущен. Решение: проверьте /docs или /health; выполните повторное развертывание с помощью vss-deploy-profile или соответствующего навыка vss-deploy- *.
  • Ошибка: HTTP 401/403 при запросах к NGC. Причина: отсутствует или истек срок действия NGC_CLI_API_KEY. Решение: выполните команду ` docker login nvcr.io ` и повторно экспортируйте ключ перед повторной попыткой.
  • Ошибка: не хватает памяти в контейнере (OOM) или не удаётся загрузить модель. Причина: недостаточно памяти GPU для выбранного профиля. Решение: перейдите на вариант меньшего размера или освободите ресурсы GPU с помощью команды `docker compose down`.

Развертывание и использование RT-VLM Dense Captioning (VSS 3.2)

RT-VLM — это микросервис NVIDIA для обработки изображений и языка в реальном времени: декодирует видео (файл или RTSP), сегментирует его на фрагменты, запускает VLM (cosmos-reason1, cosmos-reason2 или любую совместимой с OpenAI модели), передает плотные субтитры обратно по SSE/HTTP и публикует субтитры, оповещения об инцидентах и ошибки в Kafka. Используйте этот навык для развертывания автономного сервиса RT-VLM, если полный профиль VSS ещё не запущен, а затем вызывайте его API /v1/... для генерации подписей, загрузки файлов, управления прямыми трансляциями, проверок работоспособности , автозаполнения в чате, совместимого с NIM, или метрик Prometheus. Справочник API: https://docs.nvidia.com/vss/latest/real-time-vlm-api.html.

Маршрутизация развертывания

Если пользователь запрашивает развертывание полного профиля VSS, используйте ../vss-deploy-profile/SKILL.md. Этот навык отвечает за маршрутизацию профилей, файлы generated.env и resolved.yml, определение размера нескольких сервисов и развертывание/сборку полного стека.

Если пользователь запрашивает автономную плотную субтитризацию RT-VLM или профиль VSS еще не запущен, используйте автономный поток RT-VLM в файле references/deploy-rt-vlm-service.md перед вызовом API. Он следует тому же шаблону, ориентированному на Compose, что и vss-deploy-profile: сбор контекста, запуск предварительных проверок, работа с локальной копией, пробный запуск с конфигурацией Docker Compose, проверка, развертывание, а затем ожидание подтверждения работоспособности.

Поток автономного развертывания

Всегда следуйте этой последовательности. Никогда не пропускайте пробный запуск.

# 1. Скопируйте файл deploy/docker/services/rtvi/rtvi-vlm/rtvi-vlm-docker-compose.yml
#    в любой доступный для записи автономный рабочий каталог.
# 2. Получите значение RTVI_VLM_IMAGE_TAG из этой копии compose.
# 3. Удалите из копии блок depends_on, предназначенный только для автономного режима.
# 4. Создайте файл .env, игнорируемый git, с необходимыми значениями RT-VLM.
# 5. Подготовьте пути привязки хоста, такие как $VSS_DATA_DIR/data_log/vst/clip_storage.
#    Используйте `sudo -n` для исправления прав владения; если sudo без ввода пароля недоступно,
#    остановитесь и попросите владельца хоста запустить выведенную команду вручную.
# 6. docker compose --env-file .env -f rtvi-vlm-docker-compose.yml config --quiet
# 7. Загрузите с помощью `docker pull` образ RT-VLM с точным тегом.
# 8. Запустите `docker compose ... up -d rtvi-vlm`, дождитесь, пока система будет готова, затем проведите тест работоспособности.

Перед любой операцией pull или up запустите предварительную проверку; остановитесь и устраните сбои на этом этапе, прежде чем приступать к отладке самого RT-VLM:

nvidia-smi --query-gpu=index,name --format=csv,noheader
nvidia-container-cli info
docker compose version
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

При автономном развертывании с одним файлом не запускайте файл deploy/docker/services/rtvi/rtvi-vlm/rtvi-vlm-docker-compose.yml напрямую: он содержит ссылки depends_on на родственные службы VLM/NIM, которые определены в полном проекте compose VSS/met-blueprints. В отдельном примере показано, как скопировать файл compose, получить из него текущий тег образа, удалить блок `depends_on ` и проверить результат перед запуском.

Для проверки с помощью агента никогда не допускайте интерактивного запроса sudo. Перед любой операцией, требующей привилегий владельца или операцией Docker, используйте неинтерактивную защиту, описанную в references/deploy-rt-vlm-service.md: предпочтительный вариант — простой docker; в противном случае используйте sudo -n docker; если sudo -n завершится с ошибкой, остановитесь и выполните точную ручную команду для владельца хоста вместо повторной попытки с интерактивным sudo или ослаблением прав доступа.

Если команда `docker pull` завершается с ошибкой containerd snapshotter/unpack в Docker 28+ версии, перед повторной попыткой примените исправление ` /etc/docker/daemon.json containerd-snapshotter=false ` из справочника по автономной установке.

Минимальные значения переменных .env для автономного режима:

Переменная среды хоста Требуется, когда Назначение
NGC_CLI_API_KEY Путь автономного развертывания Загрузка образа из реестра NGC и загрузка модели/артефакта NGC
RTVI_VLM_API_KEY или NGC_CLI_API_KEY Вызовы API с аутентификацией Аутентификация по каналу RT-VLM после запуска службы
RTVI_VLM_PORT Всегда Порт API хоста, сопоставленный с портом контейнера 8000
HOST_IP Всегда Хост начальной настройки Kafka (${HOST_IP}:9092)
VSS_DATA_DIR Всегда Обязательный привязанный монтируемый каталог для хранения клипов
RTVI_VLM_MODEL_TO_USE Всегда для автономного режима Селектор бэкэнда; используйте cosmos-reason2 для локальной модели по умолчанию или openai-compat для удаленного/родственного конечного пункта
RTVI_VLM_MODEL_PATH Локальная модель, размещенная на собственном сервере Путь к Cosmos Reason 2, поддерживаемому исходным кодом: ngc:nim/nvidia/cosmos-reason2-8b:hf-1208
RTVI_VLM_ENDPOINT RTVI_VLM_MODEL_TO_USE=openai-compat Удаленная/равноправная конечная точка VLM, совместимая с OpenAI
VLM_NAME RTVI_VLM_MODEL_TO_USE=openai-compat Имя модели/развертывания, предоставляемое этой конечной точкой

Настройка

export BASE_URL="http://localhost:${RTVI_VLM_PORT:-8018}"  # порт RT-VLM на стороне хоста
export API_KEY="${NGC_CLI_API_KEY:-${RTVI_VLM_API_KEY:-}}" # токен bearer, используемый командами curl на стороне хоста
: "${API_KEY:?Установите NGC_CLI_API_KEY или RTVI_VLM_API_KEY перед вызовом конечных точек, требующих аутентификации}"

Каждый из приведённых ниже запросов использует Authorization: Bearer $API_KEY. Конечные точки проверки работоспособности (/v1/health/*, /v1/ready, /v1/live, /v1/startup) обычно работают без авторизации.

Проверка работоспособности перед использованием:

curl -fsS "$BASE_URL/v1/health/ready"
MODEL_ID="$(curl -fsS "$BASE_URL/v1/models" -H "Authorization: Bearer $API_KEY" | jq -r '.data[0].id // .id')"
curl -fsS "$BASE_URL/openapi.json" | jq -r '.paths | keys[]' | sort

RTSP Sample Stream Guard

Если в задаче или eval указано RTSP_SAMPLE_URL, рассматривайте именно эту переменную среды как обязательный входной параметр. Перед проверкой или регистрацией любого потока убедитесь, что она установлена и не пуста; если она отсутствует, остановитесь с чётким сообщением об ошибке. Не используйте замену из NvStreamer, VIOS, пакетов sample-data или каких-либо других резервных источников, поскольку это приведёт к проверке потока, отличного от того, который запросил вызывающий.

: "${RTSP_SAMPLE_URL:?Установите RTSP_SAMPLE_URL в значение доступного образец потока RTSP перед проверкой RTSP}"
case "$RTSP_SAMPLE_URL" in
  rtsp://*) ;;
  *) echo "RTSP_SAMPLE_URL должен быть URL-адресом в формате rtsp://, получено: $RTSP_SAMPLE_URL" >&2; exit 1 ;;
esac

if command -v ffprobe >/dev/null 2>&1; then
  ffprobe -v error -rtsp_transport tcp \
    -select_streams v:0 -show_entries stream=codec_type \
    -of csv=p=0 "$RTSP_SAMPLE_URL" | grep -qx video
elif command -v gst-discoverer-1.0 >/dev/null 2>&1; then
  gst-discoverer-1.0 "$RTSP_SAMPLE_URL" | grep -qi 'video'
else
  echo "Установите ffprobe или gst-discoverer-1.0 перед проверкой RTSP." >&2
  exit 1
fi

Быстрый старт — плотные субтитры из локального видео

# 1. Загрузите видео, получите его идентификатор файла
FILE_ID=$(curl -fsS -X POST "$BASE_URL/v1/files" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/warehouse.mp4" \
  -F "purpose=vision" \
  -F "media_type=video" | jq -r '.id')

# 2. Сгенерировать субтитры и оповещения (поток SSE с фрагментированными ответами)
curl -N -X POST "$BASE_URL/v1/generate_captions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"id\": \"$FILE_ID\",
    \"prompt\": \"Напишите краткую и емкую подпись для каждого 10-секундного фрагмента этого видео с склада.\",
    \"model\": \"$MODEL_ID\",
    \"chunk_duration\": 10,
    \"stream\": true
  }"

API-интерфейс

Перед вызовом дополнительных конечных точек используйте актуальный OpenAPI в качестве достоверного источника информации:

curl -fsS "$BASE_URL/openapi.json" | jq -r '.paths | keys[]' | sort

Основные пути для VSS 3.2:

  • POST /v1/files для многочастной загрузки медиафайлов; передайте возвращаемый идентификатор файла в функцию генерации субтитров и удалите файл по завершении.
  • POST /v1/generate_captions для создания субтитров к файлу или потоку. Используйте точный идентификатор модели, возвращаемый запросом GET /v1/models; псевдонимы, такие как cosmos-reason2, являются селекторами бэкенда, а не идентификаторами модели в запросе.
  • POST /v1/streams/add, GET /v1/streams/get-stream-info и DELETE /v1/streams/delete/{stream_id} для жизненного цикла RTSP. Извлекайте идентификаторы потоков из results[0].id.
  • POST /v1/chat/completions для текстовых и мультимодальных вызовов, совместимых с OpenAI. Текущие сборки версии 26.05 возвращают HTTP 400 для текстовых запросов /v1/completions; рассматривайте это как ожидаемое поведение при проверке совместимости с устаревшими версиями.
  • GET /v1/health/ready, /v1/models, /v1/assets/stats и /v1/metrics для проверки работоспособности сервиса. Не следует предполагать наличие /v1/license, если он не указан в OpenAPI.

Подробные схемы конечных точек, формы ответов, конечные точки с единственным потоком в стиле CV, а также примечания по совместимости с версией 26.05 находятся в файле references/api-surface-26.05.md.

Типичные рабочие процессы

  • Создание субтитров для сохраненных файлов: загрузите файл с помощью POST /v1/files, вызовите /v1/generate_captions с возвращенным идентификатором файла, используйте stream=true для SSE, затем удалите файл, чтобы освободить место на хранилище.
  • Субтитры в реальном времени по RTSP: если вызывающая сторона предоставляет RTSP_SAMPLE_URL, используйте именно этот URL и запустите RTSP Sample Stream Guard перед регистрацией. Не создавайте замещающий поток из NvStreamer или VIOS, если RTSP_SAMPLE_URL пуст; вместо этого сразу завершайте операцию с ошибкой. Требуйте наличие фактической записи видеопотока/субтитров перед регистрацией; добавьте поток, добавьте к нему субтитры, а затем отмените его регистрацию.
  • Подсказки оповещений: включайте детерминированную строку «Обнаружена аномалия: Да/Нет ». Публикация в Kafka настраивается на стороне сервера, добавляется к HTTP-ответам и описана в файле references/kafka-workflows.md.
  • Проверка Kafka: полагайтесь на рабочую среду vss-rtvi-vlm при определении имён тем. В полном профиле оповещений VSS в режиме реального времени используйте существующий контейнер VSS Kafka mdx-kafka для проверок через командную строку и окончательных команд потребителя инцидентов. Для автономной проверки используйте брокер, объявляющий ${HOST_IP}:9092; никогда не останавливайте и не заменяйте уже существующий брокер без подтверждения пользователя.

Справочник ошибок

Распространённые причины: 400 — неверный формат запроса или идентификатор модели, 401/403 — отсутствующий или неверный токен bearer, 404 — удалённые файлы/потоки или неподдерживаемые конечные точки, 413 — для загрузок превышающих допустимый размер, 422 — для проверки схемы, 429 — из-за слишком высокой параллельности, 500 — для сбоев при выводе/во время выполнения, и 503 — пока запуск ещё происходит. Проверьте журналы Docker vss-rtvi-vlm на наличие сбоев со стороны службы.

Посмотреть на GitHub
---
name: vss-deploy-dense-captioning
description: Deploy a standalone RT-VLM dense-captioning microservice and exercise its REST API endpoints for file upload, caption generation, streaming, chat completions, and Kafka integration.
license: Apache-2.0
---
## Purpose

Stand up the RT-VLM dense-captioning microservice on its own and exercise every endpoint it exposes (file upload, generate_captions, stream add/delete, chat-completions, Kafka topics).

## Prerequisites

For standalone RT-VLM deployment:
- Docker, Docker Compose, NVIDIA Container Toolkit, and a visible GPU.
- NGC registry credentials in `$NGC_CLI_API_KEY` for `docker login nvcr.io`,
  image pulls, and local NGC model/artifact downloads.
- `curl`, `jq`, and any writable working directory for the standalone compose copy.

For API calls against an existing service:
- Running RT-VLM service reachable at `$BASE_URL`.
- Bearer token in `$RTVI_VLM_API_KEY` or `$NGC_CLI_API_KEY`, depending on how the
  service was configured.

For full VSS profile deployment:
- Use `../vss-deploy-profile/SKILL.md`; this skill does not deploy full VSS profiles.

## 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/`; execute the documented workflows directly unless a future revision names a concrete helper.

## 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 either a standalone RT-VLM service deployed via this skill or an
  existing RT-VLM service 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.
- Keep `NGC_CLI_API_KEY`, `RTVI_VLM_API_KEY`, and `.env` files out of git and out of logs; do not echo credential values or include them in final responses.
- Docker group access and `sudo` are effectively root-level privileges. Use the non-interactive `sudo -n` guard in the deploy reference and stop for host-owner action when passwordless sudo is unavailable.

## 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`.

# Deploy and Use RT-VLM Dense Captioning (VSS 3.2)

RT-VLM is NVIDIA's real-time vision-language microservice: decode video (file or
RTSP), segment it into chunks, run a VLM (`cosmos-reason1`, `cosmos-reason2`, or any
OpenAI-compatible model), stream dense captions back over SSE/HTTP, and publish
captions, incident alerts, and errors to Kafka. Use this skill to deploy the
standalone RT-VLM service when a full VSS profile is not already running, then call
its `/v1/...` API for caption generation, file upload, live-stream management, health
checks, NIM-compatible chat completions, or Prometheus metrics. API reference:
<https://docs.nvidia.com/vss/latest/real-time-vlm-api.html>.

## Deployment Routing

If the user asks to deploy a full VSS profile, use
[`../vss-deploy-profile/SKILL.md`](../vss-deploy-profile/SKILL.md). That skill
owns profile routing, `generated.env`, `resolved.yml`, multi-service sizing, and
full-stack deploy/teardown.

If the user asks for standalone RT-VLM dense captioning, or no VSS profile is
already running, use the standalone RT-VLM flow in
[`references/deploy-rt-vlm-service.md`](references/deploy-rt-vlm-service.md)
before calling the API. This follows the same compose-centric pattern as
`vss-deploy-profile`: gather context, run preflights, work from a local copy,
dry-run with `docker compose config`, review, deploy, then wait for health.

## Standalone Deployment Flow

Always follow this sequence. Never skip the dry-run.

```bash
# 1. Copy deploy/docker/services/rtvi/rtvi-vlm/rtvi-vlm-docker-compose.yml
#    into any writable standalone working directory.
# 2. Derive RTVI_VLM_IMAGE_TAG from that compose copy.
# 3. Strip the standalone-only dangling depends_on block from the copy.
# 4. Create a gitignored .env with the required RT-VLM values.
# 5. Prepare host bind paths such as $VSS_DATA_DIR/data_log/vst/clip_storage.
#    Use `sudo -n` for ownership fixes; if passwordless sudo is unavailable,
#    stop and ask the host owner to run the printed command manually.
# 6. docker compose --env-file .env -f rtvi-vlm-docker-compose.yml config --quiet
# 7. docker pull the exact RT-VLM image tag.
# 8. docker compose ... up -d rtvi-vlm, wait for ready, then smoke test.
```

Run preflights before any pull or `up`; stop and fix failures here before
debugging RT-VLM itself:

```bash
nvidia-smi --query-gpu=index,name --format=csv,noheader
nvidia-container-cli info
docker compose version
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
```

For standalone single-file deployments, do not run the raw
`deploy/docker/services/rtvi/rtvi-vlm/rtvi-vlm-docker-compose.yml` directly: it
contains `depends_on` references to sibling VLM/NIM services that are only
defined in the full VSS/met-blueprints compose project. The standalone reference
shows how to copy the compose file, derive the current image tag from it, strip
the `depends_on` block, and validate the result before `up`.

For agent-driven validation, never let `sudo` prompt interactively. Before any
privileged ownership or Docker operation, use the non-interactive guard in
[`references/deploy-rt-vlm-service.md`](references/deploy-rt-vlm-service.md):
prefer plain `docker`; otherwise use `sudo -n docker`; if `sudo -n` fails, stop
with the exact manual command for the host owner instead of retrying with
interactive sudo or weakening permissions.

If `docker pull` fails with a containerd snapshotter/unpack error on Docker 28+,
apply the `/etc/docker/daemon.json` `containerd-snapshotter=false` fix in the
standalone reference before retrying.

Minimum standalone `.env` values:

| Host env var | Required when | Purpose |
|---|---|---|
| `NGC_CLI_API_KEY` | Standalone deploy path | NGC registry image pull and NGC model/artifact download |
| `RTVI_VLM_API_KEY` or `NGC_CLI_API_KEY` | Authenticated API calls | RT-VLM bearer auth after the service is running |
| `RTVI_VLM_PORT` | Always | Host API port mapped to container `8000` |
| `HOST_IP` | Always | Kafka bootstrap host (`${HOST_IP}:9092`) |
| `VSS_DATA_DIR` | Always | Required clip-storage bind mount |
| `RTVI_VLM_MODEL_TO_USE` | Always for standalone | Backend selector; use `cosmos-reason2` for the default local model or `openai-compat` for a remote/sibling endpoint |
| `RTVI_VLM_MODEL_PATH` | Local self-hosted model | Source-backed Cosmos Reason 2 path: `ngc:nim/nvidia/cosmos-reason2-8b:hf-1208` |
| `RTVI_VLM_ENDPOINT` | `RTVI_VLM_MODEL_TO_USE=openai-compat` | Remote/sibling OpenAI-compatible VLM endpoint |
| `VLM_NAME` | `RTVI_VLM_MODEL_TO_USE=openai-compat` | Model/deployment name exposed by that endpoint |

## Setup

```bash
export BASE_URL="http://localhost:${RTVI_VLM_PORT:-8018}"  # host-side RT-VLM port
export API_KEY="${NGC_CLI_API_KEY:-${RTVI_VLM_API_KEY:-}}" # bearer token used by host-side curl commands
: "${API_KEY:?Set NGC_CLI_API_KEY or RTVI_VLM_API_KEY before calling authenticated endpoints}"
```

Every request below uses `Authorization: Bearer $API_KEY`. Health endpoints
(`/v1/health/*`, `/v1/ready`, `/v1/live`, `/v1/startup`) typically work without auth.

**Smoke test before use:**
```bash
curl -fsS "$BASE_URL/v1/health/ready"
MODEL_ID="$(curl -fsS "$BASE_URL/v1/models" -H "Authorization: Bearer $API_KEY" | jq -r '.data[0].id // .id')"
curl -fsS "$BASE_URL/openapi.json" | jq -r '.paths | keys[]' | sort
```

## RTSP Sample Stream Guard

When a task or eval names `RTSP_SAMPLE_URL`, treat that exact environment
variable as a required input. Verify it is set and non-empty before probing or
registering any stream; if it is missing, stop with a clear failure message. Do
not derive a substitute from NvStreamer, VIOS, sample-data bundles, or any other
fallback, because that validates a different stream than the caller requested.

```bash
: "${RTSP_SAMPLE_URL:?Set RTSP_SAMPLE_URL to a reachable RTSP sample stream before RTSP validation}"
case "$RTSP_SAMPLE_URL" in
  rtsp://*) ;;
  *) echo "RTSP_SAMPLE_URL must be an rtsp:// URL, got: $RTSP_SAMPLE_URL" >&2; exit 1 ;;
esac

if command -v ffprobe >/dev/null 2>&1; then
  ffprobe -v error -rtsp_transport tcp \
    -select_streams v:0 -show_entries stream=codec_type \
    -of csv=p=0 "$RTSP_SAMPLE_URL" | grep -qx video
elif command -v gst-discoverer-1.0 >/dev/null 2>&1; then
  gst-discoverer-1.0 "$RTSP_SAMPLE_URL" | grep -qi 'video'
else
  echo "Install ffprobe or gst-discoverer-1.0 before RTSP validation." >&2
  exit 1
fi
```

## Quick Start — dense captions from a local video

```bash
# 1. Upload the video, capture its file id
FILE_ID=$(curl -fsS -X POST "$BASE_URL/v1/files" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/warehouse.mp4" \
  -F "purpose=vision" \
  -F "media_type=video" | jq -r '.id')

# 2. Generate captions + alerts (SSE stream of chunked responses)
curl -N -X POST "$BASE_URL/v1/generate_captions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"id\": \"$FILE_ID\",
    \"prompt\": \"Write a concise dense caption for each 10-second segment of this warehouse video.\",
    \"model\": \"$MODEL_ID\",
    \"chunk_duration\": 10,
    \"stream\": true
  }"
```

## API Surface

Use the live OpenAPI as the source of truth before calling optional endpoints:

```bash
curl -fsS "$BASE_URL/openapi.json" | jq -r '.paths | keys[]' | sort
```

Core paths for VSS 3.2 are:

- `POST /v1/files` for multipart media upload; pass the returned file `id` into
  caption generation and delete the file when finished.
- `POST /v1/generate_captions` for file or stream captioning. Use the exact
  model id returned by `GET /v1/models`; aliases such as `cosmos-reason2` are
  backend selectors, not request model ids.
- `POST /v1/streams/add`, `GET /v1/streams/get-stream-info`, and
  `DELETE /v1/streams/delete/{stream_id}` for RTSP lifecycle. Parse stream ids
  from `results[0].id`.
- `POST /v1/chat/completions` for OpenAI-compatible text and multimodal calls.
  Current 26.05 builds return HTTP 400 for text-only `/v1/completions`; treat
  that as expected when validating legacy behavior.
- `GET /v1/health/ready`, `/v1/models`, `/v1/assets/stats`, and `/v1/metrics`
  for service probes. Do not assume `/v1/license` exists unless OpenAPI lists it.

Detailed endpoint schemas, response shapes, CV-style singular stream endpoints,
and 26.05 compatibility notes live in
[`references/api-surface-26.05.md`](references/api-surface-26.05.md).

## Common Workflows

- Stored file captioning: upload with `POST /v1/files`, call
  `/v1/generate_captions` with the returned file id, use `stream=true` for SSE,
  then delete the file to release storage.
- RTSP live captioning: when the caller provides `RTSP_SAMPLE_URL`, use that
  exact URL and run the **RTSP Sample Stream Guard** before registration. Do not
  derive a replacement stream from NvStreamer or VIOS when `RTSP_SAMPLE_URL` is
  empty; fail fast instead. Require an actual video stream/caps entry before
  registration; add the stream, caption it, then unregister it.
- Alert prompts: include a deterministic `Anomaly Detected: Yes/No` line.
  Kafka publication is server-side config, additive to HTTP responses, and
  documented in [`references/kafka-workflows.md`](references/kafka-workflows.md).
- Kafka validation: trust the live `vss-rtvi-vlm` environment for topic names.
  In a full VSS alerts real-time profile, use the existing VSS Kafka container
  `mdx-kafka` for CLI checks and final incident-consumer commands. For
  standalone validation, use a broker that advertises `${HOST_IP}:9092`; never
  stop or replace a pre-existing broker without user confirmation.

## Error Reference

Common causes: 400 for invalid request shape or model id, 401/403 for missing
or wrong bearer token, 404 for deleted files/streams or unsupported endpoints,
413 for oversized uploads, 422 for schema validation, 429 for too much
concurrency, 500 for inference/runtime failures, and 503 while startup is still
in progress. Inspect `docker logs vss-rtvi-vlm` for service-side failures.

Установить vss-deploy-dense-captioning

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-dense-captioning # Copy SKILL.md to your .claude/skills/ directory

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ Claude автоматически обнаружит и начнет использовать этот скилл
Репозиторий NVIDIA/skills

Похожие навыки

klingai-upgrade-migration
Обновлено время 3 июля 2026 г.
Verification &amp; Quality Assurance
Обновлено время 29 июня 2026 г.
base44-cli
Обновлено время 29 июня 2026 г.
Railway CLI Management
Обновлено время 2 июля 2026 г.
OR