Readit News logoReadit News
Posted by u/gassi 3 months ago
Show HN: RomM – An open-source, self-hosted ROM manager and playergithub.com/rommapp/romm...
RomM is a self-hosted app that allows you to manage your retro game files (ROMs) and play them in the browser.

Think of it as Plex or Jellyfin for your ROM library: it automatically fetches metadata, artwork, and game information from online metadata sources to transform your folders into a browsable collection.

You can play games directly in the browser for consoles like the N64, Game Boy Advance, Nintendo DS, and PlayStation 1, using the integrated web emulator (https://emulatorjs.org/). Members of the community have released integrations for Playnite (Windows), muOS (Anbernic handhelds) and Decky Loader (Steam Deck), with many more in the works.

The team has been working on RomM for just over two years now, and we're incredibly proud of what we've built so far. There's no company behind the project, just a bunch of friends building something together that we've wanted for a long time. And of course, the code is open-source and AGPLv3 licensed.

Check out the (kinda slow) demo running on an ultra-cheap VPS: https://demo.romm.app/

bogwog · 3 months ago
I had an idea once but not the time nor motivation to build it: a database of game design with links to gameplay snippets.

So for example an article on "2D platforming" that discusses the implementation in Super Mario, and includes a "demo" button which launches a web emulator with a save state that demonstrates a specific jumping section of the game.

Legally perilous maybe, although my non-lawyer brain sees that as fair use, especially if the emulator doesn't let you play the full game. Idk, but it'd be a unique thing on the internet.

Edit: this is awesome btw, im definitely setting up a personal instance soon

gassi · 3 months ago
Cool idea, would be a fun POC or weekend project. The team behind EmulatorJS (https://emulatorjs.org/) has made it stupid easy to inject the player into a static website (or multiple players with iframes), with a preloaded game and custom settings.
TomatoCo · 3 months ago
I think you could make your fair-use defense a lot stronger by stripping the ROM. Shouldn't even be that hard! Only let it run for a few seconds, record all the memory accesses, zero everything that wasn't hit.
Arelius · 3 months ago
> Legally perilous maybe, although my non-lawyer brain sees that as fair use, especially if the emulator doesn't let you play the full game. Idk, but it'd be a unique thing on the internet.

IANAL, but I think what a lot of people don't understand is that "fair-use" is a defense. Which basically means you have to be prepared to argue in in court. A lot of potential fair-use is quashed before it gets to that point.

It's also a balancing test, which means that it's very fact/context dependent, and subjective, which results in for a lot of cases, you really won't know until you actually get to court.

gassi · 3 months ago
This is incredibly relevant to projects in this space, and we continue to hold discussions about what is and isn't tolerated in our community, and what features we should avoid building, in order to protect ourselves from legal attacks. One thing you'll never see integrated into the RomM is a way to pull/download ROMs from cloud services or website; you'll always need to provide the games to RomM directly, after sourcing them legally of course.
kaunta · 3 months ago
This idea was explored by Joël Franušić and Adam Smith:

"Playable Quotes for Game Boy Games" - https://www.youtube.com/watch?v=z9JYOZWLMlo

MyPasswordSucks · 3 months ago
The database idea is neat, but I'm not really sure what the web emulator part adds besides bloat. Either an animated .GIF or an HTML5 object with buttons to click to demonstrate, e.g., standing horizontal jump trajectory vs running horizontal jump trajectory would not only be less overhead, but much more immediate.
anthk · 3 months ago
MAME/MESS just used GIF files for that.
bane · 3 months ago
RomM is a great project! I've so excited to see the integrations coming along.

As somebody who's setup a lot of little retroboxes, the idea of doing it once and having my collection served off of my homelab to all my other devices is incredibly appealing. Web-based emulation has come a very long way. Still I prefer to play off of my individual devices many of which don't have good browser support.

Setting those systems up can take hours each, but being able to point something like a Batocera instance or an ES-DE setup at a server and have it self populate with roms, bios files, screenshots, etc, would be a dream. It sounds like this might be the future of the emulation ecosystem and it sounds amazing!

gassi · 3 months ago
I love your vision and enthusiasm! You seem to have a solid setup already and a great use case for a future version of RomM.
M95D · 3 months ago
Fetching anything from the internet means some cloud knows what games I'm playing. It's a privacy risk. Games played are very revealing to personality type, and probably lots of other individual info, and that means the temptation to gather this data and sell it to advertisers is very high.
gassi · 3 months ago
What fortunate timing! Our next release will including a new, local-only "API" that uses Launchbox's GamesDB (https://gamesdb.launchbox-app.com/) as the metadata source. The entire database is loaded into Redis and games are matched on exact file names, so no data is ever sent to any cloud providers.

https://github.com/rommapp/romm/pull/1515

wolrah · 3 months ago
> Fetching anything from the internet means some cloud knows what games I'm playing. It's a privacy risk. Games played are very revealing to personality type, and probably lots of other individual info

It seems like OP already replied with an upcoming feature to entirely eliminate your concern, but I would also point out that this doesn't mean the cloud service knows what games you're playing, they just know what games you have which for many gamers are two very different things.

That's especially true for those with a large enough ROM collection to be interested in tools to manage and simplify access to their libraries. I'd be willing to bet that the majority of potential users have collections that are exponentially larger than the list of games they actually play, in many cases some variety of a "complete" collection.

doubled112 · 3 months ago
It is optional. If you don’t configure the integrations it won’t fetch anything from the internet.

It looks much less impressive without cover art though.

gassi · 3 months ago
Even if we could bypass calling the API directly, just fetching, storing or loading images from IGDB or SSFR would "leak" some data in those calls. In theory you could block the container's access to the web, then identify and upload cover art for every game by hand.
udev4096 · 3 months ago
Use a goddamn VPN or Tor if you don't like being profiled. We live in the era of mass surveillance. It is obvious that everyone is being profiled all the time. It's a meta-data aggregating player, how the fuck do you think that works?
1oooqooq · 3 months ago
retroarch downloads entire db of assets.
atrus · 3 months ago
Thank you for being AGPLv3, and an extra big thank you for clearly laying out the needed directory structure. Sometimes it's not always clear. The docs in general are great!
gassi · 3 months ago
Glad to hear it!
dawnerd · 3 months ago
I'm using it mostly as a way to keep my copies of GOG games organized. I could use GOG's app, but the point of having fully offline copies is to not have them under the control of the people you bought them from.

Romm works really great for this too.

roger_ · 3 months ago
Been tracking this for a while and it really needs support for renaming and validating ROMs (e.g. with .dat files) to be called a “ROM manager”.
gassi · 3 months ago
1000% agree, and we're planning to do just that with Hasheous (https://hasheous.org/), a "free service that matches MD5 or SHA1 hashes of ROMs and digital games with metadata providers". There's a cloud version hosted by the project creator, or you can spin up your own instance and source the .DAT files.
roger_ · 3 months ago
Great, looking forward to it!

I’ve used RomCenter and other tools in the past and I’d love to see similar, comprehensive functionality in something more modern.

papercrane · 3 months ago
Your comment piqued my interest, as that would be a required feature for me to use something like this.

It looks like they do support integrating with a tool called Igir to handle validating and naming ROMs using DAT files.

https://docs.romm.app/latest/Tools/Igir-Collection-Manager/

gassi · 3 months ago
Igir is great! We've been sponsoring them for the last few months since many of our users find it helpful. There are docs on both ends for getting it to output a folder structure that's compatible with the app

https://docs.romm.app/latest/Tools/Igir-Collection-Manager/ | https://igir.io/usage/desktop/romm/#

sumtechguy · 3 months ago
Have to dig and see if it handles retool items. Unfortunately retool has been basically abandoned. IGIR looked interesting until I realized it could not do parent/clone for redump like retool.
garrettjoecox · 3 months ago
Could you explain the benefits of using this over retroarch, lakka.tv, emulator station, EmuDeck (steam deck wrapper around some of these), etc.

Playing through a browser seems like a downside for me personally

zurdi · 3 months ago
This is a self-hosted solution, unlike all those sofware you mention. You will install this in your server through docker and you will manage your ROMs library with a clean interface. Being able to play in the webUI itself is an extra since we just integrated emualtorjs (from emulatorjs.org)
garrettjoecox · 3 months ago
I think I might just be too far from the target audience to understand this. I don’t see any of the other options as non “self hosted”, they aren’t backed by some cloud infrastructure owned by a company, those are all locally running apps on your device
gassi · 3 months ago
Ideally you would use both, and the community would build integrations that allow, say, EmuDeck to pull games from the server onto your Steam Deck and sync saves back to the server.

I usually play on Windows with Playnite (https://playnite.link/), and the plugin (https://github.com/rommapp/playnite-plugin) allows Playnite to pull and display the list of games for each system, after which I can install the ones I want to play onto my PC.

pipes · 3 months ago
Looks lovely. Thanks for creating this.

If you have time:

Does it (or can it) run emulators natively? I'm trying to get my head around js emulator, how is that libretro? Is libretro compiled to wasm?

Is it running retro arch underneath or have you managed to implement the libretro API?

I love and hate retroarch. Its menus are ridiculous but it's still easier than managing multiple emulators.

gassi · 3 months ago
The project that powers the in-browser emulator is EmulatorJS, which use RetroArch's libretro cores compiled to WASM. More info on the process here: https://emulatorjs.org/docs4devs/buildingraw

I believe it's running RetroArch, as when you load a corrupt file or start without selecting a game it displays the RA menu. If you want to dig deeper you can check out their github or ask in their Discord, the team have been wonderful to work with.

pipes · 3 months ago
Thanks for this. If it's running libretro cores compiled to wasm, why is retro arch required? Is it a version of retro arch compiled to wasm?