[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-vss-manage-video-io-storage":3,"mdc--xnlugl-key":34,"related-repo-nvidia-vss-manage-video-io-storage":2905,"related-org-nvidia-vss-manage-video-io-storage":3007},{"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-manage-video-io-storage","manage video streams with VIOS API","Use to call the VIOS REST API (sensor list, timelines, clip extraction, snapshots, add\u002Fdelete sensors and streams). Not for VLM inference or search.",{"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},"REST API","rest-api","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Storage","storage",{"name":21,"slug":22,"type":15},"Video","video",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:29:26.970674","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-manage-video-io-storage","---\nname: vss-manage-video-io-storage\ndescription: Use to call the VIOS REST API (sensor list, timelines, clip extraction, snapshots, add\u002Fdelete sensors and streams). Not for VLM inference or search.\nlicense: Apache-2.0\nmetadata:\n  version: \"3.2.0\"\n  github-url: \"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\"\n  tags: \"nvidia blueprint operational\"\n---\n## Purpose\n\nManage VIOS and NvStreamer API operations for VSS video input\u002Foutput and\nstorage workflows: sensors, streams, uploads, snapshots, clips, timelines, and\nrecording status.\n\n## Prerequisites\n\n- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references\u002F`).\n- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.\n- `curl`, `jq`, and Docker available on the caller.\n\n## Instructions\n\n# VIOS Operations\n\nCall the VIOS REST API to manage cameras\u002Fsensors, RTSP streams, recordings, snapshots, and storage. Use when asked to: add a camera, add an RTSP stream, list sensors, show configured sensors\u002Fcameras\u002Fstreams, check stream status, get a snapshot, download a clip, upload a video file, or manage video storage. Query the VIOS API directly using curl — do not navigate the UI.\n\n**Upload routing rule:**\n- If the user asks to \"upload `\u003Cfile>.mp4` to VIOS\", \"upload a video file\", or otherwise means storing a local video as a VIOS file-backed sensor, use the direct VIOS API: `PUT \u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002Ffile\u002F{filename}` from [`references\u002Fapi-reference.md`](references\u002Fapi-reference.md) Section 8.\n- Use NvStreamer only when the user explicitly needs a live\u002Fsynthetic RTSP camera feed, asks for NvStreamer, or asks to retrieve an RTSP URL.\n- Do not substitute the NvStreamer upload -> RTSP URL -> VIOS `\u002Fsensor\u002Fadd` handoff for a plain VIOS MP4 upload request.\n\n**Do NOT use this skill for:**\n- VLM inference or ad-hoc visual Q&A about a clip — use `vss-ask-video`.\n- Semantic search across the archive, or ingesting video for search — use `vss-search-archive`.\n- Narrative summaries of a recorded clip — use `vss-summarize-video`.\n- Incident-range or alert-window reports — use `vss-generate-video-report` Mode B.\n- Reading analytics metrics, incidents, or alerts — use `vss-query-analytics`.\n\n## Reference contracts shipped with this skill\n\nThis skill bundles four reference files under `references\u002F`. Read whichever applies to the task in front of you:\n\n| File | Purpose | Audience |\n|---|---|---|\n| [`references\u002Fapi-reference.md`](references\u002Fapi-reference.md) | The full VIOS REST API reference (the runtime contract) — sensor management, storage, snapshots, clip extraction, WebRTC live\u002Freplay, RTSP proxy, recorder, service configuration, service discovery. **Read this when invoking any VIOS API operation.** | Operational users + this skill itself |\n| [`references\u002Fnvstreamer-api-reference.md`](references\u002Fnvstreamer-api-reference.md) | The **NvStreamer REST API reference** — version, sensor list\u002Finfo\u002Fstatus\u002Fstreams, the three upload methods (PUT v2 \u002F PUT v1 \u002F POST multipart) with the `nvstreamer-*` custom headers, delete, snapshots (frame-indexed live, timestamp-indexed storage), storage info, filesystem scan. NvStreamer (`vss-vios-nvstreamer`, the streamer-adaptor variant of `launch_vst`) is **brought up by the same profiles that bring VIOS up** — `dev-profile-alerts`, `dev-profile-lvs`, `dev-profile-search`, all warehouse profiles. See `integrate-vios-service.md § Topology B` for the deployment side. **Read this when serving test \u002F sample videos as synthetic RTSP, retrieving the RTSP URL NvStreamer generated for a file, or driving the canonical NvStreamer → VIOS handoff** (upload to NvStreamer → read RTSP URL → register that URL with VIOS via `\u002Fsensor\u002Fadd`). | Operational users + skill authors composing the upload → RTSP URL → VIOS `\u002Fsensor\u002Fadd` flow |\n| [`references\u002Fintegrate-vios-service.md`](references\u002Fintegrate-vios-service.md) | The **integration contract** — how VIOS plugs into other VSS microservices. Documents required peer services (RT-VLM, ELK, Kafka, Redis, `sdr-controller` \u002F SDRC), the structured `component_services:` block consumed by the `vss-build-vision-agent` skill's Step 4, integration inputs\u002Foutputs (Kafka topics, REST endpoints, file paths), environment variables, network requirements, and known integration constraints (e.g. the `\u002Furl`-variant double-`http:\u002F\u002F` bug, the VIOS + SDRC patching requirement). **Read this when authoring a skill that talks to VIOS as a peer, when composing a new VSS deployment, or when debugging caption-pipeline wiring.** | Skill authors, deployment composers, pair-file maintainers |\n| [`references\u002Fdeploy-vios-service.md`](references\u002Fdeploy-vios-service.md) | The **deployment contract** — what it takes to bring VIOS up. Documents container images and tags (`nvcr.io\u002Fnvidia\u002Fvss-core\u002Fvss-vios-*:3.2.0`), GPU \u002F CPU \u002F memory \u002F storage requirements, startup behavior + healthcheck tuning, required environment variables (notably `VST_INSTALL_ADDITIONAL_PACKAGES=true` for the libav apt-install step that gates uploads), known deployment issues (volume drift, libav missing, 502 from leftover containers), prerequisites, dry-run, verify-deployment, and tear-down commands. **Read this when VIOS isn't running and you (or your caller) need to deploy it standalone, when debugging container-startup failures, or when authoring a deploy skill that wraps VIOS.** | Operators, deploy-skill authors |\n\n## Deployment prerequisite — VIOS MUST be running\n\nThis skill is primarily an API client and assumes VIOS is already up and reachable at the VST ingress (default `http:\u002F\u002F${HOST_IP}:30888`). It does not deploy VIOS itself, but when VIOS is unreachable it coordinates a deploy using its bundled deployment runbook ([`references\u002Fdeploy-vios-service.md`](references\u002Fdeploy-vios-service.md)) or hands off to the full-stack `\u002Fvss-deploy-profile` skill. Before doing any work:\n\n1. **Probe VIOS:**\n   ```bash\n   curl -sf --max-time 5 \"http:\u002F\u002F${HOST_IP}:30888\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\" >\u002Fdev\u002Fnull\n   ```\n\n2. **If the probe fails, VIOS is not deployed.** Offer two paths forward:\n\n   > *\"VIOS is not reachable at `http:\u002F\u002F${HOST_IP}:30888` — no deployment is currently up. You have two options:*\n   > *(a) Bring up VIOS standalone using this skill's bundled [`references\u002Fdeploy-vios-service.md`](references\u002Fdeploy-vios-service.md) runbook — image tags, env vars (notably `VST_INSTALL_ADDITIONAL_PACKAGES=true`), host directories, NGC login, bring-up command, healthcheck loop, and known deployment issues are all documented there. This is the right path if you only need VIOS itself (no RT-VLM \u002F ELK \u002F etc.) or if you're composing a custom profile.*\n   > *(b) Deploy a full VSS profile that includes VIOS via the `\u002Fvss-deploy-profile` skill — `base` (recommended), `lvs`, `search`, or `alerts` all bring VIOS up alongside other components. This is the right path if you want a complete VSS stack.*\n   > *Which would you like?\"*\n\n   - If the user picks (a) → walk them through `references\u002Fdeploy-vios-service.md` step by step. Pay particular attention to its `§ Environment Variables — Required for Upload-to-Caption Path` and `§ Known Deployment Issues` sections — the libav-missing failure (`VST_INSTALL_ADDITIONAL_PACKAGES=true`) and the volume-drift hang (`docker compose up --yes` or `docker volume rm` first) are the two most common bring-up blockers. After deploy succeeds and the probe in step 1 passes, return here.\n   - If the user picks (b) → hand off to `\u002Fvss-deploy-profile -p \u003Cprofile>` (default `base`). Return here once it succeeds.\n   - If the user declines both → **stop**. VIOS operations require the VST backend to be up; do not attempt to fabricate responses or proceed with a degraded mode.\n\n   *Pre-authorized autonomous mode:* if your caller has granted explicit pre-authorization to deploy prerequisites (e.g. the request says \"pre-authorized to deploy prerequisites\", or you are running in a non-interactive evaluation harness with that permission), skip the confirmation and prefer path (a) — bring up VIOS standalone via this skill's bundled `references\u002Fdeploy-vios-service.md` — unless the request explicitly asks for a full VSS profile, in which case invoke `\u002Fvss-deploy-profile -p base`.\n\n3. **If the probe passes, proceed.** VIOS is up; all operations below are safe to execute.\n\n---\n\n## Known limitation — leftover containers from prior deploys\n\n`GET \u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Flist` and `GET \u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstreams`\ncan return **HTTP 502 Bad Gateway** or stale results when leftover `*-smc`\nVST containers from an earlier deploy survive teardown and win the\n`network_mode: host` port-bind race on `:30000` \u002F `:30888`. **Remediation:\nre-run `\u002Fvss-deploy-profile`** — its Step 0 teardown grep clears the full\n`sensor-ms-*` \u002F `vst-ingress-*` \u002F `sdr-*` \u002F `sdrc-*` \u002F `rtspserver-ms-*` set.\nOther paths (`storage\u002Ffile\u002F*` upload, `*\u002Fpicture\u002Furl` snapshot, `*\u002Furl` clip\nextraction) are unaffected. Full failure-mode catalogue, remediation, and the\ncurrent routing contract (direct vs SDRC; SDR\u002FEnvoy removed in PR #711) live in\n`references\u002Fdeploy-vios-service.md § Known Deployment Issues` and\n[issue #151](https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\u002Fissues\u002F151).\n\n---\n\n## Setup\n\n**Base URL:** `http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1`\n\n**Endpoint Resolution:**\n- Use the VIOS endpoint associated with the active VSS deployment. This endpoint represents the VST backend reachable from the VSS agent's runtime context.\n- Do NOT attempt to discover host, IP, or port via shell commands, filesystem access, or static configuration files.\n- Assume the VSS deployment context already provides the correct network endpoint for VST.\n\n**Availability Check:**\n- Before making any API call, verify that the VST backend is reachable via the VSS deployment endpoint:\n  ```bash\n  curl -sf --connect-timeout 5 http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\n  ```\n- If the backend is unavailable (non-zero exit code or connection error), fail gracefully and report the error to the user. See the **Deployment prerequisite** section above for the deploy-or-stop branch.\n\n**Fallback:**\n- If endpoint information is not available from context, explicitly ask the user to provide the VST endpoint (host\u002FIP and port).\n\n**Run all curl commands yourself** — never instruct the user to run commands manually.\n\n**Auth:** Optional. Most deployments run without auth. If a `401` is returned, retry with `-H \"Authorization: Bearer \u003Ctoken>\"` and ask the user for the token.\n\n**Start\u002Fend time handling:** Any API that requires `startTime`\u002F`endTime`:\n- If the user provides them, use those values directly.\n- If the user does not provide them, first fetch the timelines for the relevant stream to find valid recorded ranges, then pick appropriate values from the response before calling the API. Never fabricate timestamps.\n\n**Resolving sensorId \u002F streamId:** If the user has not provided a sensorId or streamId, look it up automatically using one of:\n- `GET \u002Fsensor\u002Flist` — lists all sensors with their `sensorId`\n- `GET \u002Fsensor\u002F{sensorId}\u002Fstreams` — lists streams for a specific sensor with their `streamId`\n- `GET \u002Fsensor\u002Fstreams` — lists all streams across all sensors\n- `GET \u002Flive\u002Fstreams` — lists all active live streams\n- `GET \u002Freplay\u002Fstreams` — lists all available replay streams\n\nIf a sensor has only one stream, `sensorId` and `streamId` are equal and can be used interchangeably.\n\n---\n\n## Service Map\n\n| Capability | URL prefix | Authoritative reference |\n|---|---|---|\n| Version \u002F health check | `\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion` | `references\u002Fapi-reference.md` |\n| Sensor list \u002F info \u002F status \u002F add \u002F delete | `\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F` | `references\u002Fapi-reference.md` |\n| Sensor streams | `\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fstreams`, `\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F{id}\u002Fstreams` | `references\u002Fapi-reference.md` |\n| Network scan | `\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fscan` | `references\u002Fapi-reference.md` |\n| Recording timelines | `\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F` | `references\u002Fapi-reference.md` |\n| Video clip download \u002F URL | `\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F` | `references\u002Fapi-reference.md` (operations) + `references\u002Fintegrate-vios-service.md § Known Integration Constraints` (Finding 8: `\u002Furl` double-`http:\u002F\u002F` bug — prefer binary direct endpoints) |\n| File upload \u002F delete | `\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F` | `references\u002Fapi-reference.md` (PUT v2 + legacy v1 endpoints) + `references\u002Fdeploy-vios-service.md § Known Deployment Issues` (Finding 9: libav-missing failure mode) |\n| Live streams \u002F snapshot (picture) | `\u002Fvst\u002Fapi\u002Fv1\u002Flive\u002F` | `references\u002Fapi-reference.md` |\n| Replay streams \u002F historical snapshot | `\u002Fvst\u002Fapi\u002Fv1\u002Freplay\u002F` | `references\u002Fapi-reference.md` (operations) + `references\u002Fintegrate-vios-service.md § Known Integration Constraints` (Finding 8) |\n| **NvStreamer**: file-to-RTSP republisher (upload, retrieve generated RTSP URL, filesystem scan, frame snapshots) | `http:\u002F\u002F${HOST_IP}:${NVSTREAMER_HTTP_PORT:-31000}\u002Fvst\u002Fapi\u002Fv1\u002F` | `references\u002Fnvstreamer-api-reference.md` (the streamer endpoint is **separate** from the VIOS gateway — different port, `type: \"streamer\"` on `\u002Fversion`) |\n\n---\n\n## Operations\n\nThe full VIOS REST API reference — sensor management, storage, snapshots, clip extraction, WebRTC live\u002Freplay, RTSP proxy, recorder, service configuration, and service discovery — lives in [`references\u002Fapi-reference.md`](references\u002Fapi-reference.md). Read that file when invoking any operation.\n\nWhen a request involves serving an on-disk video file as a synthetic RTSP camera (upload a sample to NvStreamer, retrieve the auto-generated RTSP URL, register that URL with VIOS), point at the NvStreamer endpoint and follow [`references\u002Fnvstreamer-api-reference.md`](references\u002Fnvstreamer-api-reference.md) for the surface. NvStreamer comes up automatically with any VIOS-using profile that ships it; do not deploy it separately.\n\nFor integration- and deployment-time questions about how VIOS interacts with other microservices or how it's brought up, defer to [`references\u002Fintegrate-vios-service.md`](references\u002Fintegrate-vios-service.md) and [`references\u002Fdeploy-vios-service.md`](references\u002Fdeploy-vios-service.md) respectively (see the **Reference contracts** table above for what each covers).\n\n---\n\n## Workflow: sensor name\u002FIP -> clip or snapshot\n\nWhen the user has a sensor name or IP but needs a clip or snapshot:\n\n0. Verify VST is reachable (see Setup — Availability Check):\n   ```bash\n   curl -sf --connect-timeout 5 \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\"\n   ```\n1. List sensors to find `sensorId`:\n   ```bash\n   curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Flist\" | jq .\n   ```\n2. Get streams for that sensor to find `streamId` (prefer `isMain: true`):\n   ```bash\n   curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstreams\" | jq .\n   ```\n3. Check timelines to confirm a recording exists in the requested range:\n   ```bash\n   curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F\u003CstreamId>\u002Ftimelines\" | jq .\n   ```\n4. Download clip or snapshot using the `streamId`. Prefer the **binary direct endpoints** (`\u002Fstorage\u002Ffile\u002F\u003CstreamId>?startTime=...&endTime=...`, `\u002Freplay\u002Fstream\u002F\u003CstreamId>\u002Fpicture?startTime=...`, `\u002Fstorage\u002Fstream\u002F\u003CstreamId>\u002Fpicture?startTime=...`) over the `\u002Furl` JSON envelope variants — see `references\u002Fintegrate-vios-service.md § Known Integration Constraints` Finding 8 (the `\u002Furl` variants return double-`http:\u002F\u002F` URLs in 3.2.0 and require client-side stripping).\n\n---\n\n## Responses\n\n**Success with data:** JSON object or array.\n\n**Success with no data:** `null` — a `null` response means the API call succeeded but there is no data to return (e.g. no schedule configured, scan returned no results). It is not an error.\n\n**Success with boolean:** Some endpoints return `true` on success (e.g. `DELETE \u002Fsensor\u002F{sensorId}`).\n\n**Error:** JSON object with `error_code` and `error_message`:\n```json\n{\n  \"error_code\": \"VMSInternalError\",\n  \"error_message\": \"VMS internal processing error\"\n}\n```\n\nCommon codes: `VMSInternalError`, `VMSNotFound`, `VMSInvalidParameter`.\n\nIf you see `InvalidParameterError: Failed to get media information` on a PUT upload, this is the libav-missing failure mode — VIOS was deployed without `VST_INSTALL_ADDITIONAL_PACKAGES=true`. See `references\u002Fdeploy-vios-service.md § Known Deployment Issues` Finding 9 for the fix.\n\nIf you see double-`http:\u002F\u002F` prefixes in `imageUrl` or `videoUrl` fields on `\u002Furl`-variant responses, that's Finding 8 — strip the leading `http:\u002F\u002F` client-side or switch to binary direct endpoints.\n\n---\n\n## Examples\n\nExample operation prompts:\n- \"List the active VIOS sensors and show their stream status.\"\n- \"Upload this sample video to VIOS and return the generated stream id.\"\n- \"Download a two-second clip from this sensor's recording timeline.\"\n- \"Use NvStreamer to upload a file and retrieve its generated RTSP URL.\"\n\n## Limitations\n\n- VIOS operations require a reachable VST backend; stop or deploy prerequisites\n  when the health probe fails.\n- Most deployments do not require auth, but a deployment can add an external\n  auth layer.\n- Container-side paths in examples use `${VST_CONTAINER_ROOT}` as a neutral\n  placeholder for the VST install root inside the container. Resolve it from the\n  active deployment before using path examples.\n- Do not print API keys, bearer tokens, or generated credentials in logs or\n  final responses.\n\n## Troubleshooting\n\n- **Error**: health probe fails. **Cause**: VIOS is not deployed or the endpoint\n  is wrong. **Solution**: follow the deployment prerequisite flow or ask for the\n  correct VST endpoint.\n- **Error**: uploads fail with `Failed to get media information`. **Cause**:\n  libav packages were not installed in the VIOS container. **Solution**: set\n  `VST_INSTALL_ADDITIONAL_PACKAGES=true` and redeploy.\n- **Error**: `\u002Furl` responses contain `http:\u002F\u002Fhttp:\u002F\u002F...`. **Cause**: known URL\n  construction defect. **Solution**: use binary direct endpoints or strip the\n  duplicated prefix.\n\n---\n\n## Tips\n\n- **jq:** All JSON responses are piped through `jq .` for readability. Binary responses (clip download, snapshot) are not — they use `-o \u003Cfile>` instead.\n- **Time format:** Always ISO 8601 UTC, e.g. `2026-04-10T10:30:00Z` or `2026-04-10T10:30:00.000Z`.\n- **streamId header:** Live\u002Freplay\u002Frecorder endpoints require `streamId` as BOTH a path parameter AND a request header — include both.\n- **Large clips:** Use the binary direct `\u002Fstorage\u002Ffile\u002F\u003Cid>?...&container=mp4` endpoint with `-o clip.mp4` for direct streaming. The `\u002Furl` envelope variant has the Finding 8 double-`http:\u002F\u002F` defect — avoid until upstream fixes it or use client-side prefix stripping.\n- **Sensor vs stream ID:** `sensorId` identifies a camera; `streamId` identifies a specific video stream from that camera (a sensor can have a main stream and sub-streams).\n- **Identifying sensor type (RTSP vs uploaded file):** Call `GET \u002Fsensor\u002F\u003CsensorId>\u002Fstreams` and inspect the `url` field of each stream. If `url` starts with `rtsp:\u002F\u002F` it is a live RTSP\u002FIP camera stream. If `url` is a file path (e.g. `\"${VST_CONTAINER_ROOT}\u002Fstreamer_videos\u002FTruckAccident.mp4\"`) it is an uploaded file sensor. This determines which delete flow to use — see Section 8.\n- **Upload timestamp is honored for the recorded timeline:** When uploading a file via `PUT \u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002Ffile\u002F\u003Cfilename>?timestamp=\u003Ciso>`, the timeline returned by `GET \u002Fstorage\u002F\u003CstreamId>\u002Ftimelines` is anchored at the supplied timestamp, not the upload wall-clock time. Subsequent snapshot \u002F clip queries MUST use timestamps within this range — fetch the timeline first. See `references\u002Fapi-reference.md § 8` and `references\u002Fintegrate-vios-service.md § Integration Interfaces > Inputs > Upload video file` for the authoritative contract.\n- **Endpoint resolution:** The VST endpoint is provided by the VSS deployment context. Do not attempt manual IP\u002Fport discovery. If unavailable, ask the user. All curl examples use `\u003CVST_ENDPOINT>` as a placeholder — substitute the resolved endpoint before executing.\n",{"data":35,"body":40},{"name":4,"description":6,"license":26,"metadata":36},{"version":37,"github-url":38,"tags":39},"3.2.0","https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization","nvidia blueprint operational",{"type":41,"children":42},"root",[43,52,58,64,138,144,151,156,165,219,227,292,298,310,612,618,649,966,970,976,1122,1125,1131,1147,1155,1173,1181,1258,1266,1274,1284,1310,1336,1349,1359,1429,1447,1450,1456,1809,1812,1818,1833,1848,1879,1882,1888,1893,2181,2184,2190,2200,2224,2249,2273,2372,2397,2424,2465,2468,2474,2479,2502,2508,2539,2545,2642,2645,2651,2899],{"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],{"type":50,"value":57},"Manage VIOS and NvStreamer API operations for VSS video input\u002Foutput and\nstorage workflows: sensors, streams, uploads, snapshots, clips, timelines, and\nrecording status.",{"type":44,"tag":45,"props":59,"children":61},{"id":60},"prerequisites",[62],{"type":50,"value":63},"Prerequisites",{"type":44,"tag":65,"props":66,"children":67},"ul",{},[68,99,119],{"type":44,"tag":69,"props":70,"children":71},"li",{},[72,74,81,83,89,91,97],{"type":50,"value":73},"Active VSS deployment reachable on ",{"type":44,"tag":75,"props":76,"children":78},"code",{"className":77},[],[79],{"type":50,"value":80},"$HOST_IP",{"type":50,"value":82}," (see ",{"type":44,"tag":75,"props":84,"children":86},{"className":85},[],[87],{"type":50,"value":88},"vss-deploy-profile",{"type":50,"value":90}," and ",{"type":44,"tag":75,"props":92,"children":94},{"className":93},[],[95],{"type":50,"value":96},"references\u002F",{"type":50,"value":98},").",{"type":44,"tag":69,"props":100,"children":101},{},[102,104,110,111,117],{"type":50,"value":103},"NGC credentials in ",{"type":44,"tag":75,"props":105,"children":107},{"className":106},[],[108],{"type":50,"value":109},"$NGC_CLI_API_KEY",{"type":50,"value":90},{"type":44,"tag":75,"props":112,"children":114},{"className":113},[],[115],{"type":50,"value":116},"$NVIDIA_API_KEY",{"type":50,"value":118}," for any image pulls.",{"type":44,"tag":69,"props":120,"children":121},{},[122,128,130,136],{"type":44,"tag":75,"props":123,"children":125},{"className":124},[],[126],{"type":50,"value":127},"curl",{"type":50,"value":129},", ",{"type":44,"tag":75,"props":131,"children":133},{"className":132},[],[134],{"type":50,"value":135},"jq",{"type":50,"value":137},", and Docker available on the caller.",{"type":44,"tag":45,"props":139,"children":141},{"id":140},"instructions",[142],{"type":50,"value":143},"Instructions",{"type":44,"tag":145,"props":146,"children":148},"h1",{"id":147},"vios-operations",[149],{"type":50,"value":150},"VIOS Operations",{"type":44,"tag":53,"props":152,"children":153},{},[154],{"type":50,"value":155},"Call the VIOS REST API to manage cameras\u002Fsensors, RTSP streams, recordings, snapshots, and storage. Use when asked to: add a camera, add an RTSP stream, list sensors, show configured sensors\u002Fcameras\u002Fstreams, check stream status, get a snapshot, download a clip, upload a video file, or manage video storage. Query the VIOS API directly using curl — do not navigate the UI.",{"type":44,"tag":53,"props":157,"children":158},{},[159],{"type":44,"tag":160,"props":161,"children":162},"strong",{},[163],{"type":50,"value":164},"Upload routing rule:",{"type":44,"tag":65,"props":166,"children":167},{},[168,201,206],{"type":44,"tag":69,"props":169,"children":170},{},[171,173,179,181,187,189,199],{"type":50,"value":172},"If the user asks to \"upload ",{"type":44,"tag":75,"props":174,"children":176},{"className":175},[],[177],{"type":50,"value":178},"\u003Cfile>.mp4",{"type":50,"value":180}," to VIOS\", \"upload a video file\", or otherwise means storing a local video as a VIOS file-backed sensor, use the direct VIOS API: ",{"type":44,"tag":75,"props":182,"children":184},{"className":183},[],[185],{"type":50,"value":186},"PUT \u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002Ffile\u002F{filename}",{"type":50,"value":188}," from ",{"type":44,"tag":190,"props":191,"children":193},"a",{"href":192},"references\u002Fapi-reference.md",[194],{"type":44,"tag":75,"props":195,"children":197},{"className":196},[],[198],{"type":50,"value":192},{"type":50,"value":200}," Section 8.",{"type":44,"tag":69,"props":202,"children":203},{},[204],{"type":50,"value":205},"Use NvStreamer only when the user explicitly needs a live\u002Fsynthetic RTSP camera feed, asks for NvStreamer, or asks to retrieve an RTSP URL.",{"type":44,"tag":69,"props":207,"children":208},{},[209,211,217],{"type":50,"value":210},"Do not substitute the NvStreamer upload -> RTSP URL -> VIOS ",{"type":44,"tag":75,"props":212,"children":214},{"className":213},[],[215],{"type":50,"value":216},"\u002Fsensor\u002Fadd",{"type":50,"value":218}," handoff for a plain VIOS MP4 upload request.",{"type":44,"tag":53,"props":220,"children":221},{},[222],{"type":44,"tag":160,"props":223,"children":224},{},[225],{"type":50,"value":226},"Do NOT use this skill for:",{"type":44,"tag":65,"props":228,"children":229},{},[230,243,255,267,280],{"type":44,"tag":69,"props":231,"children":232},{},[233,235,241],{"type":50,"value":234},"VLM inference or ad-hoc visual Q&A about a clip — use ",{"type":44,"tag":75,"props":236,"children":238},{"className":237},[],[239],{"type":50,"value":240},"vss-ask-video",{"type":50,"value":242},".",{"type":44,"tag":69,"props":244,"children":245},{},[246,248,254],{"type":50,"value":247},"Semantic search across the archive, or ingesting video for search — use ",{"type":44,"tag":75,"props":249,"children":251},{"className":250},[],[252],{"type":50,"value":253},"vss-search-archive",{"type":50,"value":242},{"type":44,"tag":69,"props":256,"children":257},{},[258,260,266],{"type":50,"value":259},"Narrative summaries of a recorded clip — use ",{"type":44,"tag":75,"props":261,"children":263},{"className":262},[],[264],{"type":50,"value":265},"vss-summarize-video",{"type":50,"value":242},{"type":44,"tag":69,"props":268,"children":269},{},[270,272,278],{"type":50,"value":271},"Incident-range or alert-window reports — use ",{"type":44,"tag":75,"props":273,"children":275},{"className":274},[],[276],{"type":50,"value":277},"vss-generate-video-report",{"type":50,"value":279}," Mode B.",{"type":44,"tag":69,"props":281,"children":282},{},[283,285,291],{"type":50,"value":284},"Reading analytics metrics, incidents, or alerts — use ",{"type":44,"tag":75,"props":286,"children":288},{"className":287},[],[289],{"type":50,"value":290},"vss-query-analytics",{"type":50,"value":242},{"type":44,"tag":45,"props":293,"children":295},{"id":294},"reference-contracts-shipped-with-this-skill",[296],{"type":50,"value":297},"Reference contracts shipped with this skill",{"type":44,"tag":53,"props":299,"children":300},{},[301,303,308],{"type":50,"value":302},"This skill bundles four reference files under ",{"type":44,"tag":75,"props":304,"children":306},{"className":305},[],[307],{"type":50,"value":96},{"type":50,"value":309},". Read whichever applies to the task in front of you:",{"type":44,"tag":311,"props":312,"children":313},"table",{},[314,337],{"type":44,"tag":315,"props":316,"children":317},"thead",{},[318],{"type":44,"tag":319,"props":320,"children":321},"tr",{},[322,328,332],{"type":44,"tag":323,"props":324,"children":325},"th",{},[326],{"type":50,"value":327},"File",{"type":44,"tag":323,"props":329,"children":330},{},[331],{"type":50,"value":51},{"type":44,"tag":323,"props":333,"children":334},{},[335],{"type":50,"value":336},"Audience",{"type":44,"tag":338,"props":339,"children":340},"tbody",{},[341,371,484,560],{"type":44,"tag":319,"props":342,"children":343},{},[344,356,366],{"type":44,"tag":345,"props":346,"children":347},"td",{},[348],{"type":44,"tag":190,"props":349,"children":350},{"href":192},[351],{"type":44,"tag":75,"props":352,"children":354},{"className":353},[],[355],{"type":50,"value":192},{"type":44,"tag":345,"props":357,"children":358},{},[359,361],{"type":50,"value":360},"The full VIOS REST API reference (the runtime contract) — sensor management, storage, snapshots, clip extraction, WebRTC live\u002Freplay, RTSP proxy, recorder, service configuration, service discovery. ",{"type":44,"tag":160,"props":362,"children":363},{},[364],{"type":50,"value":365},"Read this when invoking any VIOS API operation.",{"type":44,"tag":345,"props":367,"children":368},{},[369],{"type":50,"value":370},"Operational users + this skill itself",{"type":44,"tag":319,"props":372,"children":373},{},[374,386,472],{"type":44,"tag":345,"props":375,"children":376},{},[377],{"type":44,"tag":190,"props":378,"children":380},{"href":379},"references\u002Fnvstreamer-api-reference.md",[381],{"type":44,"tag":75,"props":382,"children":384},{"className":383},[],[385],{"type":50,"value":379},{"type":44,"tag":345,"props":387,"children":388},{},[389,391,396,398,404,406,412,414,420,422,427,429,435,436,442,443,449,451,457,459,464,466,471],{"type":50,"value":390},"The ",{"type":44,"tag":160,"props":392,"children":393},{},[394],{"type":50,"value":395},"NvStreamer REST API reference",{"type":50,"value":397}," — version, sensor list\u002Finfo\u002Fstatus\u002Fstreams, the three upload methods (PUT v2 \u002F PUT v1 \u002F POST multipart) with the ",{"type":44,"tag":75,"props":399,"children":401},{"className":400},[],[402],{"type":50,"value":403},"nvstreamer-*",{"type":50,"value":405}," custom headers, delete, snapshots (frame-indexed live, timestamp-indexed storage), storage info, filesystem scan. NvStreamer (",{"type":44,"tag":75,"props":407,"children":409},{"className":408},[],[410],{"type":50,"value":411},"vss-vios-nvstreamer",{"type":50,"value":413},", the streamer-adaptor variant of ",{"type":44,"tag":75,"props":415,"children":417},{"className":416},[],[418],{"type":50,"value":419},"launch_vst",{"type":50,"value":421},") is ",{"type":44,"tag":160,"props":423,"children":424},{},[425],{"type":50,"value":426},"brought up by the same profiles that bring VIOS up",{"type":50,"value":428}," — ",{"type":44,"tag":75,"props":430,"children":432},{"className":431},[],[433],{"type":50,"value":434},"dev-profile-alerts",{"type":50,"value":129},{"type":44,"tag":75,"props":437,"children":439},{"className":438},[],[440],{"type":50,"value":441},"dev-profile-lvs",{"type":50,"value":129},{"type":44,"tag":75,"props":444,"children":446},{"className":445},[],[447],{"type":50,"value":448},"dev-profile-search",{"type":50,"value":450},", all warehouse profiles. See ",{"type":44,"tag":75,"props":452,"children":454},{"className":453},[],[455],{"type":50,"value":456},"integrate-vios-service.md § Topology B",{"type":50,"value":458}," for the deployment side. ",{"type":44,"tag":160,"props":460,"children":461},{},[462],{"type":50,"value":463},"Read this when serving test \u002F sample videos as synthetic RTSP, retrieving the RTSP URL NvStreamer generated for a file, or driving the canonical NvStreamer → VIOS handoff",{"type":50,"value":465}," (upload to NvStreamer → read RTSP URL → register that URL with VIOS via ",{"type":44,"tag":75,"props":467,"children":469},{"className":468},[],[470],{"type":50,"value":216},{"type":50,"value":98},{"type":44,"tag":345,"props":473,"children":474},{},[475,477,482],{"type":50,"value":476},"Operational users + skill authors composing the upload → RTSP URL → VIOS ",{"type":44,"tag":75,"props":478,"children":480},{"className":479},[],[481],{"type":50,"value":216},{"type":50,"value":483}," flow",{"type":44,"tag":319,"props":485,"children":486},{},[487,499,555],{"type":44,"tag":345,"props":488,"children":489},{},[490],{"type":44,"tag":190,"props":491,"children":493},{"href":492},"references\u002Fintegrate-vios-service.md",[494],{"type":44,"tag":75,"props":495,"children":497},{"className":496},[],[498],{"type":50,"value":492},{"type":44,"tag":345,"props":500,"children":501},{},[502,503,508,510,516,518,524,526,532,534,540,542,548,550],{"type":50,"value":390},{"type":44,"tag":160,"props":504,"children":505},{},[506],{"type":50,"value":507},"integration contract",{"type":50,"value":509}," — how VIOS plugs into other VSS microservices. Documents required peer services (RT-VLM, ELK, Kafka, Redis, ",{"type":44,"tag":75,"props":511,"children":513},{"className":512},[],[514],{"type":50,"value":515},"sdr-controller",{"type":50,"value":517}," \u002F SDRC), the structured ",{"type":44,"tag":75,"props":519,"children":521},{"className":520},[],[522],{"type":50,"value":523},"component_services:",{"type":50,"value":525}," block consumed by the ",{"type":44,"tag":75,"props":527,"children":529},{"className":528},[],[530],{"type":50,"value":531},"vss-build-vision-agent",{"type":50,"value":533}," skill's Step 4, integration inputs\u002Foutputs (Kafka topics, REST endpoints, file paths), environment variables, network requirements, and known integration constraints (e.g. the ",{"type":44,"tag":75,"props":535,"children":537},{"className":536},[],[538],{"type":50,"value":539},"\u002Furl",{"type":50,"value":541},"-variant double-",{"type":44,"tag":75,"props":543,"children":545},{"className":544},[],[546],{"type":50,"value":547},"http:\u002F\u002F",{"type":50,"value":549}," bug, the VIOS + SDRC patching requirement). ",{"type":44,"tag":160,"props":551,"children":552},{},[553],{"type":50,"value":554},"Read this when authoring a skill that talks to VIOS as a peer, when composing a new VSS deployment, or when debugging caption-pipeline wiring.",{"type":44,"tag":345,"props":556,"children":557},{},[558],{"type":50,"value":559},"Skill authors, deployment composers, pair-file maintainers",{"type":44,"tag":319,"props":561,"children":562},{},[563,575,607],{"type":44,"tag":345,"props":564,"children":565},{},[566],{"type":44,"tag":190,"props":567,"children":569},{"href":568},"references\u002Fdeploy-vios-service.md",[570],{"type":44,"tag":75,"props":571,"children":573},{"className":572},[],[574],{"type":50,"value":568},{"type":44,"tag":345,"props":576,"children":577},{},[578,579,584,586,592,594,600,602],{"type":50,"value":390},{"type":44,"tag":160,"props":580,"children":581},{},[582],{"type":50,"value":583},"deployment contract",{"type":50,"value":585}," — what it takes to bring VIOS up. Documents container images and tags (",{"type":44,"tag":75,"props":587,"children":589},{"className":588},[],[590],{"type":50,"value":591},"nvcr.io\u002Fnvidia\u002Fvss-core\u002Fvss-vios-*:3.2.0",{"type":50,"value":593},"), GPU \u002F CPU \u002F memory \u002F storage requirements, startup behavior + healthcheck tuning, required environment variables (notably ",{"type":44,"tag":75,"props":595,"children":597},{"className":596},[],[598],{"type":50,"value":599},"VST_INSTALL_ADDITIONAL_PACKAGES=true",{"type":50,"value":601}," for the libav apt-install step that gates uploads), known deployment issues (volume drift, libav missing, 502 from leftover containers), prerequisites, dry-run, verify-deployment, and tear-down commands. ",{"type":44,"tag":160,"props":603,"children":604},{},[605],{"type":50,"value":606},"Read this when VIOS isn't running and you (or your caller) need to deploy it standalone, when debugging container-startup failures, or when authoring a deploy skill that wraps VIOS.",{"type":44,"tag":345,"props":608,"children":609},{},[610],{"type":50,"value":611},"Operators, deploy-skill authors",{"type":44,"tag":45,"props":613,"children":615},{"id":614},"deployment-prerequisite-vios-must-be-running",[616],{"type":50,"value":617},"Deployment prerequisite — VIOS MUST be running",{"type":44,"tag":53,"props":619,"children":620},{},[621,623,629,631,639,641,647],{"type":50,"value":622},"This skill is primarily an API client and assumes VIOS is already up and reachable at the VST ingress (default ",{"type":44,"tag":75,"props":624,"children":626},{"className":625},[],[627],{"type":50,"value":628},"http:\u002F\u002F${HOST_IP}:30888",{"type":50,"value":630},"). It does not deploy VIOS itself, but when VIOS is unreachable it coordinates a deploy using its bundled deployment runbook (",{"type":44,"tag":190,"props":632,"children":633},{"href":568},[634],{"type":44,"tag":75,"props":635,"children":637},{"className":636},[],[638],{"type":50,"value":568},{"type":50,"value":640},") or hands off to the full-stack ",{"type":44,"tag":75,"props":642,"children":644},{"className":643},[],[645],{"type":50,"value":646},"\u002Fvss-deploy-profile",{"type":50,"value":648}," skill. Before doing any work:",{"type":44,"tag":650,"props":651,"children":652},"ol",{},[653,746,956],{"type":44,"tag":69,"props":654,"children":655},{},[656,661],{"type":44,"tag":160,"props":657,"children":658},{},[659],{"type":50,"value":660},"Probe VIOS:",{"type":44,"tag":662,"props":663,"children":668},"pre",{"className":664,"code":665,"language":666,"meta":667,"style":667},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -sf --max-time 5 \"http:\u002F\u002F${HOST_IP}:30888\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\" >\u002Fdev\u002Fnull\n","bash","",[669],{"type":44,"tag":75,"props":670,"children":671},{"__ignoreMap":667},[672],{"type":44,"tag":673,"props":674,"children":677},"span",{"class":675,"line":676},"line",1,[678,683,689,694,700,706,710,715,721,726,731,736,741],{"type":44,"tag":673,"props":679,"children":681},{"style":680},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[682],{"type":50,"value":127},{"type":44,"tag":673,"props":684,"children":686},{"style":685},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[687],{"type":50,"value":688}," -sf",{"type":44,"tag":673,"props":690,"children":691},{"style":685},[692],{"type":50,"value":693}," --max-time",{"type":44,"tag":673,"props":695,"children":697},{"style":696},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[698],{"type":50,"value":699}," 5",{"type":44,"tag":673,"props":701,"children":703},{"style":702},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[704],{"type":50,"value":705}," \"",{"type":44,"tag":673,"props":707,"children":708},{"style":685},[709],{"type":50,"value":547},{"type":44,"tag":673,"props":711,"children":712},{"style":702},[713],{"type":50,"value":714},"${",{"type":44,"tag":673,"props":716,"children":718},{"style":717},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[719],{"type":50,"value":720},"HOST_IP",{"type":44,"tag":673,"props":722,"children":723},{"style":702},[724],{"type":50,"value":725},"}",{"type":44,"tag":673,"props":727,"children":728},{"style":685},[729],{"type":50,"value":730},":30888\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion",{"type":44,"tag":673,"props":732,"children":733},{"style":702},[734],{"type":50,"value":735},"\"",{"type":44,"tag":673,"props":737,"children":738},{"style":702},[739],{"type":50,"value":740}," >",{"type":44,"tag":673,"props":742,"children":743},{"style":685},[744],{"type":50,"value":745},"\u002Fdev\u002Fnull\n",{"type":44,"tag":69,"props":747,"children":748},{},[749,754,756,846,931,935,940,942,947,949,955],{"type":44,"tag":160,"props":750,"children":751},{},[752],{"type":50,"value":753},"If the probe fails, VIOS is not deployed.",{"type":50,"value":755}," Offer two paths forward:",{"type":44,"tag":757,"props":758,"children":759},"blockquote",{},[760],{"type":44,"tag":53,"props":761,"children":762},{},[763,776,798,841],{"type":44,"tag":764,"props":765,"children":766},"em",{},[767,769,774],{"type":50,"value":768},"\"VIOS is not reachable at ",{"type":44,"tag":75,"props":770,"children":772},{"className":771},[],[773],{"type":50,"value":628},{"type":50,"value":775}," — no deployment is currently up. You have two options:",{"type":44,"tag":764,"props":777,"children":778},{},[779,781,789,791,796],{"type":50,"value":780},"(a) Bring up VIOS standalone using this skill's bundled ",{"type":44,"tag":190,"props":782,"children":783},{"href":568},[784],{"type":44,"tag":75,"props":785,"children":787},{"className":786},[],[788],{"type":50,"value":568},{"type":50,"value":790}," runbook — image tags, env vars (notably ",{"type":44,"tag":75,"props":792,"children":794},{"className":793},[],[795],{"type":50,"value":599},{"type":50,"value":797},"), host directories, NGC login, bring-up command, healthcheck loop, and known deployment issues are all documented there. This is the right path if you only need VIOS itself (no RT-VLM \u002F ELK \u002F etc.) or if you're composing a custom profile.",{"type":44,"tag":764,"props":799,"children":800},{},[801,803,808,810,816,818,824,825,831,833,839],{"type":50,"value":802},"(b) Deploy a full VSS profile that includes VIOS via the ",{"type":44,"tag":75,"props":804,"children":806},{"className":805},[],[807],{"type":50,"value":646},{"type":50,"value":809}," skill — ",{"type":44,"tag":75,"props":811,"children":813},{"className":812},[],[814],{"type":50,"value":815},"base",{"type":50,"value":817}," (recommended), ",{"type":44,"tag":75,"props":819,"children":821},{"className":820},[],[822],{"type":50,"value":823},"lvs",{"type":50,"value":129},{"type":44,"tag":75,"props":826,"children":828},{"className":827},[],[829],{"type":50,"value":830},"search",{"type":50,"value":832},", or ",{"type":44,"tag":75,"props":834,"children":836},{"className":835},[],[837],{"type":50,"value":838},"alerts",{"type":50,"value":840}," all bring VIOS up alongside other components. This is the right path if you want a complete VSS stack.",{"type":44,"tag":764,"props":842,"children":843},{},[844],{"type":50,"value":845},"Which would you like?\"",{"type":44,"tag":65,"props":847,"children":848},{},[849,899,919],{"type":44,"tag":69,"props":850,"children":851},{},[852,854,859,861,867,868,874,876,881,883,889,891,897],{"type":50,"value":853},"If the user picks (a) → walk them through ",{"type":44,"tag":75,"props":855,"children":857},{"className":856},[],[858],{"type":50,"value":568},{"type":50,"value":860}," step by step. Pay particular attention to its ",{"type":44,"tag":75,"props":862,"children":864},{"className":863},[],[865],{"type":50,"value":866},"§ Environment Variables — Required for Upload-to-Caption Path",{"type":50,"value":90},{"type":44,"tag":75,"props":869,"children":871},{"className":870},[],[872],{"type":50,"value":873},"§ Known Deployment Issues",{"type":50,"value":875}," sections — the libav-missing failure (",{"type":44,"tag":75,"props":877,"children":879},{"className":878},[],[880],{"type":50,"value":599},{"type":50,"value":882},") and the volume-drift hang (",{"type":44,"tag":75,"props":884,"children":886},{"className":885},[],[887],{"type":50,"value":888},"docker compose up --yes",{"type":50,"value":890}," or ",{"type":44,"tag":75,"props":892,"children":894},{"className":893},[],[895],{"type":50,"value":896},"docker volume rm",{"type":50,"value":898}," first) are the two most common bring-up blockers. After deploy succeeds and the probe in step 1 passes, return here.",{"type":44,"tag":69,"props":900,"children":901},{},[902,904,910,912,917],{"type":50,"value":903},"If the user picks (b) → hand off to ",{"type":44,"tag":75,"props":905,"children":907},{"className":906},[],[908],{"type":50,"value":909},"\u002Fvss-deploy-profile -p \u003Cprofile>",{"type":50,"value":911}," (default ",{"type":44,"tag":75,"props":913,"children":915},{"className":914},[],[916],{"type":50,"value":815},{"type":50,"value":918},"). Return here once it succeeds.",{"type":44,"tag":69,"props":920,"children":921},{},[922,924,929],{"type":50,"value":923},"If the user declines both → ",{"type":44,"tag":160,"props":925,"children":926},{},[927],{"type":50,"value":928},"stop",{"type":50,"value":930},". VIOS operations require the VST backend to be up; do not attempt to fabricate responses or proceed with a degraded mode.",{"type":44,"tag":932,"props":933,"children":934},"br",{},[],{"type":44,"tag":764,"props":936,"children":937},{},[938],{"type":50,"value":939},"Pre-authorized autonomous mode:",{"type":50,"value":941}," if your caller has granted explicit pre-authorization to deploy prerequisites (e.g. the request says \"pre-authorized to deploy prerequisites\", or you are running in a non-interactive evaluation harness with that permission), skip the confirmation and prefer path (a) — bring up VIOS standalone via this skill's bundled ",{"type":44,"tag":75,"props":943,"children":945},{"className":944},[],[946],{"type":50,"value":568},{"type":50,"value":948}," — unless the request explicitly asks for a full VSS profile, in which case invoke ",{"type":44,"tag":75,"props":950,"children":952},{"className":951},[],[953],{"type":50,"value":954},"\u002Fvss-deploy-profile -p base",{"type":50,"value":242},{"type":44,"tag":69,"props":957,"children":958},{},[959,964],{"type":44,"tag":160,"props":960,"children":961},{},[962],{"type":50,"value":963},"If the probe passes, proceed.",{"type":50,"value":965}," VIOS is up; all operations below are safe to execute.",{"type":44,"tag":967,"props":968,"children":969},"hr",{},[],{"type":44,"tag":45,"props":971,"children":973},{"id":972},"known-limitation-leftover-containers-from-prior-deploys",[974],{"type":50,"value":975},"Known limitation — leftover containers from prior deploys",{"type":44,"tag":53,"props":977,"children":978},{},[979,985,986,992,994,999,1001,1007,1009,1015,1017,1023,1025,1031,1033,1043,1045,1051,1052,1058,1059,1065,1066,1072,1073,1079,1081,1087,1089,1095,1097,1103,1105,1111,1113,1121],{"type":44,"tag":75,"props":980,"children":982},{"className":981},[],[983],{"type":50,"value":984},"GET \u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Flist",{"type":50,"value":90},{"type":44,"tag":75,"props":987,"children":989},{"className":988},[],[990],{"type":50,"value":991},"GET \u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstreams",{"type":50,"value":993},"\ncan return ",{"type":44,"tag":160,"props":995,"children":996},{},[997],{"type":50,"value":998},"HTTP 502 Bad Gateway",{"type":50,"value":1000}," or stale results when leftover ",{"type":44,"tag":75,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":50,"value":1006},"*-smc",{"type":50,"value":1008},"\nVST containers from an earlier deploy survive teardown and win the\n",{"type":44,"tag":75,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":50,"value":1014},"network_mode: host",{"type":50,"value":1016}," port-bind race on ",{"type":44,"tag":75,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":50,"value":1022},":30000",{"type":50,"value":1024}," \u002F ",{"type":44,"tag":75,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":50,"value":1030},":30888",{"type":50,"value":1032},". ",{"type":44,"tag":160,"props":1034,"children":1035},{},[1036,1038],{"type":50,"value":1037},"Remediation:\nre-run ",{"type":44,"tag":75,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":50,"value":646},{"type":50,"value":1044}," — its Step 0 teardown grep clears the full\n",{"type":44,"tag":75,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":50,"value":1050},"sensor-ms-*",{"type":50,"value":1024},{"type":44,"tag":75,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":50,"value":1057},"vst-ingress-*",{"type":50,"value":1024},{"type":44,"tag":75,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":50,"value":1064},"sdr-*",{"type":50,"value":1024},{"type":44,"tag":75,"props":1067,"children":1069},{"className":1068},[],[1070],{"type":50,"value":1071},"sdrc-*",{"type":50,"value":1024},{"type":44,"tag":75,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":50,"value":1078},"rtspserver-ms-*",{"type":50,"value":1080}," set.\nOther paths (",{"type":44,"tag":75,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":50,"value":1086},"storage\u002Ffile\u002F*",{"type":50,"value":1088}," upload, ",{"type":44,"tag":75,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":50,"value":1094},"*\u002Fpicture\u002Furl",{"type":50,"value":1096}," snapshot, ",{"type":44,"tag":75,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":50,"value":1102},"*\u002Furl",{"type":50,"value":1104}," clip\nextraction) are unaffected. Full failure-mode catalogue, remediation, and the\ncurrent routing contract (direct vs SDRC; SDR\u002FEnvoy removed in PR #711) live in\n",{"type":44,"tag":75,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":50,"value":1110},"references\u002Fdeploy-vios-service.md § Known Deployment Issues",{"type":50,"value":1112}," and\n",{"type":44,"tag":190,"props":1114,"children":1118},{"href":1115,"rel":1116},"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\u002Fissues\u002F151",[1117],"nofollow",[1119],{"type":50,"value":1120},"issue #151",{"type":50,"value":242},{"type":44,"tag":967,"props":1123,"children":1124},{},[],{"type":44,"tag":45,"props":1126,"children":1128},{"id":1127},"setup",[1129],{"type":50,"value":1130},"Setup",{"type":44,"tag":53,"props":1132,"children":1133},{},[1134,1139,1141],{"type":44,"tag":160,"props":1135,"children":1136},{},[1137],{"type":50,"value":1138},"Base URL:",{"type":50,"value":1140}," ",{"type":44,"tag":75,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":50,"value":1146},"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1",{"type":44,"tag":53,"props":1148,"children":1149},{},[1150],{"type":44,"tag":160,"props":1151,"children":1152},{},[1153],{"type":50,"value":1154},"Endpoint Resolution:",{"type":44,"tag":65,"props":1156,"children":1157},{},[1158,1163,1168],{"type":44,"tag":69,"props":1159,"children":1160},{},[1161],{"type":50,"value":1162},"Use the VIOS endpoint associated with the active VSS deployment. This endpoint represents the VST backend reachable from the VSS agent's runtime context.",{"type":44,"tag":69,"props":1164,"children":1165},{},[1166],{"type":50,"value":1167},"Do NOT attempt to discover host, IP, or port via shell commands, filesystem access, or static configuration files.",{"type":44,"tag":69,"props":1169,"children":1170},{},[1171],{"type":50,"value":1172},"Assume the VSS deployment context already provides the correct network endpoint for VST.",{"type":44,"tag":53,"props":1174,"children":1175},{},[1176],{"type":44,"tag":160,"props":1177,"children":1178},{},[1179],{"type":50,"value":1180},"Availability Check:",{"type":44,"tag":65,"props":1182,"children":1183},{},[1184,1246],{"type":44,"tag":69,"props":1185,"children":1186},{},[1187,1189],{"type":50,"value":1188},"Before making any API call, verify that the VST backend is reachable via the VSS deployment endpoint:\n",{"type":44,"tag":662,"props":1190,"children":1192},{"className":664,"code":1191,"language":666,"meta":667,"style":667},"curl -sf --connect-timeout 5 http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\n",[1193],{"type":44,"tag":75,"props":1194,"children":1195},{"__ignoreMap":667},[1196],{"type":44,"tag":673,"props":1197,"children":1198},{"class":675,"line":676},[1199,1203,1207,1212,1216,1221,1226,1231,1236,1241],{"type":44,"tag":673,"props":1200,"children":1201},{"style":680},[1202],{"type":50,"value":127},{"type":44,"tag":673,"props":1204,"children":1205},{"style":685},[1206],{"type":50,"value":688},{"type":44,"tag":673,"props":1208,"children":1209},{"style":685},[1210],{"type":50,"value":1211}," --connect-timeout",{"type":44,"tag":673,"props":1213,"children":1214},{"style":696},[1215],{"type":50,"value":699},{"type":44,"tag":673,"props":1217,"children":1218},{"style":685},[1219],{"type":50,"value":1220}," http:\u002F\u002F",{"type":44,"tag":673,"props":1222,"children":1223},{"style":702},[1224],{"type":50,"value":1225},"\u003C",{"type":44,"tag":673,"props":1227,"children":1228},{"style":685},[1229],{"type":50,"value":1230},"VST_ENDPOIN",{"type":44,"tag":673,"props":1232,"children":1233},{"style":717},[1234],{"type":50,"value":1235},"T",{"type":44,"tag":673,"props":1237,"children":1238},{"style":702},[1239],{"type":50,"value":1240},">",{"type":44,"tag":673,"props":1242,"children":1243},{"style":685},[1244],{"type":50,"value":1245},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\n",{"type":44,"tag":69,"props":1247,"children":1248},{},[1249,1251,1256],{"type":50,"value":1250},"If the backend is unavailable (non-zero exit code or connection error), fail gracefully and report the error to the user. See the ",{"type":44,"tag":160,"props":1252,"children":1253},{},[1254],{"type":50,"value":1255},"Deployment prerequisite",{"type":50,"value":1257}," section above for the deploy-or-stop branch.",{"type":44,"tag":53,"props":1259,"children":1260},{},[1261],{"type":44,"tag":160,"props":1262,"children":1263},{},[1264],{"type":50,"value":1265},"Fallback:",{"type":44,"tag":65,"props":1267,"children":1268},{},[1269],{"type":44,"tag":69,"props":1270,"children":1271},{},[1272],{"type":50,"value":1273},"If endpoint information is not available from context, explicitly ask the user to provide the VST endpoint (host\u002FIP and port).",{"type":44,"tag":53,"props":1275,"children":1276},{},[1277,1282],{"type":44,"tag":160,"props":1278,"children":1279},{},[1280],{"type":50,"value":1281},"Run all curl commands yourself",{"type":50,"value":1283}," — never instruct the user to run commands manually.",{"type":44,"tag":53,"props":1285,"children":1286},{},[1287,1292,1294,1300,1302,1308],{"type":44,"tag":160,"props":1288,"children":1289},{},[1290],{"type":50,"value":1291},"Auth:",{"type":50,"value":1293}," Optional. Most deployments run without auth. If a ",{"type":44,"tag":75,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":50,"value":1299},"401",{"type":50,"value":1301}," is returned, retry with ",{"type":44,"tag":75,"props":1303,"children":1305},{"className":1304},[],[1306],{"type":50,"value":1307},"-H \"Authorization: Bearer \u003Ctoken>\"",{"type":50,"value":1309}," and ask the user for the token.",{"type":44,"tag":53,"props":1311,"children":1312},{},[1313,1318,1320,1326,1328,1334],{"type":44,"tag":160,"props":1314,"children":1315},{},[1316],{"type":50,"value":1317},"Start\u002Fend time handling:",{"type":50,"value":1319}," Any API that requires ",{"type":44,"tag":75,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":50,"value":1325},"startTime",{"type":50,"value":1327},"\u002F",{"type":44,"tag":75,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":50,"value":1333},"endTime",{"type":50,"value":1335},":",{"type":44,"tag":65,"props":1337,"children":1338},{},[1339,1344],{"type":44,"tag":69,"props":1340,"children":1341},{},[1342],{"type":50,"value":1343},"If the user provides them, use those values directly.",{"type":44,"tag":69,"props":1345,"children":1346},{},[1347],{"type":50,"value":1348},"If the user does not provide them, first fetch the timelines for the relevant stream to find valid recorded ranges, then pick appropriate values from the response before calling the API. Never fabricate timestamps.",{"type":44,"tag":53,"props":1350,"children":1351},{},[1352,1357],{"type":44,"tag":160,"props":1353,"children":1354},{},[1355],{"type":50,"value":1356},"Resolving sensorId \u002F streamId:",{"type":50,"value":1358}," If the user has not provided a sensorId or streamId, look it up automatically using one of:",{"type":44,"tag":65,"props":1360,"children":1361},{},[1362,1379,1396,1407,1418],{"type":44,"tag":69,"props":1363,"children":1364},{},[1365,1371,1373],{"type":44,"tag":75,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":50,"value":1370},"GET \u002Fsensor\u002Flist",{"type":50,"value":1372}," — lists all sensors with their ",{"type":44,"tag":75,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":50,"value":1378},"sensorId",{"type":44,"tag":69,"props":1380,"children":1381},{},[1382,1388,1390],{"type":44,"tag":75,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":50,"value":1387},"GET \u002Fsensor\u002F{sensorId}\u002Fstreams",{"type":50,"value":1389}," — lists streams for a specific sensor with their ",{"type":44,"tag":75,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":50,"value":1395},"streamId",{"type":44,"tag":69,"props":1397,"children":1398},{},[1399,1405],{"type":44,"tag":75,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":50,"value":1404},"GET \u002Fsensor\u002Fstreams",{"type":50,"value":1406}," — lists all streams across all sensors",{"type":44,"tag":69,"props":1408,"children":1409},{},[1410,1416],{"type":44,"tag":75,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":50,"value":1415},"GET \u002Flive\u002Fstreams",{"type":50,"value":1417}," — lists all active live streams",{"type":44,"tag":69,"props":1419,"children":1420},{},[1421,1427],{"type":44,"tag":75,"props":1422,"children":1424},{"className":1423},[],[1425],{"type":50,"value":1426},"GET \u002Freplay\u002Fstreams",{"type":50,"value":1428}," — lists all available replay streams",{"type":44,"tag":53,"props":1430,"children":1431},{},[1432,1434,1439,1440,1445],{"type":50,"value":1433},"If a sensor has only one stream, ",{"type":44,"tag":75,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":50,"value":1378},{"type":50,"value":90},{"type":44,"tag":75,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":50,"value":1395},{"type":50,"value":1446}," are equal and can be used interchangeably.",{"type":44,"tag":967,"props":1448,"children":1449},{},[],{"type":44,"tag":45,"props":1451,"children":1453},{"id":1452},"service-map",[1454],{"type":50,"value":1455},"Service Map",{"type":44,"tag":311,"props":1457,"children":1458},{},[1459,1480],{"type":44,"tag":315,"props":1460,"children":1461},{},[1462],{"type":44,"tag":319,"props":1463,"children":1464},{},[1465,1470,1475],{"type":44,"tag":323,"props":1466,"children":1467},{},[1468],{"type":50,"value":1469},"Capability",{"type":44,"tag":323,"props":1471,"children":1472},{},[1473],{"type":50,"value":1474},"URL prefix",{"type":44,"tag":323,"props":1476,"children":1477},{},[1478],{"type":50,"value":1479},"Authoritative reference",{"type":44,"tag":338,"props":1481,"children":1482},{},[1483,1508,1533,1565,1590,1615,1663,1696,1721,1754],{"type":44,"tag":319,"props":1484,"children":1485},{},[1486,1491,1500],{"type":44,"tag":345,"props":1487,"children":1488},{},[1489],{"type":50,"value":1490},"Version \u002F health check",{"type":44,"tag":345,"props":1492,"children":1493},{},[1494],{"type":44,"tag":75,"props":1495,"children":1497},{"className":1496},[],[1498],{"type":50,"value":1499},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion",{"type":44,"tag":345,"props":1501,"children":1502},{},[1503],{"type":44,"tag":75,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":50,"value":192},{"type":44,"tag":319,"props":1509,"children":1510},{},[1511,1516,1525],{"type":44,"tag":345,"props":1512,"children":1513},{},[1514],{"type":50,"value":1515},"Sensor list \u002F info \u002F status \u002F add \u002F delete",{"type":44,"tag":345,"props":1517,"children":1518},{},[1519],{"type":44,"tag":75,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":50,"value":1524},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F",{"type":44,"tag":345,"props":1526,"children":1527},{},[1528],{"type":44,"tag":75,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":50,"value":192},{"type":44,"tag":319,"props":1534,"children":1535},{},[1536,1541,1557],{"type":44,"tag":345,"props":1537,"children":1538},{},[1539],{"type":50,"value":1540},"Sensor streams",{"type":44,"tag":345,"props":1542,"children":1543},{},[1544,1550,1551],{"type":44,"tag":75,"props":1545,"children":1547},{"className":1546},[],[1548],{"type":50,"value":1549},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fstreams",{"type":50,"value":129},{"type":44,"tag":75,"props":1552,"children":1554},{"className":1553},[],[1555],{"type":50,"value":1556},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F{id}\u002Fstreams",{"type":44,"tag":345,"props":1558,"children":1559},{},[1560],{"type":44,"tag":75,"props":1561,"children":1563},{"className":1562},[],[1564],{"type":50,"value":192},{"type":44,"tag":319,"props":1566,"children":1567},{},[1568,1573,1582],{"type":44,"tag":345,"props":1569,"children":1570},{},[1571],{"type":50,"value":1572},"Network scan",{"type":44,"tag":345,"props":1574,"children":1575},{},[1576],{"type":44,"tag":75,"props":1577,"children":1579},{"className":1578},[],[1580],{"type":50,"value":1581},"\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fscan",{"type":44,"tag":345,"props":1583,"children":1584},{},[1585],{"type":44,"tag":75,"props":1586,"children":1588},{"className":1587},[],[1589],{"type":50,"value":192},{"type":44,"tag":319,"props":1591,"children":1592},{},[1593,1598,1607],{"type":44,"tag":345,"props":1594,"children":1595},{},[1596],{"type":50,"value":1597},"Recording timelines",{"type":44,"tag":345,"props":1599,"children":1600},{},[1601],{"type":44,"tag":75,"props":1602,"children":1604},{"className":1603},[],[1605],{"type":50,"value":1606},"\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F",{"type":44,"tag":345,"props":1608,"children":1609},{},[1610],{"type":44,"tag":75,"props":1611,"children":1613},{"className":1612},[],[1614],{"type":50,"value":192},{"type":44,"tag":319,"props":1616,"children":1617},{},[1618,1623,1631],{"type":44,"tag":345,"props":1619,"children":1620},{},[1621],{"type":50,"value":1622},"Video clip download \u002F URL",{"type":44,"tag":345,"props":1624,"children":1625},{},[1626],{"type":44,"tag":75,"props":1627,"children":1629},{"className":1628},[],[1630],{"type":50,"value":1606},{"type":44,"tag":345,"props":1632,"children":1633},{},[1634,1639,1641,1647,1649,1654,1656,1661],{"type":44,"tag":75,"props":1635,"children":1637},{"className":1636},[],[1638],{"type":50,"value":192},{"type":50,"value":1640}," (operations) + ",{"type":44,"tag":75,"props":1642,"children":1644},{"className":1643},[],[1645],{"type":50,"value":1646},"references\u002Fintegrate-vios-service.md § Known Integration Constraints",{"type":50,"value":1648}," (Finding 8: ",{"type":44,"tag":75,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":50,"value":539},{"type":50,"value":1655}," double-",{"type":44,"tag":75,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":50,"value":547},{"type":50,"value":1662}," bug — prefer binary direct endpoints)",{"type":44,"tag":319,"props":1664,"children":1665},{},[1666,1671,1679],{"type":44,"tag":345,"props":1667,"children":1668},{},[1669],{"type":50,"value":1670},"File upload \u002F delete",{"type":44,"tag":345,"props":1672,"children":1673},{},[1674],{"type":44,"tag":75,"props":1675,"children":1677},{"className":1676},[],[1678],{"type":50,"value":1606},{"type":44,"tag":345,"props":1680,"children":1681},{},[1682,1687,1689,1694],{"type":44,"tag":75,"props":1683,"children":1685},{"className":1684},[],[1686],{"type":50,"value":192},{"type":50,"value":1688}," (PUT v2 + legacy v1 endpoints) + ",{"type":44,"tag":75,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":50,"value":1110},{"type":50,"value":1695}," (Finding 9: libav-missing failure mode)",{"type":44,"tag":319,"props":1697,"children":1698},{},[1699,1704,1713],{"type":44,"tag":345,"props":1700,"children":1701},{},[1702],{"type":50,"value":1703},"Live streams \u002F snapshot (picture)",{"type":44,"tag":345,"props":1705,"children":1706},{},[1707],{"type":44,"tag":75,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":50,"value":1712},"\u002Fvst\u002Fapi\u002Fv1\u002Flive\u002F",{"type":44,"tag":345,"props":1714,"children":1715},{},[1716],{"type":44,"tag":75,"props":1717,"children":1719},{"className":1718},[],[1720],{"type":50,"value":192},{"type":44,"tag":319,"props":1722,"children":1723},{},[1724,1729,1738],{"type":44,"tag":345,"props":1725,"children":1726},{},[1727],{"type":50,"value":1728},"Replay streams \u002F historical snapshot",{"type":44,"tag":345,"props":1730,"children":1731},{},[1732],{"type":44,"tag":75,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":50,"value":1737},"\u002Fvst\u002Fapi\u002Fv1\u002Freplay\u002F",{"type":44,"tag":345,"props":1739,"children":1740},{},[1741,1746,1747,1752],{"type":44,"tag":75,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":50,"value":192},{"type":50,"value":1640},{"type":44,"tag":75,"props":1748,"children":1750},{"className":1749},[],[1751],{"type":50,"value":1646},{"type":50,"value":1753}," (Finding 8)",{"type":44,"tag":319,"props":1755,"children":1756},{},[1757,1767,1776],{"type":44,"tag":345,"props":1758,"children":1759},{},[1760,1765],{"type":44,"tag":160,"props":1761,"children":1762},{},[1763],{"type":50,"value":1764},"NvStreamer",{"type":50,"value":1766},": file-to-RTSP republisher (upload, retrieve generated RTSP URL, filesystem scan, frame snapshots)",{"type":44,"tag":345,"props":1768,"children":1769},{},[1770],{"type":44,"tag":75,"props":1771,"children":1773},{"className":1772},[],[1774],{"type":50,"value":1775},"http:\u002F\u002F${HOST_IP}:${NVSTREAMER_HTTP_PORT:-31000}\u002Fvst\u002Fapi\u002Fv1\u002F",{"type":44,"tag":345,"props":1777,"children":1778},{},[1779,1784,1786,1791,1793,1799,1801,1807],{"type":44,"tag":75,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":50,"value":379},{"type":50,"value":1785}," (the streamer endpoint is ",{"type":44,"tag":160,"props":1787,"children":1788},{},[1789],{"type":50,"value":1790},"separate",{"type":50,"value":1792}," from the VIOS gateway — different port, ",{"type":44,"tag":75,"props":1794,"children":1796},{"className":1795},[],[1797],{"type":50,"value":1798},"type: \"streamer\"",{"type":50,"value":1800}," on ",{"type":44,"tag":75,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":50,"value":1806},"\u002Fversion",{"type":50,"value":1808},")",{"type":44,"tag":967,"props":1810,"children":1811},{},[],{"type":44,"tag":45,"props":1813,"children":1815},{"id":1814},"operations",[1816],{"type":50,"value":1817},"Operations",{"type":44,"tag":53,"props":1819,"children":1820},{},[1821,1823,1831],{"type":50,"value":1822},"The full VIOS REST API reference — sensor management, storage, snapshots, clip extraction, WebRTC live\u002Freplay, RTSP proxy, recorder, service configuration, and service discovery — lives in ",{"type":44,"tag":190,"props":1824,"children":1825},{"href":192},[1826],{"type":44,"tag":75,"props":1827,"children":1829},{"className":1828},[],[1830],{"type":50,"value":192},{"type":50,"value":1832},". Read that file when invoking any operation.",{"type":44,"tag":53,"props":1834,"children":1835},{},[1836,1838,1846],{"type":50,"value":1837},"When a request involves serving an on-disk video file as a synthetic RTSP camera (upload a sample to NvStreamer, retrieve the auto-generated RTSP URL, register that URL with VIOS), point at the NvStreamer endpoint and follow ",{"type":44,"tag":190,"props":1839,"children":1840},{"href":379},[1841],{"type":44,"tag":75,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":50,"value":379},{"type":50,"value":1847}," for the surface. NvStreamer comes up automatically with any VIOS-using profile that ships it; do not deploy it separately.",{"type":44,"tag":53,"props":1849,"children":1850},{},[1851,1853,1861,1862,1870,1872,1877],{"type":50,"value":1852},"For integration- and deployment-time questions about how VIOS interacts with other microservices or how it's brought up, defer to ",{"type":44,"tag":190,"props":1854,"children":1855},{"href":492},[1856],{"type":44,"tag":75,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":50,"value":492},{"type":50,"value":90},{"type":44,"tag":190,"props":1863,"children":1864},{"href":568},[1865],{"type":44,"tag":75,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":50,"value":568},{"type":50,"value":1871}," respectively (see the ",{"type":44,"tag":160,"props":1873,"children":1874},{},[1875],{"type":50,"value":1876},"Reference contracts",{"type":50,"value":1878}," table above for what each covers).",{"type":44,"tag":967,"props":1880,"children":1881},{},[],{"type":44,"tag":45,"props":1883,"children":1885},{"id":1884},"workflow-sensor-nameip-clip-or-snapshot",[1886],{"type":50,"value":1887},"Workflow: sensor name\u002FIP -> clip or snapshot",{"type":44,"tag":53,"props":1889,"children":1890},{},[1891],{"type":50,"value":1892},"When the user has a sensor name or IP but needs a clip or snapshot:",{"type":44,"tag":650,"props":1894,"children":1896},{"start":1895},0,[1897,1942,2001,2064,2112],{"type":44,"tag":69,"props":1898,"children":1899},{},[1900,1902],{"type":50,"value":1901},"Verify VST is reachable (see Setup — Availability Check):\n",{"type":44,"tag":662,"props":1903,"children":1905},{"className":664,"code":1904,"language":666,"meta":667,"style":667},"curl -sf --connect-timeout 5 \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion\"\n",[1906],{"type":44,"tag":75,"props":1907,"children":1908},{"__ignoreMap":667},[1909],{"type":44,"tag":673,"props":1910,"children":1911},{"class":675,"line":676},[1912,1916,1920,1924,1928,1932,1937],{"type":44,"tag":673,"props":1913,"children":1914},{"style":680},[1915],{"type":50,"value":127},{"type":44,"tag":673,"props":1917,"children":1918},{"style":685},[1919],{"type":50,"value":688},{"type":44,"tag":673,"props":1921,"children":1922},{"style":685},[1923],{"type":50,"value":1211},{"type":44,"tag":673,"props":1925,"children":1926},{"style":696},[1927],{"type":50,"value":699},{"type":44,"tag":673,"props":1929,"children":1930},{"style":702},[1931],{"type":50,"value":705},{"type":44,"tag":673,"props":1933,"children":1934},{"style":685},[1935],{"type":50,"value":1936},"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Fversion",{"type":44,"tag":673,"props":1938,"children":1939},{"style":702},[1940],{"type":50,"value":1941},"\"\n",{"type":44,"tag":69,"props":1943,"children":1944},{},[1945,1947,1952,1954],{"type":50,"value":1946},"List sensors to find ",{"type":44,"tag":75,"props":1948,"children":1950},{"className":1949},[],[1951],{"type":50,"value":1378},{"type":50,"value":1953},":\n",{"type":44,"tag":662,"props":1955,"children":1957},{"className":664,"code":1956,"language":666,"meta":667,"style":667},"curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Flist\" | jq .\n",[1958],{"type":44,"tag":75,"props":1959,"children":1960},{"__ignoreMap":667},[1961],{"type":44,"tag":673,"props":1962,"children":1963},{"class":675,"line":676},[1964,1968,1973,1977,1982,1986,1991,1996],{"type":44,"tag":673,"props":1965,"children":1966},{"style":680},[1967],{"type":50,"value":127},{"type":44,"tag":673,"props":1969,"children":1970},{"style":685},[1971],{"type":50,"value":1972}," -s",{"type":44,"tag":673,"props":1974,"children":1975},{"style":702},[1976],{"type":50,"value":705},{"type":44,"tag":673,"props":1978,"children":1979},{"style":685},[1980],{"type":50,"value":1981},"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002Flist",{"type":44,"tag":673,"props":1983,"children":1984},{"style":702},[1985],{"type":50,"value":735},{"type":44,"tag":673,"props":1987,"children":1988},{"style":702},[1989],{"type":50,"value":1990}," |",{"type":44,"tag":673,"props":1992,"children":1993},{"style":680},[1994],{"type":50,"value":1995}," jq",{"type":44,"tag":673,"props":1997,"children":1998},{"style":685},[1999],{"type":50,"value":2000}," .\n",{"type":44,"tag":69,"props":2002,"children":2003},{},[2004,2006,2011,2013,2019,2021],{"type":50,"value":2005},"Get streams for that sensor to find ",{"type":44,"tag":75,"props":2007,"children":2009},{"className":2008},[],[2010],{"type":50,"value":1395},{"type":50,"value":2012}," (prefer ",{"type":44,"tag":75,"props":2014,"children":2016},{"className":2015},[],[2017],{"type":50,"value":2018},"isMain: true",{"type":50,"value":2020},"):\n",{"type":44,"tag":662,"props":2022,"children":2024},{"className":664,"code":2023,"language":666,"meta":667,"style":667},"curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstreams\" | jq .\n",[2025],{"type":44,"tag":75,"props":2026,"children":2027},{"__ignoreMap":667},[2028],{"type":44,"tag":673,"props":2029,"children":2030},{"class":675,"line":676},[2031,2035,2039,2043,2048,2052,2056,2060],{"type":44,"tag":673,"props":2032,"children":2033},{"style":680},[2034],{"type":50,"value":127},{"type":44,"tag":673,"props":2036,"children":2037},{"style":685},[2038],{"type":50,"value":1972},{"type":44,"tag":673,"props":2040,"children":2041},{"style":702},[2042],{"type":50,"value":705},{"type":44,"tag":673,"props":2044,"children":2045},{"style":685},[2046],{"type":50,"value":2047},"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstreams",{"type":44,"tag":673,"props":2049,"children":2050},{"style":702},[2051],{"type":50,"value":735},{"type":44,"tag":673,"props":2053,"children":2054},{"style":702},[2055],{"type":50,"value":1990},{"type":44,"tag":673,"props":2057,"children":2058},{"style":680},[2059],{"type":50,"value":1995},{"type":44,"tag":673,"props":2061,"children":2062},{"style":685},[2063],{"type":50,"value":2000},{"type":44,"tag":69,"props":2065,"children":2066},{},[2067,2069],{"type":50,"value":2068},"Check timelines to confirm a recording exists in the requested range:\n",{"type":44,"tag":662,"props":2070,"children":2072},{"className":664,"code":2071,"language":666,"meta":667,"style":667},"curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F\u003CstreamId>\u002Ftimelines\" | jq .\n",[2073],{"type":44,"tag":75,"props":2074,"children":2075},{"__ignoreMap":667},[2076],{"type":44,"tag":673,"props":2077,"children":2078},{"class":675,"line":676},[2079,2083,2087,2091,2096,2100,2104,2108],{"type":44,"tag":673,"props":2080,"children":2081},{"style":680},[2082],{"type":50,"value":127},{"type":44,"tag":673,"props":2084,"children":2085},{"style":685},[2086],{"type":50,"value":1972},{"type":44,"tag":673,"props":2088,"children":2089},{"style":702},[2090],{"type":50,"value":705},{"type":44,"tag":673,"props":2092,"children":2093},{"style":685},[2094],{"type":50,"value":2095},"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002F\u003CstreamId>\u002Ftimelines",{"type":44,"tag":673,"props":2097,"children":2098},{"style":702},[2099],{"type":50,"value":735},{"type":44,"tag":673,"props":2101,"children":2102},{"style":702},[2103],{"type":50,"value":1990},{"type":44,"tag":673,"props":2105,"children":2106},{"style":680},[2107],{"type":50,"value":1995},{"type":44,"tag":673,"props":2109,"children":2110},{"style":685},[2111],{"type":50,"value":2000},{"type":44,"tag":69,"props":2113,"children":2114},{},[2115,2117,2122,2124,2129,2131,2137,2138,2144,2145,2151,2153,2158,2160,2165,2167,2172,2174,2179],{"type":50,"value":2116},"Download clip or snapshot using the ",{"type":44,"tag":75,"props":2118,"children":2120},{"className":2119},[],[2121],{"type":50,"value":1395},{"type":50,"value":2123},". Prefer the ",{"type":44,"tag":160,"props":2125,"children":2126},{},[2127],{"type":50,"value":2128},"binary direct endpoints",{"type":50,"value":2130}," (",{"type":44,"tag":75,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":50,"value":2136},"\u002Fstorage\u002Ffile\u002F\u003CstreamId>?startTime=...&endTime=...",{"type":50,"value":129},{"type":44,"tag":75,"props":2139,"children":2141},{"className":2140},[],[2142],{"type":50,"value":2143},"\u002Freplay\u002Fstream\u002F\u003CstreamId>\u002Fpicture?startTime=...",{"type":50,"value":129},{"type":44,"tag":75,"props":2146,"children":2148},{"className":2147},[],[2149],{"type":50,"value":2150},"\u002Fstorage\u002Fstream\u002F\u003CstreamId>\u002Fpicture?startTime=...",{"type":50,"value":2152},") over the ",{"type":44,"tag":75,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":50,"value":539},{"type":50,"value":2159}," JSON envelope variants — see ",{"type":44,"tag":75,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":50,"value":1646},{"type":50,"value":2166}," Finding 8 (the ",{"type":44,"tag":75,"props":2168,"children":2170},{"className":2169},[],[2171],{"type":50,"value":539},{"type":50,"value":2173}," variants return double-",{"type":44,"tag":75,"props":2175,"children":2177},{"className":2176},[],[2178],{"type":50,"value":547},{"type":50,"value":2180}," URLs in 3.2.0 and require client-side stripping).",{"type":44,"tag":967,"props":2182,"children":2183},{},[],{"type":44,"tag":45,"props":2185,"children":2187},{"id":2186},"responses",[2188],{"type":50,"value":2189},"Responses",{"type":44,"tag":53,"props":2191,"children":2192},{},[2193,2198],{"type":44,"tag":160,"props":2194,"children":2195},{},[2196],{"type":50,"value":2197},"Success with data:",{"type":50,"value":2199}," JSON object or array.",{"type":44,"tag":53,"props":2201,"children":2202},{},[2203,2208,2209,2215,2217,2222],{"type":44,"tag":160,"props":2204,"children":2205},{},[2206],{"type":50,"value":2207},"Success with no data:",{"type":50,"value":1140},{"type":44,"tag":75,"props":2210,"children":2212},{"className":2211},[],[2213],{"type":50,"value":2214},"null",{"type":50,"value":2216}," — a ",{"type":44,"tag":75,"props":2218,"children":2220},{"className":2219},[],[2221],{"type":50,"value":2214},{"type":50,"value":2223}," response means the API call succeeded but there is no data to return (e.g. no schedule configured, scan returned no results). It is not an error.",{"type":44,"tag":53,"props":2225,"children":2226},{},[2227,2232,2234,2240,2242,2248],{"type":44,"tag":160,"props":2228,"children":2229},{},[2230],{"type":50,"value":2231},"Success with boolean:",{"type":50,"value":2233}," Some endpoints return ",{"type":44,"tag":75,"props":2235,"children":2237},{"className":2236},[],[2238],{"type":50,"value":2239},"true",{"type":50,"value":2241}," on success (e.g. ",{"type":44,"tag":75,"props":2243,"children":2245},{"className":2244},[],[2246],{"type":50,"value":2247},"DELETE \u002Fsensor\u002F{sensorId}",{"type":50,"value":98},{"type":44,"tag":53,"props":2250,"children":2251},{},[2252,2257,2259,2265,2266,2272],{"type":44,"tag":160,"props":2253,"children":2254},{},[2255],{"type":50,"value":2256},"Error:",{"type":50,"value":2258}," JSON object with ",{"type":44,"tag":75,"props":2260,"children":2262},{"className":2261},[],[2263],{"type":50,"value":2264},"error_code",{"type":50,"value":90},{"type":44,"tag":75,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":50,"value":2271},"error_message",{"type":50,"value":1335},{"type":44,"tag":662,"props":2274,"children":2278},{"className":2275,"code":2276,"language":2277,"meta":667,"style":667},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error_code\": \"VMSInternalError\",\n  \"error_message\": \"VMS internal processing error\"\n}\n","json",[2279],{"type":44,"tag":75,"props":2280,"children":2281},{"__ignoreMap":667},[2282,2290,2330,2363],{"type":44,"tag":673,"props":2283,"children":2284},{"class":675,"line":676},[2285],{"type":44,"tag":673,"props":2286,"children":2287},{"style":702},[2288],{"type":50,"value":2289},"{\n",{"type":44,"tag":673,"props":2291,"children":2293},{"class":675,"line":2292},2,[2294,2299,2304,2308,2312,2316,2321,2325],{"type":44,"tag":673,"props":2295,"children":2296},{"style":702},[2297],{"type":50,"value":2298},"  \"",{"type":44,"tag":673,"props":2300,"children":2302},{"style":2301},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[2303],{"type":50,"value":2264},{"type":44,"tag":673,"props":2305,"children":2306},{"style":702},[2307],{"type":50,"value":735},{"type":44,"tag":673,"props":2309,"children":2310},{"style":702},[2311],{"type":50,"value":1335},{"type":44,"tag":673,"props":2313,"children":2314},{"style":702},[2315],{"type":50,"value":705},{"type":44,"tag":673,"props":2317,"children":2318},{"style":685},[2319],{"type":50,"value":2320},"VMSInternalError",{"type":44,"tag":673,"props":2322,"children":2323},{"style":702},[2324],{"type":50,"value":735},{"type":44,"tag":673,"props":2326,"children":2327},{"style":702},[2328],{"type":50,"value":2329},",\n",{"type":44,"tag":673,"props":2331,"children":2333},{"class":675,"line":2332},3,[2334,2338,2342,2346,2350,2354,2359],{"type":44,"tag":673,"props":2335,"children":2336},{"style":702},[2337],{"type":50,"value":2298},{"type":44,"tag":673,"props":2339,"children":2340},{"style":2301},[2341],{"type":50,"value":2271},{"type":44,"tag":673,"props":2343,"children":2344},{"style":702},[2345],{"type":50,"value":735},{"type":44,"tag":673,"props":2347,"children":2348},{"style":702},[2349],{"type":50,"value":1335},{"type":44,"tag":673,"props":2351,"children":2352},{"style":702},[2353],{"type":50,"value":705},{"type":44,"tag":673,"props":2355,"children":2356},{"style":685},[2357],{"type":50,"value":2358},"VMS internal processing error",{"type":44,"tag":673,"props":2360,"children":2361},{"style":702},[2362],{"type":50,"value":1941},{"type":44,"tag":673,"props":2364,"children":2366},{"class":675,"line":2365},4,[2367],{"type":44,"tag":673,"props":2368,"children":2369},{"style":702},[2370],{"type":50,"value":2371},"}\n",{"type":44,"tag":53,"props":2373,"children":2374},{},[2375,2377,2382,2383,2389,2390,2396],{"type":50,"value":2376},"Common codes: ",{"type":44,"tag":75,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":50,"value":2320},{"type":50,"value":129},{"type":44,"tag":75,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":50,"value":2388},"VMSNotFound",{"type":50,"value":129},{"type":44,"tag":75,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":50,"value":2395},"VMSInvalidParameter",{"type":50,"value":242},{"type":44,"tag":53,"props":2398,"children":2399},{},[2400,2402,2408,2410,2415,2417,2422],{"type":50,"value":2401},"If you see ",{"type":44,"tag":75,"props":2403,"children":2405},{"className":2404},[],[2406],{"type":50,"value":2407},"InvalidParameterError: Failed to get media information",{"type":50,"value":2409}," on a PUT upload, this is the libav-missing failure mode — VIOS was deployed without ",{"type":44,"tag":75,"props":2411,"children":2413},{"className":2412},[],[2414],{"type":50,"value":599},{"type":50,"value":2416},". See ",{"type":44,"tag":75,"props":2418,"children":2420},{"className":2419},[],[2421],{"type":50,"value":1110},{"type":50,"value":2423}," Finding 9 for the fix.",{"type":44,"tag":53,"props":2425,"children":2426},{},[2427,2429,2434,2436,2442,2443,2449,2451,2456,2458,2463],{"type":50,"value":2428},"If you see double-",{"type":44,"tag":75,"props":2430,"children":2432},{"className":2431},[],[2433],{"type":50,"value":547},{"type":50,"value":2435}," prefixes in ",{"type":44,"tag":75,"props":2437,"children":2439},{"className":2438},[],[2440],{"type":50,"value":2441},"imageUrl",{"type":50,"value":890},{"type":44,"tag":75,"props":2444,"children":2446},{"className":2445},[],[2447],{"type":50,"value":2448},"videoUrl",{"type":50,"value":2450}," fields on ",{"type":44,"tag":75,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":50,"value":539},{"type":50,"value":2457},"-variant responses, that's Finding 8 — strip the leading ",{"type":44,"tag":75,"props":2459,"children":2461},{"className":2460},[],[2462],{"type":50,"value":547},{"type":50,"value":2464}," client-side or switch to binary direct endpoints.",{"type":44,"tag":967,"props":2466,"children":2467},{},[],{"type":44,"tag":45,"props":2469,"children":2471},{"id":2470},"examples",[2472],{"type":50,"value":2473},"Examples",{"type":44,"tag":53,"props":2475,"children":2476},{},[2477],{"type":50,"value":2478},"Example operation prompts:",{"type":44,"tag":65,"props":2480,"children":2481},{},[2482,2487,2492,2497],{"type":44,"tag":69,"props":2483,"children":2484},{},[2485],{"type":50,"value":2486},"\"List the active VIOS sensors and show their stream status.\"",{"type":44,"tag":69,"props":2488,"children":2489},{},[2490],{"type":50,"value":2491},"\"Upload this sample video to VIOS and return the generated stream id.\"",{"type":44,"tag":69,"props":2493,"children":2494},{},[2495],{"type":50,"value":2496},"\"Download a two-second clip from this sensor's recording timeline.\"",{"type":44,"tag":69,"props":2498,"children":2499},{},[2500],{"type":50,"value":2501},"\"Use NvStreamer to upload a file and retrieve its generated RTSP URL.\"",{"type":44,"tag":45,"props":2503,"children":2505},{"id":2504},"limitations",[2506],{"type":50,"value":2507},"Limitations",{"type":44,"tag":65,"props":2509,"children":2510},{},[2511,2516,2521,2534],{"type":44,"tag":69,"props":2512,"children":2513},{},[2514],{"type":50,"value":2515},"VIOS operations require a reachable VST backend; stop or deploy prerequisites\nwhen the health probe fails.",{"type":44,"tag":69,"props":2517,"children":2518},{},[2519],{"type":50,"value":2520},"Most deployments do not require auth, but a deployment can add an external\nauth layer.",{"type":44,"tag":69,"props":2522,"children":2523},{},[2524,2526,2532],{"type":50,"value":2525},"Container-side paths in examples use ",{"type":44,"tag":75,"props":2527,"children":2529},{"className":2528},[],[2530],{"type":50,"value":2531},"${VST_CONTAINER_ROOT}",{"type":50,"value":2533}," as a neutral\nplaceholder for the VST install root inside the container. Resolve it from the\nactive deployment before using path examples.",{"type":44,"tag":69,"props":2535,"children":2536},{},[2537],{"type":50,"value":2538},"Do not print API keys, bearer tokens, or generated credentials in logs or\nfinal responses.",{"type":44,"tag":45,"props":2540,"children":2542},{"id":2541},"troubleshooting",[2543],{"type":50,"value":2544},"Troubleshooting",{"type":44,"tag":65,"props":2546,"children":2547},{},[2548,2572,2607],{"type":44,"tag":69,"props":2549,"children":2550},{},[2551,2556,2558,2563,2565,2570],{"type":44,"tag":160,"props":2552,"children":2553},{},[2554],{"type":50,"value":2555},"Error",{"type":50,"value":2557},": health probe fails. ",{"type":44,"tag":160,"props":2559,"children":2560},{},[2561],{"type":50,"value":2562},"Cause",{"type":50,"value":2564},": VIOS is not deployed or the endpoint\nis wrong. ",{"type":44,"tag":160,"props":2566,"children":2567},{},[2568],{"type":50,"value":2569},"Solution",{"type":50,"value":2571},": follow the deployment prerequisite flow or ask for the\ncorrect VST endpoint.",{"type":44,"tag":69,"props":2573,"children":2574},{},[2575,2579,2581,2587,2588,2592,2594,2598,2600,2605],{"type":44,"tag":160,"props":2576,"children":2577},{},[2578],{"type":50,"value":2555},{"type":50,"value":2580},": uploads fail with ",{"type":44,"tag":75,"props":2582,"children":2584},{"className":2583},[],[2585],{"type":50,"value":2586},"Failed to get media information",{"type":50,"value":1032},{"type":44,"tag":160,"props":2589,"children":2590},{},[2591],{"type":50,"value":2562},{"type":50,"value":2593},":\nlibav packages were not installed in the VIOS container. ",{"type":44,"tag":160,"props":2595,"children":2596},{},[2597],{"type":50,"value":2569},{"type":50,"value":2599},": set\n",{"type":44,"tag":75,"props":2601,"children":2603},{"className":2602},[],[2604],{"type":50,"value":599},{"type":50,"value":2606}," and redeploy.",{"type":44,"tag":69,"props":2608,"children":2609},{},[2610,2614,2616,2621,2623,2629,2630,2634,2636,2640],{"type":44,"tag":160,"props":2611,"children":2612},{},[2613],{"type":50,"value":2555},{"type":50,"value":2615},": ",{"type":44,"tag":75,"props":2617,"children":2619},{"className":2618},[],[2620],{"type":50,"value":539},{"type":50,"value":2622}," responses contain ",{"type":44,"tag":75,"props":2624,"children":2626},{"className":2625},[],[2627],{"type":50,"value":2628},"http:\u002F\u002Fhttp:\u002F\u002F...",{"type":50,"value":1032},{"type":44,"tag":160,"props":2631,"children":2632},{},[2633],{"type":50,"value":2562},{"type":50,"value":2635},": known URL\nconstruction defect. ",{"type":44,"tag":160,"props":2637,"children":2638},{},[2639],{"type":50,"value":2569},{"type":50,"value":2641},": use binary direct endpoints or strip the\nduplicated prefix.",{"type":44,"tag":967,"props":2643,"children":2644},{},[],{"type":44,"tag":45,"props":2646,"children":2648},{"id":2647},"tips",[2649],{"type":50,"value":2650},"Tips",{"type":44,"tag":65,"props":2652,"children":2653},{},[2654,2680,2704,2721,2761,2784,2840,2881],{"type":44,"tag":69,"props":2655,"children":2656},{},[2657,2662,2664,2670,2672,2678],{"type":44,"tag":160,"props":2658,"children":2659},{},[2660],{"type":50,"value":2661},"jq:",{"type":50,"value":2663}," All JSON responses are piped through ",{"type":44,"tag":75,"props":2665,"children":2667},{"className":2666},[],[2668],{"type":50,"value":2669},"jq .",{"type":50,"value":2671}," for readability. Binary responses (clip download, snapshot) are not — they use ",{"type":44,"tag":75,"props":2673,"children":2675},{"className":2674},[],[2676],{"type":50,"value":2677},"-o \u003Cfile>",{"type":50,"value":2679}," instead.",{"type":44,"tag":69,"props":2681,"children":2682},{},[2683,2688,2690,2696,2697,2703],{"type":44,"tag":160,"props":2684,"children":2685},{},[2686],{"type":50,"value":2687},"Time format:",{"type":50,"value":2689}," Always ISO 8601 UTC, e.g. ",{"type":44,"tag":75,"props":2691,"children":2693},{"className":2692},[],[2694],{"type":50,"value":2695},"2026-04-10T10:30:00Z",{"type":50,"value":890},{"type":44,"tag":75,"props":2698,"children":2700},{"className":2699},[],[2701],{"type":50,"value":2702},"2026-04-10T10:30:00.000Z",{"type":50,"value":242},{"type":44,"tag":69,"props":2705,"children":2706},{},[2707,2712,2714,2719],{"type":44,"tag":160,"props":2708,"children":2709},{},[2710],{"type":50,"value":2711},"streamId header:",{"type":50,"value":2713}," Live\u002Freplay\u002Frecorder endpoints require ",{"type":44,"tag":75,"props":2715,"children":2717},{"className":2716},[],[2718],{"type":50,"value":1395},{"type":50,"value":2720}," as BOTH a path parameter AND a request header — include both.",{"type":44,"tag":69,"props":2722,"children":2723},{},[2724,2729,2731,2737,2739,2745,2747,2752,2754,2759],{"type":44,"tag":160,"props":2725,"children":2726},{},[2727],{"type":50,"value":2728},"Large clips:",{"type":50,"value":2730}," Use the binary direct ",{"type":44,"tag":75,"props":2732,"children":2734},{"className":2733},[],[2735],{"type":50,"value":2736},"\u002Fstorage\u002Ffile\u002F\u003Cid>?...&container=mp4",{"type":50,"value":2738}," endpoint with ",{"type":44,"tag":75,"props":2740,"children":2742},{"className":2741},[],[2743],{"type":50,"value":2744},"-o clip.mp4",{"type":50,"value":2746}," for direct streaming. The ",{"type":44,"tag":75,"props":2748,"children":2750},{"className":2749},[],[2751],{"type":50,"value":539},{"type":50,"value":2753}," envelope variant has the Finding 8 double-",{"type":44,"tag":75,"props":2755,"children":2757},{"className":2756},[],[2758],{"type":50,"value":547},{"type":50,"value":2760}," defect — avoid until upstream fixes it or use client-side prefix stripping.",{"type":44,"tag":69,"props":2762,"children":2763},{},[2764,2769,2770,2775,2777,2782],{"type":44,"tag":160,"props":2765,"children":2766},{},[2767],{"type":50,"value":2768},"Sensor vs stream ID:",{"type":50,"value":1140},{"type":44,"tag":75,"props":2771,"children":2773},{"className":2772},[],[2774],{"type":50,"value":1378},{"type":50,"value":2776}," identifies a camera; ",{"type":44,"tag":75,"props":2778,"children":2780},{"className":2779},[],[2781],{"type":50,"value":1395},{"type":50,"value":2783}," identifies a specific video stream from that camera (a sensor can have a main stream and sub-streams).",{"type":44,"tag":69,"props":2785,"children":2786},{},[2787,2792,2794,2800,2802,2808,2810,2815,2817,2823,2825,2830,2832,2838],{"type":44,"tag":160,"props":2788,"children":2789},{},[2790],{"type":50,"value":2791},"Identifying sensor type (RTSP vs uploaded file):",{"type":50,"value":2793}," Call ",{"type":44,"tag":75,"props":2795,"children":2797},{"className":2796},[],[2798],{"type":50,"value":2799},"GET \u002Fsensor\u002F\u003CsensorId>\u002Fstreams",{"type":50,"value":2801}," and inspect the ",{"type":44,"tag":75,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":50,"value":2807},"url",{"type":50,"value":2809}," field of each stream. If ",{"type":44,"tag":75,"props":2811,"children":2813},{"className":2812},[],[2814],{"type":50,"value":2807},{"type":50,"value":2816}," starts with ",{"type":44,"tag":75,"props":2818,"children":2820},{"className":2819},[],[2821],{"type":50,"value":2822},"rtsp:\u002F\u002F",{"type":50,"value":2824}," it is a live RTSP\u002FIP camera stream. If ",{"type":44,"tag":75,"props":2826,"children":2828},{"className":2827},[],[2829],{"type":50,"value":2807},{"type":50,"value":2831}," is a file path (e.g. ",{"type":44,"tag":75,"props":2833,"children":2835},{"className":2834},[],[2836],{"type":50,"value":2837},"\"${VST_CONTAINER_ROOT}\u002Fstreamer_videos\u002FTruckAccident.mp4\"",{"type":50,"value":2839},") it is an uploaded file sensor. This determines which delete flow to use — see Section 8.",{"type":44,"tag":69,"props":2841,"children":2842},{},[2843,2848,2850,2856,2858,2864,2866,2872,2873,2879],{"type":44,"tag":160,"props":2844,"children":2845},{},[2846],{"type":50,"value":2847},"Upload timestamp is honored for the recorded timeline:",{"type":50,"value":2849}," When uploading a file via ",{"type":44,"tag":75,"props":2851,"children":2853},{"className":2852},[],[2854],{"type":50,"value":2855},"PUT \u002Fvst\u002Fapi\u002Fv1\u002Fstorage\u002Ffile\u002F\u003Cfilename>?timestamp=\u003Ciso>",{"type":50,"value":2857},", the timeline returned by ",{"type":44,"tag":75,"props":2859,"children":2861},{"className":2860},[],[2862],{"type":50,"value":2863},"GET \u002Fstorage\u002F\u003CstreamId>\u002Ftimelines",{"type":50,"value":2865}," is anchored at the supplied timestamp, not the upload wall-clock time. Subsequent snapshot \u002F clip queries MUST use timestamps within this range — fetch the timeline first. See ",{"type":44,"tag":75,"props":2867,"children":2869},{"className":2868},[],[2870],{"type":50,"value":2871},"references\u002Fapi-reference.md § 8",{"type":50,"value":90},{"type":44,"tag":75,"props":2874,"children":2876},{"className":2875},[],[2877],{"type":50,"value":2878},"references\u002Fintegrate-vios-service.md § Integration Interfaces > Inputs > Upload video file",{"type":50,"value":2880}," for the authoritative contract.",{"type":44,"tag":69,"props":2882,"children":2883},{},[2884,2889,2891,2897],{"type":44,"tag":160,"props":2885,"children":2886},{},[2887],{"type":50,"value":2888},"Endpoint resolution:",{"type":50,"value":2890}," The VST endpoint is provided by the VSS deployment context. Do not attempt manual IP\u002Fport discovery. If unavailable, ask the user. All curl examples use ",{"type":44,"tag":75,"props":2892,"children":2894},{"className":2893},[],[2895],{"type":50,"value":2896},"\u003CVST_ENDPOINT>",{"type":50,"value":2898}," as a placeholder — substitute the resolved endpoint before executing.",{"type":44,"tag":2900,"props":2901,"children":2902},"style",{},[2903],{"type":50,"value":2904},"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":2906,"total":3006},[2907,2924,2938,2952,2964,2979,2992],{"slug":2908,"name":2908,"fn":2909,"description":2910,"org":2911,"tags":2912,"stars":23,"repoUrl":24,"updatedAt":2923},"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},[2913,2916,2919,2920],{"name":2914,"slug":2915,"type":15},"Data Analysis","data-analysis",{"name":2917,"slug":2918,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":2921,"slug":2922,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":2925,"name":2925,"fn":2926,"description":2927,"org":2928,"tags":2929,"stars":23,"repoUrl":24,"updatedAt":2937},"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},[2930,2933,2936],{"name":2931,"slug":2932,"type":15},"Deployment","deployment",{"name":2934,"slug":2935,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2939,"name":2939,"fn":2940,"description":2941,"org":2942,"tags":2943,"stars":23,"repoUrl":24,"updatedAt":2951},"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},[2944,2947,2948],{"name":2945,"slug":2946,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2949,"slug":2950,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2953,"name":2953,"fn":2954,"description":2955,"org":2956,"tags":2957,"stars":23,"repoUrl":24,"updatedAt":2963},"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},[2958,2959,2960],{"name":2914,"slug":2915,"type":15},{"name":9,"slug":8,"type":15},{"name":2961,"slug":2962,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2965,"name":2965,"fn":2966,"description":2967,"org":2968,"tags":2969,"stars":23,"repoUrl":24,"updatedAt":2978},"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},[2970,2973,2976,2977],{"name":2971,"slug":2972,"type":15},"Automation","automation",{"name":2974,"slug":2975,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-17T05:28:53.905004",{"slug":2980,"name":2980,"fn":2981,"description":2982,"org":2983,"tags":2984,"stars":23,"repoUrl":24,"updatedAt":2991},"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},[2985,2986,2989,2990],{"name":2931,"slug":2932,"type":15},{"name":2987,"slug":2988,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":1817,"slug":1814,"type":15},"2026-07-17T05:28:56.913999",{"slug":2993,"name":2993,"fn":2994,"description":2995,"org":2996,"tags":2997,"stars":23,"repoUrl":24,"updatedAt":3005},"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},[2998,2999,3002],{"name":9,"slug":8,"type":15},{"name":3000,"slug":3001,"type":15},"Quantum Computing","quantum-computing",{"name":3003,"slug":3004,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":3008,"total":3158},[3009,3026,3042,3053,3065,3079,3092,3106,3117,3126,3140,3149],{"slug":3010,"name":3010,"fn":3011,"description":3012,"org":3013,"tags":3014,"stars":3023,"repoUrl":3024,"updatedAt":3025},"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},[3015,3018,3021],{"name":3016,"slug":3017,"type":15},"Documentation","documentation",{"name":3019,"slug":3020,"type":15},"MCP","mcp",{"name":3022,"slug":830,"type":15},"Search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":3027,"name":3027,"fn":3028,"description":3029,"org":3030,"tags":3031,"stars":3039,"repoUrl":3040,"updatedAt":3041},"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},[3032,3035,3036],{"name":3033,"slug":3034,"type":15},"Containers","containers",{"name":2931,"slug":2932,"type":15},{"name":3037,"slug":3038,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":3043,"name":3043,"fn":3044,"description":3045,"org":3046,"tags":3047,"stars":3039,"repoUrl":3040,"updatedAt":3052},"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},[3048,3051],{"name":3049,"slug":3050,"type":15},"CI\u002FCD","ci-cd",{"name":2931,"slug":2932,"type":15},"2026-07-14T05:25:59.97109",{"slug":3054,"name":3054,"fn":3055,"description":3056,"org":3057,"tags":3058,"stars":3039,"repoUrl":3040,"updatedAt":3064},"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},[3059,3060,3061],{"name":3049,"slug":3050,"type":15},{"name":2931,"slug":2932,"type":15},{"name":3062,"slug":3063,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":3066,"name":3066,"fn":3067,"description":3068,"org":3069,"tags":3070,"stars":3039,"repoUrl":3040,"updatedAt":3078},"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},[3071,3074,3075],{"name":3072,"slug":3073,"type":15},"Debugging","debugging",{"name":3062,"slug":3063,"type":15},{"name":3076,"slug":3077,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":3080,"name":3080,"fn":3081,"description":3082,"org":3083,"tags":3084,"stars":3039,"repoUrl":3040,"updatedAt":3091},"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},[3085,3088],{"name":3086,"slug":3087,"type":15},"Best Practices","best-practices",{"name":3089,"slug":3090,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":3093,"name":3093,"fn":3094,"description":3095,"org":3096,"tags":3097,"stars":3039,"repoUrl":3040,"updatedAt":3105},"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},[3098,3101,3104],{"name":3099,"slug":3100,"type":15},"Machine Learning","machine-learning",{"name":3102,"slug":3103,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":3107,"name":3107,"fn":3108,"description":3109,"org":3110,"tags":3111,"stars":3039,"repoUrl":3040,"updatedAt":3116},"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},[3112,3115],{"name":3113,"slug":3114,"type":15},"QA","qa",{"name":2961,"slug":2962,"type":15},"2026-07-14T05:25:53.673039",{"slug":3118,"name":3118,"fn":3119,"description":3120,"org":3121,"tags":3122,"stars":3039,"repoUrl":3040,"updatedAt":3125},"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},[3123,3124],{"name":2931,"slug":2932,"type":15},{"name":2934,"slug":2935,"type":15},"2026-07-14T05:25:49.362534",{"slug":3127,"name":3127,"fn":3128,"description":3129,"org":3130,"tags":3131,"stars":3039,"repoUrl":3040,"updatedAt":3139},"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},[3132,3135,3136],{"name":3133,"slug":3134,"type":15},"Code Review","code-review",{"name":3062,"slug":3063,"type":15},{"name":3137,"slug":3138,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":3141,"name":3141,"fn":3142,"description":3143,"org":3144,"tags":3145,"stars":3039,"repoUrl":3040,"updatedAt":3148},"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},[3146,3147],{"name":3113,"slug":3114,"type":15},{"name":2961,"slug":2962,"type":15},"2026-07-14T05:25:54.928983",{"slug":3150,"name":3150,"fn":3151,"description":3152,"org":3153,"tags":3154,"stars":3039,"repoUrl":3040,"updatedAt":3157},"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},[3155,3156],{"name":2971,"slug":2972,"type":15},{"name":3049,"slug":3050,"type":15},"2026-07-30T05:29:03.275638",496]