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,
This is great, would be nice add a built in text editor if it’s not much complicated (I see text reader in not finished yet)
Also in file browser it doesn't display ".overlays", ".packages" folders, I think it's because the "." prefix
those folders / files are hidden by default. you can display them by going Options -> Sort By -> Show Hidden = true.
 
  • Like
Reactions: cucholix
Oh wow this is awesome. I gotta find my modded switch and test this out. I love the ability to create forwarder channels directly. That is one of the many QoL features this has. Thanks!
 
Wow, thanks for the frontpage!

I have released the source code https://github.com/ITotalJustice/sphaira

0.3.0 is out:
  • reduce socket memory in applet mode
  • add translations, it will automatically pick the language based on the system language, but it can be overridden in the options menu within sphaira. translations were done with https://translate.i18next.com/. feel free to send a pr correcting / adding additional translations.
  • if sphaira is launched via the album, pressing exit will now exit to the switch main menu
  • gbs playback was removed. it can be added back if anyone wants it, i just need to open source the gbs player first.
 
Just a small suggestion to improve the user experience, in Options > Install Forwarder, I think the cursor should hover "Back" instead of "Install" by default when the confirmation dialog appears.
good idea, i've pushed a commit with that change.
Post automatically merged:

Here's a hbc theme for sphaira. Its very basic, it uses the assets from hbc wii and music from hbc wiiu. to install, extract the zip to your sd card and select the theme by pressing Y -> Theme -> HBC. I made this to demonstrate how to easily make themes and add background music :)
 

Attachments

  • 2024121622475000-879193CD6A8B96CD00931A628B1187CB.jpg
    2024121622475000-879193CD6A8B96CD00931A628B1187CB.jpg
    186.9 KB · Views: 68
  • hbc-theme-for-sphaira.zip
    hbc-theme-for-sphaira.zip
    531.1 KB · Views: 57
No source code? No hard feelings, do whatever you want, thank you for the program and everything, but some of us avoid closed sources since the dbi drama.
9/10 times when people bitch about this they can’t even read the source code in the first place or even compile it in their own

Even fewer will actually fork and improve the project lmao stop complaining don’t use it or make your own
Post automatically merged:

i am not sure what the dbi drama is. i understand avoiding closed source software, however in my experience, being open source doesn't really mean much. no one is going to "vet" the code to make sure it safe. I'd argue no one is going to read it. The only exception is those that copy a portion of the code to use in their own app (which is fine of course).

That being said, the only reason i haven't open sourced sphaira is because the code is pretty bad :rofl: you have to understand that the base for the entire codebase was written in early 2020, by that point i had only been coding for ~5 months. It was all in C, i didn't know what i was doing and it had memory leaks everywhere.

fast-forward to 2023, i got a oled switch, made sys-patch then found this old shit code in a folder on a usb stick. i tried to revive it by rewriting it in C++, using some gui code from untitled / borealis and added a ton of features - but the code still sucks, especially the ui code (hard coded values everywhere).

after that, it has been sat unmodified for about a year, until i released ftpsrv where i pushed a public version of sphaira for people to mess around with.

however, adding translations kinda requires me to open source. it would make contributions much easier, better bug report system and *maybe* someone will help me with the gui code. so once i finish the translation code, ill make it open source :)
That is a very impressive timeline ! What resources did you use to teach yourself C so fast?
 
9/10 times when people bitch about this they can’t even read the source code in the first place or even compile it in their own
So 1/10 times they will
Even fewer will actually fork and improve the project lmao stop complaining don’t use it or make your own
So a small portion will fork and improve

There's no point to what you just said
 
9/10 times when people bitch about this they can’t even read the source code in the first place or even compile it in their own

Even fewer will actually fork and improve the project lmao stop complaining don’t use it or make your own
Post automatically merged:


That is a very impressive timeline ! What resources did you use to teach yourself C so fast?
I did CS50 which a free online course. Its really well made and the teaching is fantastic. I learnt C because I wanted to make a music player for the switch, back then I think we only had xor-play which was okay but not what I wanted.

My advice if you're starting out is to have a goal in mind. Let's say you want to create an app which randomly picks a game to launch.

Start CS50, do all the assignments etc. Next setup devkitpro, build the switch examples and mess around with the code until you feel comfortable that you understand how to call functions, draw text to the screen etc. Now you can start making your own app :)
 
Can't create a forwarder from an NRO that is in a subfolder? Example: Switch/emulators/PFBNEO/PFBNEO.nro
 
Install forwarder only appears if the NRO is appearing on the applications screen, the install forwarder option does not appear if you have to search for the NRO file
Post automatically merged:

NUMBER that is in a 3 folder does not appear on the main screen.
switch/pfbneo/pfbneo.nro appears on the main screen
switch/emu/pfbneo/pfbneo.nro does not appear on the main screen
 
Last edited by AlanLC,
I would like to translate it into Japanese, but I don't know where in the source code the language file is. Can you tell me?
 

Site & Scene News

Popular threads in this forum