Sphaira - hbmenu replacement

Sphaira is hbmenu alternative. It currently has feature parity with hbmenu (that is, launches homebrew + nxlink) whilst adding quite a few features.



HomeBrew​

The main menu tab, it lists all the .nro found in "/switch/". From there, you can launch, sort, delete, create a forwarder etc.
You can navigate to the other menu tabs using "L" and "R", explained below.

FileBrowser​

By pressing "L" from the main menu, you can access the file browser. You can Cut, Copy, Delete, Rename etc.
You can select multiple files / folders by using the "ZR" button and then se the above functions of that group of files.

Forwaders can be created if the selected file has a file assoc, see below for more details.

Appstore​

sphaira features an appstore, using the api from https://hb-app.store/switch. It can be navigated to by pressing "R" from the main menu.
The appstore is feature parity with hb-appstore app, as well as installing the manifests in the same folder as hb-appstore, in order to not break compatibility between the two.

Themes​

sphaira comes with 3 themes, abyss (default), black and white (unfinished).
custom themes can be added to "/config/sphaira/themes/", here is the abyss theme for example:
INI:
[meta]
name=Abyss
author=TotalJustice
version=1.0.0
; unused currently
preview=romfs:/theme/preview.jpg

[theme]
background=0x0f111aff
grid=0x0f115c30
selected=0x0f115cff
selected_overlay=0x529cffff
text=0xffbc41ff
text_selected=0x529cffff

icon_audio=romfs:/theme/icon_audio.png
icon_video=romfs:/theme/icon_video.png
icon_image=romfs:/theme/icon_image.png
icon_file=romfs:/theme/icon_file.png
icon_folder=romfs:/theme/icon_folder.png
icon_zip=romfs:/theme/icon_zip.png
icon_nro=romfs:/theme/icon_nro.png

music can be added to a theme, as long as the music is converted to bfstm format. simply add an entry like so: `music=/config/sphaira/themes/music/bgmusic_pcm.bfstm`

Forwaders​

sphaira can create and install forwarders for any .nro. It will use the icon of the .nro and the name + author.

It can also install forwarders for files that have a file assoc. For example, if mgba is installed and a game is located in "/roms/gba/game.gba", then the "Install Fowarder" option will appear. In this case, it will try to scrape the icon of the game, otherwise it will use the icon of the .nro and the name will be a combination of the .nro name and game name.

File Assoc​

file assoc is a way to associate file extensions (.gba, .nro etc) with a homebrew app. For example, clicking on rom.gbc that has an file assoc will bring up a list of all the applications that can handle it.
This can be used for emulators, media players, text editors etc...

custom file assoc should go in the folder "/config/sphaira/assoc/"

the format is *very* simple, here is an example of vgedit.ini
INI:
[config]
supported_extensions=txt|json|cfg|ini|md|log

and again for mgba.ini
INI:
[config]
supported_extensions=gba|gbc|sgb|gb
database=Nintendo - Game Boy|Nintendo - Game Boy Color|Nintendo - Game Boy Advance

"path": (optional) fullpath to the .nro. if not specified, it uses the name of the ini, ie, mgba.ini will use mgba.nro.
"supported_extensions": list of extensions the application supports, separated by |. plea
"database": (optional) name of the rom database to use defined by the left-side of this table <https://gist.github.com/ITotalJustice/d5e82ba601ca13b638af9b00e33a4a86>..

All of the retroarch cores has file assoc built into sphaira, so if you download retroarch using the appstore, and then navigate to "/roms/gbc/game.gbc", gambatte and mgba will be available to be selected.

Games can be kept in .zip format, sphaira will peek into the .zip and find the real extension and use that for displaying icons / file assoc.

Roms​

roms should be placed in "/roms/system_name/" where system name is defined by this table right-side entries <https://gist.github.com/ITotalJustice/d5e82ba601ca13b638af9b00e33a4a86>.
this is the same layout emulation station uses. the reason for forcing roms to be in specific folders is due to many roms for different systems using the same file extension, ie, .bin / .cue or .chd.

roms placed in subfolders are allowed, for example "/roms/psx/scooby-doo/scooby-doo.bin" is valid.

Themezer​

themes can be browsed and download by going Menu Options -> Misc -> Themezer. Themes will be downloaded to "/themes/sphaira/Theme Name - By Author/".
To install themes, launch "NXThemes Installer" and browse to the selected folder listed above.

Nxlink​

For homebrew developers, nxlink is built into sphaira. You do not have to press any special buttons, just do "nxlink *.nro" and send your nro like normal, console logging works to be using "nxlink -s *.nro"
By default, this is enabled in the background, to disable it: Menu Options -> Network -> Nxlink.



That's most of the features spahira has. If you enjoy it so much that you'd rather it be launched over regular hbmenu, you can enable the option in "Menu Options -> Replace hbmenu on exit" where it will do just that. It will create a backup of hbmenu in "/switch/hbmenu.nro" should you wish to swap back.
homebrew.jpg

