deepstream-dev

NVIDIA DeepStream SDK 9.0 development with Python pyservicemaker API. Use when building video analytics pipelines, GStreamer-based video processing, TensorRT inference integration, object detection/tracking, or Kafka/message broker integration.

nvidia/skillsUpdated Jun 23, 2026

Works with

Claude CodeCursorClineWindsurfCodexGooseGitHub CopilotZed

0

total installs

0

this week

1.7K

GitHub stars

0

upvotes

Install Skill

Run in your terminal

$npx skills install nvidia/skills/deepstream-dev

0

installs

0

this week

1.7K

stars

Installation Guide

How to use deepstream-dev on Cursor

AI-first code editor with Composer

1

Prerequisites

Before installing skills in Cursor, ensure your development environment meets these requirements:

  • Cursor installed and configured on your machine
  • Node.js 16+ with npm — verify with node --version
  • Active project directory where you want to add deepstream-dev
2

Run the install command

Execute the skills CLI command in your project's root directory to begin installation:

$npx skills install nvidia/skills/deepstream-dev

Fetches deepstream-dev from nvidia/skills and configures it for Cursor.

3

Select Cursor when prompted

The CLI shows a list of agents. Use arrow keys and space to select Cursor:

◆ Which agents do you want to install to?
│ ── Universal (.agents/skills) ────────────────
│ · Cline · Codex · Goose · Windsurf
│ ●Cursor(selected)
│ · Cursor · Aider · Continue
4

Verify installation

Confirm successful installation by checking the skill directory location:

.cursor/skills/deepstream-dev

Restart Cursor to activate deepstream-dev. Access via /deepstream-dev in your agent's command palette.

Security Notice

We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.

Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.

Documentation

name
deepstream-dev
description
NVIDIA DeepStream SDK 9.0 development with Python pyservicemaker API. Use when building video analytics pipelines, GStreamer-based video processing, TensorRT inference integration, object detection/tracking, or Kafka/message broker integration.
owner
NVIDIA CORPORATION
service
deepstream
version
1.1.0
reviewed
2026-04-24
license
CC-BY-4.0 AND Apache-2.0

DeepStream Development Skill

When this skill is active, ALWAYS read the relevant reference documents before generating code. Do NOT rely on memory - the reference documents contain critical details about exact property names, correct API usage, and common pitfalls.

SDK and Architecture Quick Reference

DeepStream SDK 9.0 Version Requirements

  • GStreamer: 1.24.2
  • NVIDIA Driver: 590+
  • CUDA: 13.1
  • TensorRT: 10.14.1.48
  • Platforms: Ubuntu 24.04 (x86_64 and ARM64/Jetson)

Typical Pipeline Flow

Source → Stream Muxer → Inference → [Tracker] → OSD → Renderer

Components in [brackets] are optional -- only add them when the user explicitly requests them.

StageRoleKey Element(s)Required?
SourceInput from files, RTSP, camerasnvurisrcbin (preferred), nvmultiurisrcbin, filesrcYes
Stream MuxerBatches streams for inferencenvstreammuxYes
InferenceTensorRT model executionnvinfer, nvinferserverYes
TrackerMulti-object tracking across framesnvtrackerOnly if requested
OSDDraws bounding boxes, labels, overlaysnvosdbinYes (for visualization)
RendererDisplay or save outputnveglglessink, nv3dsink, filesinkYes

Memory Model

DeepStream uses NVIDIA Video Memory Manager (NVMM) for zero-copy GPU buffer transfers. Caps strings use memory:NVMM to indicate GPU memory (e.g., video/x-raw(memory:NVMM), format=NV12).

