SkillAgentSearch skills...

Igir

๐Ÿ•น A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.

Install / Use

/learn @emmercm/Igir

README

<div align="center"> <img src="static/logo-dark.svg" height="200px" width="auto" alt="igir logo"> </div> <br> <p align="center"><b>Pronounced "eager," Igir is a zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.</b></p> <p align="center"> <a href="https://www.npmjs.com/package/igir"><img alt="npm: version" src="https://img.shields.io/npm/v/igir?color=%23cc3534&label=version&logo=npm&logoColor=white"></a> <a href="https://www.npmjs.com/package/igir"><img alt="npm: downloads" src="https://img.shields.io/npm/dt/igir?color=%23cc3534&logo=npm&logoColor=white"></a> <a href="https://github.com/emmercm/igir/releases"><img alt="GitHub: downloads" src="https://img.shields.io/github/downloads/emmercm/igir/total?color=%236e5494&logo=github&logoColor=white"></a> <a href="https://github.com/emmercm/igir"><img alt="GitHub: stars" src="https://img.shields.io/github/stars/emmercm/igir?style=flat&logo=github&logoColor=white&color=%236e5494"></a> <a href="https://github.com/emmercm/igir/discussions"><img alt="GitHub: discussions" src="https://img.shields.io/github/discussions/emmercm/igir?logo=github&logoColor=white"></a> </p> <p align="center"> <a href="https://snyk.io/test/npm/igir"><img alt="Snyk: vulnerabilities" src="https://snyk.io/test/npm/igir/badge.svg"></a> <a href="https://codecov.io/gh/emmercm/igir"><img alt="codecov: coverage" src="https://img.shields.io/codecov/c/github/emmercm/igir?logo=codecov&logoColor=white"></a> <a href="https://qlty.sh/gh/emmercm/projects/igir"><img src="https://qlty.sh/gh/emmercm/projects/igir/maintainability.svg" alt="Maintainability" /></a> <a href="https://github.com/emmercm/igir/blob/main/LICENSE"><img alt="license" src="https://img.shields.io/github/license/emmercm/igir?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNS4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjQgRm9udGljb25zLCBJbmMuLS0%2BPHBhdGggZD0iTTM4NCAzMkg1MTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzk4LjRjLTUuMiAyNS44LTIyLjkgNDcuMS00Ni40IDU3LjNWNDQ4SDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjAgMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI4OFYxNTMuM2MtMjMuNS0xMC4zLTQxLjItMzEuNi00Ni40LTU3LjNIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI1NmMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6bTU1LjYgMjg4SDU4NC40TDUxMiAxOTUuOCA0MzkuNiAzMjB6TTUxMiA0MTZjLTYyLjkgMC0xMTUuMi0zNC0xMjYtNzguOWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMUM2MjcuMiAzODIgNTc0LjkgNDE2IDUxMiA0MTZ6TTEyNi44IDE5NS44TDU0LjQgMzIwSDE5OS4zTDEyNi44IDE5NS44ek0uOSAzMzcuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMUMyNDIgMzgyIDE4OS43IDQxNiAxMjYuOCA0MTZTMTEuNyAzODIgLjkgMzM3LjF6IiBzdHlsZT0iZmlsbDojZmZmZmZmIiAvPjwvc3ZnPg%3D%3D&color=blue"></a> </p> <p align="center"><i>See the <a href="https://igir.io/">project website</a> for complete documentation, installation & usage instructions, and examples!</i></p> <br>

What does Igir do?

A video of an example use case:

<a href="https://asciinema.org/a/xE6kMquCPFYtpvhsiQfS0eS7c" target="_blank"><img src="https://asciinema.org/a/xE6kMquCPFYtpvhsiQfS0eS7c.svg" alt="asciicast" style="width:100%" /></a>

With Igir you can manage a ROM collection of any size:

  • ๐Ÿ” Scan for DATs, ROMs, and ROM patchesโ€”including those in archives (see scanning & archive docs)
  • ๐Ÿ“‚ Organize ROM files by console (see DAT docs)
  • ๐Ÿช„ Name ROM files consistently, including the right extension (see DAT docs)
  • โœ‚๏ธ Filter out duplicate ROMs, or ROMs in languages you don't understand (see filtering docs)
  • ๐Ÿ—œ๏ธ Extract or archive ROMs in mass (see archive docs)
  • ๐Ÿ”ข Create playlists for multi-disc games in mass (see playlist docs)
  • ๐Ÿฉน Patch ROMs automatically in mass (see scanning & patching docs)
  • ๐ŸŽฉ Parse ROMs with headers and optionally remove them (see header docs)
  • โ†”๏ธ Build & re-build (un-merge, split, or merge) MAME ROM sets (see arcade docs)
  • ๐Ÿ”ฎ Report on what ROMs are present or missing for each console and create fixdats for missing ROMs (see reporting & DAT docs)

