Releases: rommapp/romm
4.4.0-alpha.2
v4.4.0-alpha.1
Highlights
Warning
- The Tinfoil feed endpoint has been updated from
/tinfoil/feedto/feeds/tinfoil, update your Tinfoil config accordingly. - A manual
Scheduled LaunchBox metadata updatemust be run once before Launchbox can be used as a metadata source.
Alternative boxart
Spice up your collection with 3D, physical, and mixed media boxart, courtesy of Screenscraper! Start by configuring which media assets to download in your config.yml file:
scan:
media:
- box2d
- box3d
- physical
- miximage
- screenshot
- manual
- bezelAvailable media types:
box2d- Normal cover art (always enabled)box3d- 3D box artmiximage- Mixed image of multiple mediaphysical- Disc, cartridge, etc.screenshot- Screenshot (enabled by default)title_screen- Title screenmarquee- Transparent logofanart- User uploaded artworkbezel- Bezel displayed around the EmulatorJS windowmanual- Manual in PDF format (enabled by default)video- Gameplay video (warning: large file size)
Restart the container.
Now on the scan page, select Screenscraper as the metadata source, Update metadata as the scan type, and click the Scan button. The media assets will be downloaded and stored alongside existing resources for covers and screenshots. Then under User Interface (/user-interface), change the Boxart style to 3D, Physical, or Mix Image as desired.
| 2D Box |
|---|
![]() |
| 3D Box |
![]() |
| Physical |
![]() |
| Mix Image |
![]() |
ES-DE gamelist.xml
EmulationStation, and it's modern successor ES-DE, use a custom XML format to store game metadata. RomM can parse this format and import the assets as cover art and screenshots. You'll need to store the gamelist.xml file and any related assets under the platform folder, and select ES-DE in the "Metadata sources" dropdown on the scan page:
library/
└─ roms/
└─ gba/
├─ game_1.gba
├─ game_2.gba
├─ gamelist.xml
├─ 3dboxes/
│ ├─ game_1.png
│ └─ game_2.png
├─ covers/
├─ screenshots/
└─ etc...Here's an example of the content in a typical gamelist.xml file, though the parser supports more fields not listed:
<?xml version="1.0"?>
<gameList>
<game>
<path>./Advance Wars (J) (Rev 1).zip</path>
<name>Advance Wars</name>
<desc>The battle lines have been drawn, and an elite group of sly strategists is massing troops at your borders. You'll have to command ground, air and naval forces if you hope to survive the coming wars, and it won't be easy. With 114 maps to battle on and both the Single-Pak and Multi-Pak link modes, Advance Wars brings turn-based strategy to a depth never before seen on a handheld!</desc>
<rating>0.8</rating>
<releasedate>20020111T000000</releasedate>
<developer>Intelligent Games</developer>
<publisher>Nintendo</publisher>
<genre>Strategy</genre>
<players>1-4</players>
<video>./videos/Advance Wars (J) (Rev 1).mp4</video>
<box3d>./3dboxes/Advance Wars (J) (Rev 1).png</box3d>
<backcover>./backcovers/Advance Wars (J) (Rev 1).png</backcover>
<cover>./covers/Advance Wars (J) (Rev 1).png</cover>
<fanart>./fanart/Advance Wars (J) (Rev 1).jpg</fanart>
<manual>./manuals/Advance Wars (J) (Rev 1).pdf</manual>
<marquee>./marquees/Advance Wars (J) (Rev 1).png</marquee>
<miximage>./miximages/Advance Wars (J) (Rev 1).png</miximage>
<physicalmedia>./physicalmedia/Advance Wars (J) (Rev 1).png</physicalmedia>
<screenshot>./screenshots/Advance Wars (J) (Rev 1).png</screenshot>
<title_screen>./titlescreens/Advance Wars (J) (Rev 1).png</title_screen>
<thumbnail>./covers/Advance Wars (J) (Rev 1).png</thumbnail>
</game>
</gameList>Task status page
We've added a new section on the /administration page for monitoring background tasks. This section displays real-time task status, execution statistics for successful tasks, and error messages for failed tasks. #2502
Multi-threaded library scanning
Multiple games under the same platform can now be scanned in parallel, significantly reducing the time required to scan large libraries. Simply increase the SCAN_WORKERS environment variable to the number of games to scan in parallel. Note that parallel scanning is limited by the power of your CPU and the maximum permitted connections to selected metadata providers. #2566
Manually edit metadata
The game's edit window now allows you to directly edit metadata IDs and JSON values. Changing a metadata ID will prompt the server to refresh metadata from that specific source, using the new ID. The JSON values can also be edited directly, and will be saved as raw metadata; for example, you can update youtube_video_id to use gameplay videos instead of trailers. Note: an UPDATE or COMPLETE scan of a game will override any manual changes made to metadata IDs or JSON values. #2578
PS3/PSVita PKGi and Kekatsu DS feeds
Added support for PKGi and Kekatsu feed formats, enabling direct integration with popular game download tools:
- PKGi PS3 (
/feeds/pkgi/ps3/{content_type}): Supports games, DLC, demos, updates, patches, mods, translations, and prototypes - PKGi PS Vita (
/feeds/pkgi/psvita/{content_type}): Supporting the same content types - Kekatsu DS (
/feeds/kekatsu/{platform_slug}): Supporting Nintendo DS, GBA, and other compatible platforms with box art metadata
ScummVM metadata
Metadata for ScummVM games stored under a scummvm folder can now be fetched exclusively from IGDB, using a special keyword search. #2576
Minor changes
- [ROMM-2546] Suborder consoles by generation by @gantoine in #2571
- [ROMM-2531] Allow scanning without metadata providers by @gantoine in #2573
- [ROMM-2491] Add shuffle button in navbar by @gantoine in #2574
- [ROMM-2289] Display smart collection filter rules in sidebar by @gantoine in #2584
- [ROMM-2159] Remember game sort order on reload by @gantoine in #2585
- [ROMM-2147] Clarify language around scan types by @gantoine in #2586
Note
New environment variables
SCAN_WORKERS: Number of parallel worker processes for scanning gamesTASK_RESULT_TTL: How long to keep task results in Valkey (in seconds)SEVEN_ZIP_TIMEOUT: imeout for 7-Zip operations (in seconds)
Fixes
- [ROMM-2555] Validate release date for tinfoil feed by @gantoine in #2557
- [ROMM-2554] Remove htlb from manual search by @gantoine in #2558
- [ROMM-2551] Fix error message on rom delete by @gantoine in #2559
- [ROMM-2552] Rom hashes should only include top-level nested files by @gantoine in #2567
- [ROMM-2548] Fix text readablility of new version alert by @gantoine in #2568
- [ROMM-2547] Flashpoint scrape by
flashpoint-XXXtag by @gantoine in #2569 - [ROMM-2338] Consistent pending job fetch in watcher by @gantoine in #2582
- [ROMM-2146] Open rows in new tab with right click by @gantoine in #2587
- [HOTFIX] Fix fetching saves/states for rom or platform by @gantoine in #2594
- Fix type error when role claim is null by @Tarow in #2570
- Separate checks for readable/writable config.yml by @gantoine in #2588
- Multi-threaded scan fixes by @gantoine in #2583
Behind-the-scenes
4.3.2
What's Changed
- Experimental service to cache api requests by @gantoine in #2387
- Toggle "Enable experimental request cache" under UI settings
- Fetch HLTB search endpoint from file by @gantoine in #2534
- Add QR code for all DS platform by @gantoine in #2520
- Fix comma article pattern regex by @gantoine in #2521
- Sanitize Tinfoil TitleDB via Pydantic v2 and use .model_dump() by @bikeborb in #2525
- Add button to delete manual by @gantoine in #2529
- Add
ROMM_TMP_PATHto environment variable by @marius-luca-87 in #2532 - Add
OIDC_CLAIM_ROLESto the requested scope in order for it to be filled in the token userinfo by @marius-luca-87 in #2527 - Set
IPV4_ONLY=truein env vars to skip binding an IPV6 address by @gantoine in #2528 - Set
same_sitetolaxon session cookie if OIDC enabled by @gantoine in #2530 - Validate user email and username on user create/update by @gantoine in #2524
- Drop
log_middlewareby @gantoine in #2511 - Explicitly set supported algorithms on jwt decode by @gantoine in #2512
New environment variables
ROMM_TMP_PATH: Path where compressed files are temporarily extracted during scanIPV4_ONLY: Only bind to an IPv4 address (skips IPv6)
New Contributors
- @bikeborb made their first contribution in #2525
- @marius-luca-87 made their first contribution in #2527
Full Changelog: 4.3.1...4.3.2
4.3.2-beta.1
What's Changed
- Add service to cache api requests by @gantoine in #2387
- Fetch HLTB search endpoint from file by @gantoine in #2534
- Add QR code for all DS platform by @gantoine in #2520
- Update HLTB ID in endpoint by @gantoine in #2523
- Fix comma article pattern regex by @gantoine in #2521
- Sanitize Tinfoil TitleDB via Pydantic v2 and use .model_dump() by @bikeborb in #2525
- Add button to delete manual by @gantoine in #2529
- Add a configurable
ROMM_TMP_PATHenvironment variable by @marius-luca-87 in #2532 - Add
OIDC_CLAIM_ROLESto the requested scope in order for it to be filled in the token userinfo by @marius-luca-87 in #2527 - Skip bind IPV6 if
IPV4_ONLYis true by @gantoine in #2528 - Set same_site to lax on session cookie if OIDC enabled by @gantoine in #2530
- Validate user email and username by @gantoine in #2524
- Drop log_middleware by @gantoine in #2511
- Explicitly set supported algorithms on jwt decode by @gantoine in #2512
New environment variables
ROMM_TMP_PATH: Path where compressed files are temporarily extracted during scanIPV4_ONLY: Only bind to an IPv4 address (skips IPv6)
New Contributors
- @bikeborb made their first contribution in #2525
- @marius-luca-87 made their first contribution in #2527
Full Changelog: 4.3.1...4.3.2-beta.1
4.3.1
What's Changed
- Verify HLTB response has some game data¹ by @gantoine
- Add custom tinfoil welcome message via env var by @gantoine
- Add HLTB to manual search results by @gantoine in #2493
- Add support for OIDC role claim by @MaienM in #2494
- Add option to disable setup wizard by @MaienM in #2495
- Show indicator if platform not identified by @gantoine in #2500
- New multi download endpoint by @gantoine in #2499
- Fix missing integrity field of package-lock.json by @jvanbruegge in #2501
- Use proper SPDX identifier for license in pyproject.yaml by @jvanbruegge in #2503
- Check if user is enabled before generating auth token by @gantoine in #2507
- Merge both
odyssey-2platform by @gantoine in #2513
New environment variables
DISABLE_SETUP_WIZARD: Disables the setup wizard when using OIDCTINFOIL_WELCOME_MESSAGE: Custom welcome message in Tinfoil- Support for OIDC role claim
OIDC_CLAIM_ROLES: List of claim rolesOIDC_ROLE_VIEWER: Mapped role for viewer userOIDC_ROLE_EDITOR: Mapped role for editor userOIDC_ROLE_ADMIN: Mapped role for admin users
Resetting HowLongToBeat Data
If you need to reset HLTB data due to the bug¹ above and want to reset the HLTB IDs on all your games, you can run this SQL script against your database container:
UPDATE roms
SET roms.hltb_id = null, roms.hltb_metadata = '{}'To access the SQL interface if using mariadb:
sudo docker exec -it <container id or name> mariadb -u <db username> -p <db name> New Contributors
Full Changelog: 4.3.0...4.3.1
4.3.1-beta.1
What's Changed
- Verify hltb response has some game data by @gantoine
- Add custom tilfoil welcome message via env var by @gantoine
- Add hltb to manual search results by @gantoine in #2493
- Add support for OIDC role claim by @MaienM in #2494
- Add option to disable setup wizard by @MaienM in #2495
- Show indicator if platform not identified by @gantoine in #2500
- New multi download endpoint by @gantoine in #2499
- Fix missing integrity field of package-lock.json by @jvanbruegge in #2501
- Use proper SPDX identifier for license in pyproject.yaml by @jvanbruegge in #2503
New environment variables
DISABLE_SETUP_WIZARD: Disables the setup wizard when using OIDCTINFOIL_WELCOME_MESSAGE: Custom welcome message in Tinfoil- Support for OIDC role claim
OIDC_CLAIM_ROLES: List of claim rolesOIDC_ROLE_VIEWER: Mapped role for viewer userOIDC_ROLE_EDITOR: Mapped role for editor userOIDC_ROLE_ADMIN: Mapped role for admin users
New Contributors
Full Changelog: 4.3.0...4.3.1-beta.1
4.3.0
Note
Due to a large number of issues reported during setup, as of this release, the config.yml file is no longer required to run the app. We still recommend you create one and mount it, as it will allow you to configure the app through the UI.
New Features
Flashpoint Project integration
Automated search of the Flashpoint Project database for over 180,000+ flash and browser-based games. Enable the metadata source by setting FLASHPOINT_API_ENABLED=true in your environment variables, run a partial metadata scan with Flashpoint selected, and we'll attempt to match games inside the browser platform folder against the database. #2326
HowLongToBeat integration
HowLongToBeat is a website that provides game completion times for over 84,000+ games. Enable the metadata source by setting HLTB_API_ENABLED=true in your environment variables and run a partial metadata scan with HowLongToBeat selected. If a match is found, game completion times will be displayed in the game details view, under a new tab. #2437
Metadata tags in filenames
Scans will now parse custom metadata tags in the filename that match specific patterns, and use them to fetch game metadata for the specified ID. The supported tags are:
(igdb-xxxx)for IGDB(moby-xxxx)for MobyGames(ra-xxxx)for RetroAchievements(ssfr-xxxx)for ScreenScraper(launchbox-xxxx)for Launchbox(hltb-xxxx)for HowLongToBeat
Note that we do not write these tags to filenames that don't already have them, as they are non-standard and could conflict with existing tags or other software. #2401
Metadata sources status page
This new page allows you to view the status of all the metadata source, where each card will show whether the API key is set/source is enabled (🔑), and will test the connection to the source's API in real-time (🌐). View it under "Settings > Metadata sources" or at /metadata-sources. #2464
Metadata source priority
We've added new options to the config.yml file to set the priority for each metadata source used during scans. Artwork sources are prioritized separately, as is metadata pulled from Screenscraper, which can be configured to use different regions and languages.
Below is the default order, which can be modified by moving sources up or down in the list. Like all other configuration options, setting this is optional, and the system will always fall back to the default order. #2466
scan:
priority:
metadata: # Top-level metadata source priority
- "igdb" # IGDB
- "moby" # MobyGames
- "ss" # Screenscraper
- "ra" # RetroAchievements
- "lb" # Launchbox
- "hasheous" # Hasheous
- "flashpoint" # Flashpoint Project
- "hltb" # HowLongToBeat
artwork: # Cover art and screenshots
- "igdb" # IGDB
- "moby" # MobyGames
- "ss" # Screenscraper
- "ra" # RetroAchievements
- "lb" # Launchbox
- "hasheous" # Hasheous
- "flashpoint" # Flashpoint Project
- "hltb" # HowLongToBeat
region: # Cover art and game title (only used by Screenscraper)
- "us"
- "wor"
- "ss"
- "eu"
- "jp"
language: # Cover art and game title (only used by Screenscraper)
- "en"
- "fr"Minor Changes
- Animate loading text is boot svg image by @gantoine in #2417
- Add metadata icons to table view by @gantoine in #2410
- Remove sidebar during emulatorjs play by @gantoine in #2450
- Use default config values when config.yml not mount + show warning by @gantoine in #2457
- Progressive scan steps for each game by @gantoine in #2479
- New index for rom-to-rom navigation by @gantoine in #2481
Bug Fixes
- Fix card z-index to be behind UI elements on hover by @gantoine in #2449
- Remove mod_zip workaround for upstream subrequests to internal locations by @adamantike in #2426
- Fix release date in console mode by @gantoine in #2444
- Add missing language codes by @adamantike in #2425
- Use v-img with webp and fallback in console mode by @gantoine in #2430
- Implement file tag matching for HLTB by @gantoine in #2446
- Add launchbox to manual match window by @gantoine in #2455
- Fix icons in console mode by @gantoine in #2461
- Fix Markdown formatting of DEVELOPER_SETUP.md by @EricDuminil in #2462
- Uncompress gzipped images by @gantoine in #2468
- Update known bios slugs with correct psx slug by @gantoine in #2472
- Split
rom.multiinto more specific fields by @gantoine in #2486 - Set platform metadata slugs on models in DB by @gantoine in #2473
- Submit manual match without cover image by @gantoine in #2478
- Set url_cover on artwork upload by @gantoine in #2480
- Use python timezone aware datetime as defaults for created_at/updated_at by @gantoine in #2445
Behind the scenes
- Improve API docs for Delete endpoints by @adamantike in #2413
- Manually run eslint and update rules by @gantoine in #2402
- Pre-optimize vuetify deps in development mode by @gantoine in #2421
- Bump axios from 1.8.4 to 1.12.1 in /frontend by @dependabot[bot] in #2431
- Add
eslinta11y plugin by @gantoine in #2484 - Secure docker image builds by @gantoine in #2454
New Contributors
- @EricDuminil made their first contribution in #2462
Full Changelog: 4.2.0...4.3.0
v4.3.0-beta.1
Note
Due to a large number of issues reported during setup, as of this release, the config.yml file is no longer required to run the app. We still recommend you create one and mount it, as it will allow you to configure the app through the UI.
New Features
Flashpoint Project integration
Automated search of the Flashpoint Project database for over 180,000+ flash and browser-based games. Enable the metadata source by setting FLASHPOINT_API_ENABLED=true in your environment variables, run a partial metadata scan with Flashpoint selected, and we'll attempt to match games inside the browser platform folder against the database. #2326
HowLongToBeat integration
HowLongToBeat is a website that provides game completion times for over 84,000+ games. Enable the metadata source by setting HLTB_API_ENABLED=true in your environment variables and run a partial metadata scan with HowLongToBeat selected. If a match is found, game completion times will be displayed in the game details view, under a new tab. #2437
Metadata tags in filenames
Scans will now parse custom metadata tags in the filename that match specific patterns, and use them to fetch game metadata for the specified ID. The supported tags are:
(igdb-xxxx)for IGDB(moby-xxxx)for MobyGames(ra-xxxx)for RetroAchievements(ssfr-xxxx)for ScreenScraper(launchbox-xxxx)for Launchbox(hltb-xxxx)for HowLongToBeat
Note that we do not write these tags to filenames that don't already have them, as they are non-standard and could conflict with existing tags or other software. #2401
Metadata sources status page
This new page allows you to view the status of all the metadata source, where each card will show whether the API key is set/source is enabled (🔑), and will test the connection to the source's API in real-time (🌐). View it under "Settings > Metadata sources" or at /metadata-sources. #2464
Metadata source priority
We've added new options to the config.yml file to set the priority for each metadata source used during scans. Artwork sources are prioritized separately, as is metadata pulled from Screenscraper, which can be configured to use different regions and languages.
Below is the default order, which can be modified by moving sources up or down in the list. Like all other configuration options, setting this is optional, and the system will always fall back to the default order. #2466
scan:
priority:
metadata: # Top-level metadata source priority
- "igdb" # IGDB
- "moby" # MobyGames
- "ss" # Screenscraper
- "ra" # RetroAchievements
- "lb" # Launchbox
- "hasheous" # Hasheous
- "flashpoint" # Flashpoint Project
- "hltb" # HowLongToBeat
artwork: # Cover art and screenshots
- "igdb" # IGDB
- "moby" # MobyGames
- "ss" # Screenscraper
- "ra" # RetroAchievements
- "lb" # Launchbox
- "hasheous" # Hasheous
- "flashpoint" # Flashpoint Project
- "hltb" # HowLongToBeat
region: # Cover art and game title (only used by Screenscraper)
- "us"
- "wor"
- "ss"
- "eu"
- "jp"
language: # Cover art and game title (only used by Screenscraper)
- "en"
- "fr"Minor Changes
- Animate loading text is boot svg image by @gantoine in #2417
- Add metadata icons to table view by @gantoine in #2410
- Remove sidebar during emulatorjs play by @gantoine in #2450
- Use default config values when config.yml not mount + show warning by @gantoine in #2457
- Progressive scan steps for each game by @gantoine in #2479
- New index for rom-to-rom navigation by @gantoine in #2481
Bug Fixes
- Fix card z-index to be behind UI elements on hover by @gantoine in #2449
- Remove mod_zip workaround for upstream subrequests to internal locations by @adamantike in #2426
- Fix release date in console mode by @gantoine in #2444
- Add missing language codes by @adamantike in #2425
- Use v-img with webp and fallback in console mode by @gantoine in #2430
- Implement file tag matching for HLTB by @gantoine in #2446
- Add launchbox to manual match window by @gantoine in #2455
- Fix icons in console mode by @gantoine in #2461
- Fix Markdown formatting of DEVELOPER_SETUP.md by @EricDuminil in #2462
- Uncompress gzipped images by @gantoine in #2468
- Update known bios slugs with correct psx slug by @gantoine in #2472
- Split
rom.multiinto more specific fields by @gantoine in #2486 - Set platform metadata slugs on models in DB by @gantoine in #2473
- Submit manual match without cover image by @gantoine in #2478
- Set url_cover on artwork upload by @gantoine in #2480
Behind the scenes
- Improve API docs for Delete endpoints by @adamantike in #2413
- Manually run eslint and update rules by @gantoine in #2402
- Pre-optimize vuetify deps in development mode by @gantoine in #2421
- Bump axios from 1.8.4 to 1.12.1 in /frontend by @dependabot[bot] in #2431
- Add
eslinta11y plugin by @gantoine in #2484 - Secure docker image builds by @gantoine in #2454
New Contributors
- @EricDuminil made their first contribution in #2462
Full Changelog: 4.2.0...4.3.0-beta.1
4.3.0-alpha.3
What's Changed
- [ROMM-2432] Secure docker image by @gantoine in #2454
- [ROMM-2475] Submit manual match without cover image by @gantoine in #2478
- Progressive scan steps for each game by @gantoine in #2479
- [HOTFIX] Set url_cover on artwork upload by @gantoine in #2480
- [ROMM-2476] Add new index for rom-to-rom navigation by @gantoine in #2481
Full Changelog: 4.3.0-alpha.2...4.3.0-alpha.3
v4.3.0-alpha.2
What's Changed
Full Changelog: 4.3.0-alpha.1...4.3.0-alpha.2



