Installs a title directly to an SD card for the Nintendo 3DS
Installs a title directly to an SD card for the Nintendo 3DS. Originally created late June 2019.
windows-quickstart.txt.
Note for Windows users: Enabling "Add Python 3.X to PATH" is NOT required! Python is installed with the
pylauncher by default.
git clone)
windows-install-dependencies.py
py -3 -m pip install --user -r requirements-win32.txt
python3 -m pip install --user -r requirements.txt
custominstall.pywith boot9.bin, movable.sed, path to the SD root, and CIA files to install (see Usage section).
Linux users must build wwylele/save3ds and place
save3ds_fusein
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.
movable.sed is required and can be provided with
-mor
--movable.
boot9 is needed: *
-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
A SeedDB is needed for newer games (2015+) that use seeds.
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
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
-hto 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.batassumes 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.
batch pip install cx-freeze -r requirements-win32.txt
Copy
custom-install-finalize.3dsxto 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.pyto 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.