Igir Collection Manager
Igir is a zero-setup ROM collection manager that sorts, filters, extracts, archives, patches, and reports on collections of any size. While not a companion app per se, it's useful for cleaning up a library before importing into RomM, so scans have a better-named, better-organised starting point.
This is not an official app. Igir is a separate community project, but we document integration here because it's a common workflow and produces a compatible layout directly.
When you'd use Igir
- You have a messy collection with inconsistent naming, mixed formats, dumps from multiple sources.
- You want to match against No-Intro/Redump DAT files to verify authenticity and standardise names.
- You want to filter only retail releases, or strip out hacks, or keep only one region, etc.
- You want to move/rename files to the expected platform folder layout.
Directory setup
Igir works on a copy of your ROMs (never in place) to let you iterate on its config without risking the originals.
.
├── dats/ # DAT files (No-Intro, Redump)
├── roms/ # Your original ROM collection (untouched)
├── roms-unverified/ # Working copy Igir will process
└── igir-romm-cleanup.sh # the script below
- Make a working copy
- Download DAT files
DAT files are hash-referenced catalogues Igir matches against.
- Cartridge systems: No-Intro daily, full DAT compilation
- Optical systems (PS1, Saturn, etc.): Redump, per-platform DAT files
Drop the DAT files into dats/. You can use a subset if you only care about specific platforms.
The cleanup script
Save as igir-romm-cleanup.sh:
#!/usr/bin/env bash
set -ou pipefail
cd "$(dirname "${0}")"
INPUT_DIR=roms-unverified
OUTPUT_DIR=roms-verified
# https://igir.io/
# DAT files: https://datomatic.no-intro.org/index.php?page=download&op=daily
time npx -y igir@latest \
move \
extract \
report \
test \
-d dats/ \
-i "${INPUT_DIR}/" \
-o "${OUTPUT_DIR}/{romm}/" \
--input-checksum-quick false \
--input-checksum-min CRC32 \
--input-checksum-max SHA256 \
--only-retail
Make it executable:
Run
Manually migrate leftovers
Some ROMs won't be identified (homebrew, hacks with --only-retail, truly unknown dumps). Move them manually preserving the folder shape:
This keeps the original subfolder structure but normalises extensions.
Multi-disc reorganisation
Igir outputs multi-disc games as separate folders, which confuses multi-file game detection. Collapse them:
cd roms-verified/psx
ls -d *Disc* | while read file; do
game=$(echo "${file}" | sed -E 's/ ?\(Disc.*//')
mkdir -p "${game}"
mv "${file}" "${game}"
m3u="${game}/${game}.m3u"
touch "${m3u}"
echo "${file}" >> "${m3u}"
done
Before:
Final Fantasy VII (Disc 1) (USA)/
Final Fantasy VII (Disc 2) (USA)/
Final Fantasy VII (Disc 3) (USA)/
After:
Final Fantasy VII (USA)/
Final Fantasy VII (Disc 1) (USA)/
Final Fantasy VII (Disc 2) (USA)/
Final Fantasy VII (Disc 3) (USA)/
Final Fantasy VII (USA).m3u
The .m3u is a playlist RomM respects for launching multi-disc games.
Importing
Once roms-verified/ looks right, mount it as the library:
Read-only is safer: if you need Igir to re-clean, work in a parallel folder and re-promote it to roms-verified/. Once you run a scan from RomM, and everything should match cleanly against providers!