How do I run Igir?

Either download the latest version for your OS from the releases page, or if you have Node.js installed you can use npx to always run the latest version from the command line:

npx igir@latest [commands..] [options]

Here is the full help message which shows all available options and a number of common use case examples:

<!-- WARN: everything below is automatically updated! Update src/modules/argumentsParser.ts instead! -->
$ igir --help

   @@@@@@   @@@@@@     @@@@@@    @@@@@@@@
 @@      @@  @@      @@      @@         @@
 @@      @@  @@      @@      @@         @@   ROM collection manager
   @@@@@@   @@         @@@@@@   @@@@@@@@@    https://igir.io/
          @@@     @@@@        @@@
     @@   @@        @@   @@   @@       @@    v4.3.2
     @@   @@        @@   @@   @@       @@
     @@   @@@@@@@@@@@@   @@   @@       @@

Usage: igir [commands..] [options]

Commands (can specify multiple):
  igir copy      Copy ROM files from the input to output directory
  igir move      Move ROM files from the input to output directory
  igir link      Create links in the output directory to ROM files in the input directory
  igir extract   Extract ROM files in archives when copying or moving
  igir zip       Create zip archives of ROMs when copying or moving
  igir playlist  Create playlist files for multi-disc games
  igir test      Test ROMs for accuracy after writing them to the output directory
  igir dir2dat   Generate a DAT from all input files
  igir fixdat    Generate a fixdat of any missing games for every DAT processed (requires
                 --dat)
  igir clean     Recycle unknown files in the output directory
  igir report    Generate a CSV report on the known & unknown ROM files found in the input
                 directories (requires --dat)

ROM input options:
  -i, --input                    Path(s) to ROM files or archives (supports globbing)  [array]
  -I, --input-exclude            Path(s) to ROM files or archives to exclude from processing
                                 (supports globbing)                                   [array]
      --input-checksum-quick     Only read checksums from archive headers, don't decompress to
                                 calculate                                           [boolean]
      --input-checksum-min       The minimum checksum level to calculate and use for matching
                                [choices: "CRC32", "MD5", "SHA1", "SHA256"] [default: "CRC32"]
      --input-checksum-max       The maximum checksum level to calculate and use for matching
                                                   [choices: "CRC32", "MD5", "SHA1", "SHA256"]
      --input-checksum-archives  Calculate checksums of archive files themselves, allowing
                                 them to match files in DATs
                                        [choices: "never", "auto", "always"] [default: "auto"]

DAT input options:
  -d, --dat                            Path(s) to DAT files or archives (supports globbing)
                                                                                       [array]
      --dat-exclude                    Path(s) to DAT files or archives to exclude from
                                       processing (supports globbing)                  [array]
      --dat-name-regex                 Regular expression of DAT names to process     [string]
      --dat-name-regex-exclude         Regular expression of DAT names to exclude from
                                       processing                                     [string]
      --dat-description-regex          Regular expression of DAT descriptions to process
                                                                                      [string]
      --dat-description-regex-exclude  Regular expression of DAT descriptions to exclude from
                                       processing                                     [string]
      --dat-combine                    Combine every game from every found & filtered DAT into
                                       one DAT                                       [boolean]
      --dat-ignore-parent-clone        Ignore any parent/clone information found in DATs
                                                                                     [boolean]

Patch input options:
  -p, --patch          Path(s) to ROM patch files or archives (supports globbing) (supported:
                       .aps, .bps, .dps, .ebp, .ips, .ips32, .ppf, .rup, .ups, .vcdiff,
                       .xdelta)                                                        [array]
  -P, --patch-exclude  Path(s) to ROM patch files or archives to exclude from processing
                       (supports globbing)                                             [array]
      --patch-only     Only write patched ROMs to the output directory               [boolean]

ROM output path opt
View on GitHub
GitHub Stars784
CategoryDevelopment
Updated43m ago
Forks40

Languages

TypeScript

Security Score

100/100

Audited on Mar 31, 2026

No findings