Installs a title directly to an SD card for the Nintendo 3DS. Originally created late June 2019.
- Dump boot9.bin and movable.sed from a 3DS system.
- Download the latest releases.
- Extract and run ci-gui. Read
windows-quickstart.txt
.
Note for Windows users: Enabling "Add Python 3.X to PATH" is NOT required! Python is installed with the py
launcher by default.
- Dump boot9.bin and movable.sed from a 3DS system.
- Download the repo (zip link or
git clone
) - Install the packages:
- Windows: Double-click
windows-install-dependencies.py
- Alternate manual method:
py -3 -m pip install --user -r requirements-win32.txt
- Alternate manual method:
- 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 (see Usage section). - Download and use custom-install-finalize on the 3DS system to finish the install.
Linux users must build wwylele/save3ds and place save3ds_fuse
in bin/linux
. Install rust using rustup, then compile with: cargo build --release --no-default-features
. The compiled binary is located in target/release/save3ds_fuse
, copy it to bin/linux
.
movable.sed is required and can be provided with -m
or --movable
.
boot9 is needed:
-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
A SeedDB is needed for newer games (2015+) that use seeds.
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
custom-install-finalize installs a ticket, plus a seed if required. This is required for the title to appear and function.
This can be built as most 3DS homebrew projects with devkitARM.
Use -h
to view arguments.
Examples:
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
A GUI is provided to make the process easier.
Linux users may need to install a Tk package:
- Ubuntu/Debian:
sudo apt install python3-tk
- Manjaro/Arch:
sudo pacman -S tk
Install the requirements listed in "Summary", then run ci-gui.py
.
Using a 32-bit version of Python is recommended to build a version to be distributed.
A virtual environment is recommended to isolate the packages from system directories. The build script make-standalone.bat
assumes that the dependencies are in PATH.
Install the dependencies, plus cx-Freeze. In a virtual environment, the specific Python version doesn't need to be requested.
pip install cx-freeze -r requirements-win32.txt
Copy custom-install-finalize.3dsx
to the project root, this will be copied to the build directory and included in the final archive.
Run make-standalone.bat
. This will run cxfreeze and make a standalone version at dist\custom-install-standalone.zip
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.