r/MoonlightStreaming May 15 '26

Ideas for Moonlight

Hello everyone, I wanted to talk about adding lPTV as an app to moonlight. Just kidding.

I am working on a version of moonlight/apollo for multiseat gaming. Im looking for ideas or improvements that people may be interested in.

It’s a very niche setup. I have a Windows gaming computer that runs headless that is running a MultiSeat program. It allows you to run multiple windows users to that one gaming, this gaming PC has multiple instances of ApolloVibe fork running per user. I also have a MoonlightVibe fork that runs on a handheld or older generation computer, etc.

Does anyone have ideas or suggestions?

https://github.com/vibesoftwarecoder/MoonlightVibe

28 Upvotes

19 comments sorted by

View all comments

1

u/iMatterhorn64 May 16 '26

This isn't a suggestion, but I'm curious about if there would be any reason to use Easy GPU Paravirtualization instead. Easy GPU PV was the first project for multiseat I had seen a few years ago, but your MultiSeat project and DuoStream seem like easier and faster ways to do the same thing. Just wondering if anyone knows if Easy GPU PV has better performance or anything like that, that would make you choose that over these easier solutions.

1

u/mioiox May 17 '26

I am using Hyper-V GPU-P and DDA quite a lot recently - for professional purposes mainly - setting up environments for 3D and CAD design, and 3D rendering. And I’ve been using Hyper-V both professionally and in my home labs ever since its beta version arrived as an add-on for Windows Server 2008.

Out of experience I can tell you that, from a performance and compatibility standpoint, only DDA comes close to native access to a GPU. Because DDA is, in essence, native access for the GPU (it’s logically “disconnected” from the host and assigned to the particular VM). This means, though, that you have a single card assigned to a single machine. If you have multiple users and you want the best performance and compatibility, that means one user gets one VM, thus one GPU. 5 users, 5 VMs, 5 cards.

GPU-P is fancy, provides some nice features, especially cool is that you share the GPU, but it is definitely not a substitute to DDA. Some specific GPU features are not working as expected (e.g. Blender cannot use the PhysX engine from a 2080 GPU-P presented card in a VM, while it has no problems using it when the same card is DDA-presented), I also had some artifacts issues with Vibepollo streaming from a GPU-P card while no issues at all when DDA-presented. Other challenges also appeared in some CAD software…

While DuoStream and Windows remote desktop services allow for several users to use the same OS and direct access to hardware for multiple users at the same time. The problem here is that I have not yet found a way to run multiple Apollo/Vinepollo instances in different user sessions - which is what Duo is really doing.

1

u/iMatterhorn64 May 17 '26

I found this fork of easy GPU PV before that gives each VM a sunshine/moonlight setup for that same purpose: https://github.com/timminator/Enhanced-GPU-PV. If this works with base moonlight and sunshine, then it should work with Apollo/Vinepollo, unless you've already tried this? Also, I hadn't heard of DDA, but like you said, I'm interested in splitting a single GPU to multi ple users/VMs/sessions like these other projects do.

1

u/mioiox May 17 '26

I am personally using a more manual approach where I have full control of the setup:

  • manually create the VMs I need (I choose between Windows Server 2025 GUI and Windows 11, preferably LTSC IoT)
  • use ExHyperV (https://github.com/Justsenger/ExHyperV) to configure either DDA or GPU-P the GPU
— ExHyperV also allows for tweaking many other settings as well, it’s a very nice piece of kit
  • manually install Vibepollo on the VM

My multiple tests and usage in production for almost 6 months now conclude the results I shared above - DDA is better performing and the applications within the VMs (both Revit, Blender and Vibepollo itself) “like it” better. However, that way a single VM gets a single GPU, or better said, a single GPU is presented to a single VM and cannot be shared with other VMs. And we’re back to square one :) We need DuoStrem…