Releases: milouk/artie
Release list
๐ Artie v4.1.0 โ Vita Pro, multi-SD, and a stable minor
After eleven patch releases stabilising the v4.0 line, this is the consolidated v4.1 minor. It adds support for the new Anbernic RG Vita Pro alongside the rest of the device fleet, and rolls up the recent multi-SD / stay-awake / language fixes into one stable cut.
โจ New in v4.1.0
- Anbernic RG Vita Pro support. RK3576 devices detect themselves at launch via
/proc/device-tree/compatibleand route SDL's EGL stack through the on-devicelibmaliBifrost driver. Without this Vita Pro would hit the same "app runs but renders nowhere" black-screen we chased on RG35XX Pro back in v4.0.5. No-op on non-RK3576 hardware.
๐ฆ Rolled up since v4.0.6 (the previous stable cut)
Bug fixes
- Both SD1 and SD2 are scanned โ muOS Jacaranda deprecated
/mnt/unionand Artie used to pick whichever ROMs root came first. Multi-SD libraries showed only half their systems. Fixed. - NES/SNES box art now lands where muOS reads from (#54) โ default catalogue paths were
Nintendo NES-Famicom/Nintendo SNES-SFCbut Jacaranda usesNintendo NES - Famicom/Nintendo SNES - SFC(spaces around the hyphen). - NGC/NGPC mapping corrected โ
NGCwas wrongly mapped to Neo Geo Pocket Color. NowNGCis Nintendo GameCube andNGPCis Neo Geo Pocket Color, both as first-class entries with appropriate aliases. - Synopsis language is back in the settings UI (#55) โ the selector was dropped during the v3.x โ v4.x rewrite, locking new users to English with no way to change it. Now a proper choice under Media (
en,es,fr,de,it,pt,nl,sv,da,no,fi,ru,pl,cs,ja,zh). - Bundled the missing
NES.pnglogo so folders literally namedNESget an icon in the systems list.
New features
- Nested ROM folder discovery (#33) โ Artie now walks up to 3 levels deep under your ROMs path, so layouts like
/ROMs/Sega/MEGADRIVE/or/ROMs/Nintendo/Handheld/GBC/work without flat-restructuring your library. - User-editable systems via
systems.jsonโ drop a file next tosettings.jsonto override or add system entries (id, name, catalogue) without rebuilding. See README โ "Custom systems". - Stay-awake during long batches โ
CAFFEINEis held for the duration of the run loop on muOS builds that ship it, so 1000-ROM batches don't get suspended mid-scrape. - Auto-fallback to name search when ROM hash isn't in the database โ many "failed" ROMs (romhacks, homebrew, fan translations) now scrape successfully without Refine Search.
- Elapsed time alongside ETA in the batch progress overlay โ reads
12/100 โข 24s / ETA 1m48s โข cache 78%. - Mask library โ 12 bundled mask PNGs (gradient/grunge/halftone/splatter) selectable from a dropdown.
- Network status indicator in the header.
- SELECT toggles missing-only filter on the ROMs list.
- Exit safeguard when MENU is pressed mid-batch.
- 63 platform-folder aliases (
GENESISโMEGADRIVE,FAMICOMโNES,PLAYSTATIONโPS, etc.). - Up/Down cycles ROMs in detail view without backing out.
UX polish
- Smoother batch progress bar with outline.
- Branded loading splash on startup (no more "missing credentials" popup flash).
- Virtual keyboard wraps horizontally and vertically.
- Popups no longer stack visually โ each one wipes its predecessor.
- Progress overlay now shows cache hit rate.
- Settings strings/widths cleaned up.
โ Drop-in update. Install over your existing v4.0.x install. Settings, scraped media, and any masks you've configured are preserved.
๐ Reporting issues: include device/firmware, the steps to reproduce, and a copy of /mnt/mmc/MUOS/application/Artie/.artie/log.txt.
๐ง Artie v4.0.10 โ Multi-SD, stay-awake, language picker
Three real fixes in this release.
๐ Bug fixes
- Both SD1 and SD2 are now scanned for ROMs. muOS Jacaranda deprecated
/mnt/union, the magic overlay that used to merge SD1 and SD2 contents. Apps had to start scanning both mounts explicitly, but Artie was still picking just the first one that existed (whichever of/mnt/sdcard/ROMSor/mnt/mmc/ROMScame first). If your library is split across the two cards, half of it was invisible. Now every valid ROMs root gets walked and its systems merged. SD1 wins on duplicates. - Synopsis language is back in the settings UI (#55). The
synopsis_langsetting was wired through every backend layer but accidentally dropped from the in-app settings screen during the v3.x โ v4.x rewrite. Users on a fresh v4.x install were stuck on English with no way to change it. Added a Synopsis Lang choice under Media with the common ScreenScraper language codes (en, es, fr, de, it, pt, nl, sv, da, no, fi, ru, pl, cs, ja, zh).
โจ New
- Stay-awake during long batches. muOS exposes a
CAFFEINEfunction that suppresses the sleep timer; Artie now turns it on for the duration of the app. A 1000-ROM batch can run for 20+ minutes โ previously that would suspend the device mid-scrape and lose in-flight requests on devices with shorter screen-off timeouts.
โ Drop-in update โ install over your existing v4.0.x install. Settings, scraped media, and any masks you've configured are preserved.
If you hit anything weird (especially around system discovery on multi-SD setups), please open an issue with your ROMs paths and a copy of /mnt/mmc/MUOS/application/Artie/.artie/log.txt.
๐ Artie v4.0.9 โ NES/SNES scrape fix
Quick patch release. If you scraped NES or SNES on muOS Jacaranda 2601 and the box art never showed up in Explore, this is the fix.
๐ Bug fixes
-
NES and SNES box art now lands where muOS reads from. The default catalogue paths (
Nintendo NES-Famicom,Nintendo SNES-SFC) had no spaces around the hyphen โ but Jacaranda's actual catalogue dirs areNintendo NES - FamicomandNintendo SNES - SFC. Result: scrapes "succeeded" but the art was written where the muOS frontend never looked. Confirmed against a real 2601 device. SFCMSU (SNES Hacks) shared the same broken path and is fixed too. Reported in #54. -
NES.png logo bundled. We had
FAMICOM.pngandFC.pngbut notNES.pngโ folders literally namedNEShad a blank space in the systems list. Same artwork asFAMICOM.pngfor visual consistency.
โจ Heads-up for users running v4.0.8 or earlier
If you scraped NES/SNES on a previous version, the box art is sitting in the wrong directory. After updating, delete the old NES/SNES media (X on the systems screen) and re-scrape โ it'll land in the correct catalogue path this time.
If your device's catalogue uses different names, you can still override per-system via systems.json in .artie/ โ see the README under "Custom systems".
โ Drop-in update โ install over your existing v4.0.x install. Settings, scraped media, and any masks you've configured are preserved.
Big thanks to @AaronMT for the careful debugging and SSH'ing in to share the actual directory listing.
โจ Artie v4.0.8 โ Smarter scraping & cleaner UI
Mid-cycle quality release. Tested on device before shipping.
โจ Improvements
- Auto-fallback when a ROM hash isn't in the database. Previously, ROMs that ScreenScraper didn't recognise (romhacks, homebrew, fan translations, non-redump dumps) returned a 404 and were marked failed โ even though searching by cleaned filename would often have found them. Artie now does that search automatically as a fallback before reporting the ROM as failed. Refine Search is still there for the ones the auto-fallback can't find.
- Discover system folders nested under your ROMs path. If you organise as
/ROMs/Sega/MEGADRIVE,/ROMs/Nintendo/Handheld/GBC, etc., Artie now finds them. Walks up to 3 levels deep, stops descending into a folder once it identifies a system, so subfolders inside a system stay grouped (region splits, hack folders) instead of being treated as separate systems. Closes #33. - Elapsed time alongside ETA in the batch progress overlay. Format reads
12/100 โข 24s / ETA 1m48s โข cache 78% โข [B] Cancel. Both elapsed and ETA use the same compact format that ticks live:12sโ1m24sโ1h12m.
๐ Bug fixes
- Popups no longer stack visually. When a smaller popup replaced a larger one (e.g. the cancel-batch popup taking over from the progress overlay), the old popup's bottom strip stayed visible underneath. Each popup now wipes the previous one's footprint before drawing.
- README: stale 'Wi-Fi' wording dropped โ Artie's network probe works over wifi, ethernet, or any other connection.
๐ง Under the hood
- Pre-compiled regex patterns for
clean_rom_name()and the URL log-sanitiser. They run thousands of times per batch โ module-level compile means no per-call cost.
โ
Drop-in update โ install the new .muxapp over your current install. Settings, scraped media, and any masks you've configured are preserved.
๐ง Artie v4.0.7 โ Custom systems + NGC/NGPC fix
Small but useful patch release driven by user feedback.
๐ Bug fix
NGC vs NGPC. The built-in mapping had NGC pointing at Neo Geo Pocket Color, but on muOS NGC is the folder for Nintendo GameCube โ NGPC is Neo Geo Pocket Color. As a result:
- ROMs in an
NGCfolder of GameCube ISOs were getting Neo Geo Pocket Color metadata, and NGPCfolders weren't being matched at all.
Fixed:
NGCnow resolves to Nintendo GameCube (ScreenScraper id 13)NGPCis now a first-class entry for Neo Geo Pocket Color (id 82)- New aliases:
GAMECUBEandNINTENDOGAMECUBEโNGC NEOGEOPOCKETCOLORrealigned: โNGPC(was โNGC)
If you scraped GameCube ROMs into an NGC folder on a previous version, delete that media via the X hotkey on the systems screen and re-scrape โ you'll get the correct GameCube metadata this time.
โจ New: user-editable system overrides
Drop a systems.json file next to your settings.json (i.e. inside .artie/) to fix wrong mappings or register entirely new systems without rebuilding the binary:
{
"MYCONSOLE": {
"id": "999",
"name": "My Custom Console",
"catalogue": "MyConsole"
},
"NES": {
"name": "Famicom (custom)"
}
}Each entry can specify any of id, name, catalogue. Existing systems inherit anything you don't override; brand-new systems require at least id. Folder names are case-insensitive. See the README for details.
This is the modern replacement for hand-editing the old config.json for power users โ same flexibility, isolated to a small overrides file you can delete to revert.
โ Drop-in update. Install over your existing v4.0.x install. Settings, scraped media, and any masks you've configured are preserved.
โจ Artie v4.0.6 โ Polish & Parity
A lot of small, visible improvements over v4.0.5. Tested on device before shipping.
๐ฏ New features
- Exit safeguard during batch scraping. Pressing MENU mid-batch now asks "Batch in progress. Exit anyway?" instead of silently exiting when the current ROM finishes. Press A to exit cleanly, B to keep scraping.
- Live network indicator. Three ascending signal bars in the header show whether ScreenScraper is reachable (green), unreachable (red), or unknown (grey). Checked once every 30 s via a cheap TCP probe โ no API quota used.
- SELECT toggles missing-only view. Quick hotkey on the ROMs list to switch between "show all ROMs" and "show only ROMs missing media". Advertised in the footer pills as
SE: Missing/SE: All. Choice persists tosettings.json. - Failed-ROMs retry prompt. After a batch, if any ROMs failed the summary overlay asks "N ROMs failed. A=retry B=skip" (10 s timeout). Press A to re-run just the failed ones. Doesn't loop on permanently-failing ROMs.
- Smooth animated progress bar with cache hit rate. Batch overlay now reads
45/100 โข cache 78% โข ETA 2.1m โข [B] Cancel. The bar eases between updates instead of jumping tick-by-tick, and the cache-hit percentage lets you see at a glance whether the API or the cache is doing the work. - Bundled mask library (12 masks).
Box MaskandPreview Maskin Settings are now dropdowns over 12 bundled mask PNGs (gradients, grunge, halftone, splatter) โ no need to supply your own files. - Up/Down to cycle ROMs in detail view. Viewing a ROM's detail screen and want to check the next one? Press up or down. No more backing out and pressing Y again per ROM.
- Warning before a no-op scrape. If every media type is disabled in Settings, pressing A or START shows "Enable Box, Preview, Synopsis or Video in Settings" instead of wasting API calls.
- 63 new platform-folder aliases. Artie now recognises
GENESISas a synonym forMEGADRIVE,FAMICOMforNES,PLAYSTATIONforPS,TG16forPCE, and many more. Mapping grew from 93 entries to 156.
๐ง UX polish
- Branded launch splash. Replaces the black-screen flash (and the error-looking "Please configure credentials" popup) at startup. On first launch you're dropped straight into the settings screen with your Username/Password rows waiting.
- Keyboard wrap. The on-screen keyboard now wraps horizontally and vertically โ roll off the right edge and you land at column 0 of the same row; past the bottom and you jump to the top.
- Progress-bar outline. Clearer edge on dark backgrounds.
- Settings mask names stay on screen. Long values like
halftone-dots-1no longer run off the right edge of the row. - Page indicator moved so it doesn't collide with the new network indicator.
- Missing-only filter applies immediately after pressing SELECT (previously required leaving and re-entering the system).
๐ Bug fixes
- Corrupt
settings.jsonno longer silently drops credentials. If the file fails to parse, it's renamed tosettings.json.corrupt(so you can recover it) and the first-launch credential flow kicks in with a loud error in the log โ instead of silently resetting to defaults. CATALOGUE_BASEauto-discovered. Works on SD1, SD2, and/run/muos/storagelayouts automatically; no more media writing to a path the muOS frontend can't see._md5_cacheis now bounded. 512-entry LRU instead of unbounded dict, thread-safe with a lock.- PIL image leak fixed when a mask is resized during batch scraping.
- Retry prompt no longer recurses forever on ROMs that fail every time (e.g. romhacks not in the ScreenScraper database).
- Log spam fixed โ progress line logs only on real completions, not on every ~70 ms animation frame.
โ
Drop-in update. Install the new .muxapp over your current install. Settings and scraped media are preserved.
๐ง Artie v4.0.5 โ muOS Display Fix
๐ Fixes blank screen / "Loading Application" freeze on muOS devices
If v4.0.4 launched but left you stuck on the muOS splash screen with no visible UI, this release fixes it.
What was wrong
pygame-ce's PyPI wheel ships with a headless SDL2 โ it only has the offscreen and dummy video drivers, so on muOS devices the app was rendering frames into memory that never made it to the screen.
muOS actually ships its own SDL2 2.28.5 at /usr/lib/libSDL2-2.0.so.0 with a custom mali video driver for the Mali GPU. On some muOS setups a helper called libmustage.so gets LD_PRELOAD'd and pulls in that system SDL2 by accident, which is why the app worked on some devices. On setups without libmustage.so (e.g. some RG35XX Pro and RG40XXH firmwares), pygame ended up using its own headless SDL2 and drew to nowhere.
The fix
The launch script now explicitly LD_PRELOADs /usr/lib/libSDL2-2.0.so.0 when present, so pygame always uses muOS's mali-capable SDL2 regardless of whether libmustage.so is there.
Also:
- Bundles
libdrm.so.2andlibgbm.so.1inside the muxapp as a safety net, so SDL'skmsdrmdriver has its runtime dependencies available if it's ever needed as a fallback - Logs the active SDL video driver at startup to make future display issues easier to diagnose
Confirmed working
- RG35XXH (muOS Jacaranda 2601.0)
- RG35XX Pro (muOS Jacaranda 2601.1)
- RG40XXH
โ
Drop-in update โ just install the new .muxapp. Settings and credentials are preserved.
Closes #53. Huge thanks to @KnockerDolt, @martion289, and @Calkab for the bug report and diagnostic logs.
๐ง Artie v4.0.4 โ SDL2 Fix
๐ Critical Fix
Fixes app failing to launch on devices running muOS Jacaranda 2601.1 (e.g. RG35XX Pro, RG34XX, RG40XX-H).
Root cause
Since v4.0.0, PyInstaller was auto-discovering the system's libSDL2-2.0.so.0 (v2.26.5 from the Debian build container) through the SDL2 sub-library dependency chain and bundling it alongside pygame-ce's own hash-named copy (v2.28.5). At runtime on the device, the older system version got loaded first and tripped pygame's version check:
RuntimeError: Dynamic linking causes SDL downgrade!
(compiled with version 2.28.5, linked to 2.26.5)
On devices where the bundled SDL2 took precedence, pygame was silently rendering to the headless offscreen driver โ the app ran but every frame was invisible, leaving the muOS "Loading Application" splash on screen forever.
The fix
Exclude the system libSDL2-2.0.so.0 from the PyInstaller bundle so only pygame-ce's hash-named copy ships. This matches how v3.5.1 and earlier were built.
โ
Drop-in update โ install the new .muxapp over your existing install. Credentials and settings are preserved.
Closes #53
v4.0.3
๐ง Artie v4.0.2 โ Device Compatibility
Bug Fixes
๐ฎ SD2 install support โ App now resolves its path relative to the launch script instead of hardcoding a mount point. Fixes #52 where installing on SD2 caused "can't cd to .artie: No such file or directory".
๐บ RG34XX / RG40XX-H display fix โ Switched from pygame.FULLSCREEN to pygame.NOFRAME for display initialization. Fixes black screen on devices with non-standard resolutions (720x480).
๐บ๏ธ RG34XX ROM path โ Auto-detects ROM path at startup (/mnt/sdcard/ROMS or /mnt/mmc/ROMS), fixing launch failures on devices with different mount points.
โ
Drop-in update โ just install the new .muxapp over your existing install.