

RomM
1.2k 53What is RomM ?
RomM (ROM Manager) is a game library manager focused on retro gaming. It enables you to efficiently manage and organize all your games from a web browser.
Inspired by Jellyfin, RomM allows you to handle all your games through a modern interface while enhancing them with IGDB metadata.
RomM Features
- Scan your game library (all at once or by platform) and enrich it with IGDB metadata.
- Access your library via your web browser.
- Easily choose from matching IGDB results if the scan doesnβt find the right one.
- Compatible with EmuDeck folder structures.
- Supports games with multiple files.
- Download games directly from your web browser.
- Edit your game files directly from your web browser.
- Upload games directly from your web-browser
- Set a custom cover for each game
- Includes region, revision/version, and extra tags support.
- Works with SQLite or MariaDB.
- Features a responsive design with dark mode support.
Preview
Install RomM
π³ Docker
Before running the [image][docker-tags], ensure that Docker is installed and set up.
- Generate an API key for [IGDB][igdb] and set the
IGDB_CLIENT_ID
andIGDB_CLIENT_SECRET
variables. This step is essential for running a library scan. Instructions for generating the ID and Secret can be found [here][igdb-api]. Note that IGDB requires a Twitch account with 2FA enabled to generate the ID and Secret. - Verify that your library folder structure matches one of the options listed in the [folder structure][folder-structure] section.
- Create a docker-compose file. Refer to the example [docker-compose.yml][docker-compose-example] file for guidance. Customize it for your setup and include the
IGDB_CLIENT_ID
andIGDB_CLIENT_SECRET
variables in the environment section of the file. - Launch the container:
docker-compose up -d
Configuration
π Folder Structure
RomM accepts two different folder structures by priority. RomM will attempt to find structure 1, and if it doesnβt exist, it will look for structure 2.
For device naming conventions, review the [Platforms Support][platforms-support] section. To override default system names in the folder structure (if your directories are named differently), see the [Configuration File][configuration-file] section.
Structure A (high-priority)
Example: library/roms/gbc/game.zip
library/ββ roms/β ββ gbc/β β ββ rom_1.gbcβ β ββ rom_2.gbcβ ββ ββ gba/β β ββ rom_1.gbaβ β ββ rom_2.gbaβ ββ ββ ps/β ββ my_multifile_game/β β ββ my_game_cd1.isoβ β ββ my_game_cd2.isoβ ββ ββ rom_1.iso
Structure B (low-priority)
Example: library/gbc/roms/game.zip
library/ββ gbc/β ββ roms/β ββ rom_1.gbcβ ββ rom_2.gbcβββ gba/β ββ roms/β ββ rom_1.gbaβ ββ rom_2.gbaβββ ps/β ββ roms/β ββ my_multifile_game/β β ββ my_game_cd1.isoβ β ββ my_game_cd2.isoβ ββ ββ rom_1.iso
βοΈ Configuration File
RomM can be configured through a YAML file. To apply configuration changes, you must restart RomM.
Refer to the [config.example.yml][configuration-file-example] file and the [docker-compose.example.yml][docker-compose-example] for guidance on how to configure it.
π Authentication
If you want to enable the user management system, a redis container and some environment variables needs to be set. Complete instructions are available in the [wiki][wiki-authentication-url].
π Scheduler
The scheduler allows to scheduled async tasks that run in the Redis container at regular intervals. Jobs can be run at a specific time in the future, after a time delta, or at recurring internals using cron notation.
Jobs can be toggled using these environment variables:
ENABLE_SCHEDULED_RESCAN: Whether to rescan on a scheduleSCHEDULED_RESCAN_CRON: Cron expression for scheduled rescanENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB: Whether to update the switch title database on a scheduleSCHEDULED_UPDATE_SWITCH_TITLEDB_CRON: Cron expression for scheduled switch title database updateENABLE_SCHEDULED_UPDATE_MAME_XML: Whether to update the MAME XML on a scheduleSCHEDULED_UPDATE_MAME_XML_CRON: Cron expression for scheduled MAME XML update
Scheduled rescan
Users can opt to enable scheduled rescans, and set the interval using cron notation. Not that the scan will not completely rescan every file, only catch those which have been added/updated.
Switch titleDB update
Support was added for Nintendo Switch ROMs with filenames using the [titleid/programid format][titleid-program-id-url] (e.g. 0100000000010000.xci). If a file under the switch
folder matches the regex, the scanner will use the index to attempt to match it to a game. If a match is found, the IGDB handler will use the matched name as the search term.
The associated task updates the /fixtures/switch_titledb.json
file at a regular interval to support new game releases.
MAME XML update
Support was also added for MAME arcade games with shortcode names (e.g. actionhw.zip
-> ACTION HOLLYWOOD), and works in the same way as the titleid matcher (without the regex).
The associated task updates the /fixtures/mame.xml
file at a regular interval to support updates to the library.
π Watchdog
A watchdog was added which monitors the filesystem for events (files created/moved/deleted) and schedules a rescan of the platform (or entire library is a new platform was added).
Jobs can be toggled using these environment variables:
ENABLE_RESCAN_ON_FILESYSTEM_CHANGE: Whether to rescan when the filesystem changesRESCAN_ON_FILESYSTEM_CHANGE_DELAY: Delay in minutes before rescanning on filesystem change
The watcher will monitor the /library/roms
folder for changes to the filesystem, such as files being added, moved or deleted. It will ignore certain events (like modifying the file content or metadata), and will skip default OS files (like .DS_Store
on mac).
When a change is detected, a scan will be scheduled for sometime in the future (default 5 minutes). If other events are triggered between now and the time at which the scan starts, more platforms will be added to the scan list (or the scan may switch to a full scan). This is done to reduce the number of tasks scheduled when many big changes happen to the library (mass upload, new mount, etc.)