RomM
- title
- RomM
- type
- toolbox
- summary
- Self-hosted менеджер библиотеки ROM'ов, собирающий метаданные и запускающий игры прямо в браузере
- tags
- python, self-hosted, gaming, emulation, media-library
- language
- Python
- license
- AGPL-3.0
- created
- 2026-07-23
- updated
- 2026-07-23
- lang
- ru
- translation_of
- romm
- source_updated
- 2026-07-23
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
RomM для коллекции ROM'ов - то же самое, чем Jellyfin или Plex являются для видео: указываешь ему дерево каталогов с файлами игр, он их сканирует, сопоставляет каждый с онлайн-базами данных и даёт веб-интерфейс для просмотра, скачивания и - для немалого числа систем - запуска прямо в браузере. Многодисковые игры, DLC, моды, хаки, патчи и руководства пользователя он воспринимает как полноценные записи, а не просто лишние файлы, а принятые в именах ROM'ов теги вроде (USA) или [!] превращает в фильтры.
Как это устроено
Сервер представляет собой бэкенд на Python с веб-фронтендом на Vue, разворачиваемый в Docker-контейнере с базой данных MySQL/MariaDB. Сканирование здесь - задача сопоставления: файл на диске нужно привязать к известному релизу, и RomM опрашивает для этого сразу несколько провайдеров метаданных. IGDB, ScreenScraper и MobyGames поставляют данные о релизах для более чем 400 платформ, SteamGridDB отдаёт обложки и другие иллюстрации, а RetroAchievements - списки достижений и прогресс. Для каждого провайдера нужны свои учётные данные API, что создаёт привычные неудобства при первом запуске.
Воспроизведение в браузере делегировано сторонним движкам. EmulatorJS закрывает консольные и аркадные core'ы, RuffleRS - Flash. Сам RomM ничего не эмулирует - он хранит файлы, находит метаданные и передаёт нужный blob подходящему веб-плееру.
Многопользовательский режим встроен изначально и поддерживает права на уровне отдельных пользователей, так что другу можно выдать аккаунт с доступом только на чтение к части библиотеки.
Клиенты
Веб-интерфейс - не единственный фронтенд, и список клиентов отлично отражает популярность проекта. Сама команда RomM поддерживает три: Argosy (нативный лаунчер для Android), Grout (скачивает игры и управляет ими прямо на ретро-консолях с Linux под управлением Allium, Batocera, Knulli, MinUI, muOS, NextUI, Onion, ROCKNIX, Spruce или TrimUI) и плагин библиотеки для Playnite на Windows. Сообщество добавило приложение для iOS, инструмент синхронизации с RetroArch, пару десктопных браузеров, синхронизатор для Steam Deck (Decky), homebrew NRO для Switch и бота для Discord.
Grout особенно интересен тем, кто пользуется портативными консолями из retrocatalog - он превращает self-hosted экземпляр RomM в источник загрузки для устройства, на которое иначе пришлось бы закидывать файлы вручную через SD-карту.
Ограничения
Качество метаданных упирается в провайдеров и имена файлов. Проблемы со сканированием возникают достаточно часто - в документации под них даже вынесена отдельная страница устранения неполадок, - а нестандартные схемы именования приходится править вручную. Все API провайдеров требуют регистрации и накладывают ограничения по частоте запросов (rate limits). Запуск в браузере ограничен возможностями EmulatorJS, так что более новые и требовательные системы из списка в 400+ платформ на практике доступны только для скачивания.
Лицензия - AGPL-3.0, что важно, если вы планировали делать поверх собственный хостинг-сервис. Сам RomM игры не ищет и не скачивает из сети: он лишь наводит порядок в уже имеющихся файлах.
Repo: github.com/rommapp/romm - ~11 200 звёзд, AGPL-3.0, Python. Для стриминга библиотеки современных игр для ПК вместо управления эмулируемой коллекцией см. moonshine.