custom-install is a Python 3.6+ tool that will install CIA files to a Nintendo 3DS SD card entirely on a PC. This completely bypasses the slow wireless and I/O speeds of the hardware.
It was initially created late June 2019 as an experimental script to automate the process of a manual title install for Nintendo 3DS.
Installation
Requirements
Setup for Linux
- Linux users must build wwylele/save3ds and place save3ds_fuse in
bin/linux. - Install rust using rustup, then compile with:
cargo build. The compiled binary is located intarget/debug/save3ds_fuse, copy it tobin/linux. - (Optional) GUI setup.
Building standalone
- Using a 32-bit version of Python is recommended to build a version to be distributed. Please refer to the readme from repo.
User guide
Usage summary
- Use custom-install on your laptop/pc and install titles onto the micro SD (with boot9+movable).
- After it's finished, re-insert to 3DS and run custom-install-finalize at the end to insert the ticket and seed for it to show on the Home Menu.
- You can use the Windows standalone with GUI for simpler process, or setup your own enviroment (for Windows 32/Linux/macOS).
Windows standalone
- Extract custom-install and copy over custom-install-finalize.3dsx to the 3ds folder on your SD card.
- Run ci-gui to bring up the custom-install GUI.
- Select your SD card root, boot9, seeddb, and movable.sed files (in some cases these will be automatically selected for you).
- Add the CIA files and click
Start install. - Once it's finished, start up the Homebrew Launcher and run custom-install-finalize to finish the process.
With installed Python
- Download the repo (or
git clone) and extract custom-install. - Download custom-install-finalize.3dsx and copy over to the 3ds folder of your SD card.
- Put boot9.bin, seeddb.bin and movable.sed to the root of the custom-install folder (see also Additional notes).
- Paste the .cia files you want to install to the root of the custom-install folder.
- Install the packages:
- For Windows, double-click
windows-install-dependencies.py - Alternate manual method
py -3 -m pip install --user -r requirements-win32.txt - For macOS/Linux,
python3 -m pip install --user -r requirements.txt
- For Windows, double-click
- Run
custominstall.pywith boot9.bin, movable.sed, path to the SD root, and CIA files to install:- Use
-hto view arguments. Insert the following code (with some examples below). py -3 custom-install.py -b boot9.bin -m movable.sed --sd *yoursdcarddiskletter:\* *yourgamename*.cia *yourgamename*.ciapy -3 custominstall.py -b boot9.bin -m movable.sed --sd E:\ file.cia file2.ciapython3 custominstall.py -b boot9.bin -m movable.sed --sd /Volumes/GM9SD file.cia file2.ciapython3 custominstall.py -b boot9.bin -m movable.sed --sd /media/GM9SD file.cia file2.cia
- Use
- Wait for install. Once it's finished, start up the Homebrew Launcher and run custom-install-finalize to finish the process.
Note: For Windows users, enabling Add Python 3.X to PATH is not required. Python is installed with the py launcher by default.
Additional notes
movable.sed can be provided with -m or --movable.
boot9 can be placed in one of the following places:
-bor--boot9argument (if set)BOOT9_PATHenvironment variable (if set)%APPDATA%\3ds\boot9.bin(Windows-specific)~/Library/Application Support/3ds/boot9.bin(macOS-specific)~/.3ds/boot9.bin~/3ds/boot9.bin
SeedDB is checked in order of:
-sor--seeddbargument (if set)SEEDDB_PATHenvironment variable (if set)%APPDATA%\3ds\seeddb.bin(Windows-specific)~/Library/Application Support/3ds/seeddb.bin(macOS-specific)~/.3ds/seeddb.bin~/3ds/seeddb.bin
If you get an error during installation, you'll have to manually delete the partially installed title from the SD card (Nintendo 3DS -> {id0} -> {id1} -> title -> {first half of Title ID} -> {second half of Title ID}), or delete other things to make enough space, then try again.