ArcadeFrontend is an open source Hyperspin alternative using Godot - Mono that lets you generate themes on a per game basis.
Themes can be designed in Godot with no need to do any programming, but you can program if you like.
It's very much in alpha and is missing many features. This application is a very specific program and may not fit your needs.
If you want an already established front-end that runs on Linux I'd recommend Pegasus Frontend
ArcadeFrontend can now load a constrained subset of extracted HyperSpin themes directly at runtime.
Supported first-pass compatibility:
Theme.xmlplus sibling assets in the same folder- a
.zipcontainingTheme.xmlplus image assets loaded directly from the archive Background.pngArtwork1.pngthroughArtwork4.png- optional
video.ogv, or a config-provided video override - optional
Video.pngoverlay for the video region - centered coordinates authored in
1024x768 - non-uniform stretch to the active viewport to match HyperSpin's widescreen behavior
- limited intro effects using
start,time,delay, andtype
Explicit non-goals:
- Flash or SWF content
- full compatibility with all community HyperSpin themes
- automatic support for alternate video formats such as
mp4,avi, ormkv
Example config:
{
"Name": "Metal Slug X",
"Theme": {
"Type": "HyperSpin",
"Path": "themes/MetalSlugX/Theme.xml",
"Video": "themes/MetalSlugX/video.ogv"
}
}For HyperSpin themes, Theme.Video is optional. If it is set, ArcadeFrontend uses that file for the theme's video region. If it is omitted, the loader falls back to video.ogv beside Theme.xml.
If Video.png exists beside Theme.xml, ArcadeFrontend treats it as an overlay for the video region and applies overlayoffsetx, overlayoffsety, and overlaybelow from the <video> element.
If Theme.Path points to a .zip, ArcadeFrontend reads Theme.xml, Background.png, and Artwork*.png directly from the archive without extracting them. Zip-backed themes do not read video from inside the archive; use Theme.Video for the external .ogv path if the theme has a video region.
Existing packaged Godot themes using ThemePck and ThemeFile continue to work.
ArcadeFrontend can also load a standalone .ogv as a full-screen theme background.
Example config:
{
"Name": "Example Game",
"Theme": {
"Type": "Video",
"Path": "themes/example/background.ogv"
}
}Video themes are intentionally simple:
- the
.ogvfills the whole viewport - the video loops automatically
- there are no XML layout files or overlay assets
This will most likely change, but using Godot:
- Make a scene in:
res://themes/<your_theme_name>/theme.tscnRoot Typeshould be aControlnode and make sure it's Anchor spans theFull Rect.- Do whatever you want in that node.
- GD Script works, but security implications may not be ideal.
- Try to do everything via anchors: This should let themes scale to other resolutions.
- Currently only tested in 1080p, other resolutions may not scale correctly (for now).
- Don't need to do anything in GD Script, this example theme was all animated and done via Godot's editor.
- Install and setup the Mono (C#) version of Godot
- Godot Mono will have it's own requirements.
- Generate a
config.json- please use config_example.json file as an example - In Godot, build out the project
- Wheel menu for selecting games
- Make the wheel prettier
- Better wheel navigation - Currently only works on single presses
- Allow multiple presses
- Allow holding
- Launch Applications
- Dynamic theme loading via .pck files (currently only for individual menu items)
- Research security implications (probably terrible)
- Animated transitions between themes
- Allow "fall-back" themes (if no individual game theme is available)
- If you put a theme in the top of the section (before the "items") that will be used as a default
- Setup a website where people can share themes.
- Load Hyperspin themes
- Very basic support. No flash, haven't implemented all animations
- Figure out and implement all animations
- Load video themes
- Can load videos as a fullscreen theme (useful for grabbing Video themes from emumovies)
- I'm sure we can do more here
- Exit back to menu when game exits
- Program pauses when focus is lost
- Controller navigation (haven't tested, it "might" work?)
- In-app settings menu
- Sub wheel menus
- Need sub wheels to remember last location in previous wheel
- Different resolutions - currently setup for 1080p
- Game Information screen (optional) - Thinking this should be something similar to the PS5 when a game is selected
- Started work on a game information screen (see example in
config_example.json). Still not complete. - Select different game versions in menu
- Allow theming
- Add more game information to screen
- Add screenshot examples
- Started work on a game information screen (see example in
- ...
- Setup pre-commit hooks
- Find a good C# linter
- Auto-builds via Github Actions
- Create an AppImage
- No need to setup the
config.jsonby hand.- Working on a clean database that will scan games and organize everything
- The goal is for the
config.jsonto be an override for themes instead.
- Bring up an overlay on top of running games - Something like the Guide button on Xbox (not sure if this is possible)
- Get retroarch cores to run directly in app (crazy idea)
- If using nixos:
nixos_runner.shcan be used to test a generated executable. - Convert mp4 to Godot compatible video:
ffmpeg -i "input.mp4" -c:v libtheora -q:v 7 -c:a libvorbis -q:a 4 output.ogvArcadeFrontend is available under GPLv3 license. Some included assets, such as product logos and symbols may not be available for commercial usage and/or may require additional permissions from their respective owners for certain legal uses. Furthermore, trademark usage may be limited as per §7 of the GPLv3 license. You can find the details in the LICENSE file.
All trademarks, service marks, trade names, trade dress, product names and logos are property of their respective owners. All company, product and service names used in this product are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.
