Как я перестал бояться своей коллекции ретро-игр и полюбил RomM
У многих из нас где-то на жестком диске или в облаке лежит папка «Games» (или «Old_Stuff»), забитая образами для Dendy, Sega, PlayStation 1 и еще десятка платформ. Обычно это хаос из файлов с названиями вроде Super_Mario_Bros_(E)_[!].nes. Найти там что-то конкретное сложно, а запустить игру — это целый квест: вспомни, какой эмулятор нужен, настрой геймпад, найди биос.
Я наткнулся на проект RomM (ROM Manager), который превращает эту свалку в персональный «Netflix для игр». Это self-hosted решение, которое берет на себя всю грязную работу по организации библиотеки и, что самое крутое, позволяет играть прямо в браузере.
Что это такое
RomM — это менеджер игровых ресурсов с веб-интерфейсом. Вы скармливаете ему папку с ромами, а он сканирует её и подтягивает метаданные: обложки, описания, рейтинги и даже достижения. Проект написан на Python и легко разворачивается через Docker.
Главное отличие от простых каталогизаторов в том, что RomM — это полноценный сервер. Вы можете зайти на него с телефона, планшета или рабочего ноутбука и запустить любимую Castlevania без установки эмуляторов на конечное устройство.
Чем RomM хорош на практике
Автоматическое обогащение данных
Если у вас сотни игр, подписывать каждую вручную — безумие. RomM подключается к базам IGDB, Mobygames и Screenscraper. Он распознает игру по хешу или названию файла и скачивает качественные постеры. Выглядит это в итоге не хуже, чем библиотека в Steam.
Игра в браузере
В проект встроены EmulatorJS и Ruffle (для Flash-игр). Это значит, что эмуляция происходит на стороне клиента через JavaScript/WebAssembly. Вам не нужно настраивать RetroArch на каждом устройстве. Просто открыли страницу, нажали Play и играете. Сохранения, кстати, тоже работают и хранятся на вашем сервере.
Поддержка сложной структуры
Ретро-игры — это не всегда один файл. Есть игры на нескольких дисках, есть патчи, хаки, DLC и мануалы в PDF. RomM умеет группировать такие вещи. Если у вас лежит японская версия игры и фанатский перевод к ней, менеджер позволит выбрать нужный вариант в одном меню.
Общий доступ
Библиотекой можно делиться. Например, можно создать аккаунты для друзей или детей, ограничив им доступ к определенным платформам (скажем, только NES и SNES).
Техническая сторона вопроса
Под капотом у RomM связка из Python и современного фронтенда. Для хранения данных используется база (SQLite по умолчанию или MariaDB/PostgreSQL для серьезных коллекций).
Интересно реализована работа с тегами. Система умеет парсить стандартные теги из названий файлов (регион, версия, наличие перевода) и превращать их в фильтры. Если вы привыкли к именованию в духе No-Intro или TOSEC, RomM поймет вас с полуслова.
Для тех, кто предпочитает нативные приложения, у проекта есть официальный плагин для Playnite и мобильные клиенты. Сообщество даже написало загрузчики для кастомных прошивок портативных консолей вроде muOS.
Как запустить
Проще всего использовать Docker Compose. Вот пример минимального конфига:
services:
romm:
image: rommapp/romm:latest
container_name: romm
environment:
- DB_BACKEND=sqlite
- AUTH_SECRET=ваш_секретный_ключ
- IGDB_CLIENT_ID=ваш_id
- IGDB_CLIENT_SECRET=ваш_secret
volumes:
- ./library:/romm/library
- ./resources:/romm/resources
- ./config:/romm/config
ports:
- 8080:8080
После запуска нужно будет настроить интеграцию с IGDB (это бесплатно, но нужно зарегистрировать приложение на портале разработчиков Twitch), чтобы RomM мог скачивать метаданные.
Кому это нужно
Если вы храните игры просто «чтобы были», RomM может показаться избыточным. Но он незаменим в двух случаях:
- У вас есть домашний сервер (NAS) и вы хотите иметь доступ к играм с любого устройства в локальной сети.
- Вы устали от настройки эмуляторов и хотите простого интерфейса «нажал и играй».
Проект активно развивается, у него почти 10 тысяч звезд на GitHub и живое комьюнити в Discord. Из минусов — процесс первоначального сканирования огромных библиотек может занять время, а настройка ключей API для метаданных требует пары лишних кликов. Но результат в виде аккуратной, кликабельной галереи того стоит.
Если решите попробовать, загляните в документацию, там подробно расписано, как правильно организовать структуру папок, чтобы сканер не сошел с ума.
