- Cache the UMD/game cover templates AND their transparent-window rects
(computed once, under a lock). The old code re-ran an O(w*h) Python pixel
scan on every composited cover, stalling video cover loading and scraping
for ~1s per cover with GIL contention.
- ScrapeDialog: ignore stale search/scrape results via a generation counter
and cancel in-flight workers when a new search/scrape starts; clear threads
on close.
- MetadataWorker (library details): cancel stale metadata fetches and delete
finished workers/threads instead of leaking one per item selection.
Library covers go back to libretro -> OpenVGDB -> ScreenScraper ->
Wikipedia -> IGDB (last resort) for all systems, including PS1. The EBOOT
ICON0 (ps1_art) alone now tries IGDB first for clean banner-less box art,
falling back to the normal pipeline.
- ICON0: scale the cover to fit the case slot (no cropping), centred with
the frame's dark background behind the letterbox bars.
- PIC0: shrink the title font until the full name fits instead of cutting
it with an ellipsis (falls back to eliding only below 10px).
- Cover art: try IGDB first for PS1 so the cover is clean box art without
the PlayStation banner that libretro/ScreenScraper thumbnails bake in
(redundant with the ICON0 case frame).
- PIC0: elide long titles with an ellipsis and word-wrap the description to
3 lines with a trailing ellipsis instead of clipping/overflowing.
- PIC0: remove the PS3 badge; PSP only for now (PS3/PS4 packaging is future
work).
Replaces the letterboxed 144x80 icon + cropped PIC1 with official-looking
PS1 Classics art:
- ICON0 (80x80): cover art composited into the bundled case frame (PS logo
+ 'PlayStation.' wordmark) from data/ps1_templates/ICON0.PNG.
- PIC0 (310x180): a PSN-style info board drawn in code — title, IGDB
description, ESRB badge (from IGDB age_ratings) and PS3/PSP badges.
- PIC1 (480x272): the bundled launch background template.
The converter now embeds PIC0, the PS1 tab previews all three images, and
ps1_art pulls IGDB description/ESRB as best effort. Templates are git-ignored
(user-supplied, like base.PBP) with a drawn-art fallback when missing.
Selecting a pending disc in the PS1 tab now shows a live preview of the
ICON0 (144x80 XMB icon) and PIC1 (480x272 launch background) that the
converter would embed, fetched asynchronously so the UI stays responsive.
Converted discs/EBOOTs show an 'already converted' notice, and ps1_art now
falls back to a name-derived cache key when a disc has no serial.
Fetch the game's cover art (libretro / ScreenScraper / IGDB / Wikipedia,
reusing the local cover cache) and bake it into the EBOOT's ICON0 (144x80
XMB icon) and PIC1 (480x272 launch background) instead of the default PS1
icon. Best-effort: falls back to the base icon/empty background when no art
is found. convert()/convert_to_folder() gain optional icon0/pic1 params.