github rommapp/romm 5.1.0-alpha.1

pre-release5 hours ago

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)

API changes

Change Description
PUT /config/scan Replace the scan.* section of the configuration.
GET /platform/filesystem Retrieve platform folders on disk that have no database row yet.
GET /roms Now accepts a with_rom_id_index parameter.
DELETE /{rom_id}/files/{file_id} Delete a single file belonging to a ROM.
BulkOperationResponse Swaps failed_items: int for failed_ids: list[int].
ConfigResponse Adds SCAN_ARTWORK_PRIORITY_OVERRIDES, GAMELIST_AUTO_EXPORT_ON_SCAN, and PEGASUS_AUTO_EXPORT_ON_SCAN.

Streaming endpoints

Method Path Description
GET /streaming/config Returns streaming config flag plus a sanitized container list
POST /streaming/sessions Claims a session for a game to launch it
POST /streaming/sessions/{platform}/save-and-exit Releases the session
POST /streaming/sessions/{platform}/volume Set from 0-100
POST /streaming/sessions/{platform}/mute Toggles or explicitly sets mute state
POST /streaming/sessions/{platform}/save-state Saves to a manual slot without stopping the emulator
POST /streaming/sessions/{platform}/load-state Loads from a manual slot or the platform's autosave slot
DELETE /streaming/sessions/{platform} Releases the session and best-effort tells the broker to stop the emulator
GET /streaming/sessions Debug view of all active sessions
DELETE /streaming/sessions Force-releases every active session.

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.

image2

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

Scan 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

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

Other changes

  • docs: add agent repository instructions by @gantoine in #3755
  • Reduce RQ worker registry sweep verbosity and frequency by @gantoine in #3731
  • chore(i18n): add linter enforcing alphabetically sorted locale files by @gantoine in #3757
  • perf(backend): index roms (platform_id, fs_size_bytes) by @gantoine in #3780
  • perf(roms): make full rom id index opt-out on GET /api/roms by @gantoine in #3781
  • revert(v2): hydrate gallery cards per-card via /roms/{id}/simple by @gantoine in #3789
  • perf(backend): make roms_metadata fast via generated columns by @gantoine in #3826
  • build(deps): bump pillow from 12.2.0 to 12.3.0 by @dependabot[bot] in #3863
  • build(deps): bump pydantic-settings from 2.14.1 to 2.14.2 by @dependabot[bot] in #3868

New Contributors

Full Changelog: 5.0.0...5.1.0-alpha.1

Don't miss a new romm release

NewReleases is sending notifications on new releases.