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,
@TotalJustice
The shortcut to the games menu doesn't work (it stays in the Appstore), it doesn't activate, but all the others do.
GitHub, IRS, and Appstore
I don't know why it's not working for you, it works for me as demonstrated in the video.

Oh I think I know why. Do you have a non-english language set?

Edit: I've pushed a new commit, let me know if it fixes it.
Post automatically merged:

@TotalJustice
The
convert to standard crypto
option Is this name complete or cut?
I've replaced the enabled and disabled text with on and off, to match Nintendo's sidebar text. (It's also shorter so it fixes your issue...for now at least. I'll do a proper fix eventually).
2025050122174000-CA43EC7375AB1E2BC8AFC050C0941918.jpg
 
Last edited by Deleted member 413168,
  • Like
Reactions: johw and angelhp
Não sei por que não está funcionando para você, funciona para mim, como demonstrado no vídeo.

Ah, acho que sei por quê. Você tem um conjunto de idiomas que não seja o inglês?

Editar: Enviei um novo commit, avise-me se isso corrigir o problema.
[mesclagem automática]1746133986[/mesclagem automática]

Substituí o texto ativado e desativado por ativado e desativado, para corresponder ao texto da barra lateral da Nintendo. (Ele também é mais curto, então corrige o seu problema... pelo menos por enquanto. Farei uma correção adequada em breve).
View attachment 502413
I tested it here and it's perfect now.
Dude, you're very smart, you did really well with On/Off

I would like to suggest a theme with colors like this image.
 

Attachments

  • Captura de Tela (222).png
    Captura de Tela (222).png
    717.9 KB · Views: 52
  • 881b5195-55fb-417d-926b-bc6157b7e6f4.jpg
    881b5195-55fb-417d-926b-bc6157b7e6f4.jpg
    26.8 KB · Views: 38
  • Like
Reactions: impeeza
I tested it here and it's perfect now.
Dude, you're very smart, you did really well with On/Off

I would like to suggest a theme with colors like this image.
you can very easily create your own. here's a template, just add the path to your background image and then place the theme.ini in /config/sphaira/themes/theme.ini

INI:
[meta]
name=Theme Name
author=Your Name
version=1.0.0
# choose if you want to inherit (use) the colours from the black/white themes
# this helps making themes easier.
inherit=romfs:/themes/base_black_theme.ini
# inherit=romfs:/themes/base_white_theme.ini

[theme]
background = /path/to/your/background.png
 

Attachments

Last edited by Deleted member 413168,
Version 0.9.0 is out!
  • Reduce rounding of icons from 15 -> 5.
  • Add image support to option boxes.
  • Fix potential memleak when deleting homebrew from the homebrew menu. this would cause the image to not be free'd.
  • Added scrolling text support for all text that gets clipped. Highlighting the entry will start scrolling the text. You can adjust the scroll speed in the "Advanced options" menu by selecting "Text scroll speed".
  • Added "Games" menu. This allows you to launch and delete installed games. There's some bonus options such as "launch random" which picks a random game to launch, and "hide forwarders" which hides installed forwarders.
  • Changed the title_id generation for forwarders. This change was to support the above "hide forwarders" option (see below).
  • Add option to extract zip files to the root of the sd card.
  • Added option to change the right-side menu (see below).
  • Replaced the "enabled" and "disabled" options with "On" and "Off".
  • Fixed file browser crash when using select all (L2) whilst there exists a hidden file and the hide hidden files option was enabled.
  • Improve USB (installer) exiting speed by now waiting on an event, rather than relying on timeout.
  • Update de.json (added 12h format) by @glitched-nx in #130
See the release page for more info: https://github.com/ITotalJustice/sphaira/releases/tag/0.9.0

2025050319195300-CB7BAB704ABB44157835D81424700503.jpg
2025050319200400-CB7BAB704ABB44157835D81424700503.jpg
 
Last edited by Deleted member 413168,
I click on the usb install option and if there is no connection when exiting it gives a failure
Sorry about that, it was oversight on my part. I didn't actually test the usb menu whilst a cable was *not* inserted...i always have it plugged in for charging.

I have pushed 0.9.1, only change is the fixing that bug. The menu leaves instantly now.

 
I read the OP, but don't quite understand it. I just want to create a shortcut to a psx rom, that is in /roms/psx/*.iso that opens the game in retroarch with the default psx settings. How to do this?
 
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?
 

Site & Scene News

Popular threads in this forum