Skip to content

Conversation

@SneakyStarling
Copy link

This Artie update focuses on improving the user experience and attempts to maximise scraping success.

  • An overhauled rendering routine and threaded input event handler result in a more responsive and pleasant user experience.
  • Fallback routines ensure more ROMs (and m3u!) will scrape successfully
  • You can now include additional metadata with your game description.
  • Preview box art while scraping.

What's Changed

(1) Overhauling the (screen)update loop. Removing as much unneeded overhead as possible led to better frame times, and thus app smoothness is improved.

  • Drive io is removed from the default render loop. System, Rom and missing media data is stored in memory and updated whenever changes are expected.
  • Key (button) events are no longer referenced with string values, avoiding unnecessary string comparisons in the render loop
  • A frame pacing routine is added to the update loop to keep a target refresh rate of 20 fps and avoid unnecessary CPU hogging.
  • Removed loading dialog "Checking existing media...", it was displayed on screen for too short to be readable, which made it distracting.
  • Removed drawing boxes for unfocused menu items to speed up rendering
  • Switched font to DejaVuSansCondensed, another clean-looking free-to-use font for anyone (license file included) that has a lower rendering overhead.

(2) Scraping functionality

  • If find game URL using the rom fails Artie will now try to find the URL using a name & system search, if that fails to it will log an error.
  • Added single retry for failed scrape with 0.5 second delay, as some scrapes fail first but succeed in a second attempt.
  • Scraping saves boxart paths to a set guarded by a threading lock to prevent concurrent access issues.
  • After a scrape completes a preview box with the artwork and the completion or in case of "scrape all" the scrape counter is drawn on screen.

(3) Overhauling input.py. Continuous input monitoring and storing events until they are handled led to a more responsive UI. The approach allows for different behavior on tap, hold, and release.

  • Input now runs in its own thread and continuously listens to button events.
  • Button events (activation and deactivation) are saved in an input dictionary, and concurrent access errors are prevented with a threading lock.
  • The key_pressed method is updated and now times button events to allow for natural interactions, such as button tapping and scrolling when holding.

(4) UI improvements

  • For easier hand-picked scraping Artie now stays in the roms screen after a single rom is scraped unless no more unscraped roms are left to be scraped. The cursor will jump to the rom listed above the one that was just scraped, unless it is already in the first position, in which case it will stay there.
  • Added the possibility to move up from the first entry in a menu to go to the last entry and visa versa.
  • Moved Rom count and missing media texts a bit to keep systems with longer names and folders with 100+ roms within the bounds of the screen (they were cut-off before).
  • Added the possibility to show image files on screen with the display_picture method in graphic.py. The method swaps color channels before it draws the image on screen because artwork from screenscraper.fr appears to be BGRa encoded instead of RGBa.

(5) User options and convenience

  • Additional logic to identify where roms are stored.
    1. Falls back to SD1 if SD2 is not found
    2. A routine that attempts to identify game systems for folders if the user used a different naming convention than the default.
  • An option to include additional metadata in the game description (developer, game rating, number of players, age rating.
  • An option to disable searching in sub-directories (Very convenient for DOS games).

(6) Tweaks

  • Tweaked the default box-art settings to something that looks good in the default muOS pixie theme.
  • Bumped op world "wor" in the priority list for artwork scrapes (from last to third after us, eu).
  • Moved the position of log messages down to match better with the text location of boxart preview boxes.
  • Updated the version number to 1.0.7
  • A new manual build option for github that keeps the repo clean (the artifact can be downloaded from the Actions page and is structured in a way that the archive can be installed with the muOS Archive Manager).

…s, clean manual build option for github, tweaks (#1)

This update includes the following:
- Additional logic to identify where roms are stored.
  1. Falls back to SD1 if SD2 is not found
  2. A routine that attempts to identify game systems for folders if the user used a different naming convention than the default.
- An option to include additional meta data in the game description (developer, game rating, number of players, age rating.
- The ability to scrape meta data for m3u files using just the game name.
- An option to disable searching in sub-directories (Very convenient for DOS games).
- A new manual build option for github that keeps the repo clean (the artifact can be downloaded from the Actions page and is structured in a way that the archive can be installed with the muOS Archive Manager).
This update focuses on the efficiency and responsiveness of Artie.

The main changes include:
(1) Overhauling the (screen)update loop. Removing as much unneeded overhead as possible led to better frame times, and thus app smoothness is improved.
- Drive io is removed from the default render loop. System, Rom and missing media data is stored in memory and updated whenever changes are expected.
- Key (button) events are no longer referenced with string values, avoiding unnecessary string comparisons in the render loop
- A frame pacing routine is added to the update loop to keep a target refresh rate of 20 fps and avoid unnecessary CPU hogging.
- Removed loading dialog "Checking existing media...", it was displayed on screen for too short to be readable, which made it distracting.
- Removed drawing boxes for unfocused menu items to speed up rendering
- Switched font to DejaVuSansCondensed, another clean-looking free-to-use font for anyone (license file included) that has a lower rendering overhead.

(2) Scraping functionality
- If find game URL using the rom fails  Artie will now try to find the URL using a name & system search, if that fails to it will log an error.
- Added single retry for failed scrape with 0.5 second delay, as some scrapes fail first but succeed in a second attempt.
- Scraping saves boxart paths to a set guarded by a threading lock to prevent concurrent access issues.
- After a scrape completes a preview box with the artwork and the completion or in case of "scrape all" the scrape counter is drawn on screen.

(3) Overhauling input.py. Continuous input monitoring and storing events until they are handled led to a more responsive UI. The approach allows for different behavior on tap, hold, and release. 
- Input now runs in its own thread and continuously listens to button events.
- Button events (activation and deactivation) are saved in an input dictionary, and concurrent access errors are prevented with a threading lock.
- The key_pressed method is updated and now times button events to allow for natural interactions, such as button tapping and scrolling when holding.

(4) UI improvements
- For easier hand-picked scraping Artie now stays in the roms screen after a single rom is scraped unless no more unscraped roms are left  to be scraped. The cursor will jump to the rom listed above the one that was just scraped, unless it is already in the first position, in which case it will stay there.
- Added the possibility to move up from the first entry in a menu to go to the last entry and visa versa.
- Moved Rom count and missing media texts a bit to keep systems with longer names and folders with 100+ roms within the bounds of the screen (they were cut-off before).
- Added the possibility to show image files on screen with the display_picture method in graphic.py. The method swaps color channels before it draws the image on screen because artwork from screenscraper.fr appears to be BGRa encoded instead of RGBa.

(5) Tweaks
- Tweaked the default box-art settings to something that looks good in the default muOS pixie theme.
- Bumped op world "wor" in the priority list for artwork scrapes (from last to third after us, eu).
- Moved the position of log messages down to match better with the text location of boxart preview boxes.
- Updated the version number to 1.0.7
@milouk
Copy link
Owner

milouk commented Aug 13, 2025

Hi @SneakyStarling , sorry for the late reply, past months were quite busy. I reviewed your changes and i like them. Can you please rebase on main branch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants