Find ROM Cover is an easy-to-use WPF application designed to help you effortlessly rename and organize cover images for your ROM collection. It helps you match and rename your images to correspond with the filenames of your ROMs using intelligent similarity algorithms.
- Browse: Select the folders where your ROMs and cover images are stored.
- Command-line Support: Optionally launch the application with ROM and Image folder paths provided as arguments.
- List: The app identifies which cover images are missing from your ROM collection, optionally using MAME descriptions for better readability.
- Match: It searches the Cover Image folder for images with similar filenames using a configurable similarity algorithm. Adjust the similarity threshold to find the best matches.
- Display: Suggested cover images appear in the right panel for the selected ROM, along with their calculated similarity percentage. You can adjust the size of the image previews.
- Copy: Click on an image or use the right-click context menu ("Use This Image") to copy it to the Cover Image folder, renaming the image to match the ROM filename and converting it to PNG format. The context menu also provides options to copy the image filename or open its location in File Explorer.
- Easy ROM and Cover Image Matching: Automatically matches ROM files with corresponding cover images based on name similarity, with robust image loading and processing.
- Multiple Similarity Algorithms: Choose between Jaro-Winkler Distance (default), Levenshtein Distance, and Jaccard Similarity to find the best matches for your needs.
- Adjustable Similarity Threshold: Fine-tune how strict the matching criteria should be, whether you prefer exact matches or broader suggestions.
- Thumbnail Size Customization: Choose how large or small you want the cover image thumbnails to appear, making it easier to view and select the right covers.
- Manual Selection & Context Menu: Browse through suggested images, view similarity scores, and use the right-click context menu for actions like using the image, copying its filename, or opening its folder location.
- Missing Image Finder: Quickly identify which ROMs are missing cover images, helping you complete your collection. Includes an option to use MAME descriptions for ROM names.
- Theme Customization: Switch between Light and Dark base themes and choose from a variety of accent colors.
- Simple Interface: Designed for ease of use, with improved folder path validation and validated settings management for supported extensions and runtime limits.
- Audio Feedback: Get audible confirmation for successful actions like copying images or removing items from the list.
- Automatic Error Reporting: The application includes an automatic error reporting mechanism to help developers quickly identify and fix issues, ensuring a more stable experience. This includes detailed logging and internal error tracking.
- Update Notifications: Automatically checks for new releases on GitHub and notifies you when an update is available.
The codebase follows a clean, modular architecture with clear separation of concerns. A companion test project (FindRomCover.Tests/) provides unit test coverage using xUnit and FluentAssertions.
AudioService- Provides audio feedback using WPF MediaPlayer with STA thread handlingImageLoader- Progressive image loading with retry logic for locked files and corruption recovery via Magick.NETImageProcessor- Handles image conversion and saving to PNG format, plus cleanup of orphaned temp filesSimilarityCalculator- Implements multiple string similarity algorithms (Jaro-Winkler, Levenshtein, Jaccard) with parallel processingNgramIndex- N-gram indexing for optimized similarity matching performanceButtonFactory- Factory for creating context menus and orchestrating similarity calculationsErrorLogger- Comprehensive error logging with automatic API reporting, file-based logs, and internal error trackingGitHubReleaseService- Checks GitHub releases for application updatesMameDataService- MAME data lookup service for ROM description resolutionUpdateCheckOrchestrator- Orchestrates update checking workflow with debounce and notification managementDelegateCommand- ICommand implementation for WPF MVVM data bindingObjectToBoolConverter- WPF value converter for object-to-bool transformationsIAudioService- Interface for audio service abstraction
SettingsManager- Manages application settings with XML persistence, INotifyPropertyChanged support, and cross-instance static synchronization
ImageData- Immutable record representing an image with similarity score and lazy-loaded broken image fallbackMameData- MAME machine data model with MessagePack serialization supportMissingImageItem- Represents a ROM missing its cover imageSimilarityCalculationResult- Container for similarity calculation results including processing errorsGitHubReleaseResponse- DTO for GitHub API release responsesUpdateCheckResult- Model for application update check resultsBugReportModel- Model for bug report submissionsUpdateNotificationInfo- Model for update notification display data
You can find cover images on websites such as Libretro Thumbnails and EmuMovies, with which I have no affiliation.
- Windows 7 or later
- .NET 10.0 Runtime
- Download the latest release.
- Extract the ZIP file to a folder of your choice.
- Run
FindRomCover.exe.
The codebase has undergone a significant refactor to improve maintainability and separation of concerns:
- AudioService - Extracted audio playback into a dedicated service with proper disposal pattern
- ImageLoader - Centralized image loading with Magick.NET, retry logic for locked files, and corruption recovery
- ImageProcessor - Dedicated image processing service for format conversion and temp file cleanup
- SimilarityCalculator - Pure static utility for string similarity calculations with parallel execution
- ButtonFactory - Factory pattern for UI element creation and similarity search orchestration
- SettingsManager - Comprehensive settings management with XML serialization, data binding support, and cross-instance static synchronization
- Immutable records and classes for data representation
- Lazy initialization patterns for resource-intensive operations
- Proper encapsulation with init-only properties
- Switched to
System.Text.Jsonfor all JSON handling (removed Newtonsoft.Json dependency) - Dependency injection via
Microsoft.Extensions.DependencyInjectionfor service registration and lifetime management - Updated dependencies: ControlzEx 7.0.4, Magick.NET-Q16-AnyCPU 14.13.1, MahApps.Metro 3.0.0-rc0529, MessagePack 3.1.6, Microsoft.Extensions.DependencyInjection 10.0.8
- Enhanced error logging with multiple log files (API, User, Internal)
- Improved image loading with progressive loading, retries for locked files, and GDI+ error fallbacks
- N-gram indexing for optimized similarity calculation performance
- Parallel processing for similarity calculations with cancellation support
- Thread-safe lazy initialization for MAME data and broken image resources
- GitHub release checking for application update notifications
If you find 'Find ROM Cover' useful, please consider showing your support!
- Give us a Star! If you like this project, please give it a star ⭐ on GitHub. It helps more people discover the project!
- Donate: Did you enjoy using Find ROM Cover? Consider donating to support the project or simply to say thanks! Your contribution helps in maintaining and improving the application.
- Developed by Pure Logic Code.