games.jpg

appstore.jpg

appstore_page.jpg

file_browser.jpg

themezer.jpg

launch_options.jpg


Releases: https://github.com/ITotalJustice/sphaira/releases/
Bleeding-edge Releases: https://github.com/ITotalJustice/sphaira/actions
Source Code: https://github.com/ITotalJustice/sphaira
 
Last edited by Deleted member 413168,
Version 0.10.0 is out!

NOTE: the builtin updater in sphaira will not detect this latest update (due to going from 0.9.1 -> 0.10.0). I have fixed this now, however to update Press Y -> Misc -> GitHub -> sphaira -> restart sphaira | OR use the built-in appstore to update sphaira.

- add layout options (list, icons, grid) to all grid based menus (homebrew, games, appstore).
- remove bubbles.
- fix building for gcc 15.
- haze (mtp) now runs on its own thread, rather than the main thread.
- add sysmmc / emummc install enable options, to allow for install to be toggled per setup.
- [games menu] loading the control data is ran on its own thread, it does not block the main thread. allows for smooth scrolling like nintendos home menu.
- [games menu] on fw20+, sphaira manually parses the control data, rather than using ns. manually parsing takes 20-40ms, which is faster than ms which can take 50-500ms.
- [games menu] on fw19 and below, if the control data is not in ns cache, sphaira will manually parse the data as its twice as fast as ns. You can see how fast this is by loading the gamecard menu as that manually parses everything, and it loads the gamecard faster than the home menu.
- optimise theme meta loading.
- [gc menu] tries to load control data from ns cache before manually loading.
- fix installing failing during setup if prod.keys isn't found. thanks to Marulv for helping with debugging this issue.
- don't fail if the control nca cannot be parsed during install, as it may depend on ticket not yet installed.
- [games menu] add game dumping.
- [games menu] add usb game transfer (switch 2 switch).
- add support for custom upload locations (http, ftp, webdav etc).
- [games menu] add support for game dumping to custom upload location.
- [file browser] add support for uploading files / folders to custom upload locations.

All grid menus now layout support, heres an example of the games menu using the icons layout

2025051916293500-CB7BAB704ABB44157835D81424700503.jpg


You can now dump games to your sd card or to a custom network location.

2025051916294700-CB7BAB704ABB44157835D81424700503.jpg


You can also install a game between 2 switches using a usb cable + dock or a usb c to usb c cable via the dump to usb option.


You can now select multiple games to either batch delete or batch dump.



File uploading is now supported in the file browser (excuse my very slow internet).


For more information about dumping and custom locations, see the wiki
https://github.com/ITotalJustice/sphaira/wiki/Dumping
https://github.com/ITotalJustice/sphaira/wiki/Locations
 
Last edited by Deleted member 413168,
@TotalJustice
Congratulations on the work, with each update you continue to surprise more and more.

I would like to know about installing NSP/NSZ/XCI/XCZ files via USB on Windows. Do you have a better plan? Similar to DBi? I would like to abandon DBi altogether.
 
I know you said you had no plans to implement this. But with the changes you are making.. fingers crossed. if Sphaira ever supports connecting to the saves via MTP, they would be awesome. CaVE uses MTP and FTP for NSO databases. The dev also has it connect to the NSO saves as well right from CaVE. Currently have to use DBI for that. But if Sphaira gets that support in MTP or FTP, that would be awesome.
 
Last edited by ThePanda,
I know I have mentioned before, but if Sphaira ever supports connecting to the saves via MTP, they would be awesome. CaVE uses MTP and FTP for NSO databases. The dev also has it connect to the NSO saves as well right from CaVE. Currently have to use DBI for that. But if Sphaira gets that support in MTP or FTP, that would be awesome.
today you can explore saves vía Sphaira and TotalJustice's FTPD so vía MTP may be no to far.
 
Hello, I like the new update where we can change the right menu to different menus.
I hope you can consider adding an option for changing left menu aswell.
Because the builtin file manager, I didn't use it that much and I think I can utilize the left menu maybe by changing it to themezer and the right is appstore, thanks again.

Also, I am replacing my hbmenu by renaming the sphaira.nro to hbmenu.nro, maybe the github updater can detect wether it is already the default hbmenu and it will update the /sdcard/hbmenu.nro instead of /sdcard/switch/sphaira/sphaira.nro?
Even it can be considerar put two different screens to the left and two more to the right so no need to decide what to choose
 
Version 0.11.1 is out! Lots of changes in this one.

