Skip to content

Retro Tools 2026 v0.1.2

Choose a tag to compare

@Patrickjaillet Patrickjaillet released this 13 Aug 23:06
· 13 commits to main since this release

[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/--confirm don't match) — the destructive write path is deliberately plain CLI-invoked functions rather than the generic plugin contract, since PluginContext has 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 in docs/PLUGIN_DEV.md since 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-party DolphinTool) and convert to-cso/from-cso (via a third-party maxcso), symmetric to the existing CHD conversion commands; neither tool is bundled with this app (unlike UnRAR/chdman/7za) — docs/COMPILATION.md explains how to obtain and point the app at them (RETROTOOLS_DOLPHINTOOL_PATH/RETROTOOLS_MAXCSO_PATH, a resources/ folder, or PATH), 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-report cross-references the games the last scan actually matched (via the new PluginContext::match_report, no re-scanning) against that database, writes a plain-text report, and generates a per-game .opt core-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/.slangp presets (3 realistic starters — CRT geom, scanlines, scale2x — whose shader paths were verified against the real libretro/slang-shaders folder 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, and shaders-export which writes RetroArch override files at the exact path RetroArch itself expects (<core>/<core>.cfg for a whole core, <core>/<content dir>/<game>.cfg for one game); every generated file is recorded in a manifest so shaders-clean can remove exactly what this tool produced without ever touching a hand-written override
  • PluginContext gained a match_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 live MatchReport through, the CLI passes None (it doesn't currently keep one around between commands)