ps1: official-style ICON0/PIC0/PIC1 artwork with PSN templates

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.
This commit is contained in:
2026-09-07 19:23:38 -04:00
parent 2433240628
commit f6dccbec24
6 changed files with 325 additions and 72 deletions
+7 -5
View File
@@ -872,6 +872,7 @@ def convert(
cancel_event=None,
complevel: int = 1,
icon0: Optional[bytes] = None,
pic0: Optional[bytes] = None,
pic1: Optional[bytes] = None,
) -> Path:
"""Convert a PS1 disc image to ``out_path`` (an ``EBOOT.PBP``).
@@ -880,9 +881,9 @@ def convert(
``.iso``/``.img``/``.bin``. ``base_pbp`` must be a PSN PS1 classic EBOOT.
``complevel`` is the DEFLATE level for the disc data (1-9; 0 = raw, which
does not boot on real hardware and is only useful for diagnostics).
``icon0`` (144x80 PNG) and ``pic1`` (480x272 PNG) override the generated
icon/background; when absent the base PBP's ICON0 is reused and PIC1 is
left empty.
``icon0`` (80x80 PNG), ``pic0`` (310x180 PNG) and ``pic1`` (480x272 PNG)
override the generated art; when absent the base PBP's ICON0 is reused
and PIC0/PIC1 are left empty.
"""
if not base_pbp.is_file():
raise ConversionError(f"base.pbp not found: {base_pbp}")
@@ -916,7 +917,7 @@ def convert(
"sfo": sfo,
"icon0": icon0,
"icon1": b"",
"pic0": b"",
"pic0": pic0 or b"",
"pic1": pic1 or b"",
"snd0": b"",
"data_psp": data_psp,
@@ -986,6 +987,7 @@ def convert_to_folder(
cancel_event=None,
complevel: int = 1,
icon0: Optional[bytes] = None,
pic0: Optional[bytes] = None,
pic1: Optional[bytes] = None,
) -> Path:
"""Convert a PS1 disc into a game folder ready for /PSP/GAME.
@@ -1000,7 +1002,7 @@ def convert_to_folder(
convert(source, title, game_id, base_pbp, folder / "EBOOT.PBP",
progress_cb=progress_cb, cancel_event=cancel_event, complevel=complevel,
icon0=icon0, pic1=pic1)
icon0=icon0, pic0=pic0, pic1=pic1)
return folder