25 个版本 (破坏性)

0.19.0 2024年7月3日
0.18.0 2024年3月12日
0.17.0 2023年11月2日
0.16.0 2023年6月13日
0.3.0 2020年7月11日

命令行实用程序 中排名第 68

Download history 4/week @ 2024-05-21 1/week @ 2024-06-04 127/week @ 2024-07-02 3/week @ 2024-07-09 1/week @ 2024-07-23 137/week @ 2024-07-30

每月下载量 138

GPL-3.0+

1MB
34K SLoC

CI codecov crates.io

logo

oxyROMon 0.19.0

Rusty ROM 组织者

oxyROMon 是一个基于 Rust 的跨平台 CLI ROM 组织工具。像大多数 ROM 管理器一样,它会将 ROM 文件与已知良好数据库进行核对。它设计时考虑了归档,因此只支持原始和无损 ROM 格式。然而,它可以导出为各种流行的有损格式,而保留无损 ROM 文件不受影响。排序可以在区域模式下进行,在所谓的 1G1R 模式下进行,或者两者都可以。支持使用 Logiqx DAT 文件进行控制台、计算机和街机(WIP)系统。前两者需要 No-Intro 或 Redump DAT 文件,而后者使用 MAME 或 FBNeo DAT 文件。

screenshot

快速开始

要创建和管理一个新的系统,您需要一个 Logiqx DAT 文件。基于卡带的控制台和旧计算机可以从 Dat-o-Matic 下载。基于 CD 的可以从 Redump 下载。或者可以使用 download-dats 子命令为您下载并导入 Redump DAT,因为它们提供了直接链接。MAME DAT 可以在 Progetto-Snaps 上找到。FBNeo DAT 比较难找,libretro 有一些。

然后使用 import-dats 子命令手动导入 DAT。一旦创建了一个系统,您就可以开始使用 import-roms 子命令导入 ROM。检查通过的导入 ROM 将放置在其相应系统的主文件夹中。然后您可以使用 sort-roms 子命令根据您的配置进行排序。请先在 REGIONS_ALLREGIONS_ONE 列表中添加至少一个区域。请参阅以下所有配置选项。

您还可以使用convert-roms子命令在各种格式之间转换ROM,使用check-roms子命令稍后检查它们,或者使用purge-roms子命令清除它们以清空垃圾箱文件夹或检测并忘记手动删除的ROM。

安装

您可以从发布页面获取适用于Lnux、Mac和Windows的预编译二进制文件。

Docker Hub上也有可用的Docker镜像。

如果您使用的是Arch Linux,官方仓库中有一个软件包

您还可以使用cargo install oxyromon从crates.io安装。

最后,如果您喜欢冒险,您也可以从源代码构建,下面有说明。

编译

CLI没有特定的要求,您可以直接

cargo build --release

对于Web UI,您还需要yarn

cargo build --release --features server

构建默认使用rustls,但您也可以选择openssl

cargo build --no-default-features --features use-native-tls

功能

功能 描述 默认
服务器 构建服务器子命令
启用-asm 启用MD5和SHA1散列的ASM变体 x
使用原生TLS 使用系统OpenSSL库
使用-rustls 使用rustls x

配置

配置是通过命令行完成的,设置存储在SQLite数据库中。该数据库本身存储在由dirs crate定义的${data_dir}/oxyromon中,可以通过OXYROMON_DATA_DIR环境变量覆盖。

