Mimir is an open source, local-first toolkit for retro handheld owners.
It is built to help organise ROM libraries safely on-device or on desktop, with an initial focus on multi-disc cleanup and bulk ROM preparation for frontends used on devices like the AYN Odin and Thor.
I run the RetroPup YouTube channel, where you can subscribe for tips, tricks, and tutorials for retro handhelds.
Scans a user-selected ROM folder and detects multi-disc games using common naming patterns.
Current behaviour:
- previews intended changes before applying them
- requires confirmation before file operations
- skips conflicts instead of blocking non-conflicting operations
- applies deterministic frontend-specific output rules
Current preset support includes:
- ES-DE
- Other
Current preset behaviour:
- ES-DE groups multi-disc games into a per-game folder and generates an
.m3u - Other keeps discs in the platform folder and generates an
.m3u
RomZipper scans ROM subfolders and converts supported ROM formats into .zip archives.
Current supported extensions:
- Nintendo handheld:
.gb,.gbc,.gba,.nds - Nintendo home console:
.nes,.fds,.fig,.sfc,.smc,.swc - Nintendo 64:
.n64,.v64,.z64 - Atari:
.a26,.a52,.a78,.lnx - Sega home consoles:
.md,.gen,.smd,.32x - Sega 8-bit / portable:
.sms,.gg,.sg,.sc - NEC / other Japanese systems:
.pce,.sgx,.ws,.wsc,.ngp,.ngc - Computer / miscellaneous:
.col,.cv,.d64,.tap,.tzx,.z80,.sna,.rom,.mx1,.mx2
Zip naming behaviour:
- strips the original file extension before creating the archive
- example:
Pokemon.gbabecomesPokemon.zip
Mimir's Converter Tools page provides one scan, review, overwrite, progress, and cancellation flow for each supported converter. Every conversion retains the source image unless the CHD delete-source option is selected.
Supported system and source formats:
- Dreamcast:
.gdi,.cue,.iso - PlayStation 1:
.cue,.iso - PlayStation 2:
.iso - Sega CD:
.cue,.iso - Sega Saturn:
.cue,.iso - PlayStation Portable:
.iso
Choose either CD or DVD conversion before scanning. For PSP, use DVD. For PS2, use CD with NetherSX2 and DVD with ARMSX2.
Each scan includes compatible files in the selected folder plus matching system subfolders, case-insensitively:
dreamcast/dc, playstation 1/ps1/psx, playstation 2/ps2, sega cd/segacd/mega cd/megacd, sega saturn/saturn, and playstation portable/psp. .bin files are consumed through their .cue sheet and are not independent conversion targets.
Conversion progress reports completed images out of the selected total. Users can stop a scan or
conversion immediately, or finish the current conversion and stop before the next one. An optional
toggle deletes the successfully converted source image; for .cue and .gdi inputs it also deletes
the same-folder track files referenced by that descriptor.
Mimir bundles the Android ARM64 CHDMan executable at
android/app/src/main/jniLibs/arm64-v8a/libchdman.so, built from the official MAME source revision
ecf0add29f06ba131994dca5b88c3a0edf6c2ad8. The C++ runtime is linked statically so CHDMan can be launched directly from Mimir's native-library directory. Mimir detects a
missing executable and stops before changing files.
CHDMan is distributed under GPL-2.0-or-later. The included license is available in the app assets
at licenses/MAME-GPL-2.0.txt. Before publishing a release, publish the complete corresponding
MAME source for revision ecf0add29f06ba131994dca5b88c3a0edf6c2ad8 (including the build instructions used for this binary) or a
valid GPLv2 source offer.
Mimir bundles the following Android ARM64 command-line backends in
android/app/src/main/jniLibs/arm64-v8a/:
- DolphinTool:
.isoto.rvz, using RVZ with 128 KiB blocks and Zstandard level 5. Expected binary:libdolphintool.so(GPL-2.0-or-later). - Azahar: decrypted
.3ds/.ccito.zcci, usinglibazahar.sobuilt from Azahar2126.0-alpha1revisione11f3da49346a45c400001ea424de298649618c8(GPL-2.0-or-later). The reproducible standalone-target patch and build instructions are indocs/azahar-compression-cli.patchanddocs/azahar-compression-build.md.
Mimir can decompress Nintendo Switch .nsz packages to .nsp. The converter uses the MIT-licensed
NSZ 5.0.0 Python package through the embedded Chaquopy Python runtime, with Android ARM64 builds of
zstandard and pycryptodome. Select a folder containing .nsz files directly or in a switch /
nintendo switch subfolder, scan it, and choose the packages to convert. Source .nsz files are
kept after a successful conversion. NSZ requires a user-provided prod.keys file; use the
Import prod.keys action on the NSZ to NSP page. Mimir copies the selected file into app-private
storage so it remains available after restarts and does not depend on the original document
location.
The converter runs entirely on-device. Mimir does not bundle or download Nintendo keys or game content. Only use it with keys and content you are legally entitled to use.
Mimir includes a built-in searchable PS Vita shortcut database.
Current behaviour:
- search by game title or app ID
- select an output directory on-device
- create shortcuts directly from search results
- choose either
.psvitaor.dptshortcut files - generate
.dptfiles with a[vita_game_id]section followed by the game ID - detect existing shortcuts in the currently selected format
- allow mistaken additions to be removed immediately from the same screen
The ES-DE Systems tool downloads the latest Android custom-system definitions from
GlazedBelmont/es-de-android-custom-systems, scans the selected ROM root for ES-DE system folders, lets users relocate each detected system with a folder picker, and installs the resulting es_systems.xml and es_find_rules.xml under the selected ES-DE folder's custom_systems directory. Default entries retain %ROMPATH%/<system-folder>; relocated entries use absolute Android storage paths. Restart ES-DE after installation so it reloads the definitions.
On desktop targets, the ScummVM Launchers tool scans the direct child folders of a selected
ScummVM Games directory. It locates a local ScummVM executable in common installation locations,
or lets you choose the app file, then runs --path=<game-folder> --detect for each folder. The
preview creates <game-name>.scummvm beside each game with the detected game ID as its contents;
existing launcher files are skipped safely. Detection is currently desktop-only because Android
cannot execute a desktop ScummVM binary.
- local-first
- no cloud sync
- no account system
- safe preview before apply
- deterministic file operations
- frontend compatibility first
- Flutter and Dart
- Riverpod
- Material 3
- Platform adapters for Android, Windows, macOS, and Linux
- Python 3.13 and Chaquopy (NSZ converter)
The repository root is now the Flutter application. It targets Android, Windows, macOS, and Linux. Shared ROM scanning and planning logic is pure Dart in packages/mimir_core/; platform-specific filesystem access and converter execution live behind adapters.
Web and iOS are intentionally out of scope because Mimir requires direct local filesystem access and bundled converter executables.
Building the Android target requires a python3.13 executable on PATH so Chaquopy can resolve and package the NSZ dependencies. On Homebrew systems, install it with brew install python@3.13.
- Flutter 3.47 or newer
- Dart 3.13 or newer
- Android SDK / Java 17 for Android builds
- Xcode for macOS builds
- Visual Studio with the Desktop C++ workload for Windows builds
- GTK development libraries and CMake for Linux builds
From the repository root:
flutter pub get
flutter analyze
flutter testflutter build apk --debug --target-platform android-arm64flutter build windows --debug
flutter build macos --debug
flutter build linux --debugDesktop converter bundles are expected under resources/bin/ for the target platform. See resources/README.md and tool/release_check.dart before producing a release.
Mimir is now a Flutter application focused on ROM organisation workflows.
Current scope:
- multi-disc normalisation
- frontend preset output generation
- ROM zip conversion
- PS Vita shortcut database and on-device shortcut creation
- Flutter UI with native platform adapters for safe local operations
Planned later work may include:
- more frontend-specific rule validation
- broader file format support
- richer Vita shortcut filtering and metadata options
- UI polish and workflow refinement
- GitHub release workflow
- screenshots and user documentation
Mimir is an open source project, and suggestions are welcome. If there are tools or workflows you think would be useful for retro handheld owners, open an issue or suggest them through the project page.
GitHub: https://github.com/ItsRetroPup/Mimir
MIT. See LICENSE.
