Jump to content
LaunchBox Community Forums

About This File

Hello everyone, I'm proud to present a new RomM server plugin for LaunchBox. Currently, it offers a complete solution, both synchronizing your server and updating it with LaunchBox data, as well as functions to install and uninstall games. Please take advantage of it and provide your feedback.

https://github.com/phscezario/launchbox-romm-plugin

## ๐ŸŽ‰ v1.0.0 โ€” First Stable Release!

After a lot of work, the plugin now reliably syncs metadata, cover art, and keeps your LaunchBox library in sync with your RomM server. ๐Ÿš€

---

## ๐ŸŽฎ LaunchBox RomM Plugin โ€” Release Notes

### ๐Ÿ†• What's New

#### ๐Ÿ“‹ Metadata Sync (RomM โ†’ LaunchBox)
Sync now auto-fills LaunchBox game metadata from the RomM server:

- Release date, max players, play mode
- Video (YouTube), Wikipedia, ESRB
- Community rating and votes
- Synopsis / notes
- Genres, companies, game modes
- LaunchBox ID (LaunchBoxDbId)

Priority: **LaunchBoxMetadata > ScreenScraper > IGDB > RomM Metadata**.

#### ๐Ÿ–ผ๏ธ Automatic Cover Art Download
- Box - Front cover art is downloaded automatically from the RomM server
- Only downloads if the game has no existing cover in LaunchBox
- `ForceReload` runs after sync so images appear immediately

#### ๐Ÿงน Orphan Image Cleanup
- When a game is removed from the RomM server, the sync removes the game from LaunchBox and deletes its associated images
- Cleanup happens **after** the full sync completes, preventing partial deletions on failure

#### โš™๏ธ KeepLocalData Flag
New setting that controls overwrite behavior:

- `KeepLocalData = true` โ€” only fills empty fields, preserves existing data
- `KeepLocalData = false` โ€” overwrites all fields

#### ๐Ÿ”„ Cover Art Upload (Update RomM Metadata)
`Update RomM Metadata` now also sends the Box - Front cover from LaunchBox back to the RomM server.

### ๐Ÿ› Fixes
- Fixed cover download failing due to unencoded spaces in RomM's timestamp parameter (`?ts=...`)
- Fixed image path by using LaunchBox's `GetNextAvailableImageFilePath` instead of hardcoded paths

### โšก Improvements
- `dataManager.ForceReload()` runs automatically after sync โ€” no more restarting LaunchBox to see images
- Detailed logging of downloaded image paths for easier debugging

---

### How to Update

1. Replace the `RomM LaunchBox Integration` folder in your LaunchBox Plugins directory
2. Launch LaunchBox and configure `KeepLocalData` in plugin settings if desired
3. Run `RomM: Sync roms list from server`

ย 

Edited by ByakkoKa


What's New in Version 2.0.2   See changelog

Released

LaunchBox RomM Plugin v2.0.0

Major release with significant architectural improvements, new features, and a complete test suite.

๐Ÿš€ New Features

  • Game Manager โ€” New UI form (GameManagerForm) to browse, install, uninstall and manage ROMs directly from LaunchBox with progress tracking and queue support
  • Download Queue Service โ€” Full download manager with concurrent downloads, pause/resume/cancel, progress tracking, persistent state, and retry logic
  • Play Session Tracking โ€” Track play sessions (start time, end time, duration, save slot) and sync them to the RomM server
  • Auto-Update System โ€” Checks GitHub Releases for new versions, downloads and stages updates with UI notifications
  • Localization (i18n) โ€” Complete internationalization system with en.json and pt-BR.json locale files, fallback chain, and language selection in settings
  • Remove All โ€” New admin action (--remove-all) to fully clean installed ROMs, restart LaunchBox and reset UI state
  • Install/Uninstall Menu Items โ€” Dedicated menu buttons for RommInstallMenuItem and RommUninstallMenuItem with per-platform operations
  • Backup Service โ€” New IRommBackupService / RommBackupService for creating backups before destructive operations
  • Screenshot Sync โ€” RommScreenshotSync service to upload and sync screenshots between LaunchBox and RomM
  • Stats Service โ€” RommStatsService to fetch and display play statistics (play count, total time, last played)
  • Metadata Mapper โ€” RommMetadataMapper with diff-based comparison for efficient metadata synchronization
  • Platform Prefix for Apps โ€” Automatically prefix app names with platform name to avoid conflicts across systems
  • ForcePushToServer โ€” New admin setting to force-push metadata even when no local changes are detected

๐Ÿ”ง Architecture & Refactoring

  • Dependency Injection โ€” Introduced ServiceLocator for centralized service resolution
  • Interface-driven design โ€” All major services now have corresponding interfaces (IRommSyncService, IRommStatsService, IRommBackupService, IRommHierarchyCli, IRommScreenshotSync, IRommMetadataMapper, etc.)
  • SDK-style csproj โ€” Migrated all projects to modern SDK-style project format
  • Singleton guards โ€” Added thread-safe singleton guards for Sync, Reset and Settings services
  • DI cleanup โ€” Removed RommInstaller and legacy code, replaced with proper service abstractions
  • Unified build output โ€” All projects output to build/Release without TFM subfolder
  • SafeFileWriter โ€” Atomic file writes with temp file + rename pattern to prevent corruption
  • SecureCredentialStorage โ€” Encrypted credential storage for API tokens
  • AuthHeaderHelper โ€” Centralized authentication header injection