可用设置

  • ROM_DIRECTORY:您的ROM目录的完整路径,默认为dirs crate中定义的${home_dir}/Emulation
  • TMP_DIRECTORY:文件提取的临时目录的完整路径,默认为temp_dir
  • PREFER_PARENTS:在1G1R选举过程中优先考虑父级,默认为true
  • PREFER_REGIONS:在1G1R选举过程中优先考虑更多或更少的ROM地区,默认为none,有效选项:nonebroadnarrow
  • PREFER_VERSIONS:在1G1R选举过程中优先考虑较新或较旧的ROM版本,默认为new,有效选项:nonenewold
  • PREFER_FLAGS:1G1R选举过程中优先考虑的ROM标志列表(例如:Rumble Version
  • DISCARD_FLAGS:要丢弃的ROM标志列表(例如:Virtual Console
  • DISCARD_RELEASES:要丢弃的ROM发布列表(例如:Beta
  • LANGUAGES:您想要保留的语言列表,仅适用于指定了它们的ROM(例如:En,Ja
  • REGIONS_ALL:需要保留所有ROM文件的区域列表(例如:US,EU,JP
  • REGIONS_ONE:需要保留单个ROM文件的区域列表(例如:US,EU
  • REGIONS_ALL_SUBFOLDERS:按子文件夹排序ROM,默认为none,有效选项:nonealpha
  • REGIONS_ONE_SUBFOLDERS:按子文件夹排序1G1R ROM,默认为none,有效选项:nonealpha
  • REGIONS_ONE_STRICTtrue将选择所有ROM,无论其是否可用,false仅选择可用的ROM,默认为false
  • GROUP_SUBSYSTEMS:将所有系统变体分组到单个目录中,默认为true
  • CHD_CD_HUNK_SIZE:CD的CHD块大小(字节),默认为自动,有效范围:16-1048576
  • CHD_CD_COMPRESSION_ALGORITHMS:CD的CHD压缩算法,最多可以指定4个,默认为自动,有效选项:nonecdflcdlzcdzlcdzs
  • CHD_DVD_HUNK_SIZE:DVD的CHD块大小(字节),默认为自动,有效范围:16-1048576
  • CHD_DVD_COMPRESSION_ALGORITHMS:DVD的CHD压缩算法,最多可以指定4个,默认为自动,有效选项:noneflachufflzmazlibzstd
  • CHD_PARENTS:启用CHD父级功能,需要已生成播放列表,默认为false
  • RVZ_BLOCK_SIZE:RVZ块大小(KiB),默认为128,有效范围:32-2048
  • RVZ_COMPRESSION_ALGORITHM:RVZ压缩算法,默认为zstd,有效选项:nonezstdbziplzmalzma2
  • RVZ_COMPRESSION_LEVEL:RVZ压缩级别,默认为5,对于zstd的有效范围:1-22,对于其他算法的有效范围:1-9
  • RVZ_SCRUB:启用RVZ清理,仅适用于export-roms,默认为false
  • SEVENZIP_COMPRESSION_LEVEL:7Z压缩级别,默认为9,有效范围:1-9
  • SEVENZIP_SOLID_COMPRESSION:切换7Z固态压缩,默认为false
  • ZIP_COMPRESSION_LEVEL:ZIP压缩级别,默认为9,有效范围:1-9

注意:TMP_DIRECTORY应有至少8GB的空闲空间以提取那些大DVD。

示例配置

oxyromon config -l

DISCARD_FLAGS = Aftermarket,Debug
DISCARD_RELEASES = Beta,Proto,Sample,Demo,Hack,Bootleg,Homebrew
GROUP_SUBSYSTEMS = true
HASH_ALGORITHM = crc
PREFER_FLAGS =
PREFER_PARENTS = true
PREFER_REGIONS = none
PREFER_VERSIONS = new
REGIONS_ALL = US,EU,JP
REGIONS_ALL_SUBFOLDERS = none
REGIONS_ONE = US,EU
REGIONS_ONE_STRICT = false
REGIONS_ONE_SUBFOLDERS = none
ROM_DIRECTORY = /home/alucryd/Emulation
RVZ_COMPRESSION_ALGORITHM = zstd
RVZ_COMPRESSION_LEVEL = 5
SEVENZIP_COMPRESSION_LEVEL = 9
SEVENZIP_SOLID_COMPRESSION = false
TMP_DIRECTORY = /tmp
ZIP_COMPRESSION_LEVEL = 9

目录布局

${ROM_DIRECTORY}
    ...${SYSTEM_NAME} # Base directory for each system, allowed regions will be stored here
        ⮡ 1G1R # Sub directory for 1G1R games
        ⮡ Trash # Sub directory for trashed games
    ...

${SYSTEM_NAME}GROUP_SUBSYSTEMS设置影响

外部程序

这些应该放在您的${PATH}中以获得额外功能。

待办事项

  • 向Web UI添加操作
  • 找到一种自动下载No-Intro DAT文件的方法
  • 支持街机系统的合并集
  • 为街机系统编写一些单元测试
  • 为NSZ编写一些单元测试
  • 为IRD和PS3编写一些单元测试
  • 如果可能且被请求,支持使用IRD文件重建PS3 ISO
  • 添加一个retroarch格式的元数据抓取器

oxyromon

Usage: oxyromon [COMMAND]

Commands:
    config              Query and modify the oxyromon settings
    info                Print system information
    import-dats         Parse and import Logiqx DAT files into oxyromon
    download-dats       Download No-Intro and Redump DAT files and import them into oxyromon
    import-roms         Validate and import ROM files or directories into oxyromon
    sort-roms           Sort ROM files according to region and version preferences
    convert-roms        Convert ROM files between common formats
    export-roms         Export ROM files to common formats
    rebuild-roms        Rebuild arcade ROM sets according to the selected strategy
    check-roms          Check ROM files integrity
    purge-roms          Purge trashed, missing and orphan ROM files
    purge-systems       Purge systems
    generate-playlists  Generate M3U playlists for multi-disc games
    import-irds         Parse and import PlayStation 3 IRD files into oxyromon
    benchmark           Benchmark oxyromon
    server              Launch the backend server
    help                Print this message or the help of the given subcommand(s)

Options:
    -h, --help     Print help information
    -V, --version  Print version information

oxyromon-config

查询和修改oxyromon设置

可以从命令行查询、修改和删除设置。

Usage: oxyromon config [OPTIONS]

Options:
    -l, --list                  Print the whole configuration
    -g, --get <KEY>             Print a single setting
    -s, --set <KEY> <VALUE>     Set a single setting
    -u, --unset <KEY>           Unset a single setting
    -a, --add <KEY> <VALUE>     Add an entry to a list
    -r, --remove <KEY> <VALUE>  Remove an entry from a list
    -h, --help                  Print help information

oxyromon-info

打印系统信息

打印程序版本、已安装依赖及其版本(如果可能),以及一些基本系统统计信息。

Usage: oxyromon info

Options:
-h, --help  Print help

oxyromon-import-dats

解析并导入Logiqx DAT文件到oxyromon

支持标准Logiqx XML格式,包括父克隆DAT文件。可以直接导入ZIP文件,如No-Intro Love Pack,无需先提取。

支持的控制台DAT提供者

  • No-Intro
  • Redump

支持的街机DAT提供者

  • MAME
  • FBNeo

注意:一些系统需要在DAT文件旁边放置标题定义。如果没有提供,oxyromon将使用其自己的回退标题定义。

Usage: oxyromon import-dats [OPTIONS] <DATS>...

Arguments:
    <DATS>...  Set the DAT files to import

Options:
    -i, --info         Show the DAT information and exit
    -s, --skip-header  Skip parsing the header even if the system has one
    -f, --force        Force import of outdated DAT files
    -a, --arcade       Enable arcade mode
    -h, --help         Print help information

oxyromon-download-dats

下载No-Intro和Redump DAT文件并将它们导入oxyromon

Redump提供直接下载,但没有摘要,而No-Intro提供摘要但没有直接下载。目前,No-intro的对应版本只会告诉你是否有更新可用,但Redump版本能够下载全新的DAT并更新您已导入的DAT。

支持的DAT提供者

  • Redump(下载和更新)

  • No-Intro(仅更新检查)

    Usage: oxyromon download-dats [OPTIONS]
    
    Options:
        -n, --nointro  Download No-Intro DAT files
        -r, --redump   Download Redump DAT files
        -u, --update   Check for system updates
        -a, --all      Import all systems
        -f, --force    Force import of outdated DAT files
        -h, --help     Print help information
    

oxyromon-import-irds

解析并导入PlayStation 3 IRD文件到oxyromon

IRD文件允许验证提取的PS3 ISO,即JB文件夹。从oxyromon的角度来看,即使没有PS3_CONTENTPS3_EXTRAPS3_UPDATE目录,游戏也将被认为是完整的。

注意:目前仅支持IRD版本9。由于是最新版本,应涵盖大多数在线资源。

Usage: oxyromon import-irds [OPTIONS] <IRDS>...

Arguments:
    <IRDS>...  Set the IRD files to import

Options:
    -i, --info   Show the IRD information and exit
    -f, --force  Force import of already imported IRD files
    -h, --help   Print help information

oxyromon-import-roms

验证并导入ROM文件或目录到oxyromon

与数据库匹配的ROM文件将被放置在其所属系统的基本目录中。在大多数情况下,系统会自动检测,但在导入JB文件夹时,您仍然需要选择所需的系统。您还可以通过名称强制指定特定系统以缩小搜索范围。名称不需要是全名,且不区分大小写。使用头部定义的系统需要将-s标志传递给匹配包含头部的ROM文件。这目前影响任天堂娱乐系统(无头部)、红白机光盘系统、雅达利7800和雅达利 Lynx。大多数文件保持原样移动,但包含多个游戏的归档将被提取。

支持的家用游戏机ROM格式

  • 所有No-Intro和Redump支持的格式
  • 7Z和ZIP归档
  • CHD(压缩数据块)
  • CIA(可安装3DS标题)
  • CSO(压缩ISO)
  • NSZ(压缩NSP)
  • RVZ(现代Dolphin格式)
  • ZSO(LZ4压缩ISO)
  • JB文件夹(提取的PS3 ISO)

支持的街机ROM格式

  • ZIP归档
  • 未压缩的文件夹

注意:导入包含多个分区的CHD需要来自Redump的匹配CUE文件。

Usage: oxyromon import-roms [OPTIONS] <ROMS>...

Arguments:
    <ROMS>...  Set the ROM files or directories to import

Options:
    -s, --system <SYSTEM>  Select systems by name
    -t, --trash            Trash invalid ROM files
    -f, --force            Force import of existing ROM files
    -a, --hash <HASH>      Set the hash algorithm [possible values: crc, md5, sha1]
    -u, --unattended       Skip ROM files that require human intervention
    -h, --help             Print help

oxyromon-sort-roms

根据地区和版本偏好排序ROM文件

排序可以使用几种策略。您还可以选择丢弃某些类型的游戏。您可以打印出可能缺少的游戏列表,您这个收藏家。

支持的家用游戏机模式

  • 地区模式
  • 1G1R模式
  • 混合模式

支持的街机模式

  • 无(目前?)

在地区模式下,属于至少一个指定地区的游戏将被放置在系统的基本目录中。地区通过REGIONS_ALL设置设置,可以通过CLI -g标志覆盖。

在1G1R模式下,父克隆游戏组的游戏只放置在1G1R子目录中,按优先级顺序。地区通过REGIONS_ONE设置,可以通过CLI -r标志覆盖。

在混合模式下,应用1G1R规则,加上所选地区剩余的所有游戏将放置在基本目录中。

1G1R和混合模式有一个额外的旋钮,您可以通过REGIONS_ONE_STRICT来旋转。将其设置为false将选择您拥有的第一个符合地区偏好的ROM。将其设置为true将在不考虑您是否实际拥有ROM的情况下选择符合地区偏好的ROM。

在每种模式下,丢弃的游戏都放置在Trash子目录中。

即使没有父克隆DAT文件,1G1R和混合模式仍然很有用,它允许您区分您会实际玩的游戏,同时保留原始日文游戏以进行翻译修补和其他修改。

地区格式使用2个字母的代码,根据TOSEC的命名约定。由ZZ表示的Unknown地区,在混合模式的REGIONS_ALL中用作通用地区。

Usage: oxyromon sort-roms [OPTIONS]

Options:
    -r, --regions <REGIONS_ALL>...
            Set the regions to keep (unordered)
        --subfolders <REGIONS_ALL_SUBFOLDERS>
            Set the subfolders scheme for games [possible values: NONE, ALPHA]
    -o, --1g1r <REGIONS_ONE>...
            Set the 1G1R regions to keep (ordered)
        --1g1r-subfolders <REGIONS_ONE_SUBFOLDERS>
            Set the subfolders scheme for 1G1R games [possible values: NONE, ALPHA]
    -w, --wanted
            Show wanted games
    -a, --all
            Sort all systems
    -y, --yes
            Automatically say yes to prompts
    -h, --help
            Print help information

oxyromon-rebuild-roms

根据所选策略重建街机ROM集

可以使用流行的合并策略重建ROM集。

支持的合并策略

  • 分割(每个父和克隆集只包含其自己的ROM文件)

  • 非合并(每个父和克隆集包含其ROM文件及其父的文件)

  • 完全未合并(每个父类和克隆集都包含其ROM文件、其父类的文件和所需的BIOS文件)

  • 合并(父类和克隆一起存储,与所需的BIOS文件一起)

    Usage: oxyromon rebuild-roms [OPTIONS]
    
    Options:
        -m, --merging <MERGING>  Set the arcade merging strategy [possible values: SPLIT, NON_MERGED, FULL_NON_MERGED]
        -a, --all                Rebuild all arcade systems
        -y, --yes                Automatically say yes to prompts
        -h, --help               Print help information
    

oxyromon-convert-roms

在常见格式之间转换ROM文件

ROM文件可以在可逆格式和原始格式之间相互转换。调用此命令将转换某些或所有系统的所有符合条件的rom。您可以可选地按名称过滤游戏,匹配字符串不区分大小写,可以使用SQL通配符。也可以以相同的方式选择系统,以避免提示它们。系统和游戏标志可以多次传递。

支持的ROM格式

  • 所有No-Intro和Redump支持的格式 <-> 7Z和ZIP存档
  • CUE/BIN <-> CHD(压缩数据块)
  • ISO <-> CHD(压缩数据块)
  • ISO <-> CSO(压缩ISO)
  • ISO <-> ZSO(LZ4压缩ISO)
  • ISO <-> RVZ(现代Dolphin格式)

注意:如有适用,CHD将提取到其原始分割的CUE/BIN。

警告:Dreamcast的CHD至少需要chdman 0.264

Usage: oxyromon convert-roms [OPTIONS]

Options:
    -f, --format <FORMAT>  Set the destination format [possible values: ORIGINAL, 7Z, ZIP, CHD, CSO, RVZ, ZSO]
    -g, --game <GAME>      Select games by name
    -s, --system <SYSTEM>  Select systems by name
    -a, --all              Convert all systems/games
    -r, --recompress       Force conversion even if already in the selected format
    -d, --diff             Print size differences
    -c, --check            Check ROM files after conversion
    -p, --parents          Prompt for CHD parents
    -h, --help             Print help information

oxyromon-export-roms

将ROM文件导出为常见格式

类似于convert-roms,但这个不会更改您的原始ROM文件,因此可以使用有损格式。它旨在导出所有或部分ROM文件,用于与外部系统(如原始控制台通过EverDrive或ODE)一起使用。

注意:ISO是专门为PlayStation 2的OPL设计的ORIGINAL变体,它允许使用bchunk将CUE/BIN CD游戏转换为ISO。

Usage: oxyromon export-roms [OPTIONS] --directory <DIRECTORY>

Options:
    -f, --format <FORMAT>        Set the destination format [possible values: ORIGINAL, 7Z, ZIP, ISO, CHD, CSO, NSZ, RVZ, WBFS, ZSO]
    -g, --game <Game>            Select games by name
    -s, --system <SYSTEM>        Select systems by name
    -d, --directory <DIRECTORY>  Set the output directory
    -o, --1g1r                   Export 1G1R games only
    -h, --help                   Print help

oxyromon-check-roms

检查ROM文件完整性

这将扫描每个指定系统中的每个ROM文件,并将损坏的文件移动到各自的垃圾桶目录。还可以重新计算文件大小,这对于v0.8.1或以下版本导入的ROM文件很有用。

Usage: oxyromon check-roms [OPTIONS]

Options:
    -a, --all   Check all systems
    -g, --game <GAME>  Select games by name
    -s, --size  Recalculate ROM file sizes
    -h, --help  Print help information

oxyromon-purge-roms

清除垃圾桶、丢失的和孤立的ROM文件

这将可选地从每个丢失的或目前未与ROM关联的ROM文件中清除数据库,以及物理删除垃圾桶子目录中的所有文件。

Usage: oxyromon purge-roms [OPTIONS]

Options:
    -m, --missing  Delete missing ROM files from the database
    -o, --orphan   Delete ROM files without an associated ROM from the database
    -t, --trash    Physically delete ROM files from the trash directories
    -f, --foreign  Physically delete ROM files unknown to the database
    -y, --yes      Automatically say yes to prompts
    -h, --help     Print help

oxyromon-purge-systems

清除系统

这将从数据库中擦除系统和其所有ROM。所有ROM都将放置在垃圾桶文件夹中,之后是否物理删除取决于您。

Usage: oxyromon purge-systems

Options:
    -h, --help  Print help information

oxyromon-generate-playlists

为多盘游戏生成M3U播放列表

这将生成可以在RetroArch内部切换光盘的播放列表。仅限于Redump。播放列表信息还用于确定父类,如果您启用了CHD父类功能。

注意:sort-roms会相应地移动它们,但如果您使用convert-roms,您目前需要再次运行此命令。

Usage: oxyromon generate-playlists [OPTIONS]

Options:
    -a, --all   Generate playlists for all systems
    -h, --help  Print help information

oxyromon-import-irds

解析并导入PlayStation 3 IRD文件到oxyromon

PlayStation 3游戏最常见的备份方式是作为JB文件夹,IRD文件用于描述和验证这些文件夹的内容,这与DAT文件的作用类似。

注意:您仍然需要从Redump或其他地方事先导入PS3 DAT文件。如果您不使用Redump,请确保其名称中包含PlayStation 3

Usage: oxyromon import-irds [OPTIONS] <IRDS>...

Arguments:
    <IRDS>...  Set the IRD files to import

Options:
    -i, --info   Show the IRD information and exit
    -f, --force  Force import of already imported IRD files
    -h, --help   Print help information

oxyromon-server

启动后端服务器

服务器在/graphql处公开GraphQL API端点。相关的Svelte.js Web UI也在/处公开。

Usage: oxyromon server [OPTIONS]

Options:
    -a, --address <ADDRESS>  Specify the server address [default: 127.0.0.1]
    -p, --port <PORT>        Specify the server port [default: 8000]
    -h, --help               Print help information

oxyromon-benchmark

基准测试oxyromon

给出了一些关于ROM和TMP目录各种读写性能的想法。它还将排名校验和算法,通常CRC应该是最快的,其次是SHA1,然后是MD5。您的里程数可能会根据您的体系结构而有所不同。

Usage: oxyromon benchmark [OPTIONS]

Options:
    -c, --chunk-size <CHUNK_SIZE>  Set the chunk size in KB for read and writes (Default: 256) [default: 256]
    -h, --help                     Print help information

依赖项

~52–70MB
~1M SLoC