A cross-platform desktop application for managing Game Boy ROMs on CrankBoy via USB/serial connection.
- Drag-and-drop file transfer - Simply drag ROM files onto the window
- Folder support - Drop a folder to automatically find all ROMs inside
- ZIP Archive support - Automatically extracts and processes ROMs from within .zip files
- Automatic compression - .gb and .gbc files are compressed to GBZ for faster transfer
- Automatic cover art download - Matching cover art is automatically downloaded and transferred with each ROM
- Batch transfers - Queue an unlimited number of files to be processed and transferred one by one
- Progress tracking - Visual progress bars for each file and overall transfer
- Auto-restart - Optionally restart CrankBoy after transfer to refresh library
- Cross-platform - Works on Windows, macOS, and Linux
You can use uv to automatically install the dependencies on first launch (recommended), or install the dependencies manually with pip as follows:
- Python 3.10 or higher
- PyQt6
- pyserial
pip install -r requirements.txtpython main.pyor with uv:
uv run --python '>=3.10' --with-requirements requirements.txt main.py- Connect your CrankBoy via USB
- Select the serial port from the dropdown (click Refresh if needed)
- Add files by:
- Dragging and dropping files/folders onto the window
- Clicking "Add Files..." button
- Click "Start Transfer"
- Wait for completion - Files will automatically decompress on the device
- Verbose - Show detailed transfer log
- Auto-restart - Restart CrankBoy after all transfers complete
.gb- Game Boy ROMs (automatically compressed).gbc- Game Boy Color ROMs (automatically compressed).gbz- Pre-compressed GBZ files (transferred as-is).zip- ZIP Archives (ROMs inside are automatically unpacked)
When you transfer a ROM, the app will automatically:
- Calculate the CRC32 of the ROM file
- Look up the game in the CrankBoy database (based on CRC32)
- Download the matching cover art from the CrankBoy covers repository
- Transfer both the ROM and cover art to your device
Notes:
- Cover art is downloaded automatically - no configuration needed
- Covers are saved with the same basename as the ROM file (e.g.,
MyGame.gb→MyGame.pdi) - If a cover is not found in the database or download fails, the ROM will still be transferred
- Covers are downloaded fresh each time (not cached locally)
build.batchmod +x build.sh
./build.sh# requirements-flatpak.txt is generated from requirements.txt (dropping
# NO-FLATPAK lines); build_flatpak.sh does this for you.
grep -v 'NO-FLATPAK' requirements.txt > requirements-flatpak.txt
flatpak run --command=flatpak-pip-generator org.flatpak.Builder --requirements-file=requirements-flatpak.txt
flatpak run --command=flathub-build org.flatpak.Builder --install app.crankboy.crankboy-manager.json
flatpak run --command=flatpak-builder-lint org.flatpak.Builder manifest app.crankboy.crankboy-manager.json
flatpak run --command=flatpak-builder-lint org.flatpak.Builder repo repo
flatpak run app.crankboy.crankboy-manager# Standard build
python build.py
# Clean previous builds
python build.py --clean
# Install dependencies only
python build.py --installAfter building, you'll find:
- Windows:
dist/CrankBoyManager.exe+dist/CrankBoyManager-1.0.0-windows.zip - macOS:
dist/CrankBoy Manager.app+dist/CrankBoyManager-1.0.0-macos.zip - Linux:
dist/crankboy-manager+dist/CrankBoyManager-1.0.0-linux.tar.gz
This GUI uses the ft (File Transfer) protocol:
- Fixed 177-byte chunks
- CRC16 verification per chunk
- Automatic GBZ compression/decompression
- Detailed error reporting
See the main CrankBoy repository for protocol documentation.
This project was developed with the assistance of LLM coding tools, including Kimi and DeepSeek. These tools helped in the prototyping of the PyQt6 interface and the implementation of the ft protocol.
