Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

Announcing Pegasus Frontend



  • New user here, I am trying to build a Pegasus portable+Retroarch in Windows10.
    Sorry if this is too long :D

    I currently launch Pegasus with --portable, this is my folder structure:

    \config
    p.bat
    pegasus-fe.exe
    \ra... retroarch unpacked here, updated, cores downloaded, etc
    README.md
    \roms
    \roms... roms in subfolders
    \skraper... skraper.net i am using here
    \themes

    My game_dirs.txt (works nice this way)

    ./roms/zxspectrum
    ./roms/snes
    ...

    The problem I am having is with paths in the launcher I think.
    I use this for example for Snes

    launch: "..\ ..\ra\retroarch.exe" "-L i:/00noah2/ra/cores/snes9x_libretro.dll" "{file.path}"

    Retroarch is launched ok because when Pegasus launch it, it's ran from the rom folder where you have the roms are, (check cwd config option).

    But it seems RA can't see the dll once launched.
    I thought the default folder could be \ra instead of \roms\snes, but don't work

    launch: "..\ ..\ra\retroarch.exe" "-L .\cores\snes9x_libretro.dll" "{file.path}"

    And get the same error:

    [ERROR] RetroArch is built for dynamic libretro cores, but libretro_path is not set. Cannot continue.
    [ERROR] Fatal error received in: "init_libretro_sym()"

    Now lets see variations in the launch line, the point here are the "s
    This launchs RA ok
    launch: "..\ ..\ra\retroarch.exe" "-L .\cores\snes9x_libretro.dll" "{file.path}"
    log:

    2019-05-13T20:24:17 [i] Executing command: [I:/pegasus/ra/retroarch.exe,-L ..\..\ra\cores\snes9x_libretro.dll,I:\pegasus\roms\snes\3x3 Eyes - Juuma Houkan (Japan)-english.zip]
    2019-05-13T20:24:17 [i] Working directory: I:/00noah2/ra

    But then RA only exits, cant' see the dll, I've tried ....\ra\cores instead of .\cores (thinking that RA changes default folder once it's ran), but the same problem.

    This faults Pegasus (werfault is called in my machine and it exits)
    launch: "..\ ..\ra\retroarch.exe -L .\cores\snes9x_libretro.dll" "{file.path}"
    log:

    2019-05-13T20:35:14 [i] Working directory: I:/pegasus/ra/retroarch.exe -L /cores
    2019-05-13T20:35:14 [w] Could not launch I:/pegasus/ra/retroarch.exe -L /cores/snes9x_libretro.dll. Either the program is missing, or you don't have the permission to run it.

    It messes completely folders and executable to launch?

    Finally, this also exits pegasus
    launch: "..\ ..\ra\retroarch.exe -L .\cores\snes9x_libretro.dll {file.path}"
    log:

    2019-05-13T20:36:57 [i] Working directory: I:/pegasus/ra/retroarch.exe -L /cores/snes9x_libretro.dll I:/pegasus/roms/snes2019-05-13T20:36:57 [w] Could not launchI:/pegasus/ra/retroarch.exe -L /cores/snes9x_libretro.dll I:/pegasus/roms/snes/3x3 Eyes - Juuma Houkan (Japan)-english.zip`. Either the program is missing, or you don't have the permission to run it.

    Has anyone build a portable pegasus+ra installation? how did you make RA to work with non fixed paths?

    edit: I've also used this in settings file
    cwd: ..\ ..\ra
    launch: "retroarch ..."
    but paths got messed again

    @fluffypillow some other things you may consider,

    Pegasus it's eating 30% of my i5 4cores, just idling? Nothing I care, but ? Some debug stuff?

    portable mode in settings.txt?

    general.portable: true

    Would be nice.

    I got a lot of problems scraping, I finally used Skrape.net program with generic scraping. But for example videos didn't play with gameOS theme. After some digging in source code (providers code), I found how you expected some folder names, and then map them to your stuff. This solved my problem:

    SkraperAssetsProvider::SkraperAssetsProvider(QObject* parent)
    : Provider(QStringLiteral("Skraper"), PROVIDES_ASSETS, parent)
    , m_asset_dirs {
    // NOTE: The entries are ordered by priority
    { AssetType::ARCADE_MARQUEE, QStringLiteral("screenmarquee") },
    { AssetType::ARCADE_MARQUEE, QStringLiteral("screenmarqueesmall") },
    { AssetType::BACKGROUND, QStringLiteral("fanart") },
    ...etc

    I think it could be useful for other users to put this in the documentation, as I spent a lot of time googling pegasus scraping and found many people having problems with folders. Also with others providers.

    If a launch process lasts 1-2 seconds, obviously something went wrong.
    Instead of showing again the list of games, maybe it's useful to report some error, and instead of just logging it to file, show last lines of log in a dialog or something like that. Maybe this is just too user friendly? But I think it could help a lot in complex installations.



  • @bleuge Hi, "-marks in commands mean that things between the "s should be treated as a single argument to the launched program. They are often used to avoid issues when a path contains spaces. Now RetroArch's -L is a standalone parameter; instead of

    launch: "..\..\ra\retroarch.exe" "-L i:/00noah2/ra/cores/snes9x_libretro.dll" "{file.path}"

    it should be

    launch: "..\..\ra\retroarch.exe" -L "i:/00noah2/ra/cores/snes9x_libretro.dll" "{file.path}"

    Pegasus it's eating 30% of my i5 4cores, just idling? Nothing I care, but ? Some debug stuff?

    Haven't experienced that personally, but I'd be interested whether it happens to other Windows users. Also different themes may have different system requirements as well.

    portable mode in settings.txt?

    Not possible to switch that during runtime due to platform file system differences :( I was thinking about either including a portable-mode .bat file though, or improving the documentation for this.

    I got a lot of problems scraping

    Pegasus supports these kinds of directory layouts:

    • Per-game directories: assets for the games are looked at <romdir>/media/<gamename>/<assettype.ext>. You can find an example and list of accepted file names here. A visual example of the asset types is here.
    • Per-asset-type directories (aka Skraper): assets for the games are stored at <romdir>/skraper (or media)/<assettype>/<gamename.ext>. The directory layout is automatically created by Skraper. Support for this layout can be turned off in the settings menu.

    It is also possible to manually define assets in the metadata files. Also if enabled, the assets of other programs like EmulationStation or Steam are picked up automatically.

    I think it could be useful for other users to put this in the documentation

    I agree the documentation would need some work, hope I'll have some time eventually.

    If a launch process lasts 1-2 seconds, obviously something went wrong

    Nah some things just take time, especially if networking (eg. Steam) is involved or with a large number of games.

    instead of just logging it to file, show last lines of log in a dialog or something like that

    Yes, I'd like to do that eventually!



  • @fluffypillow Thanks for all the information!
    If I got to put a working portable pegasus+ra I'll put the info here for other users.

    Edit: works! thanks for clarification.
    These are my folders, you can change names etc...
    .\pegasus : put here pegasus files, launch pegasus with --portable, or make a bat file
    .\ra : unpack retroarch here, download cores, etc...
    .\roms\ : roms in subfolders here, you can use a Retropie rom folders for example

    Add roms subfolders this way in \config\gamedirs.txt file
    .\roms\nes
    .\roms\snes
    etc...

    Launch line in metadata.pegasus.txt files in each rom subfolder, this is for example from my Snes subfolder

    collection: Super Nintendo Entertainment System
    description: Super Nintendo Games
    extension: zip
    launch: "..\..\ra\retroarch.exe" -L ".\cores\snes9x_libretro.dll" "{file.path}"
    

    Of course you'll need to change the core for each rom platform.

    I've also scraped with skraper.net app, @fluffypillow has a short guide about this, I only needed to change some folder names after skraper end. I am using gameOS theme working with videos, etc. I can make a short guide about this because required some skrape.net tweaking...

    Now you can launch pegasus from a pendrive, an external hd, any folder, etc...
    Happy gaming!



  • As for the weekly update, no changes in Pegasus due to lack of proper time. However I've started planning and doing some initial work on a graphical metadata file editor, might get released soon.



  • Weekly update! I was working on the graphical metadata editor, might get it finished this week. Here's how it looks at the moment:

    screenshot



  • @fluffypillow
    I'm having issues with your converter-Gameboy Color is taking a ES2 file with video tags and converting with just a jpeg file and no video.



  • @KryPtAlIvIaN Could you upload the ES2 file that produces such problems?



  • Well, hello.. I've got a little problem: I can't run Pegasus in my Windows 7. I double-click the "pegasus-fe.exe" file, it shows the loading bar but it freezes and crashes. Do I need to do something before opening the app or something? This frontend looks so great man

    Btw, here's the log: https://pastebin.com/EuZJswDS
    I've also got 3 ".dmp" files at "AppData\Local\CrashDumps" if it is important:
    https://drive.google.com/drive/folders/1KovTQfF6ZSdWgzLtYEDQpuy57-oAM-De?usp=sharing



  • @luis0henrique Hi, someone also just reported a very similar bug, so maybe that's what happened to you too. It seems this is caused by certain GOG games, which make Pegasus crash on Windows. Unfortunately I don't know which ones yet (maybe some newer games?), but in case you'd be willing to share your list of installed GOG games, that'd greatly help with fixing this bug.

    In case someone else also runs into this, here's the GitHub issue, also with a workaround until it's fixed.



  • Weekly update! The metadata editor is now available and ready for testing. Give it a try!

    I've also started looking into this GOG bug but haven't managed to fix it yet. Will take a deeper look not that the editor is out.



  • @fluffypillow Adjustable columns in stock theme when?:)
    I guess the pi isn't that powerful to show this many games at once.
    20190526.jpg



  • @Darksavior no theme settings yet, but you can change it in the sources: replace these lines with

    property real columnCount: 2
    

    (or your preferred column count). I think 1 makes images a bit too big, but 2 might look nice for your setup.



  • @fluffypillow Wouldn't that make all columns for each system to be "2"? Sorry, I'm not familiar in editing this stuff. Ehh, it's fine. I can wait for it to mature and be a bit more user friendly.



  • @fluffypillow
    Can you add an option to disable video previews in settings? For example my RPi can play the previews but unfortunately it does not use gst-omx or the libav video acceleration provided by ffmpeg and runs quite hot after a short time.



  • @Darksavior ah you'd like to set it per-platform, that's also possible. Change the code like this:

            property real columnCount: {
                if (platform.shortName == "arcade") return 2;
                if (cellHeightRatio > 1.2) return 5;
                if (cellHeightRatio > 0.6) return 4;
                return 3;
    

    and similarly for other platforms.

    @5schatten I'd like to, as soon as there are theme settings. There's also the plan to improve the video playback in general. In the meantime, you could edit the source as well, by removing this line. It brings up the problem of how you start the video though...



  • @fluffypillow can you share Horizon theme to test it?



  • @spartan well it's here, functional but still quite incomplete. Feel free to try it out though!



  • @fluffypillow
    well video playback works fine on other platforms or at least they don't run hot as the Pi does. The main problem for me is that even though I added packages like this https://github.com/5schatten/LibreELEC-RR/blob/libreelec-9.x-rr/packages/5schatten/depends/gst-omx/package.mk Qt does not really care about the video acceleration.

    ES for examples uses VLC which can be patched to use MMAL https://github.com/RPi-Distro/vlc/blob/stretch-rpt/debian/patches/mmal_8.patch to handle video acceleration und runs quite fine.

    So it would be great if you could find a way to either utilize these vendor packages or if you could change the way gst-libav handles video playback because normally the ffmpeg package should use MMAL for playback too.



  • @5schatten I did some experiments with gstreamer some time ago, but the hardware acceleration didn't work well back then (and I suppose it doesn't now either). I'd like to write a custom media backend for Qt common on most platforms (which could be even VLC), but that's probably going to be a bit larger task. At the moment I'm trying to focus on functional issues, features, then documentation, but once they're done I do plan to improve this part too (it has some problems on other platforms too).



  • Hello! thanks again @fluffypillow as your frontend is really performing amazingly well and I have no single crash for weeks now that I completey got rid of ES2. Well done! Below my really last comments on what's missing to make it even better from the get-go.

    1. to echo @5schatten I agree that there's an issue with loop playback of video on the Pi. If you leave PE as is your Pi will crash after a while due to load/temperature. I'm going to test with another package I've found here. I have not tested yet. As a workaround I did change this line to prevent the playback loop. Video will play once and then stop. Just move to another video and get back to it will trigger playback once more. Not the most elegant but it works!
      => question: any chance to define somewhere the video has to loop just 2 or 3 times max (or even better to have an option in the settings)?
    playbackMode: Playlist.Sequential
    
    1. by default whenever a video asset is being set in the "metadata.txt" file but doesn't exist, this will crash Pegasus. In fact it doesn't crash yet it get stuck as it endlessly tries to read the non-existing file. Any way to prevent this?
      => UPDATE: changing the playbackMode to the one above #1 solved this. I suggest to default to that playbackMode at least for Pi users to prevent any crash and overheat in Pegasus.

    2. A "Restart" option in the Quit menu would be awesome. To reboot PI for any single change is a bit tiresome :)

    3. Metadata. I did spend quite lot of time to ensure all metadata for every single game were correct. That's why I felt a bit off not to have the genre, players # as well as release date on the right panel. I did some search and found those lines. I did the following change to add player # below the dev/publisher element.
      However for the release date I've failed to understand the logic. First in the code something is wrong as it says game.year instead of game.release as expected from the doc. All my game entries do have a property like this release: <date in YYYY-MM-DD format>. I have to say I've converted my ES2 gamelists using the online converter (which is great!). Now if I go ahead and change with game.release I got a super long date including seconds, minutes etc.
      => I'd love to simply add the release date in the current format (YYYY-MM-DD) or even better in the format I'd like (dd mmm yyyy). How to achieve that please (if possible)?

    if (game.genre) {
                    if (text_tmp)
                        text_tmp += "\u000A";
    				
    				text_tmp += game.genre;
    }
    if (game.players) {
                    if (text_tmp)
                        text_tmp += "\u000A";
    				
    				if (game.players > 1)
    					text_tmp += game.players + " players";
    				else
    					text_tmp += game.players + " player";
    }
    return text_tmp;
    
    1. Aspect ratio. By default video doesn't fill the whole "rectangle" they have been assigned to. I have black borders left/right. All videos rely on the 640x480 resolution. I was glad to see at this location an option to move to fillMode: VideoOutput.Stretch instead. That's cool! However I'd like to take it to the next level as this doesn't work well for vertical shmups for instance. In that case the video is... well... stretched :)
      => My idea was to seek for a way to detect the height and width of a video. Then if height > width we keep the fillMode: VideoOutput.PreserveAspectFit otherwise we go with Stretch. I suspect this is either too simple or too complicated :) Anyway I'm quite new to Qml/Qt and I have little time so I didn't investigate further.

    That's all for today :)) Thank you again for this amazing frontend. Love it!
    cheers,



Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.