Ultragrid via NDI6

We currently have an UltraGrid based appliance installed at a colorist’s house in Georgia. We are in LA, and the ping is about 45ms.

We encapsulate the output of UG into SRT and that has a 3x multiplier, so the inherent latency will be at least 135ms, which is around 3 frames @24fps. This does not take into account encode/decode latency. Full in real world latency is about 14-16 frames of DCI 2K 12bit RGB 444 P3 color. The colorist says it’s the least latent system he has worked with. He says some of the other systems he has worked with are in the multiple seconds range, even as high as 10.

We do send h.265 compressed video though. Using a non-temporal codec seems to significantly reduce latency at the expense of a vastly higher data load. Also, it is possible that NDI inherently is less latent than SDI-> BMD Capture → encode → decode → BMD SDI out. Also, most of the examples I see of people using NDI, they are running UG on the same machine as the Flame itself, which would add another advantage to reducing latency.

Anyway, if you ever want to test or chat about more complex UG configurations, I’ll be around.

3 Likes

So can you use a Tailscale 100.X.X.X IP address in the Destination of the player? For some reason I can get connections via local IP addresses fine, but testing via Tailscale isn’t working.

Any hints?

Okay, ID10T error. I got Tailscale working.

Now, the ultimately dumb question. How do I get it from this little window into a big window? Full screen?

if you just mean a fullscreen window you can use a Vulkan window in fullscreen with:

uv -t ndi -d vulkan_sdl2:fs --control-port 0

That’ll pick up the first NDI signal the box detects on the network (starting with localhost) and then draw a fullscreen window on the main-display. Pressing “f” on the keyboard will toggle it between bordered and fullscreen.

If you’re sending a signal from another box (just dawned on me that you must) then,

uv -d vulkan_sdl2:fs -r coreaudio --control-port 0

Is probably what you’re after. Uses the default core audio of the Mac for audio and does the fullscreen window.

1 Like

Helpful Ultragrid commands. This is an editable Wiki. Anyone can edit.

For Linux versions, just replace:

/Applications/uv-qt.app/Contents/MacOS/uv

with (assuming you are currently navigated to your Ultragrid installation directory)

./uv

Mac Sender
NDI, h264 422 10bit auto bitrate, opus audio

/Applications/uv-qt.app/Contents/MacOS/uv -t ndi:url=<source ip address>:5961 -c libavcodec:codec=H.264:subsampling=422 -s embedded --audio-codec Opus --control-port 0 <destination IP address>

Mac Sender
NDI, h264 422 10bit 25M/b, PCM audio

/Applications/uv-qt.app/Contents/MacOS/uv -t ndi:url= <source ip address>: 5961 -c libavcodec:codec=H.264:bitrate=25M:subsampling=422 -s embedded --audio-codec pcm --control-port 0 <destination IP address>

Mac Receiver
Vulkan player, full screen, core audio output

/Applications/uv-qt.app/Contents/MacOS/uv -d vulkan_sdl2:fs -r coreaudio --control-port 0

Mac Receiver
Vulkan player, small player, core audio output

/Applications/uv-qt.app/Contents/MacOS/uv -d vulkan_sdl2 -r coreaudio --control-port 0
5 Likes

@cnoellert Are there any advantages to using -d vulkan_sd12 over -d gl?

iirc vulkan can do 10bit and gl cant? vulkan is that how new shizz

1 Like

correct.

In fact, just this weekend, I tested on the scopes, the HDMI output of an Intel NUC12 running Ubuntu with UG set to 10bit vulkan out, and it is slightly more color accurate than the HDMI out of a BMD UltraStudio 4K Thunderbolt, which is supposed to be pro level accurate.

BMD keeps audio sync better though, and has SDI out too, which some of our installations need.

3 Likes

I’ve uploaded my UG script in the portal, but am putting it here too.

ultragrid.zip (46.3 KB)

It’s really nice to be able to convert my side mac into a “broadcast monitor” in a few seconds.

If you want to check it out, you can open the UltraGrid Setup window and enter your ssh info and commands. I’ve only tested it on Linux in Flame2025, but should work for 2023.2 and above. It won’t currently work for Mac because of the way it opens up new terminal windows and because JumpDesk is pretty good for our Mac stuff.

3 Likes