Skip to content

Instantly share code, notes, and snippets.

@KhaosT
Last active April 19, 2025 05:01
Show Gist options
  • Save KhaosT/e9b60fc0fb99b9f4512759b953cbf38c to your computer and use it in GitHub Desktop.
Save KhaosT/e9b60fc0fb99b9f4512759b953cbf38c to your computer and use it in GitHub Desktop.
Guide for using Apple Vision Pro as HDMI display

Displaying HDMI sources on Apple Vision Pro

While it's possible to stream most content to Apple Vision Pro directly over the internet, having the ability to use Apple Vision Pro as an HDMI display can still be useful.

Since Apple Vision Pro does not support connecting to an HDMI input directly or using an HDMI capture card, we have to be a little creative to make this work. NDI provides the ability to stream HDMI content over a local network with really low latency, and it works great with Apple Vision Pro.

This page shows the setup I’m using.

What’s needed

  • HDMI NDI Encoder
    • Personally, I recommend the Kiloview N40, as it supports streaming up to 4K60 while being fan-less, and can use USB-C as a power input.
    • Kiloview N60 comes with more features, but it’s larger and has a fan.
  • Vxio app
    • I made this one, you can also use other NDI monitor apps as well.
    • Separately, Finn made Castaway that makes it possible to use a USB Capture Card + Mac/iPad instead of an NDI encoder. It's a more cost effective option for most people I imagine.

Things to consider

  • To ensure high video quality, an NDI stream typically consumes significantly more bandwidth than a typical H.264/H.265 stream. Before purchasing the encoder, make sure your network can support data transfers at that speed.
    • For 4K60 stream, the bandwidth required is typically around 250~300mbps. If you're having issue to stream smoothly, try go to the encoder's settings page and reduce the streaming quality.
    • You can test this with some free software NDI encoders.
  • Since this setup requires encode and decode the video content, it is not latency free. From my experience, I typically see 3~4 frames (~50ms, same as moonlight based on my measurement) of delay from the content source.

Setup

Setting up an NDI encoder is pretty straightforward. Just connect the device to your local network via Ethernet, supply power, and connect the HDMI input to the encoder.

If the visionOS shows the Local Network permission dialog, and after granting the permission the app still shows searching, you may need to force close the app, and reopen it.

After that, you should be able to see the encoder show up as a source in the Vxio app. Select the source, and you'll get your HDMI display πŸŽ‰

Screenshot

Misc

Adjusting audio queue size

Depending on the NDI encoder, the default audio queue size might be too small for some devices. In that situation, try increasing the audio queue size so that the audio no longer experiences abrupt stops between samples.

Disable Multi-TCP

If your Wi-Fi channel is congested, you can try force N40 to use UDP instead of Multi-TCP. In my experience, UDP performs a lot better in those network condition. You can do so from the N40's configuration UI, select NDI Connection -> Multi-TCP Disallowed.

UDP

Portable setup

I was able to make this setup portable by getting one of those mini router (GL.iNet Beryl AX) with a LAN port.

IMG_3978 IMG_3979

#AppleVisionPro #visionOS

@KhaosT
Copy link
Author

KhaosT commented Mar 27, 2025

I’ll see if there are some workaround I can apply to fix the issue this weekend. Basically the problem is we passed in the 4K HDR buffer to visionOS and somehow it’s foveated rendering pipeline decided it won’t show that in full resolution…

@KhaosT
Copy link
Author

KhaosT commented Mar 30, 2025

@haseebrabbani after isolating the issue, the end result is AVSampleBufferDisplayLayer + 4K HDR sample buffer. If I drop the HDR tag it works, and resize the app window also forces the OS to redraw the blurry frame. Unfortunately, I wasn't able to find a workaround as programmatically resizing the app window won't do that.

@haseebrabbani
Copy link

Appreciate you looking into it πŸ™

@haseebrabbani
Copy link

is anyone aware of other NDI monitor apps for AVP that work with non-blurry HDR? More than happy to pay for scratching this itch

@KhaosT
Copy link
Author

KhaosT commented Apr 9, 2025

@haseebrabbani in the next update there is going to have an option to use RealityKit to render the stream, which seems to work with HDR content. Unfortunately based on my testing RealityKit has a different set of bugs which prevents it working for non-HDR content. You might switch between them based on what content you're trying to view.

IMG_0176

@haseebrabbani
Copy link

@KhaosT that would be amazing! as long as there is some option to make the HDR appear non-blurry, that would be much appreciated πŸ™πŸ’ͺ is there an ETA on the next update?

@KhaosT
Copy link
Author

KhaosT commented Apr 9, 2025

It’s already out

@haseebrabbani
Copy link

GLORIOUS! thank you πŸ™

@Jefe533
Copy link

Jefe533 commented Apr 9, 2025

Thank you @KhaosT for the continued updates! I just tried viewing HDR content in immersive stereo, but the highlights are sitll way too flat (almost like they are double tone-mapped). You can see the difference pretty clearly if you open the stream in "regular" flat mode in Vxio then enter immersive, as you'll see the flat version floating atop the immersive space. The regular version looks wonderfully colorful and bright in P3 ST2084 but the immersive situation is still very dull. The saturation seems correct, however. I also noticed that switching between the two renderers (Reality Kit and the AVP native) made no difference, at least not in immersive mode. I tried toggling this setting while in immersive and also by selecting one or the other, force quitting VXIO, then coming back in. I was a little thrown off by the fact that not check mark appears next to which option you select, which made me wonder if my selection was indeed taking hold.

@KhaosT
Copy link
Author

KhaosT commented Apr 9, 2025

@Jefe533 oh immersive one didn't change because it's a different pipeline and since visionOS refuse to support standard SBS setup, supporting HDR in that is going to be super annoying so I didn't bother.

@Jefe533
Copy link

Jefe533 commented Apr 9, 2025

That's too bad but I understand.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment