Skip to content

TheJustRun/PiraChest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PiraChest: An all-in-one desktop free media downloader (WIP)

banner A Work in Progress desktop GUI application to download specific ROMs from the Minerva Archive : https://minerva-archive.org , and PC Game Repacks using libTorrent (With more sources and features coming!), with the hope of being a complete app for sailing the seven seas, downloading music, books, courses, and many more.

Features

DISCLAIMER: This app is in ALPHA. I'm just releasing it as is right now to get feedback and contributions to help polish and improve the app over time, even the current features that are added may have bugs, issues, freezes, or just incomplete and not finished

DISCLAIMER²: this app has been AI-assisted using a local LLM ( Qwen 3.6 35B ) to help with the backend, if without it, I wouldn't have gotten the torrent per-file downloading system working, and I would have shot myself dead

  • ROM Browsing : Browse a local SQLite-indexed ROM catalog covering 70+ console platforms. Filter by console, source (No-Intro, Redump, TOSEC, etc.), and per-console variants.
  • Smart Torrent Engine: Uses libtorrent 2.0.13 to download only the requested ROM file from multi-gigabyte torrent dumps, via a persistent queue with pause/resume/retry/cancel controls.
  • PC Repacks : Browse and download PC Game Repacks ( Currently FitGirl for now )
  • Download Manager: Real-time download queue with drag-and-drop reordering, live speed/progress/seed stats, per-torrent settings (speed limits, peer caps, ratio/time limits, force recheck).
  • Console-First Classification: Automatic console detection from the Minerva archive naming scheme with per-console variant support (Retail, Encrypted/Decrypted, BIOS, Demo, Prototype, Homebrew, etc.).
  • Dark & Light Theme: Full Light/Dark/Auto theming via QFluentWidgets, with a shared palette so every widget stays in sync.
  • Persistent Queue: Download queue survives app restarts. Partially downloaded torrents resume from disk rather than starting from scratch.
  • Per-Torrent Concurrency Controls: Global and per-item download/upload speed limits, max peer caps, seed ratio and time limits.

How It Works

  1. Index Sync — Downloads the Caprico1/Minerva-archive-ids markdown index from GitHub, parses console/provider/torrent/file-ID metadata, classifies each entry into the correct console family, deduplicates by provider, and bulk-inserts into a local SQLite database.
  2. Browse & Search — Queries the SQLite index by name, console, source, and variant with offset-based pagination (30 items per page).
  3. Download — Fetches the .torrent file from the Minerva CDN (cdn.minerva-archive.org), adds it to a libtorrent session, selects only the requested file from within the torrent, and writes the result into downloads/{Console}/{Game Title}/.

Roadmap

  • ROM downloading
  • Torrent support
  • Multi-console support
  • Download manager
  • PC Games (Repacks..)
  • DAT Support
  • Updates & DLC (You can find some, but it isn't very reliable)
  • Media downloads (Music, Books, Courses..)
  • Localization
  • Linux (never™)
  • more ig

Photos

UI Console Selection Screen
Download Manager Settings
Repacks grid view Upcoming Games
Game Details Selective Downloading

Supported Sources

  • Minerva Archive
  • FitGirl Repacks
  • More... like nopaystation.. etc

Current Issues and Quirks

  • Not all Consoles have their variant system working yet
  • Download manager is still quirky with a lot of files, currently it is recommended to download about 3 files at once. Needs more testing ( it's improving )
  • The accent color option is a placeholder
  • Light mode sucks
  • And more idk? I need more testing, that's why I'm releasing it in alpha, so I get more feedback on the thing rather than just blindly making it.

Requirements

  • Python 3.10+

Installation

1. Install Python dependencies

pip install -r requirements.txt

2. Build the ROM index (required once, then periodically)

You can do that in the GUI or with commands

python src/core/indexer.py --sync

This downloads the latest index markdown files, parses them, and populates src/data/minerva_index.db. It is also recommended to resync every release, not only that will insure you have the latest files, but also if there is a change in anything list related in the app, you will be updated as well

Usage

Launch the GUI

python src/main.py

or just open the exe in releases

CLI index management

# Sync the index (clone + parse + upsert)
python src/core/indexer.py --sync

# Search for a ROM from the command line
python src/core/indexer.py --search "Mario"

# Show index statistics
python src/core/indexer.py --stats

Build a standalone executable (optional)

# Windows
build.bat

The output will be in dist/PiraChest/.

Configuration

Settings are stored in .config/pirachest_settings.json relative to the project root. You can edit them manually or use the built-in Settings dialog.

Setting Default Description
download_dir downloads/ Root folder for all ROM downloads
seed_time 0 Minutes to seed after download completes
speed_limit 0 Download speed cap in KB/s (0 = unlimited)
upload_speed_limit 500 Upload speed cap in KB/s (0 = unlimited)
auto_download false Start download immediately when a ROM is selected
delete_torrent_after true Remove cached .torrent file after download
theme_mode Dark Dark, Light, or Auto (follows system theme)

Project Structure

├── src/
│   ├── main.py                  # Application entry point
│   ├── core/
│   │   ├── config.py            # Centralised configuration (paths, libtorrent defaults, settings)
│   │   ├── console_mapper.py    # Console classification from archive torrent names
│   │   ├── console_variants.py  # Per-console variant metadata (Retail, BIOS, etc.)
│   │   ├── database.py          # SQLite schema, connection, queries, and pagination
│   │   ├── download_manager.py  # libtorrent 2.0.13 queue engine with persistence
│   │   ├── indexer.py           # GitHub markdown index fetch, parse, and DB sync
│   │   ├── sync.py              # Background sync worker (QThread)
│   │   └── theme.py             # Shared colour palette for Light/Dark mode
│   └── gui/
│       ├── main_window.py       # FluentWindow with Home, Download Manager, Settings pages
│       ├── settings_dialog.py   # Settings modal (download dir, seeding, speed limits)
│       ├── splash.py            # Splash screen icon lookup
│       ├── download_manager_panel.py  # Download queue page with live stats
│       ├── rom_details_panel.py     # Right-side ROM metadata card (local DB only)
│       └── rom_table_model.py       # Paginated QAbstractTableModel for ROM table      
├── build.bat  
├── PiraChest.spec  # PyInstaller spec file
├── requirements.txt
└── README.md

Also, special thanks to spicysaltysparty for creating the logo

Disclaimer

For educational and archival purposes only.

This tool is designed to interact with the Minerva Archive, a community repository of ROMs distributed for educational and archival purposes. Users are responsible for ensuring that their use of downloaded ROMs complies with all applicable laws and regulations in their jurisdiction.

The Minerva Archive and its contributors do not endorse or encourage copyright infringement. Please only download ROMs for software you own a legal copy of, or for software that is in the public domain.

About

An all-in-one downloader and manager for games, ROMs, BIOS, media, and more. Browse multiple sources ( Currently only Minerva ), queue downloads, manage your library, verify files, and download everything from a single modern interface. Currently a work in progress with many features still WIP.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages