danisiber / rom-cli
git clone https://github.com/danisiber/rom-cli.git
Terminal CLI to search and download ROMs, ISOs and Switch games. Interactive Textual UI, cross-platform catalog, resumable downloads.
+98
stars, 24h · #385
+98
stars, 7 days · #2,206
+98
stars, 30 days · #7,298
98
★ total · +98% this week
22
forks · 1 open issues
Star history starts 2026-10-23; the chart appears after the second daily snapshot.
LanguagePython
License—
Created2026-10-22 (1d ago)
Last push1d ago
Watchers0
OwnerUser
GitHub topics
Links
- GitHub: github.com/danisiber/rom-cli
- Homepage: https://github.com/danisiber/rom-cli
- Releases · Issues · Hacker News mentions
README excerpt
# rom Python CLI to find and download ROMs, ISOs and Switch games from the terminal. It has an interactive UI (Textual) like `epub-search`, name search, downloads with a progress bar, and a folder organised by platform. > English-language version of the original Portuguese project by > sostenesapollo. Thanks to the > original author for the base work — this fork translates the interface and > docs to English and tracks the upstream fixes. ## Requirements - Python 3.8+ - macOS or Linux - `textual` (`install.sh` installs it into its own venv) ## Installation [code] This creates a venv in `~/.venvs/rom`, installs `textual`, and publishes `rom` (and `rom-remote`) into `~/bin`. Use `PREFIX=/usr/local ./install.sh` for a different destination. ## Usage [code] With no query, `rom` opens the **platform picker**; once you pick one, it lists that platform's whole catalog (pages of 300, `n`/`b` to move) — so you can browse without typing anything. Typing in the field and pressing `Enter` goes back to searching. In the UI: `↑↓` navigate, `space` mark, `d` download (the marked ones or the current one), `p` switch platform, `n`/`b` page, `ctrl+b` options palette, `ctrl+a` select all, `ctrl+n` clear, `q` quit. | Flag | Description | |------|-------------| | `-p, --platform` | platform (switch, snes, gba, ps2, nds, wii…) | | `-y, --yes` | download the best match without the menu | | `--list` | list only | | `--print-url` | resolve and print the direct link only | | `--refresh` | rebuild the catalog index | | `--index` | download/print the index and exit | | `-n, --number` | how many results to show (default 15) | | `-o, --out` | destination folder (default `~/Downloads/roms` or `$ROM_DIR`) | | `-l, --platforms` | list platforms | Platforms: `switch`, `switchports`, `ps5`, `ps4`, `ps3`, `psv`, `ps2`, `ps1`, `psp`, `nds`, `gba`, `snes`, `pc`, `nes`, `gb`, `gbc`, `n64`, `3ds`, `gc`, `wii`, `genesis`, `mastersystem`, `dreamcast`, `saturn`, `arcade`. Files go to `~/Downloads/roms/ /`. ## How it works - **Switch**: the dlarchive index (`files_api.php`). The nsp-roms page embeds links with a token that expires; here `rom` resolves through the index and grabs a direct, token-free URL. It also works for NDS, GBA, SNES and PC. - **Switch ports**: the `switchports` platform merges two sources — the dlarchive catalog and an Archive.org scan (`switch port` / `homebrew port` / `nsp`+`port`), with a 7-day cache. Around 35 ports (GTA, Halo, Simpsons Hit & Run, SM64 NX, Twilight Princess, Cave Story, Pizza Tower, Max Payne, Hello Neighbor, Diablo...). - **PS3 and PS Vita**: NoPayStation — downloads `.pkg` straight from Sony's CDN (`zeus.dl.playstation.net`), no token needed. - **PS2, PS1 and PSP**: RomsGames (search + a POST that returns the file). - **PS4 and PS5**: dlpsgame (search via WP REST). The direct download works when the post links a supported host (mediafire, Google Drive, 1fichier); when it doesn't, `rom` shows the page so you can grab the link yourself.