As I am a macOS user this is fully operational on macOS with Attract Mode & RetroArch for macOS. As these both applications are cross platform, with small change to the paths I would say this could also work in Windows & Linux
The concept is this;
Attract Mode from the args line can launch Bezels (RetroArch overlays), the following code will look for a "game" bezel, if not found then a "system" bezel will be loaded.
Bezels would normally need to be in the RetroArch config/emulator folder which can cause conflict eg Genesis Plus GX is used for 10 systems or more, many of these systems have the same game eg NBA Jam meaning you couldn't have multiple different bezels with the same name in this emulator folder.
Launching the bezels via Attract Mode means we can have the bezel folders wherever we want on our system.
This is a huge leap forward as with this method we can set per Attract Mode Emulator Bezels rather than per RetroArch emulator bezels, basically we have a lot more control!
The Emulator cfg would look like this;
# Generated by Attract-Mode v2.2.0-3
#
executable /Applications/RetroArch.app/Contents/MacOS/RetroArch
args -L /Applications/RetroArch.app/Contents/Resources/cores/mednafen_psx_libretro.dylib "[romfilename]" --appendconfig "$HOME/Documents/RetroArch/overlays/configs/SonyPSX.cfg|$HOME/Documents/RetroArch/overlays/configs/PSX/[name].cfg"
rompath /Volumes/Roms/psx
romext .zip;.7z;.cue;.img;.mdf;.pbp;.toc;.cbn;.m3u
system Sony Playstation
info_source listxml
artwork boxart /Volumes/Roms/psx/boxart
artwork cartart /Volumes/Roms/psx/cartart
artwork flyer /Volumes/Roms/psx/flyer
artwork marquee /Volumes/Roms/psx/marquee
artwork snap /Volumes/Roms/psx/snap
artwork wheel /Volumes/Roms/psx/wheel
The args explained above;
-L /Applications/RetroArch.app/Contents/Resources/cores/mednafen_psx_libretro.dylib "[romfilename]"
this part launches the rom
--appendconfig "$HOME/Documents/RetroArch/overlays/configs/SonyPSX.cfg
this section loads the system bezel in this case SonyPSX and this bezel will stay if no game bezel found.
|$HOME/Documents/RetroArch/overlays/configs/PSX/[name].cfg"
the last section of the args looks for a game bezel, if a game bezel cfg exists in the folder, the game bezel will load, if not then the system bezel will load.
The correct aspect ratio can also be set in the system bezel cfg (eg this is handy for odd aspect ratios or handhelds)
To understand the folder structure of the bezels well this is kinda a RetroArch thing and not Attract Mode but I guess as these bezels are launched from Attract Mode from different locations then it doesn't hurt to mention this briefly here;
We will continue to use the example above for Sony PSX
There are two config files that are used with this. The first config file “points†to a second config file. The second config file is located in the same folder as the bezel PNG file is. Retroarch can’t be told to “load a PNGâ€....it can only be told to “use a config file†for knowing what bezel PNG file to use.
These second config files (along with the PNG bezel files) are stored in a nominated folder.
Retroarch uses these two config files in conjunction with one another in order to know what bezel PNG file to use.
The first part of the -appendconfig points to the 1st cfg file for the system bezel it looks like this;
input_overlay = "~/Documents/RetroArch/overlays/borders/Sony-PlayStation.cfg"
That next cfg file (paired with a png) looks like this;
overlays = 1
overlay0_overlay = Sony-PlayStation.png
overlay0_full_screen = true
overlay0_descs = 0
So the first CFG file tells RetroArch to input an overlay, the second cfg file (which is paired with a png) tells RetroArch which actual actual bezel.png to load
For the per game Game Bezels which is the second half of the --appendconfig this points to a rom [name] cfg which will only trigger for that particular game and that looks like this; (This cfg name must match the rom file name)
input_overlay = "~/Documents/RetroArch/overlays/borders/GameBezels/PlayStation/Crash Bandicoot (USA).cfg"
That next cfg file (paired with a png) looks like this;
overlays = 1
overlay0_overlay = "Crash Bandicoot (USA).png"
overlay0_full_screen = true
overlay0_descs = 0
** IMPORTANT ** A few Minor settings need to be completed in RetroArch and these can be found in this part series
https://www.youtube.com/watch?v=S6_XMC1pLZ4&t=1353sCore remaps will not be affected, some core overrides may affect the display of a systems bezels.
The overlays can very easily be stopped or removed by simply renaming the folder that contains the cfg files
The Bezel Project are doing an amazing job creating all the thousands of individual game bezels that we can all enjoy.
https://github.com/thebezelproject?tab=repositoriesThis new method was implemented in Hyperpie 2 for macOS with success.
Sing out if you have any further queries.