MCPcopy Index your code
hub / github.com/Scaletta/PicoCover

github.com/Scaletta/PicoCover @v0.1.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.1 ↗ · + Follow
30 symbols 52 edges 5 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PicoCover

Banner

Automatically download and convert Nintendo DS cover art for Pico Launcher

License: CC BY-NC 4.0 Rust Platform

GitHub release (latest by date) GitHub downloads GitHub release date

Cross-platform tool to fetch GameTDB cover art, convert to 8bpp BMP format, and organize for Pico Launcher by LNH-team


✨ Features

  • 🖥️ GUI Mode – Intuitive interface with automatic drive detection and tabbed view
  • Collapsible game lists (skipped/failed) for quick review
  • Overwrite toggle
  • ⌨️ CLI Mode – Full scriptable control for automation
  • 🔄 Auto-update – Built-in update checker with one-click updates
  • ♻️ Auto-refresh – Detects new drives without restarting
  • 🌍 Multi-region support – Tries EN, US, JA, EU until a cover is found
  • 🚀 Fast processing – Parallel downloads with CPU-core adaptive threading
  • 📦 Native packages – DMG for macOS, DEB for Linux, EXE for Windows

📋 Requirements

  • Rust 1.81+ for building from source
  • Network access to GameTDB art server
  • Write permissions to target drive

🚀 Installation

Option 1: Download Pre-built Package (Recommended)

Download the latest release for your platform from the Releases page:

  • Windows: pico_cover-windows-x64.exe – Standalone executable
  • macOS: pico_cover-macos-x64.dmg (Intel) or pico_cover-macos-arm64.dmg (Apple Silicon) – Disk image
  • Linux: pico_cover-linux-x64.deb – Debian package

Download latest

Installation instructions: - Windows: Download and run the .exe file - macOS: 1. Download .dmg and open it 2. Drag PicoCover to Applications folder 3. First launch: Right-click PicoCover.app → Open → Click Open in the dialog 4. If you see "damaged" error: Go to System SettingsPrivacy & Security → Scroll down and click Open Anyway - Linux: sudo dpkg -i pico_cover-linux-x64.deb or run the standalone binary

Option 2: Build from Source

git clone https://github.com/Scaletta/PicoCover.git
cd PicoCover
cargo build --release

The binary will be in target/release/pico_cover (or pico_cover.exe on Windows).

Build native packages:

# Install cargo-bundle
cargo install cargo-bundle

# macOS .app bundle
cargo bundle --release --target x86_64-apple-darwin     # Intel
cargo bundle --release --target aarch64-apple-darwin    # Apple Silicon

# Linux .deb package
cargo bundle --release --target x86_64-unknown-linux-gnu

🎯 Usage

GUI Mode (Recommended)

Simply run the executable:

./pico_cover  # or double-click pico_cover.exe on Windows

What the GUI does: 1. 🔍 Auto-detects all drives with _pico folder 2. 🎉 Update notifications when new versions are available 3. 🔄 Refresh button to detect newly connected devices 4. 📊 Real-time statistics showing processed/saved/skipped/errors 5. � Tabbed view – Switch between: - 📄 Output Log – Color-coded logs with detailed per-file status (green for saved, yellow for skipped, red for errors) - 📋 Game Lists – Collapsible sections showing skipped and failed games for quick review 6. ⚡ One-click processing – just select drive and click Start 7. ✅ Overwrite option – Checkbox to control whether to overwrite existing covers

Auto-Update: - The app automatically checks for updates on startup - When a new version is available, a notification banner appears - Click "Update Now" to download and install (app restarts automatically)

Covers are saved to: <selected-drive>/_pico/covers/nds/<GAMECODE>.bmp

CLI Mode

For scripting, automation, or advanced control:

pico_cover --cli --root /path/to/roms \
  --regions EN,US,JA,EU \
  --overwrite \
  --timeout-secs 15

CLI Options:

Option Description Default
--root Base folder or drive containing NDS ROMs .
--regions Region codes to try (comma-separated) EN,US,JA,EU
--url-templates Custom URL patterns (semicolon-separated) GameTDB default
--overwrite Overwrite existing BMPs false (skip)
--timeout-secs HTTP request timeout in seconds 15
--threads Number of parallel download threads CPU core count

Example:

# Process D: drive, overwrite existing covers
pico_cover --cli --root D:\ --overwrite

# Custom regions priority
pico_cover --cli --root /media/sdcard --regions JP,US,EN

# Use 4 threads for slower connections
pico_cover --cli --root /media/sdcard --threads 4

🔧 How It Works

graph LR
    A[Scan .nds files] --> B[Read game code]
    B --> C[Fetch from GameTDB]
    C --> D[Resize to 106×96]
    D --> E[Place on 128×96 canvas]
    E --> F[Quantize to 256 colors]
    F --> G[Save as 8bpp BMP]
  1. 🔍 Scan – Recursively finds all .nds files
  2. 📄 Extract – Reads 4-byte game code from NDS header
  3. 🌐 Download – Tries GameTDB URLs with each region until successful
  4. 🖼️ Convert:
  5. Resize to 106×96 pixels (Lanczos3 filter)
  6. Center on 128×96 black canvas (22px right padding for Pico Launcher UI)
  7. Quantize to 256 colors using NeuQuant algorithm
  8. Export as 8bpp paletted BMP
  9. 💾 Save – Store to _pico/covers/nds/<GAMECODE>.bmp

📝 Notes

  • ✅ Output directory is auto-created if missing
  • ✅ Errors are logged per-file; processing continues
  • ⚠️ GUI mode always overwrites; CLI respects --overwrite flag
  • ⚠️ Files without valid game codes are skipped
  • ⚠️ Only works on Pico Launcher filesystem

🙌 Credits & Shoutout

Huge thanks to LNH-team for creating Pico Launcher! 🎉

This tool is built for Pico Launcher by the LNH-Team. Without their amazing work on bringing a modern, fast & good-looking NDS Launcher this cover downloader wouldn't exist.

Key projects from LNH-team: - Pico Launcher – The launcher this tool supports - Pico Loader – The firmware loader

Special thanks to GameTDB 🎨

A massive shoutout to GameTDB for providing and maintaining a comprehensive database of high-quality game cover artwork! Their free website makes this tool possible by giving us access to thousands of Nintendo DS covers.

🤝 Contributing

Contributions welcome! Feel free to: - Report bugs via Issues - Submit feature requests - Open pull requests

📜 License

This project is licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).

You are free to: - ✅ Share and adapt the software - ✅ Use for personal/non-commercial projects

Under the following terms: - 📛 Attribution – Credit the original author - 🚫 NonCommercial – No commercial use permitted

See LICENSE for full details.


Made with ❤️ for the Retro-Gaming community

Report Bug · Request Feature · Releases

Core symbols most depended-on inside this repo

detect_drives
called by 3
src/gui.rs
process_root
called by 2
src/processing.rs
run_cli
called by 1
src/main.rs
run_gui
called by 1
src/main.rs
load_icon
called by 1
src/main.rs
start_processing
called by 1
src/gui.rs
poll_messages
called by 1
src/gui.rs
update
called by 1
src/gui.rs

Shape

Function 18
Class 6
Method 5
Enum 1

Languages

Rust100%

Modules by API surface

src/gui.rs11 symbols
src/processing.rs9 symbols
src/main.rs6 symbols
src/updater.rs3 symbols
build.rs1 symbols

For agents

$ claude mcp add PicoCover \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page