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

@haseebrabbani
Copy link

no worries, just filed in their Feedback app.

also, can we get a tvOS app as well? would be nice to have for my setup

@LowRiderXR
Copy link

@KhaosT
Iβ€˜ve written to the kiloview support. They claim that the ndi HB meta data is correct, but there seems to be an anomaly in the ndi HX metadata, which they still try to fix.

Can I use the ndi HX mode with the vxio app or only the the HB mode? When I use the HX mode, I get the sound, but only a black screen.

@KhaosT
Copy link
Author

KhaosT commented Jan 3, 2025

I think when HX mode only works if you set the N60 to only do HX. At least for me, when both HX and HB mode is enabled, I also get a blank screen for HX.

@LowRiderXR
Copy link

Thank you, I tried it yesterday. HX mode does work, HX3 seems not to work. I will wait for the visionOS fix.

@haseebrabbani
Copy link

haseebrabbani commented Mar 23, 2025

hey @KhaosT πŸ™‚ been thinking about a fix to the blurry HDR issue. I noticed that when I am resizing the VisionOS window from the bottom left/right corner the image appears sharp. When I release the resizing bar then the image goes back to being slightly blurry. Could this be used as a "workaround" to fix the blur? (i.e. programmatically resize the window by like a pixel and repeatedly make it larger and smaller so that its hopefully not noticeable)

@haseebrabbani
Copy link

another thing I wanted to point out is that sometimes the HDR works without blur. i dont have a solid repro, but on occasion the Vxio app seems to freeze/crash and then when i restart it I can see the stream in HDR without blur (so glorious!). there must be a way to fix the blur consistently

@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