Custom Install 3DS

From GameBrew
Revision as of 07:27, 24 July 2021 by HydeWing (talk | contribs)

Template:Infobox 3DS homebrew

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 in target/debug/save3ds_fuse, copy it to bin/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-insall 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 homemenu.
  • You can use the Windows standalone with GUI for simpler process, or setup your own enviroment (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 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 notes 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
  • Run custominstall.py with boot9.bin, movable.sed, path to the SD root, and CIA files to install:
    • Use -h to 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*.cia
    • py -3 custominstall.py -b boot9.bin -m movable.sed --sd E:\ file.cia file2.cia
    • python3 custominstall.py -b boot9.bin -m movable.sed --sd /Volumes/GM9SD file.cia file2.cia
    • python3 custominstall.py -b boot9.bin -m movable.sed --sd /media/GM9SD file.cia file2.cia
  • Wait for install. Once it's finished, start up the homebrew launcher and run custom-install-finalize to finish the process.

Additional notes

movable.sed can be provided with -m or --movable.

boot9 can be placed in one of the following places:

  • -b or --boot9 argument (if set)
  • BOOT9_PATH environment 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:

  • -s or --seeddb argument (if set)
  • SEEDDB_PATH environment 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.

Credits

save3ds by wwylele is used to interact with the Title Database (details in bin/README).

Thanks to nek0bit for redesigning custominstall.py to work as a module, and for implementing an earlier GUI.

Thanks to LyfeOnEdge from the brewtools Discord for designing the second version of the GUI. Special thanks to CrafterPika and archbox for testing.

Thanks to BpyH64 for researching how to generate the cmacs.

Advertising: