C:\STUDIOLO\USES\ROMS

ROMs for RomM

Years of ROM collecting leave the same game on three disks under three names, zipped or not, next to cue sheets that no longer match their bins. RomM wants one folder per platform with exact slugs and full No-Intro or Redump names. Studiolo identifies every dump by its content and builds that folder without touching the originals.

Originals

C:\EMU\SNES\

smetroid.zip

D:\PSX\ridge\

rr.cue

Track01.bin

Track02.bin

Read-only, untouched

RomM

romm/

library/roms/snes/

Super Metroid (Japan, USA).zip

library/roms/psx/Ridge Racer (Europe)/

Ridge Racer (Europe).cue

Ridge Racer (Europe) (Track 01).bin

Ridge Racer (Europe) (Track 02).bin

The layout RomM expects

ROMS.TXT

Identified by content, not by name

Every file is hashed once, with CRC32, MD5 and SHA1 kept alongside for No-Intro and Redump DAT matching. Inside a ZIP, member checksums are read from the central directory without decompressing. A file called smetroid.zip still becomes Super Metroid (Japan, USA), with the region and revision tags RomM parses.

Games, not files

A cue sheet and its bins form one item and land together in a folder named after the game, with part names taken from the DAT so the cue still finds its tracks. An item appears in the library only when every part is present; a game missing a track stays out instead of showing up broken.

Hardlinks, never moves

Files on the same filesystem as the library are hardlinked. Files on other disks are copied once into a cache, verified against their hash, and hardlinked from there. The originals are never moved, renamed or written.

RomM keeps its history

RomM keys its data by path, so each game keeps the path it was given until you migrate it on purpose. Rule changes show a plan of adds, renames and removals before anything happens, and after an apply Studiolo asks RomM to rescan only the platforms that changed.

Handhelds go through RomM

RomM's own clients already sync games and saves to handhelds. Studiolo feeds RomM and leaves that job to them.

STUDIOLO.YAML

targets:
  - id: romm
    layout: romm
    destination: /data/views/romm
    method: hardlink
    profile: posix
    filter: "domain == 'rom' && identified && complete"
    notify:
      kind: romm
      url: http://romm:8080
      token_env: ROMM_TOKEN

From the M1 spec: one YAML file for the whole deployment.

Status

M1: In progress.

All use cases MiSTer >