Per Playlist Config/Options/Preset Discussion

The current RA behavior of allowing per-core/per-directory/per-game configs probably works for most use cases. However, there are uses for having customized playlists, and the existence of playlists could allow for some fine customizations without being coupled to file tree structure.

For example, a user might want to use custom playlists to separate regional variants of the same system, but it may prohibitive to reorganize the content. In another example, a user might have a NAS with all their files and access the files with a computer and another system like a custom arcade cabinet and may have a need to organize them differently without changing the underlying structure.

The playlist could be used as a differentiator for different settings, similar to how content directory is used now. Would anyone be interested in this enhancement?

5 Likes

This topic has been discussed many times on this forum. Unfortunately, no one seems willing to take on the challenge :slight_smile: Maybe one day. I personally use a single core for CPS1, CPS2, CPS3, FB Neo Arcade, FB Neo AES, and FB Neo CD, and saving configurations and shaders is very tedious. The files have to be named differently, and saving hundreds/thousands of games this way can be a waste of half your life :slight_smile:

2 Likes

The actual baseline functionality wasn’t difficult for me to implement. There are some issues that need to be addressed:

  • If we pick a title straight from a playlist, we can get the name of the playlist and find a matching preset file. If there are multiple playlists with the same title, we always get the one we picked from (this is good).
  • If we pick a title from History or Favorites, we get a special name. I.e. these would be treated as their own playlists (not good)
  • When we use the search function and create views, the playlist title will be one of the playlist files that has a matching entry. How this matching is done is not clear (not good).
    • If there is a 1:1 content to playlist mapping, this won’t be a problem. It’s only a problem if multiple playlists have copies of the same content (acceptable).
1 Like

History and Favorites playlists should probably not use the same playlist format as other playlists at all. Most of the keys in the playlist don’t make sense for them, and ambiguities are also created. Currently history and favorites include entries directly in their list. They instead should reference a playlist index. When the referred playlist updates itself, the index may no longer match, so a check tag can be included, probably the entry label as every playlist entry should have that.

Views could potentially be handled in a similar way.

1 Like

I’ve wanted this feature for some time now.

Here’s a use case where it could be useful:

Sameboy/
Nintendo - Game Boy.slangp
Nintendo - Game Boy.opt
Nintendo - Super Game Boy.lpl.slangp
Nintendo - Super Game Boy.lpl.opt

Same content directory, separate playlists, different overrides, one core.

No need to associate a separate core for the SGB playlist, or to duplicate your Game Boy roms with a different folder name.

1 Like

I have 4 problems with playlists currently and one thing that I wish was better explained

One is a complex problem in the manual playlists caused by both the way the manual scanner default options work and a limitation of the format that seems accidental or a premature optimization that causes playlists renamed to lose thumbnails: https://github.com/libretro/RetroArch/issues/18012

The other is related, not multisystem (system as in retroarch lingo so the mame database makes a “system” even if mame is a multisystem emulator but since there is no ares database that is not a “system”) playlist entries not history or favourites or search saved playlists (new feature) shouldn’t have the system name per game entry. It increases playlists size by probably 20 percent and is kind of ironic besides (the reason renamed playlists lose thumbnails is that the playlist name minus extension is used as a path component to find several things among them the system thumbnails dir, and yet that setting is repeated in every single game entry as db_name)…

The 3rd is that 2 useful features should be done in manage playlists, refresh can rerun with the exact same settings already but if you want to edit only some settings in a manual playlist you need to refresh then back up twice to the manual scanner to edit the filled entries… this is also a cstring hygiene bug. The other is a “refresh all playlists” button that works in both manual and normal playlists.

The 4th is to make manual playlists work with the explore/search tab by using a database query that selects the system and title search to find what to search, instead of system and serial or whatever it does for normal playlists.

5 is a step by step help/tutorial of how to setup android SAF access for both local compressed directories and WebDAV/other provider remotes. You don’t need to go into details of how to setup a Apache WebDAV server, or how to make it work for both the local network and mobile data (even more complex) but only show that the option exists for retroarch+ RSAF + squash file or any server, maybe with a simple example of a rclone user space WebDAV server (it’s a one liner) and mentioning that if you want a faster self hosted server Apache is a option and if you don’t want self hosted any rclone API is option since rsaf uses it. While you’re at it publicize the portable playlists feature and it’s use to reuse playlists in NAS storage or just relocate the games dir.

1 Like

