RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login

    Announcing Pegasus Frontend

    Scheduled Pinned Locked Moved Ideas and Development
    frontendpegasusc++developmentqml
    1.7k Posts 145 Posters 5.1m Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • AndersHPA
      AndersHP @tronkyfran
      last edited by

      @tronkyfran how about a teaser shot of how your upcoming theme will look like? :) Loved your ES theme and I'm still using your art as launch images for every system I use.

      My "Bubble Bobble" Themed Bartop Arcade
      My Gameboy

      E 1 Reply Last reply Reply Quote 0
      • D
        dirty_monkee
        last edited by dirty_monkee

        I didn't even know I needed this in my life. Really like the "Netflix" Style theme from way early on in post.

        0_1537364324022_f5164d21-61b2-4898-856f-63427deca8ee-image.png

        1 Reply Last reply Reply Quote 0
        • E
          EctoOne @AndersHP
          last edited by EctoOne

          @andershp there was a preview in the theme thread although maybe @tronkyfran is working on something different.

          T 1 Reply Last reply Reply Quote 0
          • T
            tronkyfran @EctoOne
            last edited by

            @ectoone Well, Im changing the background(wasnt very good) and remaking some cover art, at the end its a lot of work, but when its finished I suppose the rest of the systems will be easier.

            1 Reply Last reply Reply Quote 0
            • fluffypillowF
              fluffypillow
              last edited by

              All right, the controls configuration is now online!

              • It is now possible to change which keyboard keys do what (see Settings → Controls)
              • Furthermore, it is also possible to change what the gamepad buttons do (ie. you can swap A/B now)
              • The registered keys can now be queried in themes using api.keys (documentation later), so it's no longer necessary to hardcode the defaults
              • As mentioned previously, the default keys for opening the details and filters panel have been changed to I and F (but now they can be changed). Navigation is fixed to the arrow keys/dpad due to technical reasons.
              • The the gamepad layout screen have been moved under Settings. (In turn, the theme selector will likely move out to a full menu in the future.)
              • The settings file have been slightly changed, data source settings will reset (sorry!)
              • Updated the key handling in every part of the code. If something doesn't work as intended, please report!
              • Minor menu improvements, fixes and memory optimizations
              1 Reply Last reply Reply Quote 3
              • halfmanhalfcakeH
                halfmanhalfcake
                last edited by

                Keep up the good work. Glad to see the custom key binding options :)

                1 Reply Last reply Reply Quote 0
                • fluffypillowF
                  fluffypillow
                  last edited by

                  Ok, the new theme Api functions are now documented on the reference page.

                  As for the next week(s), the plan is to change the asset searching to option #3 as discussed previously (unless there's a strong argument against that) and make some scripts to help with the conversion. Then finally start making themes.

                  E 1 Reply Last reply Reply Quote 1
                  • E
                    EctoOne @fluffypillow
                    last edited by

                    @fluffypillow is option #3 the one where all files are stored in separate folders?
                    If so, I really like that but is that compatible with EmulationStation? I tried to use this method some time ago but I wasn't able to get it to work properly. The gamelist either showed all the subfolders (which added an extra step to launch a game) or, when set to parse gamelist only, nothing showed up at all.

                    fluffypillowF 1 Reply Last reply Reply Quote 0
                    • fluffypillowF
                      fluffypillow @EctoOne
                      last edited by

                      @ectoone Yes, that's the one. The layout would then look something like this:

                      - roms/
                        - game1.zip
                        - game2.zip
                        - media/
                          - game1/
                              - box_front.png
                              - screenshot.png
                          - game2/
                              - box_front.png
                              - screenshot.png
                      

                      So that would be the new media dir based asset searching. As for the ES2 module, the main source of assets is the <image>, etc. tags from the gamelist.xml. In addition, Pegasus also looks for assets with known suffixes under ~/.emulationstation/downloaded_images/, like in the media dir currently. This searching will continue to work... is what I wanted to write, but now that you mention it, as this is something ES itself doesn't even do and the layout is changing on Pegasus' side, I guess this searching could be removed actually? Some people did use this feature though ( @Darksavior ?), perhaps a customizable media-dir-path option could be added to the collections file instead.

                      E DarksaviorD 2 Replies Last reply Reply Quote 0
                      • E
                        EctoOne @fluffypillow
                        last edited by

                        @fluffypillow Your layout might work. When I tried it, I also had the Roms in the corresponding subfolders and apparently ES is not capable to directly access those files.
                        I have to see if your layout is easy to manage or if I keep my current layout with subfolders for each media type within the rom directory. Although I currently prefer my layout because I can easily switch image paths by renaming the folders instead of editing the gamelist.xml.

                        1 Reply Last reply Reply Quote 0
                        • DarksaviorD
                          Darksavior @fluffypillow
                          last edited by Darksavior

                          @fluffypillow My setup is to use as much scraped art as I can from ES for backwards compatibility with ES. I did add the logo and screenshot art that's pegasus exclusive to go in the ES folders /opt/retropie/configs/all/emulationstation/downloaded_images/

                          I faintly remember the logo/screenshot art default was the roms folder which is in my usb stick. I prefer to have all my scraped art together which is on my microsd.

                          I also remember what a pain in the butt it was to scrape or add the art manually. I hope pegasus can have a scraper of its own in the future. Another step to get away from ES.

                          1 Reply Last reply Reply Quote 0
                          • N
                            nemo93
                            last edited by nemo93

                            hi @fluffypillow! I'm still amazed by the progress and functionalities you keep adding on a very regular basis ;) If you don't mind I have 4 additional feedbacks I'd like to share.

                            1. I'm doing a lot of testing these days with adding/removing multiple roms as well as refreshing images/video/metadata. I couldn't find an easier way but to reboot the Pi every time I want to add a new rom or whenever I change my "gamelist.xml" with more/less data. Any chance to see a "restart Pegasus" item or even better a "refresh roms/metadata" item in the menu?

                            2. since you added the key binding and metadata directories stuff I can see a mouse cursor on top left corner of Pegasus UI. Definitely not an issue just a minor annoyance as I'm using Pegasus only with a controller. If you could implement an option to show/(auto)hide the cursor that would be great.

                            3. I've made some stability testing as my Pi is on 24/7/365 (poor thing!). Pegasus proved excellent on that matter. Not a single crash in more than 2 weeks with some precautions. It seems that the more videos (previews of games) Pegasus plays the slower the UI behaves. By slower I mean that after playing several dozens of videos then the UI stops responding for few seconds (when moving to another game boxart) and then it goes back to normal speed. I've also experienced one crash after I left Pegasus on the default system (Amiga in my case) playing back a preview over and over again. After some time (I can't be precise) but it should be around 12-14h perhaps the Pi crashed completely. I had to hard reset. So basically anytime I reboot the Pi I take care to not let the UI playing back a video. I go to the Retropie section where there's no video or go to some game without preview and then everything goes absolutely ok. All to say that to restrict the number of time a video could play would help a lot to improve stability.

                            4. Also but this might be related to Pi hardware itself it seems that previews of mp4 video with high profile (+high bitrate) in 60fps do make playback to stutter. Should I decide to re-encode the video with lower profile and bitrate playback is smooth.

                            If I've missed something or done something wrong please keep me honest. Thank you once again for this amazing frontend.

                            1 Reply Last reply Reply Quote 0
                            • fluffypillowF
                              fluffypillow
                              last edited by

                              @EctoOne @Darksavior then for now I'll leave the ES2 downloaded_images as it currently, and change only the media dir searching. We'll see how that turns out then.

                              @Darksavior Actually I did play with the idea of making a scraper, but then started working on Pegasus :) Some kind of external scraper support will likely be added in the future though.

                              @nemo93

                              1. Yes, a reload function is planned, but that will require some more work on the whole data loading. It'll certainly come in some form in the future.
                              2. Hm, a cursor should only appear if the OS detects a plugged in mouse device. Perhaps some controllers are also detected as having mouse components (eg. the DS4's touch pad)? You can list the connected devices with ls -l /dev/input/by-id in the terminal, see if there's anything funny there. Other than that, defining the environmental variable QT_QPA_EGLFS_HIDECURSOR can also hide the cursor (eg. add export QT_QPA_EGLFS_HIDECURSOR=1 to ~/.bashrc or to the top of /opt/retropie/configs/all/autostart.sh). [Side note, does RetroPie load .bashrc on start?]
                                3-4. Thanks for the detailed testing! I think the video-related issues are caused by GStreamer, the playback backend used on Linux (at least, that tend to produce warnings during playback). I'm afraid I can't do too much about that other than waiting for upstream improvements, but playback limiting could be indeed added as a workaround. I wonder if there's any other GStreamer-using video player available for the Pi (Banshee? Parole?), so we could see if the issue happens there too.
                              E 1 Reply Last reply Reply Quote 0
                              • E
                                EctoOne @fluffypillow
                                last edited by EctoOne

                                @fluffypillow Would it be possible to add an option to ignore subfolders for certain systems?
                                Then a folder layout like this would be possible without the need to enter the subfolders:

                                /system
                                 /game1
                                  game1.zip (or whatever rom extension)
                                  game1.xml (contains the basic metadata for that particular game)
                                  boxart.jpg
                                  thumb.jpg
                                  logo.png
                                  video.mp4
                                /game2
                                  game2.zip
                                  game2.xml
                                  boxart.jpg
                                  thumb.jpg
                                  logo.png
                                  video.mp4
                                

                                Again, this is an available option in Kodi when you link an movie folder to your database. I currently don't want that for any paths, just to hide subfolders for certain systems (if they are not declared in the gamelist).
                                Since I currently don't know how gamelists are created by Pegasus, I use ES as example to make one. That's why I want to have the xml files in the rom folder so that they can be combined by a script or directly with Pegasus (whatever is possible) . So whenever you remove/add a game by adding its folder you can re-run the script to rebuild/clean the gamelist. Only downside would be to loose information for lastplayed and playcount (but I personally don't care for those anyway).

                                A simple xml would then look like this:

                                
                                	<game>
                                		<path>./game1/game1.zip</path>
                                		<name>game1</name>
                                		<desc>game1 description</desc>
                                		<image>./game1/folder.jpg</image>
                                		<marquee>./game1/logo.png</marquee>
                                		<video>./game1/video.mp4</video>
                                		<thumbnail>./game1/game1.jpg</thumbnail>
                                		<rating>0</rating>
                                		<releasedate>19910101T000000</releasedate>
                                		<developer>someone</developer>
                                		<publisher>someone else</publisher>
                                		<genre>pewpew</genre>
                                	</game>
                                

                                Setting up new files would then require only to change the paths and the file name of the rom.

                                This it a suggestion for easier game management and not necessarily for media paths.

                                fluffypillowF 1 Reply Last reply Reply Quote 0
                                • fluffypillowF
                                  fluffypillow @EctoOne
                                  last edited by fluffypillow

                                  @ectoone So if I understand correctly, you'd like to keep the one game = one directory setup, and generate the gamelist-equivalent for Pegasus with a script, right? This is possible; first you'd create a collections.txt file under /system/ (in your example above):

                                  collection: My Games
                                  extension: zip
                                  launch: myemulator "{file.path}"
                                  

                                  Then you'd have a metadata.txt (or whatever you'd like to call it) in each of your game directories, like this:

                                  file: $CWD/game1.zip
                                  title: Game 1
                                  description: The #1 of Games
                                  assets.boxFront: $CWD/boxart.jpg
                                  assets.video: $CWD/video.mp4
                                  rating: 99%
                                  release: 1991-01-01
                                  developer: Someone
                                  publisher: Someone Else Ltd.
                                  genre: pewpew
                                  

                                  Then you'd run a script that goes through these small metadata files, replaces a piece of text with with the path to the game directory and merges the results together into a /system/metadata.txt file. Something like this:

                                  #! /bin/bash
                                  
                                  rm metadata.txt
                                  for i in $(find $(pwd) -name metadata.txt); do
                                  	sed "s|\$CWD|$(dirname $i)|g" $i >> metadata.txt
                                  	echo >> metadata.txt
                                  done
                                  

                                  In this example I've used $CWD as something that will be replaced with the file's path. You can use whatever you want, or, if you're good with regex, you could actually use just a dot too and tweak the command accordingly.

                                  (The file format itself is documented here.)

                                  E 1 Reply Last reply Reply Quote 0
                                  • E
                                    EctoOne @fluffypillow
                                    last edited by

                                    @fluffypillow I'm a noob when it comes to write scripts but yes, I believe you understood what I meant.
                                    My question still is, what will show up in Pegasus afterwards. A bunch of folders with the corresponding games or just the games?
                                    If it's the later that would be perfect.

                                    fluffypillowF 1 Reply Last reply Reply Quote 0
                                    • fluffypillowF
                                      fluffypillow @EctoOne
                                      last edited by

                                      @ectoone Just the games :) You can use the script above as-is (save it as eg. get-meta.sh under /system/) or you can use the following one-liner after cding into /system/:

                                      rm metadata.txt; for i in $(find $(pwd) -name metadata.txt); do sed "s|\$CWD|$(dirname $i)|g" $i >> metadata.txt; echo >> metadata.txt; done
                                      
                                      1 Reply Last reply Reply Quote 1
                                      • fluffypillowF
                                        fluffypillow
                                        last edited by

                                        I've just made a script that converts the current media layout to the new one, you can get it here. Copy it next to the media dir, make it executable (chmod +x convert_media.py) and run from there (./convert_media.py). It will ask for confirmation before changing anything, but you might want to backup/zip your current media dir first.

                                        1 Reply Last reply Reply Quote 0
                                        • N
                                          nemo93
                                          last edited by

                                          Thanks @fluffypillow. I do confirm that I had a wireless keyboard/mouse combo connected to my Pi hence the cursor! Your workaround works nicely. Regarding the player to be honest I don't know. Seems like OMXplayer is the other player available for the Pi but not sure it's as flexible as Gstreamer. I'm wondering if the fact most of my previews are running at 60fps can be a cause of the crash.

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            SephirothX2004
                                            last edited by

                                            I have Pegasus running great on my android phone however i would like to request the ability to have different wallpapers for each system if at all possible.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            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.