igir
(pronounced "eager") is a platform-independent ROM collection manager to help sort collections and make one game, one rom (1G1R) sets.
A video of an example use case:
With a large ROM collection it can be difficult to:
- Organize ROM files by console
- Consistently name ROM files
- Archive ROMs individually in mass
- Filter out duplicate ROMs
- Filter out ROMs for languages you don't understand
- Know what ROMs are missing for each console
igir
helps solve all of these problems!
igir
needs two sets of files:
Many different input archive types are supported for both ROMs and DATs: .001, .7z, .bz2, .gz, .rar, .tar, .tgz, .xz, .z, .z01, .zip, .zipx, and more!
igir
then needs one or more commands:
copy
: copy ROMs from input directories to an output directorymove
: move ROMs from input directories to an output directoryzip
: create zip archives of output ROMstest
: test all written ROMs for accuracyclean
: recycle all unknown files in an output directoryreport
: generate a report on ROMs found and processed
With installed, run from the command line:
npx igir@latest [commands..] [options]
Here is the full igir --help
message which shows all available options and a number of common use case examples:
______ ______ ______ _______
| \ / \ | \| \
\$$$$$$| $$$$$$\ \$$$$$$| $$$$$$$\
| $$ | $$ __\$$ | $$ | $$__| $$
| $$ | $$| \ | $$ | $$ $$ ROM collection manager
| $$ | $$ \$$$$ | $$ | $$$$$$$\
_| $$_ | $$__| $$ _| $$_ | $$ | $$ v0.2.1
| $$ \ \$$ $$| $$ \| $$ | $$
\$$$$$$ \$$$$$$ \$$$$$$ \$$ \$$
Usage: igir [commands..] [options]
Commands:
igir copy Copy ROM files from the input to output directory
igir move Move ROM files from the input to output directory
igir zip Create .zip archives when copying or moving ROMs
igir test Test ROMs for accuracy after writing them to the output directory
igir clean Recycle unknown files in the output directory
igir report Generate a report on the known ROM files found in the input directories
Path options (inputs support globbing):
-d, --dat Path(s) to DAT files or archives [array] [required] [default: ["*.dat"]]
-i, --input Path(s) to ROM files or archives, these files will not be modified
[array] [required]
-I, --input-exclude Path(s) to ROM files to exclude [array]
-o, --output Path to the ROM output directory [string]
Input options:
-H, --header Glob pattern of files to force header processing for [string]
Output options:
--dir-mirror Use the input subdirectory structure for output subdirectories [boolean]
-D, --dir-dat-name Use the DAT name as the output subdirectory [boolean]
--dir-letter Append the first letter of the ROM name as an output subdirectory
[boolean]
-s, --single Output only a single game per parent (1G1R) (requires parent-clone DAT fi
les) [boolean]
-Z, --zip-exclude Glob pattern of files to exclude from zipping [string]
-O, --overwrite Overwrite any ROMs in the output directory [boolean]
Priority options (requires --single):
--prefer-good Prefer good ROM dumps over bad [boolean]
-l, --prefer-language List of comma-separated languages in priority order (supported:
DA, DE, EL, EN, ES, FI, FR, IT, JA, KO, NL, NO, PT, RU, SV, ZH)
[string]
-r, --prefer-region List of comma-separated regions in priority order (supported: AR
G, ASI, AUS, BRA, CAN, CHN, DAN, EUR, FRA, FYN, GER, GRE, HK, HO
L, ITA, JPN, KOR, MEX, NOR, NZ, POR, RUS, SPA, SWE, TAI, UK, UNK
, USA) [string]
--prefer-revision-newer Prefer newer ROM revisions over older [boolean]
--prefer-revision-older Prefer older ROM revisions over newer [boolean]
--prefer-retail Prefer retail releases (see --only-retail) [boolean]
--prefer-parent Prefer parent ROMs over clones (requires parent-clone DAT files)
[boolean]
Filtering options:
-L, --language-filter List of comma-separated languages to limit to (supported: DA, DE, EL,
EN, ES, FI, FR, IT, JA, KO, NL, NO, PT, RU, SV, ZH) [string]
-R, --region-filter List of comma-separated regions to limit to (supported: ARG, ASI, AUS,
BRA, CAN, CHN, DAN, EUR, FRA, FYN, GER, GRE, HK, HOL, ITA, JPN, KOR,
MEX, NOR, NZ, POR, RUS, SPA, SWE, TAI, UK, UNK, USA) [string]
--only-bios Filter to only BIOS files [boolean]
--no-bios Filter out BIOS files [boolean]
--no-unlicensed Filter out unlicensed ROMs [boolean]
--only-retail Filter to only retail releases, enabling all the following flags
[boolean]
--no-demo Filter out demo ROMs [boolean]
--no-beta Filter out beta ROMs [boolean]
--no-sample Filter out sample ROMs [boolean]
--no-prototype Filter out prototype ROMs [boolean]
--no-test-roms Filter out test ROMs [boolean]
--no-aftermarket Filter out aftermarket ROMs [boolean]
--no-homebrew Filter out homebrew ROMs [boolean]
--no-bad Filter out bad ROM dumps [boolean]
Help options:
-v, --verbose Enable verbose logging, can specify twice (-vv) [count]
-h, --help Show help [boolean]
Examples:
igir copy -i **/*.zip -o 1G1R/ -D -s -l EN -r U Produce a 1G1R set per console, preferring E
SA,EUR,JPN nglish from USA>EUR>JPN
igir copy report -i **/*.zip -i ROMs/ -o ROMs/ Merge new ROMs into an existing ROM collecti
on and generate a report
igir move zip -i ROMs/ -o ROMs/ Organize and zip an existing ROM collection
igir copy -i **/*.zip -o BIOS/ --only-bios Collate all BIOS files
igir copy -i ROMs/ -o /media/SDCard/ROMs/ -D -- Copy ROMs to a flash cart and test them
dir-letter -t
DATs are catalogs of every known ROM per console. A number of different release groups maintain these catalogs, the most popular are:
- No-Intro P/C XML (cartridge-based consoles)
- Note: you can download every console at once from the daily page, but you need to manually select "P/C XML" from the dropdown
- Redump (optical media-based consoles)
And some less popular release groups are:
- ADVANsCEne (GBA, DS, 3DS, PSP)
- TOSEC
These catalogs help igir
distinguish known ROM files in input directories from other files and helps generate reports on ROM collections.
igir
can currently process DAT files in the XML format only.
Emulators are generally legal, as long as they don't include copyrighted software such as a console BIOS. Downloading ROM files that you do not own is piracy and is illegal in many countries.
Dumping.Guide and Emulation General Wiki are some of the best resources for legally creating ROM files from games you own. Here is a condensed version that isn't guaranteed to be up-to-date:
Dumpable with special hardware | Open Source Cartridge Reader (Save the Hero Builders) |
INLretro Dumper | Retrode | Other hardware |
---|---|---|---|---|
Nintendo - GB, GBC, GBA | β | β | β (w/ adapter) | GB Operator |
Nintendo - NES/Famicom | β (V3 w/ adapter) | β | ||
Nintendo - Nintendo 64 | β including controller pak saves (V3 w/ addon for EEPROM saves) | β | β including controller park saves (w/ adapter) | |
Nintendo - SNES/SFC | β (V3 w/ addon for some) | β | β | |
Sega - Game Gear | β (w/ Retrode Master System adapter) | β (w/ Master System adapter) | ||
Sega - Genesis/MD | β | β | β | |
Sega - Master System | β (V3 w/ adapter) | β (w/ adapter) |
Dumpable without special hardware | Media Preservation Frontend (MPF) (w/ PC) | With a console |
---|---|---|
Microsoft - Xbox, 360, One | β | |
Nintendo - 3DS | GodMode9 (w/ 3DS) | |
Nintendo - DS, DSi | GodMode9 (w/ 3DS), GodMode9i (w/ DSi), wooddumper (w/ DS) | |
Nintendo - Famicom Disk | FDSStick | |
Nintendo - Gamecube | CleanRip (w/ Wii) | |
Nintendo - Switch | nxdumptool | |
Nintendo - Wii | CleanRip | |
Nintendo - Wii U | β | wudump |
Sega - Dreamcast | SD Rip | |
Sega - Saturn | β | |
Sony - PlayStation 1, 2 | β | |
Sony - PlayStation 3 | β | ManaGunZ, multiMAN |
Sony - PSP | PSP Filer | |
Sony - PlayStation Vita | psvgamesd |
There a few different popular ROM managers that have similar features:
Each manager has its own pros, but most share the same cons:
- Windows-only (sometimes with Wine support), making management on macOS and Linux difficult
- Limited CLI support, making batching and repeatable actions difficult
- UIs that don't clearly state what actions can, will, or are being performed
- Required proprietary database setup step
- Limited or nonexistent archive extraction support
- Limited or nonexistent ROM header support
- Limited or nonexistent parent/clone, region, language, version, and ROM type filtering
- Limited or nonexistent priorities when creating a 1G1R set
- Limited or nonexistent folder management options
- Limited or nonexistent report-only modes