Custom Install 3DS: Difference between revisions

From GameBrew
No edit summary
m (Text replacement - "Category:Homebrew utility applications on 3DS" to "")
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Infobox-3DS-Homebrews
{{Infobox 3DS Homebrews
| title = custom-install
|title=custom-install
| image = https://dlhb.gamebrew.org/3dshomebrew/backup-your-3ds-sd-card-data-now.jpg|250px
|image=Custominstall5.png
| type = Utilities
|description=Install CIAs to a Nintendo 3DS SD card entirely on PC.
| version = 2.1b4 & 1.6
|author=ihaveamac
| lastupdated = 2021/07/08
|lastupdated=2021/07/08
| licence = Mixed
|type=File Operation
| author = ihaveamac
|version=2.1
| website = https://gbatemp.net/threads/custom-install-install-cias-to-a-nintendo-3ds-sd-card-entirely-on-pc.551496/
|license=Mixed
| download = https://dlhb.gamebrew.org/3dshomebrew/custom-install-v2.1b4.7z
|download=https://dlhb.gamebrew.org/3dshomebrews/custominstall.7z
| source = https://github.com/ihaveamac/custom-install/releases
|website=https://gbatemp.net/threads/custom-install-install-cias-to-a-nintendo-3ds-sd-card-entirely-on-pc.551496
|source=https://github.com/ihaveamac/custom-install/releases
|donation=https://ihaveahax.net/view/Donations
}}
}}
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.
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.
Line 33: Line 35:
==User guide==
==User guide==
===Usage summary===
===Usage summary===
* Use custom-insall on your laptop/pc and install titles onto the micro SD (with boot9+movable).  
* 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 homemenu.
* 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).
* You can use the Windows standalone with GUI for simpler process, or setup your own enviroment (for Windows 32/Linux/macOS).


Line 42: Line 44:
* Select your SD card root, boot9, seeddb, and movable.sed files (in some cases these will be automatically selected for you).
* 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 <code>Start install</code>.
* Add the CIA files and click <code>Start install</code>.
* Once it's finished, start up the homebrew launcher and run custom-install-finalize to finish the process.
* Once it's finished, start up the Homebrew Launcher and run custom-install-finalize to finish the process.


===With installed Python===
===With installed Python===
* Download the [https://github.com/ihaveamac/custom-install/archive/module-newer-gui.zip repo] and extract custom-install.
* Download the [https://github.com/ihaveamac/custom-install/archive/module-newer-gui.zip repo] (or <code>git clone</code>) and extract custom-install.
* Download [https://github.com/ihaveamac/custom-install/releases custom-install-finalize.3dsx] and copy over to the 3ds folder of your SD card.
* Download [https://github.com/ihaveamac/custom-install/releases 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 [https://www.gamebrew.org/wiki/Custom_Install_3DS#Additional_notes Additional notes]).
* Put boot9.bin, seeddb.bin and movable.sed to the root of the custom-install folder (see also [https://www.gamebrew.org/wiki/Custom_Install_3DS#Additional_notes Additional notes]).
Line 59: Line 61:
** <code>python3 custominstall.py -b boot9.bin -m movable.sed --sd /Volumes/GM9SD file.cia file2.cia</code>
** <code>python3 custominstall.py -b boot9.bin -m movable.sed --sd /Volumes/GM9SD file.cia file2.cia</code>
** <code>python3 custominstall.py -b boot9.bin -m movable.sed --sd /media/GM9SD file.cia file2.cia</code>
** <code>python3 custominstall.py -b boot9.bin -m movable.sed --sd /media/GM9SD file.cia file2.cia</code>
* Wait for install. Once it's finished, start up the homebrew launcher and run custom-install-finalize to finish the process.
* 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===
===Additional notes===
Line 81: Line 85:


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.
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.
==Screenshots==
https://dlhb.gamebrew.org/3dshomebrews/custominstall3.png
https://dlhb.gamebrew.org/3dshomebrews/custominstall4.png


==Changelog==
==Changelog==
'''custom-install 2.1 & finalize 1.6 2021/09/13'''
custom-install 2.1:
* Installs are written to a visible temporary folder before being moved into place. If an install fails in the middle, it won't leave a half-written title buried in the Nintendo 3DS folder
* All titles are loaded and parsed at the beginning so a broken one won't stop the others
* Title contents are verified during install and an error is shown if verification fails
* Titles that succeeded and failed to be installed are shown at the end
* Free space is checked to make sure all titles can be installed
* cifinish.bin is loaded and checked for corruption early (if it exists), which can happen if an issue exists on the SD card filesystem.
* CDN contents can be installed directly
* File list replaced with a column list that shows Title ID and title name, and is sorted alphabetically
* Show a warning if more than 300 applications (not all titles, but executable ones) are detected
* Create title.db and import.db if missing (#40)
* Auto-set boot9.bin and seeddb.bin if found in SD:/gm9/out (movable.sed was already detected this way): #43 Thanks @Jisxu!
* Show an error if id0 isn't found (#49)
* Force reading save3ds_fuse output as UTF-8 all the time (hopefully fixing issues on Windows systems that aren't set to English)
custom-install-finalize 1.6:
* Delete cifinish.bin if no errors occurred during ticket install.
* Skip installing tickets for titles that don't need it: #46 #47 Thanks @TimmSkiller.
'''custom-install 2.1b4 & finalize 1.6 2021/07/08'''
'''custom-install 2.1b4 & finalize 1.6 2021/07/08'''


Line 134: Line 163:
* GBAtemp - https://gbatemp.net/threads/custom-install-install-cias-to-a-nintendo-3ds-sd-card-entirely-on-pc.551496
* GBAtemp - https://gbatemp.net/threads/custom-install-install-cias-to-a-nintendo-3ds-sd-card-entirely-on-pc.551496


[[Category:3DS homebrew applications]]
 
[[Category:Homebrew utility applications on 3DS]]
 
[[Category:PC utilities for 3DS homebrew]]
 
[[Category:Support the author]]

Latest revision as of 05:53, 6 May 2024

custom-install
Custominstall5.png
General
Authorihaveamac
TypeFile Operation
Version2.1
LicenseMixed
Last Updated2021/07/08
Links
Download
Website
Source
Support Author

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-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
  • 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.

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:

  • -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.

Screenshots

custominstall3.pngcustominstall4.png

Changelog

custom-install 2.1 & finalize 1.6 2021/09/13

custom-install 2.1:

  • Installs are written to a visible temporary folder before being moved into place. If an install fails in the middle, it won't leave a half-written title buried in the Nintendo 3DS folder
  • All titles are loaded and parsed at the beginning so a broken one won't stop the others
  • Title contents are verified during install and an error is shown if verification fails
  • Titles that succeeded and failed to be installed are shown at the end
  • Free space is checked to make sure all titles can be installed
  • cifinish.bin is loaded and checked for corruption early (if it exists), which can happen if an issue exists on the SD card filesystem.
  • CDN contents can be installed directly
  • File list replaced with a column list that shows Title ID and title name, and is sorted alphabetically
  • Show a warning if more than 300 applications (not all titles, but executable ones) are detected
  • Create title.db and import.db if missing (#40)
  • Auto-set boot9.bin and seeddb.bin if found in SD:/gm9/out (movable.sed was already detected this way): #43 Thanks @Jisxu!
  • Show an error if id0 isn't found (#49)
  • Force reading save3ds_fuse output as UTF-8 all the time (hopefully fixing issues on Windows systems that aren't set to English)

custom-install-finalize 1.6:

  • Delete cifinish.bin if no errors occurred during ticket install.
  • Skip installing tickets for titles that don't need it: #46 #47 Thanks @TimmSkiller.

custom-install 2.1b4 & finalize 1.6 2021/07/08

custom-install 2.1b4:

  • Show 300 application warning with the cli script.
  • This fixes a minor issue with an exception being raised at the end (but it didn't actually affect anything) #42
  • Auto-set boot9.bin and seeddb.bin if found in SD:/gm9/out (movable.sed was already detected this way) #43 Thanks @Jisxu.
  • Force reading save3ds_fuse output as UTF-8 all the time.
  • This should hopefully fix #41 but haven't been fully tested. In particular this seems to affect Windows systems set to Chinese.

custom-install-finalize 1.6:

  • Skip installing tickets for titles that don't need it #46 #47 Thanks @TimmSkiller.

custom-install 2.1b3 2021/03/09

  • Show a warning if more than 300 applications (not all titles, but executable ones) are detected.
  • Create title.db and import.db if missing #40.
  • Fix CDN content install.
  • Require pyctr==0.4.6 and comtypes==1.1.8 (only relevant to non-standalone build users).

custom-install 2.1b2 2021/02/13

  • Fix selected boot9 and seeddb not working for adding titles & require boot9 to be loaded before adding any titles.
  • Show current status on each title's line.

custom-install 2.1b1 2021/02/10

custom-install 2.1b1:

  • Installs are written to a visible temporary folder before being moved into place. If an install fails in the middle, it won't leave a half-written title buried in the Nintendo 3DS folder.
  • CDN contents can be installed directly.
  • Title contents are verified during install and an error is shown if verification fails.
  • Titles that succeeded and failed to be installed are shown at the end.
  • All titles are loaded and parsed at the beginning so a broken one won't stop the others.
  • Certain kinds of titles such as DSiWare and duplicate files are blocked.
  • This doesn't yet stop two files with the same Title ID however! This only stops adding the same file twice.
  • Free space is checked to make sure all titles can be installed.
  • cifinish.bin is loaded and checked for corruption early (if it exists), which can happen if an issue exists on the SD card filesystem.
  • File list replaced with a column list that shows Title ID and title name, and is sorted alphabetically.

custom-install-finalize 1.5:

  • Delete cifinish.bin if no errors occurred during ticket install.

Credits

  • Save3DS 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.

External links

Advertising: