Retro Tools 2026 v0.1.2
[0.1.2] - 2026-08-14
Adds the "Modules Futurs Retrogaming" batch (Phases 11-20): Batocera/
Recalbox/Lakka export, ScreenScraper metadata scraping, ES-DE smart
collections, save backup/restore, controller profile library, shader
overrides, a core-compatibility advisor, RVZ/CSO conversion, SD/USB card
imaging, and RetroAchievements integration — plus generated platform
badges and shader preset previews in the UI.
Added
- Static shader preset previews (
crates/ui/src/shader_preview.rs): a small synthetic reference image shown next to each shader association and in the preset picker in Settings, illustrating the preset's category (CRT/scanline/pixel-art upscaler) with scanline overlays, a vignette, or a blocky-vs-smooth split — not a real screenshot, since this project doesn't bundle third-party shader/game screenshots; the file-name classification is a pure, unit-tested function kept separate from the drawing code - Procedurally generated platform badges (
crates/ui/src/platform_badge.rs): a deterministic colored circle with 2-4 letter initials derived from the platform's name, shown in the Platforms, Dashboard and Games tabs — real console/company logos are trademarks and can't legally be bundled in this public repository under any license this project could choose, so this sidesteps that entirely while still giving every platform a distinct visual identity - RetroAchievements integration (
retrotools-plugin-retroachievements): syncs and locally caches known RetroAchievements-compatible ROM hashes per platform (via an editable platform → console-id table) using your own username/API key (encrypted, Settings), then cross-references the current 1G1R selection and reports any kept game with no known hash; a new opt-in tie-breaker,RulePriority::prefer_retroachievements_compatible(off by default, changes nothing unless enabled), lets 1G1R selection itself prefer an RA-compatible alternate when otherwise tied — both read the same on-disk hash cache without sharing Rust state; RetroAchievements compatibility now also shows in the Games tab's detail panel - SD/USB card imaging (
retrotools-plugin-sdcard-imager): checksum verification of a downloaded Batocera/Recalbox/Lakka base image (sdcard verify), removable-USB-disk detection (sdcard list-devices), and raw image writing (sdcard write) gated by a typed double confirmation of the exact device id (nothing is written if--device/--confirmdon't match) — the destructive write path is deliberately plain CLI-invoked functions rather than the generic plugin contract, sincePluginContexthas no room for that confirmation;sdcard-inject(a normal plugin) then mirrors a staging folder (built 1G1R set plus any Export/Controllers/Shaders output) onto the freshly-imaged, already-mounted partition; a manual real-hardware validation procedure is documented indocs/PLUGIN_DEV.mdsince writing to a real device is intentionally not automated in tests - RVZ (GameCube/Wii) and CSO (PSP) conversion:
convert to-rvz/from-rvz(via a third-partyDolphinTool) andconvert to-cso/from-cso(via a third-partymaxcso), symmetric to the existing CHD conversion commands; neither tool is bundled with this app (unlike UnRAR/chdman/7za) —docs/COMPILATION.mdexplains how to obtain and point the app at them (RETROTOOLS_DOLPHINTOOL_PATH/RETROTOOLS_MAXCSO_PATH, aresources/folder, orPATH), and each command fails with a clear message rather than silently if the tool isn't found - Core compatibility advisor (
retrotools-plugin-core-advisor): a local, user-imported JSON database mapping platform/game → recommended libretro core (with a confidence level, a free-text note, and a "known problematic" flag), edited from a new Settings section;core-advisor-reportcross-references the games the last scan actually matched (via the newPluginContext::match_report, no re-scanning) against that database, writes a plain-text report, and generates a per-game.optcore-options override at RetroArch's exact expected path for any entry with specific options; the recommended core and its note now also show in the Games tab's detail panel - RetroArch shader override generation (
retrotools-plugin-shaders): a library of.glslp/.slangppresets (3 realistic starters — CRT geom, scanlines, scale2x — whose shader paths were verified against the reallibretro/slang-shadersfolder layout so they actually resolve on a standard RetroArch install, though nothing is copied from that repository itself, plus import of externally-supplied preset files), a saved shader → core / shader → game association list edited from a new Settings section, andshaders-exportwhich writes RetroArch override files at the exact path RetroArch itself expects (<core>/<core>.cfgfor a whole core,<core>/<content dir>/<game>.cfgfor one game); every generated file is recorded in a manifest soshaders-cleancan remove exactly what this tool produced without ever touching a hand-written override PluginContextgained amatch_report: Option<&MatchReport>field so a plugin can cross-reference per-ROM scan status (matched/corrupt/unknown/missing) without re-scanning — needed by the upcoming core-compatibility and RetroAchievements modules; the UI now threads its liveMatchReportthrough, the CLI passesNone(it doesn't currently keep one around between commands)