Releases: rommapp/romm
Release list
5.2.0
Minor changes
- feat(screenscraper): pace and report scans against the account's reported limits by @Spinnich in #3989
- feat: reorderable region and language priority lists in scan settings by @gantoine in #4015
- feat(frontend): autofocus the search field on the Search view by @gantoine in #4022
- feat(home): make the random pick widget clickable and denser by @gantoine in #4056
- feat(rating): show provider ratings by @wadiebs in #4096
- feat(soundtrack player): improve artwork by @wadiebs in #4168
- feat(v2): previous / next game buttons on the details page by @gantoine in #4012
- feat(v2): search platforms by slug, folder, category and family by @Spinnich in #4136
- feat(hasheous): map famicom to the NES platform by @sdornan in #4162
- feat(v2): show IGDB ports on the game overview by @sdornan in #4184
Fixes
- fix(steamgriddb): skip DMCA-locked grids when scraping SteamGridDB by @gantoine in #4004
- fix(security): close three permission gaps found auditing 5.1.0 by @gantoine in #3993
- fix(backend): re-run the Hasheous hash lookup on a hashes scan by @gantoine in #4013
- fix(v2): keep RSelect menus inside the viewport and tidy the selection text by @gantoine in #4014
- fix(roms): give each FPKGi package a unique name within its rom by @gantoine in #4021
- fix(backend): scope ScreenScraper French fallback to taxonomy fields by @gantoine in #4026
- fix(v2): pivot to a filtered search from the overview info grid by @gantoine in #4023
- fix(backend): tolerate calendar-invalid gamelist dates on PostgreSQL by @gantoine in #4024
- fix(player): skip the save load a state immediately discards by @gantoine in #4025
- fix(roms): search the gallery by CRC32, MD5, SHA-1 and RA hash by @Spinnich in #4032
- fix(docker): always start the RQ scheduler by @XenuIsWatching in #4033
- fix(backend): scope the kiosk read-only cap to the anonymous visitor by @Spinnich in #4047
- fix: batch of open bug fixes (#4027, #4034, #4035, #4038, #4040, #4043, #4045) by @gantoine in #4051
- fix(scan): report only newly discovered firmware by @gantoine in #4055
- fix(rom-details): render the manual viewer on mobile by @gantoine in #4058
- fix(hasheous): read the CHD and DOS signature sources by @gantoine in #4060
- fix(stats): pluralize the platform game count and lift meta legibility by @gantoine in #4065
- fix(config): map tic80 to the tic-80 platform slug by @XenuIsWatching in #4090
- fix(docker): keep the Redis password out of the RQ worker command line by @gantoine in #4093
- fix(v2): make hashes recoverable without HTTPS and show all firmware hashes by @Spinnich in #4083
- fix(home): stop scanning the library filesystem on every home page load by @Spinnich in #4069
- fix(auth): accept a stale user-bound CSRF token on anonymous requests by @bikeborb in #4086
- fix(v2): drop a random pick after leaving the platform by @Spinnich in #4113
- fix(states): repoint the row when a re-upload changes emulator by @TowyTowy in #4112
- fix(v2): keep Playmatch selectable when providers are set to All by @sdornan in #4120
- fix(hashing): extract CHD SHA-1 for folder-based ROMs by @sdornan in #4129
- fix(v2): compute game-card cover width instead of deriving it by @sdornan in #4135
- fix(media): stop recording paths for media that never landed by @sdornan in #4131
- fix(screenscraper): report rejected credentials instead of a bare 403 by @Spinnich in #4130
- fix(launchbox): match ROMs during a scan the way Match ROM does by @sdornan in #4121
- fix(hltb): renew rejected HLTB sessions instead of failing the scan by @sdornan in #4125
- fix(v2): drop a random pick that lands after leaving the gallery by @Spinnich in #4138
- fix(ss): store the ScreenScraper box-2D front locally by @sdornan in #4139
- fix(v2): show a running scan on pages loaded mid-scan by @sdornan in #4142
- fix(resources): fetch each cover once instead of once per size by @Spinnich in #4143
- fix(metadata): identify archives and folder ROMs by the right file by @Spinnich in #4146
- fix(match-rom): show the saving overlay above the grid match panel by @sdornan in #4147
- refactor(i18n): name gallery filters by property instead of "Show X" by @sdornan in #4149
- fix(v2): bulk favorite no-ops on a fresh instance and reports the wrong direction by @Spinnich in #4151
- fix: refresh the v2 gallery when a ROM is edited or matched by @sdornan in #4153
- fix(v2): pin mobile bottom nav with sticky instead of fixed by @nickybmon in #4155
- fix(export): stop miximage_v2 colliding with miximage, persist gamelist back covers by @sdornan in #4156
- fix(hashing): surface unreadable zip and tar archives by @sdornan in #4163
- fix: remove double URL-encoding of MobyGames search terms by @justinjd00 in #4181
- fix(i18n): correct Breton pt_BR player-count and align ja_JP/tr_TR by @sdornan in #4183
- fix(i18n): translate pt_BR strings left in English by @sdornan in #4185
- fix(v2): close open overlays when the route changes by @sdornan in #4193
- Changed default compose, will explain more in pull by @danblu3 in #4202
- fix(v2): drop the roms from the gallery when they leave the collection on screen by @sdornan in #4204
- fix(scan): normalize region and language tags to one canonical spelling by @sdornan in #4206
- fix: demote uvicorn HTTP access logs to WARNING/DEBUG only by @gantoine with @Copilot in #4214
- fix: Add
.xdeltasupport to server-side ROM patcher and v2 patcher UI by @gantoine with @Copilot in #4215 - fix(states): enforce ROM visibility when uploading a state by @gantoine in #4216
- fix(auth): build invite links from ROMM_BASE_URL by @sdornan in #4217
- fix(scan): re-read filename tags on a complete rescan by @sdornan in #4218
- fix(libretro): cache missing thumbnail listings by @sdornan in #4219
- fix(launchbox): match titles differing only by punctuation by @sdornan in #4224
- fix(hltb): match titles whose series prefix the catalogue omits by @sdornan in #4225
- fix(ss): don't use the Switch icon URL as the manual URL by @TowyTowy in #4228
- fix(resources): publish downloaded resources atomically by @sdornan in #4230
- fix(i18n): translate route titles once locale messages are loaded by @sdornan in #4231
- fix(i18n): add the missing playlists permission entity label by @sdornan in #4234
- fix(hltb): fetch metadata when a HowLongToBeat ID is set by hand by @sdornan in #4235
- fix(launchbox): match LaunchBox dumps that separate words with underscores by @sdornan in #4239
- fix(backend): make filters match against all grouped versions instead of only the main version of each game entry by @darkpaul91 in #4240
- feat(metadata): warn when ScreenScraper dev credentials are missing by @gantoine in #4243
- fix(scan): ignore Windows Zone.Identifier files by @Florian-Cullmann in #4245
Other changes
5.1.1-beta.2
What's Changed
- fix(stats): pluralize the platform game count and lift meta legibility by @gantoine in #4065
- fix(config): map tic80 to the tic-80 platform slug by @XenuIsWatching in #4090
- fix(docker): keep the Redis password out of the RQ worker command line by @gantoine in #4093
- fix(v2): make hashes recoverable without HTTPS and show all firmware hashes by @Spinnich in #4083
- fix(home): stop scanning the library filesystem on every home page load by @Spinnich in #4069
- perf(roms): pick a random rom without paging to a random offset by @Spinnich in #4071
- perf(roms): sort metadata fields on the indexed roms column by @Spinnich in #4078
- fix(auth): accept a stale user-bound CSRF token on anonymous requests by @bikeborb in #4086
- perf(gallery): resolve the random rom button in one request by @Spinnich in #4097
- perf(home): stop counting the whole library for the two home rows by @Spinnich in #4110
- chore(deps): bump aiohttp from 3.14.1 to 3.14.3 by @dependabot[bot] in #4115
- fix(v2): drop a random pick after leaving the platform by @Spinnich in #4113
- chore(deps-dev): bump fast-uri from 3.1.4 to 3.1.5 in /frontend by @dependabot[bot] in #4118
- chore(deps): bump socket.io-parser from 4.2.6 to 4.2.7 in /frontend by @dependabot[bot] in #4119
- feat(Rating): show provider ratings by @wadiebs in #4096
- fix(states): repoint the row when a re-upload changes emulator by @TowyTowy in #4112
- fix(v2): keep Playmatch selectable when providers are set to All by @sdornan in #4120
- fix(hashing): extract CHD SHA-1 for folder-based ROMs by @sdornan in #4129
- fix(v2): compute game-card cover width instead of deriving it by @sdornan in #4135
- fix(media): stop recording paths for media that never landed by @sdornan in #4131
- fix(screenscraper): report rejected credentials instead of a bare 403 by @Spinnich in #4130
- fix(launchbox): match ROMs during a scan the way Match ROM does by @sdornan in #4121
- fix(hltb): renew rejected HLTB sessions instead of failing the scan by @sdornan in #4125
- feat(v2): search platforms by slug, folder, category and family by @Spinnich in #4136
- fix(v2): drop a random pick that lands after leaving the gallery by @Spinnich in #4138
- fix(ss): store the ScreenScraper box-2D front locally by @sdornan in #4139
- fix(v2): show a running scan on pages loaded mid-scan by @sdornan in #4142
- fix(resources): fetch each cover once instead of once per size by @Spinnich in #4143
- fix(metadata): identify archives and folder ROMs by the right file by @Spinnich in #4146
- fix(match-rom): show the saving overlay above the grid match panel by @sdornan in #4147
- refactor(i18n): name gallery filters by property instead of "Show X" by @sdornan in #4149
- fix(v2): bulk favorite no-ops on a fresh instance and reports the wrong direction by @Spinnich in #4151
- fix: refresh the v2 gallery when a ROM is edited or matched by @sdornan in #4153
- fix(v2): pin mobile bottom nav with sticky instead of fixed by @nickybmon in #4155
- fix(export): stop miximage_v2 colliding with miximage, persist gamelist back covers by @sdornan in #4156
- feat(hasheous): map famicom to the NES platform by @sdornan in #4162
- fix(hashing): surface unreadable zip and tar archives by @sdornan in #4163
- feat(soundtrack player): improve artwork by @wadiebs in #4168
- fix: remove double URL-encoding of MobyGames search terms by @justinjd00 in #4181
- fix(i18n): correct Breton pt_BR player-count and align ja_JP/tr_TR by @sdornan in #4183
- feat(v2): show IGDB ports on the game overview by @sdornan in #4184
- fix(i18n): translate pt_BR strings left in English by @sdornan in #4185
- perf(scan): scope a rom-id scan to the selected roms by @sdornan in #4188
- chore(deps-dev): bump js-yaml from 4.2.0 to 4.3.1 in /frontend by @dependabot[bot] in #4189
- fix(v2): close open overlays when the route changes by @sdornan in #4193
- perf(scan): cut scan memory and drop a quadratic file listing check by @XenuIsWatching in #4198
- Changed default compose, will explain more in pull by @danblu3 in #4202
- fix(v2): drop the roms from the gallery when they leave the collection on screen by @sdornan in #4204
- fix(scan): normalize region and language tags to one canonical spelling by @sdornan in #4206
- perf(scan): stop re-hashing unchanged firmware on every scan by @sdornan in #4211
New Contributors
- @wadiebs made their first contribution in #4096
- @sdornan made their first contribution in #4120
- @nickybmon made their first contribution in #4155
- @justinjd00 made their first contribution in #4181
- @danblu3 made their first contribution in #4202
Full Changelog: 5.1.1-beta.1...5.1.1-beta.2
5.1.1-beta.1
Minor changes
- feat(frontend): autofocus the search field on the Search view by @gantoine in #4022
- feat(home): make the random pick widget clickable and denser by @gantoine in #4056
- feat(screenscraper): pace and report scans against the account's reported limits by @Spinnich in #3989
- feat(v2): previous / next game buttons on the details page by @gantoine in #4012
Fixes
- fix: Skip DMCA-locked grids when scraping SteamGridDB by @gantoine in #4004
- fix(security): close three permission gaps found auditing 5.1.0 by @gantoine in #3993
- fix(backend): re-run the Hasheous hash lookup on a hashes scan by @gantoine in #4013
- fix(v2): keep RSelect menus inside the viewport and tidy the selection text by @gantoine in #4014
- fix: reorderable region and language priority lists in scan settings by @gantoine in #4015
- fix: give each FPKGi package a unique name within its rom by @gantoine in #4021
- fix(backend): scope ScreenScraper French fallback to taxonomy fields by @gantoine in #4026
- fix(v2): pivot to a filtered search from the overview info grid by @gantoine in #4023
- fix(backend): tolerate calendar-invalid gamelist dates on PostgreSQL by @gantoine in #4024
- fix(player): skip the save load a state immediately discards by @gantoine in #4025
- fix(roms): search the gallery by CRC32, MD5, SHA-1 and RA hash by @Spinnich in #4032
- fix(docker): always start the RQ scheduler by @XenuIsWatching in #4033
- fix(backend): scope the kiosk read-only cap to the anonymous visitor by @Spinnich in #4047
- fix: batch of open bug fixes (#4027, #4034, #4035, #4038, #4040, #4043, #4045) by @gantoine in #4051
- fix(scan): report only newly discovered firmware by @gantoine in #4055
- fix(rom-details): render the manual viewer on mobile by @gantoine in #4058
- fix(hasheous): read the CHD and DOS signature sources by @gantoine in #4060
Other changes
- perf(scan): stop hashing single-file ROMs twice by @XenuIsWatching in #4017
- perf(roms): stop the Missing tab scanning the whole library by @Spinnich in #4005
- perf(collections): serve smart and standard collections from a composed query by @Spinnich in #4039
- perf(roms): extend the sibling covering index to cover the ROM grouping query by @Spinnich in #4054
- perf(roms): let a gallery window fetch skip the library count by @Spinnich in #4062
Full Changelog: 5.1.0...5.1.1-beta.1
5.1.0
Warning
When binary logging is on and the connecting user lacks SUPER, trigger DDL is refused unless the global log_bin_trust_function_creators flag is 1. Run this on your MariaDB as an admin/root user (not the romm app user):
SET GLOBAL log_bin_trust_function_creators = 1;SET GLOBAL is lost on DB restart. Either add to your MariaDB my.cnf under [mysqld]:
log_bin_trust_function_creators = 1Or grant the app user the privilege (MariaDB 10.5+):
`GRANT BINLOG ADMIN ON *.* TO 'romm'@'%';` -- or: GRANT SUPER ON *.* TO 'romm'@'%';Warning
If your reverse proxy caches responses itself, or overrides/strips Cache-Control, it will defeat our built-in cache and serve a stale index.html that points at bundles the new image no longer ships, which usually shows up as a blank page or a broken UI after upgrading. After upgrading, purge your proxy's or CDN's existing cache once so clients stop being served entries stored under the old (header-less) behaviour.
Highlights
Emulator streaming
Launches a game into a native emulator running in a separate container and streams the picture, sound, and input back to your browser. Unlike EmulatorJS, the emulation runs server-side on real emulator binaries (PCSX2, Dolphin, Xemu), so the heavy lifting happens on the host rather than in the client. #3211
Important
Emulator streaming is in early development, and documentation is coming soon! If you really want to try it today, refer to this pull request in the rommapp/docs repo.
Per-field artwork priority overrides
Optional per-field artwork priority to prioritize metadata sources differently for covers, screenshots, and manuals, which fall back to the shared scan.priority.artwork. #3838
scan:
priority:
cover: # Cover art only
- igdb
- ss
screenshot: # Screenshots only
- ss
- igdb
manual: # Game manuals only
- launchbox
region_mode: prefer_rom_tags Region tags win over priority listScan settings UI
Brand new UI to edit the whole scan.* section of config.yml. #3854
Manual cover search filters
Client-side filters to the manual cover-search dialog to quickly narrow SteamGridDB results instead of scrolling through dozens of community covers. #3857
Minor changes
- feat: add file deletion to the Files tab on the game details page by @zurdi15 with @Copilot in #3753
- feat(v2): add reduced-effects mode for low-power devices by @gantoine in #3766
- feat(v2): link Hasheous provider to game detail page by @gantoine in #3783
- feat: add soundtrack gallery filter by @gantoine in #3790
- feat(playmatch): support self-hosted Playmatch instances by @gantoine in #3827
- feat: Support Range requests for multi-file ROM downloads by @tmgast in #3167
- feat: add "Open in Flashpoint" game action by @gantoine in #3845
- feat: Surface never-scanned platform folders in the scan picker by @gantoine in #3847
- feat(platforms): add editable platform descriptions by @Spinnich in #3855
- feat(v2): add random-ROM button to collections by @gantoine in #3860
- feat(v2): show smart and virtual collections on the home screen by @gantoine in #3859
- feat(scan): reassociate renamed/moved ROMs with missing entries by file hash by @gantoine in #3861
- feat(v2): auto-mark now-playing on launch + confirm launching shelved games by @gantoine in #3867
- feat: add music favorites and playlists API by @tmgast in #3896
- feat: add
scan.priority.region_modeto let config regions drive media selection by @gantoine in #3917 - feat: add Scan Settings to the user dropdown menu by @gantoine in #3923
- feat(tasks): allow orphaned resource cleanup to run on a schedule by @XenuIsWatching in #3970
Note
Environment variables
| variable | default | description |
|---|---|---|
| PLAYMATCH_API_URL | https://playmatch.retrorealm.dev/api/v2 |
Use self-hosted instance of Playmatch |
| STREAMING_BROKER_SECRET | - |
Required for emulator streaming |
| STREAMING_SAVE_TIMEOUT | 45 |
Save request timeout (in seconds) |
| ROMM_CORS_ALLOWED_ORIGINS | Comma-separated list of allowed CORS origins (empty allows all) | |
| ROMM_SESSION_SECURE_COOKIE | 'false |
Mark session and CSRF cookies Secure (enable when served over HTTPS) |
| MAX_ASSET_UPLOAD_SIZE_BYTES | 536870912 |
Max size of a save/state/screenshot upload request in bytes (0 disables the limit) |
| MAX_AUTOCLEANUP_LIMIT | 100 |
Max number of saves a client can keep per slot when autocleanup is on (minimum 1) |
Fixes
- fix(scan): resolve "Reg-" prefixed region shortcodes to full names by @TowyTowy in #3754
- fix(playmatch): handle empty heartbeat query by @DevYukine in #3756
- fix(db): pin explicit collation in virtual_collections view for MariaDB 11.6+ by @kthistlewood in #3759
- fix(v2): render match-rom covers at full width in Safari by @gantoine in #3763
- fix(migrations): make DDL idempotent on partial-failure reruns by @gantoine in #3767
- fix(v2): link IGDB provider to game page by slug by @gantoine in #3782
- fix(v2): batch gallery cover fetches into windows by @gantoine in #3765
- fix(ss): tolerate ScreenScraper's invalid JSON escapes by @gantoine in #3778
- fix(backend): lightweight eager-load for /roms/{id}/simple by @gantoine in #3779
- fix(platforms): include TGDB handler in tgdb_id fallback for supported platforms by @TowyTowy in #3785
- fix: respect configured IGDB region priority by @gantoine in #3791
- fix(retroachievements): resolve m3u playlists to natively hashed discs by @Spinnich in #3804
- fix(retroachievements): extract non-zip archives before RAHasher hashing by @Spinnich in #3813
- fix(metadata): search the whole filename for Sony serial codes by @TowyTowy in #3802
- fix(docker): proxy nginx to gunicorn over TCP instead of unix socket by @gantoine in #3810
- fix(frontend): base v2 verified badge on real DB hash matches by @gantoine in #3815
- fix(v2): render visible labels on device-auth and token expiry selects by @gantoine in #3818
- fix(igdb): don't match series games to their base title by @gantoine in #3817
- fix(scan): make v2 per-ROM "Update metadata" run the update scan type by @gantoine in #3819
- fix(v2): batch gallery hydration into windows and cap concurrency by @gantoine in #3824
- fix(v2): clear gallery selection after deleting ROMs by @gantoine in #3828
- fix(player): keep origin save bound and surface save slots in v2 EmulatorJS by @gantoine in #3831
- fix: Missing last platform-stats progressbar by @AlmostEasyGoing in #3834
- fix(netplay): correct room-list and socket URLs behind a reverse proxy by @gantoine in #3839
- fix: don't re-stamp updated_at for unchanged ROMs during scans by @gantoine in #3843
- fix: load selected file with correct extension for multi-file roms by @gantoine in #3844
- Fix v2 gallery not refetching when filter logic operator changes by @gantoine in #3840
- Fix wrong error wording for flag-only providers in setup wizard by @gantoine in #3841
- Fix slot-less save upload DB/file desync by @gantoine in #3846
- fix: enforce hidden-ROM/platform visibility on asset download and streaming endpoints by @gantoine in #3853
- fix(v2): ignore phantom/non-standard gamepads in nav polling by @gantoine in #3852
- fix(v2): overlay body-scroll-lock leaks + Library Stats label clipping by @gantoine in #3858
- fix(collections): lazy-load collection mosaic artwork by @gantoine in #3870
- fix(v2): keep collection visibility toggle in sync after save by @gantoine in https://github....
5.1.0-beta.3
What's Changed
- Enforce hidden-rom visibility on rom child routes by @gantoine in #3960
- Always allow changing the virtual collection type in v2 settings by @gantoine in #3961
- Fix ROMM_AUTH_SECRET_KEY auto-generation under nounset by @gantoine in #3967
- feat(tasks): allow orphaned resource cleanup to run on a schedule by @XenuIsWatching in #3970
- Serve each PKG file as its own FPKGi entry by @gantoine in #3966
- fix(resources): handle write failures when the disk is full by @XenuIsWatching in #3969
- fix(tasks): skip orphaned resource cleanup when the database looks empty by @gantoine in #3971
New Contributors
- @XenuIsWatching made their first contribution in #3970
Full Changelog: 5.1.0-beta.2...5.1.0-beta.3
5.1.0-beta.2
What's Changed
- Set page titles across v2 views by @gantoine in #3955
- Hide v2 actions the backend won't allow, with Playwright cover in CI by @gantoine in #3957
- security: harden CORS, session cookies, filename sanitization, and upload limits by @Sunil56224972 in #3952
- build(deps): bump postcss from 8.5.15 to 8.5.23 in /frontend by @dependabot[bot] in #3959
New Contributors
- @Sunil56224972 made their first contribution in #3952
Full Changelog: 5.1.0-beta.1...5.1.0-beta.2
5.1.0-beta.1
Warning
When binary logging is on and the connecting user lacks SUPER, trigger DDL is refused unless the global log_bin_trust_function_creators flag is 1. Run this on your MariaDB as an admin/root user (not the romm app user):
SET GLOBAL log_bin_trust_function_creators = 1;SET GLOBAL is lost on DB restart. Either add to your MariaDB my.cnf under [mysqld]:
log_bin_trust_function_creators = 1Or grant the app user the privilege (MariaDB 10.5+):
`GRANT BINLOG ADMIN ON *.* TO 'romm'@'%';` -- or: GRANT SUPER ON *.* TO 'romm'@'%';Warning
If your reverse proxy caches responses itself, or overrides/strips Cache-Control, it will defeat our built-in cache and serve a stale index.html that points at bundles the new image no longer ships, which usually shows up as a blank page or a broken UI after upgrading. After upgrading, purge your proxy's or CDN's existing cache once so clients stop being served entries stored under the old (header-less) behaviour.
Highlights
Emulator streaming
Launches a game into a native emulator running in a separate container and streams the picture, sound, and input back to your browser. Unlike EmulatorJS, the emulation runs server-side on real emulator binaries (PCSX2, Dolphin, Xemu), so the heavy lifting happens on the host rather than in the client. #3211
Important
Emulator streaming is in early development, and documentation is coming soon! If you really want to try it today, refer to this pull request in the rommapp/docs repo.
Per-field artwork priority overrides
Optional per-field artwork priority to prioritize metadata sources differently for covers, screenshots, and manuals, which fall back to the shared scan.priority.artwork. #3838
scan:
priority:
cover: # Cover art only
- igdb
- ss
screenshot: # Screenshots only
- ss
- igdb
manual: # Game manuals only
- launchbox
region_mode: prefer_rom_tags Region tags win over priority listScan settings UI
Brand new UI to edit the whole scan.* section of config.yml. #3854
Manual cover search filters
Client-side filters to the manual cover-search dialog to quickly narrow SteamGridDB results instead of scrolling through dozens of community covers. #3857
Minor changes
- feat: add file deletion to the Files tab on the game details page by @zurdi15 with @Copilot in #3753
- feat(v2): add reduced-effects mode for low-power devices by @gantoine in #3766
- feat(v2): link Hasheous provider to game detail page by @gantoine in #3783
- feat: add soundtrack gallery filter by @gantoine in #3790
- feat(playmatch): support self-hosted Playmatch instances by @gantoine in #3827
- feat: Support Range requests for multi-file ROM downloads by @tmgast in #3167
- feat: add "Open in Flashpoint" game action by @gantoine in #3845
- feat: Surface never-scanned platform folders in the scan picker by @gantoine in #3847
- feat(platforms): add editable platform descriptions by @Spinnich in #3855
- feat(v2): add random-ROM button to collections by @gantoine in #3860
- feat(v2): show smart and virtual collections on the home screen by @gantoine in #3859
- feat(scan): reassociate renamed/moved ROMs with missing entries by file hash by @gantoine in #3861
- feat(v2): auto-mark now-playing on launch + confirm launching shelved games by @gantoine in #3867
- feat: add music favorites and playlists API by @tmgast in #3896
- feat: add
scan.priority.region_modeto let config regions drive media selection by @gantoine in #3917 - feat: add Scan Settings to the user dropdown menu by @gantoine in #3923
Note
Environment variables
| cariable | default | description |
|---|---|---|
| PLAYMATCH_API_URL | https://playmatch.retrorealm.dev/api/v2 |
Use self-hosted instance of Playmatch |
| STREAMING_BROKER_SECRET | - |
Required for emulator streaming |
| STREAMING_SAVE_TIMEOUT | 45 |
Save request timeout (in seconds) |
Fixes
- fix(scan): resolve "Reg-" prefixed region shortcodes to full names by @TowyTowy in #3754
- fix(playmatch): handle empty heartbeat query by @DevYukine in #3756
- fix(db): pin explicit collation in virtual_collections view for MariaDB 11.6+ by @kthistlewood in #3759
- fix(v2): render match-rom covers at full width in Safari by @gantoine in #3763
- fix(migrations): make DDL idempotent on partial-failure reruns by @gantoine in #3767
- fix(v2): link IGDB provider to game page by slug by @gantoine in #3782
- fix(v2): batch gallery cover fetches into windows by @gantoine in #3765
- fix(ss): tolerate ScreenScraper's invalid JSON escapes by @gantoine in #3778
- fix(backend): lightweight eager-load for /roms/{id}/simple by @gantoine in #3779
- fix(platforms): include TGDB handler in tgdb_id fallback for supported platforms by @TowyTowy in #3785
- fix: respect configured IGDB region priority by @gantoine in #3791
- fix(retroachievements): resolve m3u playlists to natively hashed discs by @Spinnich in #3804
- fix(retroachievements): extract non-zip archives before RAHasher hashing by @Spinnich in #3813
- fix(metadata): search the whole filename for Sony serial codes by @TowyTowy in #3802
- fix(docker): proxy nginx to gunicorn over TCP instead of unix socket by @gantoine in #3810
- fix(frontend): base v2 verified badge on real DB hash matches by @gantoine in #3815
- fix(v2): render visible labels on device-auth and token expiry selects by @gantoine in #3818
- fix(igdb): don't match series games to their base title by @gantoine in #3817
- fix(scan): make v2 per-ROM "Update metadata" run the update scan type by @gantoine in #3819
- fix(v2): batch gallery hydration into windows and cap concurrency by @gantoine in #3824
- fix(v2): clear gallery selection after deleting ROMs by @gantoine in #3828
- fix(player): keep origin save bound and surface save slots in v2 EmulatorJS by @gantoine in #3831
- fix: Missing last platform-stats progressbar by @AlmostEasyGoing in #3834
- fix(netplay): correct room-list and socket URLs behind a reverse proxy by @gantoine in #3839
- fix: don't re-stamp updated_at for unchanged ROMs during scans by @gantoine in #3843
- fix: load selected file with correct extension for multi-file roms by @gantoine in #3844
- Fix v2 gallery not refetching when filter logic operator changes by @gantoine in #3840
- Fix wrong error wording for flag-only providers in setup wizard by @gantoine in #3841
- Fix slot-less save upload DB/file desync by @gantoine in #3846
- fix: enforce hidden-ROM/platform visibility on asset download and streaming endpoints by @gantoine in #3853
- fix(v2): ignore phantom/non-standard gamepads in nav polling by @gantoine in #3852
- fix(v2): overlay body-scroll-lock leaks + Library Stats label clipping by @gantoine in #3858
- fix(collections): lazy-load collection mosaic artwork by @gantoine in #3870
- fix(v2): keep collection visibility toggle in sync after save by @gantoine in #3871
- fix(db): don't use STR_TO_DATE in a generated column (MariaDB 12.3) by @gantoine in #3879
- fix(v2): take the hotkey-mute playing flag from EmulatorJS' start hook by @gantoine in #3878
- fix(archives): read RAR archives through bsdtar so they can be hashed by @gantoine in #3887
- fix(nginx): cache only fingerprinted assets, revalidate the rest by @Spinnich in #3892
- fix(v2): hide empty platforms in S...
5.1.0-alpha.5
What's Changed
- fix(roms): list the smart collections a ROM belongs to on its detail view by @Spinnich in #3936
- fix(player): guard v2 EmulatorJS against stale saved disc id by @Spinnich in #3940
- fix(player): render ScreenScraper bezel in v2 EmulatorJS player by @Spinnich in #3944
Full Changelog: 5.1.0-alpha.4...5.1.0-alpha.5
5.1.0-alpha.4
Warning
When binary logging is on and the connecting user lacks SUPER, trigger DDL is refused unless the global log_bin_trust_function_creators flag is 1. Run this on your MariaDB as an admin/root user (not the romm app user):
SET GLOBAL log_bin_trust_function_creators = 1;SET GLOBAL is lost on DB restart. Either add to your MariaDB my.cnf under [mysqld]:
log_bin_trust_function_creators = 1Or grant the app user the privilege (MariaDB 10.5+):
`GRANT BINLOG ADMIN ON *.* TO 'romm'@'%';` -- or: GRANT SUPER ON *.* TO 'romm'@'%';What's Changed
Full Changelog: 5.1.0-alpha.3...5.1.0-alpha.4
5.1.0-alpha.3
What's Changed
- perf(backend): mirror ROM filter values into a narrow trigger-maintained table by @gantoine in #3885
- perf(backend): materialize virtual collection membership by @gantoine in #3886
- fix(archives): read RAR archives through bsdtar so they can be hashed by @gantoine in #3887
- fix(nginx): cache only fingerprinted assets, revalidate the rest by @Spinnich in #3892
- fix(v2): hide empty platforms in Server Stats breakdown by @Spinnich in #3899
- fix(scan): reconcile rom_files in place instead of purging them by @gantoine in #3900
- fix(scan): emit a client update for ROMs that are no longer missing by @gantoine in #3903
- Fix/server stats duplicate slug key by @Spinnich in #3906
- Add music favorites and playlists API by @tmgast in #3896
- perf(stats): aggregate Server Stats breakdowns from roms_facets by @Spinnich in #3910
- Fix Playmatch health check failing on plain-text response by @gantoine in #3916
- Stop storing fanart and title_screen twice when screenshots are enabled by @gantoine in #3918
- Add scan.priority.region_mode to let config regions drive media selection by @gantoine in #3917
- Default EmulatorJS netplay username to the RomM account by @gantoine in #3919
- fix(v2): restore backdrop-filter blur in production builds by @zurdi15 in #3922
- Keep config.yaml EmulatorJS core settings active after user changes settings by @gantoine in #3920
- Add Scan Settings to the user dropdown menu by @gantoine in #3923
- build(deps-dev): bump fast-uri from 3.1.2 to 3.1.4 in /frontend by @dependabot[bot] in #3927
- build(deps): bump linkify-it from 5.0.1 to 5.0.2 in /frontend by @dependabot[bot] in #3926
- fix(migrations): pin device FK column collations to match devices.id by @gantoine in #3929
Full Changelog: 5.1.0-alpha.2...5.1.0-alpha.3