[Feature] Emulation Server
Is your feature request related to a problem? Please describe. I have come across an issue a couple of times that it is trying to play certain games in weak devices.
Describe the solution you'd like This is something I've being working on, I've created a PoC of a emulation server. That would allow to play in platforms even if the device does not support. Also, it should be easier to play with other people, since you could play as you were playing in the same machine.
Describe alternatives you've considered I like the way EmulatorJS works but I would like to have more options. This issue is just to present my idea and to understand if this is something that you guys could be interested in add to the project.
Additional context Here it is a small video of the PoC working with RomM. This is a video of one user initiating a game session and the other is joining that session.
https://github.com/user-attachments/assets/c85733bc-ed80-475e-988a-1444a5420866
Interesting! Can you hop into the discord's open-development channel so we can discuss this further? I'm sure the rest of the team would want to see this. https://discord.gg/TsPcPRAn
Describe the solution you'd like This is something I've being working on, I've created a PoC of a emulation server. That would allow to play in platforms even if the device does not support. Also, it should be easier to play with other people, since you could play as you were playing in the same machine.
Just a curiosity: what kind of platforms can be played this way? Up to what console?
What technology/architecture is this "emulation server" using?
Are we truly near to play Gamecube/PS2 games in the browser? 😄
EDIT: Well, at least the "architecture" things can easily be answered: there's the repo!
Right now I have tested only SNES. I tried to run N64 and it didn't work, then I realised I didn't implement SDL/OpenGL. Right now, I am improving the interface and communication with Romm so people can use and run more tests. After this I will focus on implementing SDL and see how it will perform. I am confident that it will work 🙂
I'd be super interested in this concept but for a different purpose. It would be great to be able to run an emulation server that would handle all the lifting for more heavier emulation, such as Xbox360 and PS2 games and pipe video/controls back to the browser.
I'm sure that's just a fever dream though.
@Kieranwest that is actually the idea behind this or am I missed something in your idea. The concept is working, however, I am still struggling to encode the data using GPU, like h264 or h265 (tried using some compression algorithms in CPU but it was too much) and serve.
Now, I am using SNES and N64 as base to check if the stuff is working. SNES worked pretty fine but not N64. I hope to get to Xbox and PS2 soon :)
@Kieranwest would this cover your use case? https://github.com/games-on-whales/wolf
@alfredocdmiranda It's possible we're talking about the same thing. I'm thinking of consoles such as the PS2 for example, where it can't quite be emulated in Javascript but it might be possible to emulate a game on a server elsewhere and pipe back video / controls to the browser within Romm. It's most likely out of the scope of the Romm project but man it would be cool to turn it into a backup / player platform for Retro games.
@gantoine Kinda! I'm more thinking of a solution that can be integrated within Romm, making it both a backup/player kind of solution for different platforms :D.
We have long-term plans to build integrations with Pegasus, Lutris and/or EmulationStation, all of which should be supported in Moonlight. https://games-on-whales.github.io/wolf/stable/apps/pegasus.html
@gantoine I think Wolf actually covers what I am trying to do. I didn't check all the features it supports but at first glance it supports the basics. Allow multiple users at the same time.
It would be nice if there were specific features for emulators, like saves.
You should get the Nobel of gaming. All of you.
Oh man this is getting me excited
@gantoine I think Wolf actually covers what I am trying to do. I didn't check all the features it supports but at first glance it supports the basics. Allow multiple users at the same time.
It would be nice if there were specific features for emulators, like saves.
Interesting idea to use wolf. I know the community has been working to create a base emulation container. what could be itneresting to see if RomM talking to Wolf to start the emulation container and piping in the game to launch then launching moonlight using launch options like in https://github.com/moonlight-stream/moonlight-qt/pull/89
reason for this approach is RomM could house the logic around what emulator to use and manage the games itself and then the container just launches pulls in the game and launches. Its possible to make this mostly work from the RomM ui and wolf just acting as the backend for running.
I was just wondering the same thing. Maybe using exsisting platforms? RetroArch in a container that could be streamed?
I actually tested Wolf a couple of months ago and at that time it didn't work as I would expect. Since it is a more generic platform, it was a bit cumbersome to configure. Also, it didn't have usernames, so it would create a new folder for each device instead of each user. Then, we couldn't just resume your game on another device.
I spent some time trying to learn how to encode and decide using GPUs but I got dragged by some personal stuff and couldn't go back to this 😔