# Ndi Docs

> >

- **Type:** Skill
- **Install:** `agentstack add skill-damionrashford-media-os-ndi-docs`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [damionrashford](https://agentstack.voostack.com/s/damionrashford)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [damionrashford](https://github.com/damionrashford)
- **Source:** https://github.com/damionrashford/media-os/tree/main/.claude/skills/ndi-docs
- **Website:** https://damionrashford.github.io/media-os/

## Install

```sh
agentstack add skill-damionrashford-media-os-ndi-docs
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# NDI Docs

**Context:** $ARGUMENTS

## Quick start

- **Find an NDI API / feature / spec detail:** → Step 2 (`search --query `)
- **Read the full section for a topic:** → Step 3 (`section --page  --id `)
- **Grab a whole doc page:** → Step 4 (`fetch --page `)
- **Prime cache for offline use:** → Step 5 (`index`)

## When to use

- User asks "what port does NDI use?" or "what's NDI|HX?" or "does NDI 6 support HDR?"
- Need to verify a wire-protocol detail before recommending config (mDNS 5353, TCP 5960, streams 5961+).
- Need the exact SDK-vs-Advanced-SDK feature matrix (routing, multicast, access-control, compressed passthrough).
- Need the official NDI 6 / HX3 / Agilex 7 feature list before claiming support.
- Need to cite the canonical `docs.ndi.video` URL.
- Integrating NDI with OBS → check DistroAV (not "obs-ndi" — that repo was renamed/forked).

---

## Step 1 — Know the page catalog

The script only works against a fixed list of known docs.ndi.video pages plus the DistroAV GitHub README. Get the list:

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py list-pages
```

Common picks:

| Question | Page |
|---|---|
| "Which NDI SDK do I need?" | `sdk-landing` |
| "What changed in NDI 6?" | `tech-ndi6` |
| "Release notes / version history" | `sdk-release-notes` |
| "Which ports does NDI use?" | `sdk-port-numbers` |
| "Does NDI support HDR? PQ / HLG?" | `sdk-hdr` |
| "SDK vs Advanced SDK differences" | `faq-sdk-vs-advanced` |
| "OBS + NDI setup" | `distroav` |
| "NDI docs root / landing" | `docs-root` |

Read [`references/pages.md`](references/pages.md) for the full catalog + use-cases.

---

## Step 2 — Search first

When the user names an NDI feature / port / flag / function, search across all pages:

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "multicast" --limit 5
```

When you know the page, scope it (faster, less noise):

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "5960" --page sdk-port-numbers
```

Output format per hit:

```
--- : — 

```

Use `--format json` for machine-parseable output.

First run downloads the page; subsequent runs hit the local cache at `~/.cache/ndi-docs/`.

---

## Step 3 — Read one section in full

When a hit points to a specific topic and you want the whole block:

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py section --page sdk-port-numbers --id discovery
```

`--id` accepts an anchor id OR a heading keyword fallback.

---

## Step 4 — Fetch a whole page

Rarely needed; search/section are almost always better.

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py fetch --page tech-ndi6
```

Pair with `--format json` for structured output.

---

## Step 5 — Prime the cache (optional)

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py index
```

Fetches every known page into `~/.cache/ndi-docs/`. Override with `export NDI_DOCS_CACHE=/path`.
Clear: `uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py clear-cache`.

---

## Gotchas

- **NDI is proprietary. There is NO open-source libndi reimplementation.** Every NDI-capable tool links against NewTek/Vizrt's binary `libndi.so` / `Processing.NDI.Lib.dll` / `libndi.dylib` that ships with the SDK installer. "Build NDI support from source" is not a thing.
- **The SDK cannot legally be redistributed inside ffmpeg binaries.** That's why ffmpeg's NDI support was removed from mainline (non-redistributable) and why OBS-NDI was renamed to DistroAV and must be installed separately — it dlopens the system-installed NDI runtime.
- **Wire protocol uses THREE port families.** mDNS discovery on UDP 5353 (standard Bonjour), messaging on TCP 5960, and each source opens streams starting at TCP/UDP 5961 and incrementing. Firewall rules must open 5353/udp + 5960-5999/tcp + 5960-5999/udp minimum, more if you host many sources.
- **NDI full uses the SpeedHQ codec** (Vizrt's proprietary DCT-based codec, ~15:1 compression, visually lossless on broadcast material). It is I-frame-only. Bitrate is roughly 100–250 Mbps for 1080p60.
- **NDI|HX is H.264 or H.265** (the "HX" family — HX2 = AVC, HX3 = HEVC added in NDI 6). NDI|HX is NOT SpeedHQ; it's much lower bitrate (~8–20 Mbps) at the cost of latency (P/B-frames introduce encode/decode delay). Don't confuse SpeedHQ bitrates with HX.
- **NDI 6 adds native HDR (PQ and HLG) and 10/12/16-bit pixel formats.** Before NDI 6, HDR was unofficial / metadata-only. If a user says "NDI HDR", clarify they're on NDI 6+ runtime on both sender and receiver.
- **Standard SDK is free for non-commercial use only.** Commercial redistribution requires the Advanced SDK licence. Pricing is via Vizrt sales — not publicly listed.
- **Advanced SDK unlocks routing, access-control (groups), multicast sending, compressed passthrough (send already-encoded streams without re-encode), custom frame sync, and a C++ wrapper.** Standard SDK is send/recv/find only.
- **NDI Bridge bridges NDI across subnets/WANs** using TCP relay through a server. Required when mDNS can't traverse (LAN segmentation, VLAN isolation, site-to-site). Without Bridge, NDI is LAN-only.
- **NDI Discovery Server is an alternative to mDNS** — when mDNS is blocked on a hostile network, run a Discovery Server and point clients at it via env var `NDI_DISCOVERY_SERVER=ip:port`.
- **DistroAV (the OBS plugin) is the successor to obs-ndi.** The obs-ndi GitHub repo is archived/stale. Install DistroAV from `github.com/DistroAV/DistroAV` releases or via OBS's in-app plugin installer. It requires the NDI runtime installed separately (the SDK or the standalone Tools/Runtime installer).
- **Fallback when docs.ndi.video is down:** the DistroAV README (`page=distroav`) is hosted on GitHub raw and covers install + hotkey + common config.
- **Cache is per-page only, not per-NDI-version.** After a NDI release shifts spec pages, `clear-cache` then `index`.
- **The script is stdlib-only** — no pip install. Python 3.9+.

---

## Examples

### Example 1 — "What ports does NDI need open on the firewall?"

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "port" --page sdk-port-numbers
```

### Example 2 — "Does NDI support HDR PQ?"

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "PQ" --page sdk-hdr
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py fetch --page sdk-hdr
```

### Example 3 — "What's the difference between the SDK and the Advanced SDK?"

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py fetch --page faq-sdk-vs-advanced
```

### Example 4 — "What did NDI 6 add?"

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "NDI 6" --page tech-ndi6 --limit 10
```

### Example 5 — "OBS + NDI setup steps"

```bash
uv run ${CLAUDE_SKILL_DIR}/scripts/ndidocs.py search --query "install" --page distroav
```

---

## Troubleshooting

### Error: `unknown page: foo`

**Cause:** Name isn't in the catalog.
**Solution:** Run `list-pages` for valid names.

### Error: `urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]`

**Cause:** macOS Python missing certs.
**Solution:** Run `/Applications/Python\ 3.x/Install\ Certificates.command` or set `SSL_CERT_FILE`. Don't disable SSL verification.

### Search returns zero hits

**Cause:** Term doesn't exist on the selected page or docs.ndi.video moved the page.
**Solution:** Drop `--page` to search all pages. Try broader query. Some details live in the DistroAV README rather than docs.ndi.video.

### Cache stale after an NDI SDK release

**Solution:** `clear-cache` then `index`.

---

## Reference docs

- Full URL catalog, wire-protocol summary, and SDK-vs-Advanced-SDK matrix → `references/pages.md`.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [damionrashford](https://github.com/damionrashford)
- **Source:** [damionrashford/media-os](https://github.com/damionrashford/media-os)
- **License:** MIT
- **Homepage:** https://damionrashford.github.io/media-os/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-damionrashford-media-os-ndi-docs
- Seller: https://agentstack.voostack.com/s/damionrashford
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