I also have a small problem with the ScummVM core in that I suspect this method of NAS will not work for it (ScummVM playlists creation is special and reuses ScummVM.ini paths and ScummVM uses another approach for SAF, so the saf-ied paths would not match). But with ScummVM I can use upstream since it has its own saf support (it’s slow to scan though which I hack around by adding games in the CMD line in the server -its not recusive so it’s faster and has some other naming advantages too- manually editing and transferring the ini file).

The saved search playlists were done in a better way. They are a different kind of file. And when I pick something off a search, it finds one of the matching playlists the file is a part of (I don’t fully understand how it does that) as its ‘cached’ playlist, and this essentially lets us see what the source playlist is during game initialization.

I don’t use ScummVM at all. Could you share a short example of what the ScummVM playlist looks like?

ScummVM playlists are created by the core itself. ScummVM core is first started up with start core then you let it scan the games itself (or provide a sufficiently problematic settings agnostic Scummvm.ini time if you find that intolerably slow - i use ScummVM CMD line and bash to create this in my server, edit out settings that conflict and edit the paths to the “SAF” version of them then import it into -scummvm android upstream not retroarch android- because it’s mucho much faster and has less false positives and the names of unknown games are better to add insult to injury).

Anyway after that you have a normal ScummVM window with the games, then go into global options and the backend tab. In the retroarch core version there will be a button to create playlist which does what you’d expect.

This was done this way because although ScummVM CAN run games by just giving them a engine identifier retroarch scanner(s) had no option to put such a I’d into the playlists (the older method was the user putting a file in the game dir and was as horrid as you’d expect with thousands of games) and because the ScummVM scanner frankly does very complicated things retroarch can’t like putting in different options in the engine for different versions of the same game, turning a game into 2 or more, changing options due to user in gameoption changes, etc etc etc.

So to avoid bugs related to misidentified games that wouldn’t exist upstream, retroarch just punted everything to ScummVM. First you use ScummVM, then the playlist gets created by the user/core not the RA scanner.

I would not even mention it because I agree with this mostly. Except I’m pretty sure that if retroarch finds a (upstream not core) ScummVM rsaf path, it’s different than the retroarch rsaf path. Their prefixes are different so the core itself has to be fixed to work with the libretro saf prefix. I wouldn’t mention it myself, except it’s a obvious incompatibility which kind of has to be fixed for anyone using upstream scummvm network storage to use it for retroarch ScummVM. With luck it’s just changing a string prefix. But considering how ScummVM likes to use some kind of encoded paths to avoid forbidden characters it might be more complicated than this.

As I said a very specific to one core problem for a feature that retroarch in general is only implementing bit by bit now (cores need to use libretro VFS for passing SAF paths to work).

If the saved playlists views are indexes into actual playlists that’s both interesting and worrying with how they have to be not indexes but mappings because the base playlists will change often.

Frankly I love manual playlists and the manual scanner much much more than any other in retroarch regretable necessities like scummvm aside. Views are cool but they’re only useful supported by other metadata features like a lucene like tag search system (which doesn’t exist), better story/character related tags (I like the hardcore101 tags but anything more than the basic “action adventure” is better. The best tag there is “franchise” and frankly that one is not too good either, won’t mention series/subseries numbers or clones) and a robust amount of metadata (which exists for some platforms but not all). Worse with the manual system it’s wholy dependable on using only names+system to match since checksum or serials aren’t there at all. I’m assuming this is the root of the problem of finding a whole lot of missing games in the explore tab, more than missing metadata. And maybe sometimes changed nointro/redump names (I’m ignoring some dumps I use that have no actual retroarch database like whdload Amiga dumps which were “supported” by mapping their actual names to the commodore Amiga database somehow, which only works with the normal scanner not the manual).

If you want more details how scummvm core does the mapping currently, it takes the name scummvm core assigned it in the ini file (for the label) and the id that serves as a identifier for the whole config settings and quirks per game and makes a “fake file” which DOESNT exist named id.scummvm. Then the core knows that when passed a file like that it can run the ‘game that exists in the parent dir’ with ‘the game id the same as the filename minus extension’.

Beats the previous ‘solution’ which was the user creating a file with “name they wanted on the playlist.scummvm” ,+ engine id written inside (NOT game id, scummvm can assign variants of the engine id to different games to make them not repeat). That one caused problems because of the games running without the quirks or just the user not bothering when they realized they had to create thousands of files.

Any updates on this?

Probably not for a while. If anyone else wants to take a stab at it I can share a diff of what I did. Basically I can get this to work as a concept but it has too many issues to be ready as a feature.

1 Like

If things get stuck or become “impossible” I suggest a different solution for this problem.