Name: romdj, Emulation Romset Builder
Project Page and Sources: https://github.com/john32b/romdj
Language: HAXE compiled to Node.js
Version: 0.3.2 Platform: Windows Terminal
📣 What is it
romdj is a CLI tool to organize/verify emulation roms using No-Intro database (.dat) files.
No-Intro database files provide a list of known good rom dumbs also they follow a consistent naming pattern for rom files. You can get no-intro dat files from https://datomatic.no-intro.org/
What it can do:
- Scan a folder for rom and BUILD properly named roms in an output folder.
- Build roms inside archives (.zip .7z), or raw files (e.g. game.rom)
- Can read/process roms from within archives (zip,7z)
Scan a folder to find out which roms you are missing for a no-intro full-set (
- Runs on NodeJS, built with HAXE (https://haxe.org).
- It uses
stdiopipes for all archive operations so no temp files are created anywhere.
- Can process each input file in parallel, so the more threads the faster (set with parameter -p).
⭐Supports skipping the header portion on files (Works with the NES no-intro set)
- Supports reading archives with multiple roms inside them.
- Scans all files in an input dir (except common extensions, like images and executables), and checks file checksum against the database, so it can identify rom files no matter their name or extension.
❗Currently does not support processing .dat files with entries with more than one file. (e.g. PSP )
Visual Example: Rom files will be identified, and then created with proper names to a format of your choice (zip,7z or raw)
You need to have NodeJS and npm installed on your system
Get here : https://nodejs.org/
From a terminal run this command
npm install -g romdj
, this will install romdj globally and you can run it from anywhere
romdj -help to display basic help
The first parameter romdj expects is an OPERATION ID,
The second parameter is the path to a valid no intro .DAT file
romdj <ACTION> <DAT FILE>
Currently there are (2) operations romdj can perform :
You need to also specify an input dir where rom files are for the system the .dat file describes
, and you need to specify an output dir, where the new rom files will be created
Set input dir with
-i, Set output dir with
romdj build c:\dats\nintendo.dat -i c:\games\nintendo_random -o c:\games\nintendo_fixed
This operation just needs an input folder
-i to be set. The program will scan the input against the .dat file and report information.
romdj scan c:\dats\nintendo.dat -i c:\games\nintendo_random
You can customize the process by declaring some extra parameters:
-c ARCHIVER : LEVEL
Build the roms inside an archive, Supported formats : zip, 7zip
0-9(0 is low compression, faster, 9 is best compression slower)
-c ZIP:9=> Compress roms to a ZIP with maximum compression
-c 7Z:0=> Compress roms to a 7zip with lowest compression
without -c option=> Builds roms to their native extension (e.g.
On build operation, will delete the source files after they have been created to target dir.
👉If source file is archive with multiple files. It will only be deleted if all of its included files were built
Create Report File
After the process completes, this will create a
.txtreport file with more detailed information on the operations. (List of files copied, duplicates, read errors, skipped, etc )
👉The report file is auto-named based on date. On
buildit will be created on the target folder On
scanit will be created on the source folder.
NUM: Number of maximum parallel tasks. From 1 and up. (If not set default = 2)
⚠️Don't set this higher than the number of your physical cores.
Filter: Prioritize Countries (Region Keep)
X,Y,Z: Country Codes to prioritize/keep on the filenames. Comma Separated Values.
Country codes not declared will be removed from the filename only if a country you set is present. You can use
=as a parameter to use the defaults
👇More examples on how this works further below
⭐Filter: Remove Countries (Region Delete)
X,Y,Z: Country Codes to remove from the filenames. Comma Separated Values.
You can use
=as a parameter to use the defaults
Remove Language Codes
Removes language codes from the filenames.
"World Cup USA 94 (Europe, Brazil) (En,Fr,De,Es,It,Nl,Sv)"
"World Cup USA 94 (Europe, Brazil)"
Nbytes from the beginning of the files when checking for checksums.
👇Check below for more info
No Deep Scan
Do not scan subfolders in the folder. It can be useful sometimes.
🐤 Prioritize Country Codes
Some no-intro rom names include multiple countries, like "Action Fighter (USA, Europe, Brazil) (Rev 1)"
You can use the
-regkeep parameter to keep desired codes while removing unwanted country codes from the name.
-regkeep europe : "Game (Europe,USA,Australia)" == "Game (Europe)"
If a prioritized country doesn't exist in the name, then nothing is changed
-regkeep europe : "Game (Korea)" == "Game (Korea)"
You can use multiple country codes (comma separated)
-regkeep europe,usa to keep all of the declared countries
-regkeep europe,brazil ➡ "Game (Europe,Usa,Brazil,Australia) ➡ "Game (Europe,Brazil)"
You can use
= to use the default country codes
❕You can also use
-regdelto force remove country codes from filenames
🐤 Skipping Header bytes
To properly check against some no-intro sets, the header part of the rom needs to be skipped. You can pass the
-header X parameter to tell romdj to skip the first X bytes when checking for checksums.
In my knowledge, the NES no-intro set is without headers. The NES rom header is 16 bytes so you need to pass
-header 16when working with NES roms.
This is a first release, and even though I tested for bugs and possible errors, some might have slipped, if you encounter anything not working right, please let me know !
Also feel free to give feedback and make suggestions on how this program could be improved.
- Support for multiple files per Entry
Thanks for checking this out, John.