- gamecard (xci) dumping, both full and trimmed.
- gamecard cert / bin dumping.
- gamecard auto trim detection (for flashcart).
- multi-threaded game dumping.
- multi-threaded file uploads.
- added extension for usb S2S install which allows for multi-threaded transfers.
- controller led flashing during ftp/mtp/nxlink is limited to player 1 now, rather than all controllers.
- disable auto sleep during file transfer.
- add usbds max packet detection and zlt handling.
- display error box on all transfer errors.
- gamecard menu can now be accessed even if install is disabled, to allow for dumping.
- add hdd mount support to the file browser.
- add hdd dumping support.
- add split screen mode for the file browser.
- massively improve boot time (730ms -> 280ms).
- add file hashing in the file browser (crc32, md5, sha1, sha256).
- add scrolling text for progress bar and menus (no more clipped text).
- display game icon whilst dumping nsp / gamecard.
- fix time/battery text position changing every few seconds due to spacing issue.
- loads of new translation changes (thank you to everyone!)
- enable boost mode during boot and file transfers, speeds up some transfers by 1.5x.
- add file assoc for nxmp and SwitchWave. clicking on any media file (such as .mp4) in the filebrowser will show allow you to load that file with either of the above apps.
- support for changing the left-side menu.
- optimised appstore unzip code by interating the zip rather than searching for each file, reduces retroarch extract time from 52s -> 26s.

Here's an example of the new hdd mounting and split screen in the file browser.
 
Last edited by Deleted member 413168,
- gamecard (xci) dumping, both full and trimmed.
- disable auto sleep during file transfer.
- add hdd mount support to the file browser.
- add hdd dumping support.
- add split screen mode for the file browser.

You got a beer (at least this) from me on Ko-fi! Just switched to the new version :toot:
 
Howdy do, not sure if this is an issue or bug or what, but do I need to turn off "replace HB menu on exit" before updating sphaira from the network option in it while it's replacing hbmenu? Because so far with every update when I've had that option on, I will still see the previous version of sphaira installed (0.11.2) while in the new version(0.11.3) that's replacing hbmenu. once I turn that option off and exit, I then have to update sphaira again to 0.11.3 while its not replacing hbmenu. I'm using the latest versions as examples but this is happened with every version since release 😅 I'm just not sure if it's a me thing or not fr lol cause no one seems to be mentioning it when I try searching about it
 
Thanks for the update as always!

Its good to see that the ability to change the left menu is implemented in latest version.

I would like to suggest this feature, I hope you can consider adding it for a newbie like my brother who doesn't want to thinker/explore around too much.
Maybe you can add a button or we can set it in config file, where we can set to auto update sphaira if newer version is detected.

Because previously I have experienced appstore and themezer that isn't loading its contents for certain/old version of sphaira, but updating the sphaira fixed those issue.
 
@TotalJustice: is there a way to do multiple select for file management & is it possible to
view the name of the game in sdmc:/atmosphere/contents instead of BID similar to DBI?

Thanks!
 
@TotalJustice: is there a way to do multiple select for file management & is it possible to
view the name of the game in sdmc:/atmosphere/contents instead of BID similar to DBI?

Thanks!
For the first one, it's L2 in the file browser. For grid based menus (homebrew, games) it's L3. I know the inconsistentcy sucks, but I already have L2/R2 mapped for scrolling a page up/down for grid menus.

To select all files, hold R2 and press L2. For other menus, press R3 to select all, or L3 for a single file.

I'm not really sure about the last part tbh. I'll add it to the to-do list, no promises as to when I'll get around to it however.
 
Version 0.12.0 is out!

- new default theme! see the pictures below for a preview.
- fix ncz block installs.
- fix usbds setting zlt for both read/write, rather than just write.
- appstore add option to view installed files.
- appstore add option to view project website.
- add support for setting custom forwarder gif/logo from file.
- option to swap left/right side menus.
- multi-threaded zip and unzip.
- further optimise appstore installing by downloading zip to memory rather than file, multi-threading the md5 hash and multi-threading the unzip.
- use nxtc for title caching.
- use oss-nvjpg for jpeg loading (improved performance over stbi).
- add save menu, currently backup and restore are supported.
- further optimise zip/unzip code by increasing the file buffer size to reduce io r/w.
- fix action buttons in the filebrowser not responding to touch screen.

The main changes in this release are optimisations and the new save menu (as well as the usual bug fixes).
This will (hopefully) be the last major update for quite a while, now that the switch 2 has released. I'll still drop in to push new updates for translations and bug fixes, but feature wise, sphaira is going on hold.

2025060501071200-CB7BAB704ABB44157835D81424700503.jpg

2025060501081900-CB7BAB704ABB44157835D81424700503.jpg

2025060501082500-CB7BAB704ABB44157835D81424700503.jpg

The save backup is *very* fast. Skyrim (huge save) and Zelda totk (lots of files) were the two titles that i benchmarked against, in the case of Skyrim (106MB) it can be dumped in less than 5s. With Zelda (20MB) is can be dumped in less than 2s.

By default, zip compress is enabled for saves, however if you want maximum performance at the cost of file size, then you can disable zip compression in the advanced options inside the save menu.

The save menu is a little limited currently, with only backup and restore for normal titles, with no support for system titles and BCAT. That of course is planned, but i ran out of time before the S2 releases. :lol:

 

Site & Scene News

Popular threads in this forum