2023-11-18

Hekate Atmosphere Splash Screen Guide

TLDR: Custom splash screen not working? Follow instructions in the "What to do?" section.

If you have a modded Nintendo Switch (like me), chances are you want to customize it as well. One of the things you can change is the splash screen (a.k.a. the screen that appears when you boot your Switch into a CFW). There are guides from both Atmosphere and Hekate, but they both have problems.

The Problems

TLDR: Hekate overrides Atmosphere's splash screen, but it requires additional properties.

First, with Atmosphere's guide. They tell you to run a Python script to patch their supplied package3 file, which, there is actually no problem here. The problem comes when you combine Atmosphere with Hekate.

After you happily patched your package3, you restart your Switch, select boot to CFW in Hekate, and sadness approaches. You realized the package3 did not work. But you are determined to get it working, so you try to search online for potential issues. Turns out the Atmosphere splash screen only works when booting from fusee.

You then decided to take a look at the Hekate configuration manual and found that there's a user provided file called bootloader/bootlogo.bmp. In theory, if you replaced that with your splash screen image, it should use it for the splash screen, right?

Wrong! There are properties that the image must meet for Hekate to use it, and the README author clearly did not put it there for you. Therefore, I'm gonna tell you what to do.

Image Requirements

The image must have certain properties, which will be listed here.

How do I know these? The 4th one (orientation) is just trial-and-error, but I got the 5th one (alpha channel) by studying the Python script from Atmosphere.

What to do?

I will give you the instructions first, and then you can decide whether you want to read the inner workings or not.

First, get a Python script I wrote for this.

If you have deleted your patched package3, re-patch it, as we will need it. Run my Python script, with the path to your package3 as an argument:

python extract_splash_screen.py package3

If the script ran successfully, you should get a splash.bmp file, which looks exactly the same as your original splash screen, but rotated to the left by 90 degrees. This file is in the format that Hekate can render, so by copying/moving it to bootloader/bootlogo.bmp, you should get your cool splash screen on Switch!

If it didn't work, tell me on Gist, Mastodon, Matrix, whatever. I may try to help you.

What happened?

The script extract_splash_screen.py I provided reverts the process insert_splash_screen.py made by Atmosphere did. Remember you needed 2 arguments with insert_splash_screen.py? The image and package3. During this process, all the pixel data is written into package3 with the format "BGRA", meaning the bytes goes in the order of blue, green, red and alpha (transparency). extract_splash_screen.py reads the bytes again and save it to splash.bmp.

"So what's the difference between splash.bmp and my own .bmp file?" You ask. It is likely your image missed the alpha channel, and therefore Hekate could not read it properly.