Modifying and installing homebrew on a Nintendo Switch OLED.
Winning a Nintendo Switch
My wife won a Nintendo Switch at a meetup we attended. We initially regretted our decision to attend. On the night of the event, transport workers were taking industrial action, it was raining, the food and drinks were poor and the place was tightly crowded. The next day she got the call notifying her of the winning the Wordle competition the night prior which made up for everything!
Unfortunately, it was the regular model without the OLED screen. Luckily, the device was brand new and we had the receipt, so I swapped it over to the OLED model at JB Hi-Fi for an extra $40.
To install homebrew (I am not condoning piracy) on an OLED Switch, a hardmod/modchip is required. The modchip runs a custom bootloader instead of Nintendo's, allowing unsigned code to execute.
I bought the HWFly v4.1 from Aliexpress for roughly $150 AUD. I would recommend the cheaper v4, as at the time of installation, there was no instructions available for the v4.1. The difference is the v4.1 uses ribbon cables to ease installation, but ultimately the difficulty is the same and not as secure.
I loosely followed this amazing tutorial by Sthetix to install the modchip. This video is for the v3, but I applied the solder points and connections to v4.1. The following equipment is also required along with my suggestions (photo from the Sthetix video):
- Soldering iron: I use a Quicko T12-959. Hakko is also a good brand.
- T12-JL02 and T12-KU tips: They are included in this set from Quicko.
- Solder flux: I used a flux pen.
- Microscope: A digital microscope with a screen is ideal, but I use a magnifying glass.
- PCB Holder: I don't have this either. I set it down on some bubble wrap.
- Precision tweezers: I like the iFixit set. A bad pair of tweezers won't hold items as their noses don't align.
- PCB Cleaner: I used isopropyl alcohol.
This was my setup on my desk:
Before starting, I downloaded and updated the firmware on the modchip using HWFly's GitHub repo.
Next was disassembly. Only the mainboard is required.
With everything diassembled, I begun soldering while following the Sthetix's video guide.
Finally, reassembly and turning it back on.
Picking a microSD Card
The microSD card is responsible for running the EmuNAND and storing files (such as homebrew, backed-up games and themes).
SD cards have lot of specifications that define their speed. I recommend a microSD card that is:
- Size: 512GB or 1TB
- Bus: UHS-I
- Video Speed Class: U3 V30
- Application Performance Class: A2. A1 will also work, but it'll be slow to transfer files from/to a computer.
I went with Samsung 512GB Pro Plus UHS-I U3 A2 V30 (mouthful) microSD card for $95 AUD. Worthwhile alternatives from Sandisk are the 1TB A2 Extreme and Extreme Pro, however they are more are double the price of 512GB A2 cards (not worth it).
A card reader with UHS-I DDR200 is required to unlock the full speeds of the card when connected to a computer. I have the Lexar Multi-card 2-in-1 3.1 Reader which is roughly 20 MB/s faster than my other card readers (an increase of 70 MB/s to 90 MB/s).
Creating an EmuNAND
I followed these guides to create an EmuNAND:
Consider if you want to run Android and/or Linux. This isn't yet support on the OLED, but work has started. These partitions are easier created now as doing a backup and re-partitioning takes a lot of time and risk.
Create the EmuNAND following any of these guides:
- Trimmed EmuNAND by Sthetix: I followed this to reclaim 52 GB of space.
- EmuNAND guide on Rentry
- EmuNAND guide by Homebrew Guide
Before booting into Atmosphere, I strongly recommend doing the following:
bootloader/hekate_ipl.iniwith the following. This autoboots into EmuMMC unless the
VOL-is pressed within 3 seconds:
[config] ; 0: Disable, #: Boot entry number to auto boot. autoboot=1 ; 0: Read autoboot boot entry from hekate_ipl.ini, 1: Read from ini folder (ini files are ASCII ordered). autoboot_list=0 ; 0: Disable (It also disables bootlogo. Having VOL- pressed since injection goes to menu.), #: Time to wait for VOL- to enter menu. Max: 20s. bootwait=3 ; 0: Disable, 1: If woke up from HOS via an RTC alarm, shows logo, then powers off completely, 2: No logo, immediately powers off. autohosoff=2 ; 0: Disable, 1: Automatically applies nogc patch if unburnt fuses found and a >= 4.0.0 HOS is booted. autonogc=1 ; 0: Disable, 1: Protect bootloader folder from being corrupted by disallowing reading or editing in HOS. bootprotect=0 ; 0: Disable, 1: Force updates (if needed) the reboot2payload binary to be hekate. updater2p=1 ; Screen backlight level. 0-255. backlight=100 [CFW EmuMMC] payload=bootloader/payloads/fusee.bin icon=bootloader/res/emummc.bmp [CFW SysMMC] fss0=atmosphere/package3 kip1patch=nosigchk emummc_force_disable=1 icon=bootloader/res/sysnand.bmp [Stock SysMMC] fss0=atmosphere/package3 stock=1 emummc_force_disable=1 icon=bootloader/res/stock.bmp
I used icons from Sthetix's HATS Pack
Once loaded into Atmosphere, a good source of information and general guides can be found at:
There are a few all-in-one homebrew packs on the Internet. Personally, I don't have the time to dig into each pack to see if they do anything strange, or trust they can be maintained forever. Instead, I prefer to download and install each piece of homebrew myself. Installation is usually a drag-and-drop onto the microSD card, but read the instructions to be sure.
To access the homebrew menu, hold R while opening a game/title. It can also be accessed by opening the Album application, but this opens in Applet mode, giving the homebrew less memory. Only use the Album method if you don't have any games/titles installed. Also read up on Forwarders later in this post.
I recommend making a note of all the homebrew that installs folders into
/atmosphere/content. This folder must be empty during a firmware upgrade. An error screen may appear after upgrading if folders are left inside of the folder, but clearing it will solve the problem. That's why it's important to know what has been installed here.
- hekate & Nyx: Bootloader.
- Atmosphere & fusee: Custom firmware.
- hbmenu: Included with Atmosphere. Opens when launching the Album or holding R and launching a game/title.
I am not condoning piracy.
- Sigpatches: Patch Atmosphere to run unsigned code (such as backups).
- Tinfoil: Title/game manager.
- DBI: Title/game manager alternative to Tinfoil. I prefer it's MTP feature over Tinfoil's.
- JKSV: Save game manager.
- Breeze: Cheats. An updated version of EdiZon SE by the same author.
- Mission Control: Use controllers from other consoles.
- SimpleModManager: Run mods from GameBanana.
File Management and Backup
- ftpd: FTP server.
- NX-Shell: File browser.
- nxdumptool: Dump game cards and eShop titles.
- Lockpick_RCM: Dump keys within Hekate.
- TegraExplorer: File browser within Hekate and executing scripts. This is a forked version working on OLED due too this BDK update issue.
Screen Overlay (Tesla)
Tesla-Menu is an overlay menu available at any time by pressing
DPad Down +
R3. nx-ovlloader is also required to load Tesla. The following overlays are available:
- EdiZon Overlay: Cheats from EdiZon.
- ovlSysmodule: Toggle sysmodules on the fly.
- Status Monitor Overlay: Hardware monitoring. Hold
- NX-FPS: FPS counter.
- sys-clk: Set CPU/GPU/Memory clocks according to the application and docked state.
- sys-clk database: Configs for a lot of games.
- More configs on their Discord server under #oc-perf-submissions.
- ReverseNX-RT: Change between handheld and docked state.
- ReverseNX-Tool: To manage ReverseNX-RT.
- SaltyNX: Required to be installed first.
- SaltyNX-Tool: To manage SaltyNX.
- TextReaderOverlay: Display text files.
- QuickNTP: Syncing time as blocking DNS also blocks time syncs with Nintendo servers.
- sys-ftpd-ovl: Display IP address.
- CaptureSight: Tesla overlay for viewing Pokemon data.
Screen capture and Streaming
- SysDVR: Stream to a PC.
- Moonlight-Switch. An updated fork of Moonlight-NX: Better performance than switch-remote-play and SkyNX as I have an NVIDIA GPU. I have raised an issue with them about Wake On LAN not working.
- Chiaki: PlayStation Remote Play.
Tools and Utilities
- Homebrew App Store: App store for homebrew. I don't recommend installing or uninstalling anything with this as it messes around with the SD card files. Good to browse for apps.
- AIO-Switch-Updater: Helper to update bootloader, custom firmware etc.
- hwfly-toolbox: Update modchip firmware. Guide here.
- hwfly-nx firmware: Firmware for the modchip.
- emuiibo: Emulate amiibos.
- Amiigo: GUI for emuiibo (above).
- SwitchPoff: A shortcut to power-off.
- NXReboot: A shortcut to reboot.
- NX-Activity-Log: Displays time playing games.
- NXGallery: Transfer screenshots to your phone through a web server and QR code.
- Fizeau: Blue-light filter.
- Linkalho: Link Nintendo Network ID accounts offline. Required for some games such as Jackbox Party Pack.
- Avatool: Change account avatars.
Updating Horizon OS
- Boot into Stock SysMMC and update the firmware.
- Run Lockpick_RCM and select Dump from SysNAND.
- Run TegraExplorer, select Browse the SD card option and run this modified script and select Dump sysmmc.
- Copy the latest hekate release over to the SD card.
- Copy the latest Atmosphere release over to the SD card.
- Copy the latest Sigpatches release over to the SD card.
- Copy the latest fusee.bin to
- Backup the
sdcard:/atmosphere/contents/folder to the computer and delete the folder.
- Run Daybreak and select
Install (FAT32 + exFAT). Reboot and check everything works.
sdcard:/atmosphere/contents/and update all homebrew to be compatible with the new firmware.
- Themes will have to be reinstalled. Delete the
0100000000001007folders if they exists under
sdcard:/atmosphere/contents/or Atmosphere will crash.
I followed the guide on Rentry about theming. It requires NXThemesInstaller, and comes packaged with a tool to build and unpack themes.
Themes can be downloaded them Themezer and copied onto the microSD card, or by using themezer-nx to download them directly on the Switch.
I built my own theme using images from the movie Your Name. It uses:
Download my theme from here.
Forwarders are shortcuts to homebrew apps that can be launched from the home screen without going through the homebrew menu.
To create a forwarder, I used a tool called SAK which has a NRO forwarder feature. Fill in the details about the application and also include an icon. I used icons from these posts on gbatemp.net:
.NSP file onto the Switch's microSD card. The
.NSP file can be installed through DBI or Tinfoil.
Aftewards, go to the home screen and it will then appear as a game/title with all the information provided to SAK.
Download the Homebrew Menu forwarder I created above here.
I do not condone piracy.
NSZ format is a compressed version of
NSP using the loseless zstd compression algorithim. I prefer storing my games in the uncompressed
NSP format, as this works with emulators such as yuzu and Ryujinx. To (de)compress games, I use the official nsz GUI by nicoboss. Make sure to enable 'Parse Cnmt' under Settings > Advanced.
If games are over 4GB and the microSD card is FAT32 formatted, they are split into multiple files. To merge these together, I use ns-usbloader by developersu.
I manage my
.NSP game files using Switch Library Manager. After decompressing my
.NSZ files above, I move them into my games folder and it does the rest. What I love about it:
- Shows missing DLC and updates
- Renames files
- Organise files into folders
- Finds duplicates
- Warns if older update files exist (updates are cumulative)
Installing games, updates and DLC over the network are supported in both Tinfoil and DBI. The files only need to be served over HTTP/HTTPS using a web server with directory listing enabled. However, all files must be within the same directory can cannot be in separate subdirectories.
Instead of a traditional web server, I use PHPinfoil. It supports subdirectories, as it scans through all files and folders and creates a JSON file to be provided to Tinfoil. This makes it pair well with Switch Library Manager for file management. One downside is the
/?reset endpoint needs to be called manually to refresh the directory listing.
I was given this free tempered glass screen protector at JB Hi-Fi. It's probably like any other.
For general protection, I use the HeysTop Dockable Case from AliExpress. Compared to other cases on the market:
- It can dock with the case on
- The kickstand is still accessible
- Ergonomic grips for handheld
- Joy-Cons are easily removable
- Fits two game cartridges
- Only $15 AUD
HeyStop make another case for the OLED Switch, but I returned it as it had issues making a connection to the TV when docked. Another review on Amazon mentioned the same thing.
I went with the official Nintendo carrying case, for when travelling somewhere with the device. It comes with a plastic screen protector as well, but I preferred my tempered glass one. It fits perfectly with the HeyStop case. and can also hold more game cartridges and a glass cleaner.
Controllers and Charger
We have two sets of Joy-Cons and two Pro Controllers. This is a perfect balance between party games (Switch Sports) and games that require finer control (Mario Kart). The reason is that Joy-Cons can be attached to the grip, turning them into regular controllers, to give a total of four controllers (two sets of Joy-Cons and two Pro Controllers).
To charge all these controllers, I purchased a 6-in-1 charging station. It charges over a USB-C cable connected to the dock.
It recommends a 5V/2A power source, but I didn't see it having any issues when measuring with the dock or an external charger.
Note, I've had to return two chargers already after one Joy-Con charger would no longer charge, so buy from somewhere with an easy return policy.
HORI Taiko No Tatsujin Drum Mod
Taiko No Tatsujin is a popular rhythm drumming game from Japan by Bandai Namco. The most popular controller for the game is a licensed drum kit made by HORI.
The HORI drum has low sensitivity, and you have to hit fairly hard to register hits. I followed the popular 'dollroom mod' to increase sensitivity using cork trivets and rubber adhesives. There are similarly guides in English on Reddit and YouTube.
For the 'ka' mod, I used a 1cm wide strip to cover the entire sensor. This resulted in an almost perfect amount of sensitivity, I think it needed just a bit more.
Here are the final results, tested on https://melon.cx/tatacon/: