RomM:把 NAS 变成怀旧游戏库

如果你跟我一样,硬盘里攒了几百 GB 的 ROM 文件,多年来靠文件夹命名和手动整理勉强度日——RomM 就是来救你的。

RomM Logo

这个 GitHub 上 9.5k 星的开源项目,本质上是一个自托管的 ROM 管理器 + 浏览器内游戏播放器。它把你散落各处的 ROM 文件自动扫描出来,从 IGDB、Screenscraper 等数据库拉取封面、简介、发行日期等元数据,然后在你自己的 NAS 或服务器上搭一个媲美 Steam 的游戏库界面。更厉害的是,它内置了 EmulatorJS 模拟器,很多老游戏能直接在浏览器里跑。

RomM 项目预览

为什么需要 RomM

先说说痛点。如果你玩模拟器,大概率经历过这些:

  • ROM 文件名叫 Super Mario World (USA).sfc,但库里躺着几百个文件,完全不知道哪个是哪个
  • 想给朋友分享某个游戏,得从 NAS 文件夹里翻半天
  • 换台设备就得重新配置模拟器,存档也不互通
  • RetroArch 的界面在电视上还行,但在电脑浏览器里想快速浏览库就差点意思

RomM 解决的就是”管理”这个环节。它不做模拟器本身(那是 RetroArch、EmulatorJS 的事),而是做游戏库的整理、展示和分发。你可以把它理解成自托管的 Steam——你拥有所有文件,它负责把它们变得好看、好找、好管理。

核心能力一览

元数据自动刮削。 接上 IGDB 或 Screenscraper 的 API(免费注册即可),RomM 能自动识别 400+ 平台的 ROM 文件,匹配封面图、游戏简介、评分、发行商、截图甚至成就信息。IGDB 是 Twitch 旗下的游戏数据库,数据质量很不错,中文游戏也能识别个七七八八。

支持的游戏平台覆盖极广。 从 Atari 2600 到 Nintendo Switch,从街机 MAME 到 PS3,基本你想得到的平台都在支持列表里。它还支持多碟游戏(比如 PS1 那种换碟的)、DLC、MOD、汉化补丁等变体,可以按标签筛选。

浏览器直接玩。 这可能是最让人惊喜的功能。RomM 内嵌了 EmulatorJS,对于 FC、SFC、GBA、MD 等轻量平台,点一下就能在浏览器里直接开玩,不需要装任何客户端。Flash 游戏也用 RuffleRS 跑起来了。

多设备同步生态。 RomM 不是孤立的 Web 界面,它有一整套官方客户端生态:

  • Playnite 插件:把 RomM 库同步到 Playnite 这个 Windows 端游戏启动器
  • Argosy Launcher(Android):为 Anbernic、Retroid Pocket、Odin 等掌机设计的原生客户端,支持手柄操作和存档同步
  • Grout:面向 muOS、Knulli、ROCKNIX 等自制固件的轻量客户端,可以无线下载游戏和封面

再加上社区维护的 DeckRommSync(Steam Deck)、SwitchRomM(Switch 自制系统)、iOS 客户端等,基本覆盖了所有常见玩法。

Docker 部署,三分钟跑起来

RomM 的部署极其简单,官方推荐 Docker Compose。核心只需要两个容器,MariaDB 做数据库,Valkey(Redis 兼容)做缓存和任务队列。资源占用很低,我的飞牛 NAS 上跑着几乎感觉不到存在。

部署完成后访问 http://nas-ip:8080,首次进入会引导创建管理员账户,然后就可以开始扫描 ROM 库了。

关于 ROM 目录结构,需要按 平台/游戏名/ROM文件 的层级来组织,比如:

roms/
  snes/
    Super Mario World (USA)/
      Super Mario World (USA).sfc
  gba/
    Pokemon Emerald (USA)/
      Pokemon Emerald (USA).gba

官方文档有详细的命名规范和平台代码对照表,一开始可能要多试几次,但配对成功后基本零维护。

RomM 桌面端界面

几个坑和注意事项

  1. ROM 命名很重要。 刮削器靠文件名匹配数据库,如果文件名是拼音缩写或者纯粹的数字编号(尤其是一些国内 ROM 合集),基本匹配不上。建议用 No-Intro 或 Redump 命名标准的 ROM 包,识别率接近 100%。
  2. 元数据 API 要提前注册。 IGDB 需要 Twitch 开发者账号申请 Client ID 和 Secret,Screenscraper 也要注册。虽然不配 API 也能用(只显示文件名),但那样就失去了这个工具 90% 的价值。建议至少配一个。
  3. 浏览器模拟有平台限制。 EmulatorJS 覆盖的主要是 2D 时代的主机(FC/SFC/MD/GBA/PS1 等),PS2、PSP、3DS 这些得靠本地模拟器加客户端(Playnite/Argosy)。别指望在浏览器里跑战神。
  4. v5 还是 Alpha。 目前最新稳定版是 v4.9.2,v5.0.0-alpha.2 带来了全新前端、手柄导航支持、3D 盒子艺术和实时游戏会话等新功能,但还在 Alpha 阶段。尝鲜可以,正式环境建议稳在 v4。
  5. AGPL 协议。 自用没问题,但如果想基于它做二次开发并对外提供服务,需要注意 AGPL 的 copyleft 条款。

和同类项目比

市面上类似的方案有几个:

  • Gaseous:另一个带网页模拟器的 ROM 管理器,功能更简单,但 Web 模拟体验不错。
  • Retrom:集中式游戏库管理,轻量但生态不如 RomM。
  • LaunchBox:Windows 客户端,功能强大但不是自托管,免费版有限制。
  • Steam ROM Manager:把 ROM 导入 Steam 库的工具,需要 Steam 客户端,且不支持浏览器访问。

RomM 的差异化在于:它是唯一一个在”Web 界面美观度 + 客户端生态 + 浏览器模拟 + Docker 部署友好度”这几个维度上都做得很均衡的选项。9.5k 星的社区活跃度也摆在那,不用担心项目突然断更。

值得一试

如果你手头有 NAS 并且会玩模拟器,RomM 基本上是必装。部署只需要五分钟,配好 IGDB API 后再也不用对着文件名猜游戏。尤其是配合 Android 掌机加 Argosy 客户端,体验直接拉满——在掌机上浏览库、下载游戏、自动同步存档,跟 Steam Deck 的体验有得一拼。

项目地址:github.com/rommapp/romm
官网:romm.app
在线 Demo:demo.romm.app

发表评论