Critical Rules

  1. Only Add Requested Components: Do NOT add pipeline elements the user did not ask for.

    • Tracker (nvtracker): Only add when the user explicitly requests tracking or object IDs across frames
    • Secondary GIEs: Only add when the user requests classification or attribute extraction
    • Analytics (nvdsanalytics): Only add when the user requests line crossing, ROI counting, etc.
    • Message broker (nvmsgbroker/nvmsgconv): Only add when the user requests Kafka/cloud messaging
    • When in doubt, build the minimal working pipeline and let the user ask for additions
  2. Default to nvurisrcbin for Sources: When the user says "camera", "stream", "video", or provides a file path:

    • Always use nvurisrcbin -- it handles RTSP, HTTP, and local files (file://) transparently
    • Only use filesrc + qtdemux + parser when the user explicitly needs raw file source control
    • For RTSP/live sources, also set live-source=1 on nvstreammux and sync=0 on the sink
    • Convert local paths to URI: "file://" + os.path.abspath(path)
  3. Metadata Iteration: Use .frame_items and .object_items (returns iterators, NOT lists)

    • NEVER use len() on these - iterate to count
    • Iterator can only be consumed once
  4. Request Pad Syntax: Use "sink_%u" template, NEVER literal pad names

    pipeline.link(("decoder", "mux"), ("", "sink_%u"))  # CORRECT
    # pipeline.link(("decoder", "mux"), ("", "sink_0"))  # WRONG - will fail
    
  5. Platform Detection for Sinks:

    import platform
    sink_type = "nv3dsink" if platform.processor() == "aarch64" else "nveglglessink"
    
  6. Buffer Cloning: Always clone buffers for async processing

    tensor = buffer.extract(0).clone()  # CRITICAL
    
  7. Queue Types:

    • queue.Queue → Use with threading.Thread
    • multiprocessing.Queue → Use with multiprocessing.Process
    • Using wrong type causes silent data loss!
  8. nvinfer Config Format:

    • YAML: Use property: section (NOT model:), key: value with space after colon
    • INI: Use [property] section, key=value with equals sign
    • Section MUST be named property
  9. nvmsgbroker is a SINK: Cannot have downstream elements - use tee to split pipeline

  10. ALL Sinks Need async=0 for Tee Splits or Dynamic Sources: CRITICAL for state transitions

    # When using tee splits OR dynamic sources, ALL sinks MUST have async=0
    pipeline.add("nveglglessink", "sink", {
        "sync": 0, "qos": 0,
        "async": 0  # CRITICAL - prevents state transition deadlock
    })
    

    Symptom if missing: Pipeline stays in PAUSED state, no video displays.

  11. Built-in Probe Attachment: measure_fps_probe can only be attached to processing elements (e.g., nvinfer, nvosdbin), NOT to sink elements. Attaching to a sink raises RuntimeError: Probe failure.

  12. Dynamic ONNX Models Require infer-dims: When the ONNX model has dynamic input shapes (e.g., exported with dynamic=True in Ultralytics YOLO, or with dynamic batch/height/width axes), you MUST add infer-dims=C;H;W to the nvinfer config. Without it, TensorRT sees -1 for dynamic dimensions and fails with setDimensions: Error Code 3. Common values:

    • YOLO models (640 input): infer-dims=3;640;640
    • Models with 416 input: infer-dims=3;416;416
    • Models with 1280 input: infer-dims=3;1280;1280
  13. Ultralytics YOLO Output Format Depends on Model Generation — newer models (v10+/v26+) output post-NMS results; older models (v8/v11) output raw pre-NMS tensors. The custom parser and cluster-mode must match the actual output:

Model generationOutput tensor shapeFieldscluster-mode
v8 / v11[batch, 84, 8400][features(4+80), anchors] — raw cx/cy/w/h + class scores, no NMS2 (NMS)
v10 / v26+[batch, 300, 6][max_det, (x1,y1,x2,y2,conf,cls)] — already post-NMS, pixel coords4 (none)

How to identify at runtime: log inferDims.d[0] and inferDims.d[1] inside the custom parser.

  • d={84, 8400} → pre-NMS (v8/v11 style)
  • d={300, 6} → post-NMS (v10/v26+ style)

Symptom of mismatch: If cluster-mode: 2 is used with a post-NMS [N, 6] output, bounding boxes appear shifted by 45° or 135° from the actual objects (DeepStream's NMS incorrectly re-processes already-final coordinates). If you see tilted or rotated boxes, also check the OBB / rotation_angle note in references/nvinfer_config.md: for non-OBB models, value-initialize NvDsInferObjectDetectionInfo with obj{} and keep rotation_angle = 0; plain NvDsInferObjectDetectionInfo obj; leaves fields uninitialized.

  1. Virtual Environment Must Include pyservicemaker: pyservicemaker is installed system-wide but is NOT accessible from a standard Python virtual environment. When a task requires a venv (e.g., for model download/conversion pip dependencies), always install pyservicemaker and pyyaml inside the venv. The venv setup in generated code and README must always include:
    python3 -m venv venv
    source venv/bin/activate
    pip install /opt/nvidia/deepstream/deepstream/service-maker/python/pyservicemaker*.whl pyyaml
    pip install -r requirements.txt  # other dependencies
    
    Symptom if missing: ModuleNotFoundError: No module named 'pyservicemaker' when running the app inside the venv.

Key Paths (DeepStream 9.0)

  • Models: /opt/nvidia/deepstream/deepstream/samples/models/
  • Primary Detector: /opt/nvidia/deepstream/deepstream/samples/models/Primary_Detector/resnet18_trafficcamnet_pruned.onnx
  • Tracker lib: /opt/nvidia/deepstream/deepstream/lib/libnvds_nvmultiobjecttracker.so
  • Kafka lib: /opt/nvidia/deepstream/deepstream/lib/libnvds_kafka_proto.so
  • Sample configs: /opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/

Reference Documents

IMPORTANT: Always read these documents for complete details. Do NOT generate code from memory.

DocumentUse When
references/gstreamer_plugins.mdLooking up plugin properties, ALL properties listed
references/service_maker_api.mdUsing Pipeline/Flow API, metadata access, probes, EventMessageUserMetadata
references/use_cases_pipelines.mdBuilding pipelines: simple playback, multi-inference, cascaded GIE
references/kafka_messaging.mdKafka/message broker setup, nvmsgconv/nvmsgbroker config, msg2p-newapi
references/best_practices.mdDesign patterns, common pitfalls, anti-patterns
references/buffer_apis.mdBufferProvider/Feeder (injection), BufferRetriever/Receiver (extraction)
references/media_extractor_advanced.mdMediaExtractor, MediaChunk, FrameSampler
references/utilities_config.mdPerfMonitor, EngineFileMonitor, SourceConfig, SensorInfo, SmartRecordConfig
references/nvinfer_config.mdnvinfer config file format, ALL parameters
references/tracker_config.mdnvtracker config, NvDCF/IOU/DeepSORT/NvSORT
references/troubleshooting.mdError messages and solutions
references/rest_api_dynamic.mdREST API, dynamic source add/remove, nvmultiurisrcbin
references/metamux_config.mdnvdsmetamux config, parallel multi-model inference, metadata merging, source ID filtering
references/docker_containers.mdDocker images, Dockerfile examples, pyservicemaker install, container run commands

Quick Error Reference

ErrorSolution
iterator has no len()Iterate to count, don't use len()
pad template not foundUse "sink_%u" not "sink_0"
Queue data lossUse multiprocessing.Queue with Process
Config parse failedUse property: not model: in YAML
is-classifier deprecation warningUse network-type: 1 instead of is-classifier: 1 for classifiers; omit both for detectors
min-boxes unknown key warningUse minBoxes (camelCase) in class-attrs-* sections, not min-boxes
Secondary GIE inactiveSet process-mode: 2, check operate-on-gie-id
Tee/dynamic source stuck PAUSEDSet async: 0 on ALL sink elements
RTSP no data/reconnectingTest URL with ffplay, check credentials
RuntimeError: Probe failuremeasure_fps_probe cannot attach to sink elements; use nvinfer or nvosdbin instead
setDimensions negative dims / engine build failedAdd infer-dims=C;H;W for dynamic ONNX models (e.g., infer-dims=3;640;640)
No module named 'pyservicemaker' in venvpip install /opt/nvidia/deepstream/deepstream/service-maker/python/pyservicemaker*.whl pyyaml inside the venv
AttributeError: object has no attribute 'obj_label'Use obj_meta.label not obj_meta.obj_label in pyservicemaker (C API name differs from Python binding)
<!-- Signing refresh marker. -->

List & Monetize Your Skill

Submit your Claude Code skill and start earning

Get started →

Use Cases

Task Automation & Efficiency

Automate repetitive workflows and reduce manual effort

Example

Generate reports, summarize documents, draft communications

Save 3-5 hours per week on routine tasks

Knowledge Enhancement

Learn new skills, understand complex topics, get expert guidance

Example

Explain concepts, provide examples, suggest learning resources

Accelerate learning and skill development by 2x

Quality Improvement

Enhance output quality through reviews, suggestions, and refinements

Example

Review drafts, suggest improvements, catch errors

Improve work quality by 30-40% with less effort

Implementation Guide

Prerequisites

  • Claude Desktop or compatible AI client with skill support
  • Clear understanding of task or problem to solve
  • Willingness to iterate and refine outputs

Time Estimate

15-45 minutes depending on use case complexity

Steps

  1. 1Install skill using provided installation command
  2. 2Test with simple use case relevant to your work
  3. 3Evaluate output quality and relevance
  4. 4Iterate on prompts to improve results
  5. 5Integrate into regular workflow if valuable

Common Pitfalls

  • Expecting perfect results without iteration
  • Not providing enough context in prompts
  • Using skill for tasks outside its intended scope
  • Accepting outputs without review and validation

Best Practices

✓ Do

  • +Start with clear, specific prompts
  • +Provide relevant context and constraints
  • +Review and refine all outputs before using
  • +Iterate to improve output quality
  • +Document successful prompt patterns

✗ Don't

  • Don't use without understanding skill limitations
  • Don't skip validation of outputs
  • Don't share sensitive information in prompts
  • Don't expect skill to replace human judgment

💡 Pro Tips

  • Be specific about desired format and style
  • Ask for multiple options to choose from
  • Request explanations to understand reasoning
  • Combine AI efficiency with human expertise

When to Use This

✓ Use when

Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.

✗ Avoid when

Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.

Learning Path

  1. 1Familiarize yourself with skill capabilities and limitations
  2. 2Start with low-risk, non-critical tasks
  3. 3Progress to more complex and valuable use cases
  4. 4Build expertise through regular use and experimentation

Related Skills

Reviews

4.826 reviews
  • R
    Rahul SantraDec 20, 2024

    deepstream-dev reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • S
    Soo GhoshDec 8, 2024

    deepstream-dev is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • G
    Ganesh MohaneNov 11, 2024

    I recommend deepstream-dev for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • N
    Noah GuptaSep 13, 2024

    deepstream-dev reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • C
    Chaitanya PatilSep 9, 2024

    deepstream-dev is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • M
    Mia LopezSep 5, 2024

    Registry listing for deepstream-dev matched our evaluation — installs cleanly and behaves as described in the markdown.

  • O
    OshnikdeepAug 28, 2024

    Keeps context tight: deepstream-dev is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • A
    Aanya ThomasAug 24, 2024

    deepstream-dev reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • N
    Noah TandonAug 4, 2024

    Registry listing for deepstream-dev matched our evaluation — installs cleanly and behaves as described in the markdown.

  • N
    Noah SanchezJul 23, 2024

    Useful defaults in deepstream-dev — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

showing 1-10 of 26

1 / 3

Discussion

Comments — not star reviews
  • No comments yet — start the thread.