๐Ÿงช Testing

  • New test project โ€” RommPlugin.Tests with xUnit + Moq
  • 15+ test classes covering:
    • RommApiClientTests โ€” API client request/response handling
    • RommGameHelpersTests โ€” Game matching and path resolution logic
    • RommMetadataMapperTests โ€” Metadata diff and mapping logic
    • RommSyncServiceStatsTests โ€” Sync statistics calculation
    • DownloadItemTests โ€” Download state management
    • RommPluginSettingsTests โ€” Settings serialization/deserialization
    • LocaleManagerTests โ€” i18n loading and fallback
    • SafeFileWriterTests โ€” Atomic write operations
    • SecureCredentialStorageTests โ€” Credential encryption
    • AuthHeaderHelperTests โ€” Header injection
    • And more...

๐Ÿ“š Documentation

  • Complete docs folder with:
    • architecture.md โ€” System architecture and project structure
    • development-setup.md โ€” Prerequisites and IDE configuration
    • contributing.md โ€” Commit conventions, code style, PR process
    • testing.md โ€” How to run and write tests
    • ci-cd.md โ€” GitHub Actions workflows
    • configuration.md โ€” Full settings.json reference
    • deployment.md โ€” Build and release process
    • release-process.md โ€” Versioning and tagging
    • localization.md โ€” i18n system guide
    • api-integration.md โ€” RomM API endpoints reference

๐Ÿ”„ CI/CD & DevOps

  • ci.yml โ€” Build and test pipeline
  • test.yml โ€” Automated test execution
  • release.yml โ€” Release artifact publishing
  • auto-tag.yml โ€” Automatic version tagging
  • .editorconfig โ€” Enforced code style consistency

๐Ÿ› Bug Fixes

  • Reuse existing playlist GUIDs in Parents.xml instead of generating new ones
  • Removed TrySetResult call in ProgressRunner.FormClosing to prevent race conditions
  • Proper handling of cancelled download status and actions
  • Fixed singleton initialization guards across services

๐Ÿ“ฆ Project Changes

  • Version bump to 2.0.0
  • Added settings.example.json for reference
  • Added Sync-LaunchBoxMetadata.ps1 PowerShell helper script
  • Removed legacy packages.config (NuGet PackageReference migration)
  • Cleaned up unused usings and dependencies
  • Added XML documentation comments throughout codebase
  • Like 1
  • Unusual Gem 1

User Feedback

Recommended Comments

Light Sock

Posted

I'm so happy to see this!

I'm the one who made the PR for the LaunchBox importer in romm.

Wish I knew you were working on something like this before spending days on it xD. I think a plugin using romm's api is much better so props to you for doing this. I'll test it eventually and report back any issues on GH if there's any.

In the meantime I was wondering how you're managing save syncing between LaunchBox and Romm?

Last question, is it only metadata or it's also syncing images, videos and manuals?

ByakkoKa

Posted (edited)

Thank you a lot!

At moment you can sync metadata and cover only.

About the save sync I can't do that beacuse save from emulatorJS are different from local Retroarch, but I'm working on a save sync for Retroarch between PCs, using a network driver or cloud drive like Onedrive or Google Drive.

Edited by ByakkoKa
Light Sock

Posted

On 3/13/2026 at 11:05 PM, ByakkoKa said:

Thank you a lot!

At moment you can sync metadata and cover only.

About the save sync I can't do that beacuse save from emulatorJS are different from local Retroarch, but I'm working on a save sync for Retroarch between PCs, using a network driver or cloud drive like Onedrive or Google Drive.

Hey! Haven't got the time to test your plugin since I've been coding a BigBox theme for the past 3 months but will soon. In the meantime were you aware of this :

https://grout.romm.app/usage/save-sync/#supported-save-formats

And more importantly this :

https://github.com/rommapp/romm/discussions/2199

And they've got the idea merged in a PR not so long ago :

https://github.com/rommapp/romm/pull/2917

So I think it's very well possible to sync saves between Romm and Launchbox!

Continue the good work!

ByakkoKa

Posted

On 3/25/2026 at 11:14 AM, Light Sock said:

Hey! Haven't got the time to test your plugin since I've been coding a BigBox theme for the past 3 months but will soon. In the meantime were you aware of this :

https://grout.romm.app/usage/save-sync/#supported-save-formats

And more importantly this :

https://github.com/rommapp/romm/discussions/2199

And they've got the idea merged in a PR not so long ago :

https://github.com/rommapp/romm/pull/2917

So I think it's very well possible to sync saves between Romm and Launchbox!

Continue the good work!

Hey, it look amazing, I'll check, the save sync is a good idea.

Light Sock

Posted

@ByakkoKaย Hey! I was about to try your plugin but while reading the instructions, I noticed it's actually working the other way around. For my use case, LB is my source of truth and I want to send my LB data to Romm. Do you plan on adding support for 2 way syncing depending on user preferences?

ByakkoKa

Posted (edited)

Hello, today it have this option, but you need import roms in RomM first, because it work like server so, import roms on it and syncronize LaunchBox and then use the LaunchBox get metadata and update on RomM using the plugin... Sorry about delay to answer @Light Sock

Edited by ByakkoKa
elwooha6

Posted

RomM already supports scraping metadata from Launchbox games database, when scanning your roms in RomM just set launchbox as the metadata source and disable the others. You can also edit the config file to select which metadata sources are preferred and the order they are used in.

nugglet

Posted

Are there dependencies required for this to install properly to the plugins? I extracted the "RomM LaunchBox Integration" folder direclty into my Launchbox\Plugins directory and it is not showing up in Launchbox

ByakkoKa

Posted

This don't have any dependency, I'll check last build and check if had some problem.

ย 

JoeViking245

Posted

Depending on the zip file manager used, you may need to Unblock the files then start LaunchBox.

Right-click the zip file and selectย Properties. Look for and check the Unblock checkbox. Click OK to save and close. Then extract the folder/files.

image.png.286a8507e9e99e37db2ae85ca6dc5440.png

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...