Features
- Added the
MERGEDstrategy torebuild-roms, storing each clone's files in its parent's ZIP, as ClrMamePro does - Added the
purge-gamessubcommand, moving individual games' files toTrash, with a Delete action in the web UI and apurge_gamesMCP tool - Added
-s/--systemtopurge-systems - Added
-a/--arcadetoimport-dats, with an Arcade switch in the web UI and anarcadeMCP parameter, to import game-based DATs such as FBNeo's as arcade systems import-datsnow reads MAME's and HBMAME's-listxmloutput directly- Added the
mcpsubcommand: a Model Context Protocol server on stdio, with progress notifications, cancellation, resources and prompts;--read-onlyexposes only the non-mutating tools, and purges needconfirm: true - The web server also serves MCP over Streamable HTTP at
/mcp, sharing its event stream with the web UI - Added Wii U support from the new wux-rs crate: import, check, convert and export WUX, and export WUDs and WUXs to WUA and NUS folders; its CLI (
wuxrs) ships in the release archives too - Added the
import-keyssubcommand, storing Wii U keys from Cemu'skeys.txtor a console'sotp.binin the data directory import-keysalso imports Switch keys fromprod.keysandtitle.keys, checking them first;~/.switch/prod.keysis still read when onlytitle.keyswere imported, or nothing- WUA is lossless: a WUA oxyROMon writes rebuilds its disc byte for byte, so it can be imported, checked, converted back to WUX or ISO, and set as
PREFER_FORMAT; update partitions are shared in a hidden.update-partitionsfolder - Wii U updates and DLC import as games from No-Intro's CDN DAT, count as complete with their newest TMD, and are bundled into WUA exports
- Exporting a Wii U update or DLC rebuilds the H3 files No-Intro's DAT sometimes leaves out
- Importing a Wii U title keeps a ticket no DAT lists in a
wiiu_ticketsfolder, and exports use it create-datslists a WUX as the WUD it holds and a Wii U title's folder as one game- Added the
GAME_SUBFOLDERSsetting (never,multipleoralways), storing games in folders of their own, with multi-disc games sharing one folder with their playlist - Added the
DISCARD_CATEGORIESsetting, discarding games by the categories their DAT gives them, such as Redump's Demos and Coverdiscs, with a Discard Categories field in the web UI - Added the
INFER_CLONESsetting, grouping games by title for 1G1R when their DAT has no Parent-Clone data, as Redump's don't, with an Infer Clones switch in the web UI - Added the
import-clone-listssubcommand, importing Retool's clone lists, whichINFER_CLONESreads to group titles named differently across regions and to elect one of a region's releases by its priority
Changes
-snow means--systemin every command with that option butconfig:check-roms --sizehas no short form any more, andimport-irdsandpurge-irdsgain-s- RVZ support now comes from the new rvz-rs crate, a port of Dolphin's RVZ code, instead of
dolphin-tool; its CLI (rvzrs) ships in the release archives too RVZ_BLOCK_SIZEis rounded up to a power of two, the only sizes up to 2 MiB that RVZ allows- WBFS support now comes from the new wbfs-rs crate, a port of wit, instead of
wit, and exports from RVZ without decoding an ISO; its CLI (wbfsrs) ships in the release archives too - The
nodfeature is gone - Compressing a Wii ISO to RVZ or WBFS needs the Wii common key, which
import-keystakes from a Wii's or a Wii U'sotp.binor BootMii'skeys.bin - Removed the
RVZ_SCRUBsetting - 7z and ZIP support now always comes from the sevenz-rust2 and zip crates: 7-Zip is no longer needed, and the
sevenzfeature is gone - BPS and IPS support now comes from the new xps-rs crate, a port of Flips, instead of
flips; its CLI (xpsrs) ships in the release archives too - XDELTA support now comes from the new xdelta-rs crate, a port of xdelta3, instead of
xdelta3; its CLI (xdeltars) ships in the release archives too - CHD support now comes from the new chd-rs crate, a port of chdman, instead of
chdman, for CDs, DVDs, hard disks and LaserDiscs; its CLI (chdrs) ships in the release archives too - CIA support now comes from the new cia-rs crate, a port of ctrtool, instead of
ctrtool; its CLI (ciars) ships in the release archives too - oxyROMon no longer needs any external tool installed
- The Docker image is now Alpine only, on
latestand the version tags; the Arch Linux image and-alpinetags are gone - Editing a 7z now copies the untouched entries as they are instead of re-encoding them
purge-roms, and updates byimport-dats,download-datsandimport-irds, now delete the directories they leave emptydownload-datskeeps going when a Redump system fails, and fails the run at the end naming each onedownload-datsnow fetches Redump DATs from redump.info, with its new systems; existing systems move over and take Redump's new names- Merged the web UI's Upload and Download menus into one Import menu
import-romsnow says when it extracts files from an archive holding several games and leaves the archive in the source directory (#237)
Fixes
- Fixed
rebuild-roms -fskipping clones in sets alreadyNON_MERGEDorFULL_NON_MERGED - Fixed
rebuild-romscomputing completion with the strategy it rebuilt from - Fixed
rebuild-romsleaving a parent's files in a clone's directory when another of the clone's files was missing - Fixed
rebuild-romsnaming a clone's loose copies after its parent's ROMs instead of its own, whichcheck-romsthen failed - Fixed
rebuild-romsexiting silently when there are no arcade systems - Fixed
import-datsslowing down on DATs with ROMs shared by many machines, such as HBMAME's - Fixed commands printing nothing but fatal errors when stderr is not a terminal
- Fixed web UI and MCP actions colliding when run at the same time; they now run one at a time, and a waiting MCP tool can be cancelled
- Fixed hard disk CHDs failing with "Not a valid rdsk" unless they began with an Amiga Rigid Disk Block
- Fixed the web UI's system deletion dialog saying files are left on disk; they move to
Trash - Fixed
create-datsreading each file once per checksum, and sometimes writing a truncated DAT - Fixed
import-romssometimes hashing a CIA's TMD before its certificates were written - Fixed
purge-systems,check-romsandimport-datspanicking when two games own a file of the same name inTrash - Fixed
import-romspanicking when "None" is picked at the ROM prompt - Fixed
export-roms -f ORIGINALputting an arcade game's files next to their directory instead of in it - Fixed converting a Wii U title's folder to 7Z or ZIP leaving its extensionless contents out, and writing the archive inside the folder
- Fixed
purge-roms -tskipping the ROM directory's ownTrash - Fixed
import-datsanddownload-datsdropping a system's custom name and extension on update - Fixed 7z extraction and rewrites holding whole entries in memory
- Fixed ZIP copies panicking on an unreadable entry and reporting success on a failed write
- Fixed a 7z and a ZIP of the same name sharing a scratch file
- The desktop app's Debian package no longer depends on
p7zip - Fixed
download-datspanicking when redump.org or No-Intro is unreachable - Fixed the MCP
download_datstool reporting every system as downloaded - Fixed
import-roms -smatching every system when the name matches none - Fixed
purge-systemsleaving behind the directories it emptied - Fixed
rebuild-romsandcheck-romspanicking on loose files without an extension - Fixed
check-roms,convert-romsandexport-romssaying "No matching games found" for incomplete games - Fixed
sort-romsignoringLANGUAGESunlessDISCARD_RELEASESorDISCARD_FLAGSwas set - Fixed the CHD hard disk and LaserDisc settings refusing to be unset, and
config -areordering hard disk codecs - Fixed malformed or homebrew CIAs crashing the import instead of being reported
- Fixed a
serverbuild after one withSKIP_TRUNK=trueskipping trunk too