feat(site): serve the Jaguar CD art as one zip and list the CD database (#1013) (#1016)

build_site.py now writes "thumbnails/Atari - Jaguar CD.zip" next to the
mirror. It holds only Named_*/*.png under an "Atari - Jaguar CD/" folder,
so it unzips straight into RetroArch's thumbnails directory and can be
offered to libretro-thumbnails#141 as-is. Entries are sorted with a fixed
timestamp, so the same images always give the same bytes.

The core info now lists "Atari - Jaguar CD" alongside "Atari - Jaguar",
so once libretro-super builds that rdb, RetroArch offers this core for
discs a scan matches. The mirror README records what still has to land
upstream: the thumbnail repo, the rdb build line, and a RetroArch
scanner fix (every Jaguar CD track is AUDIO, and the scanner only hashes
data tracks).

Co-authored-by: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Joe MattielloandClaude Opus 5.5 authored and GitHub committed 2026-10-17 17:54:03 -04:00
1 parent e49d5649a9
commit 744e9a3860
4 files changed
+50 -10

No files matched your search

+1 -1
View File
@@ -15,7 +15,7 @@ systemid = "atari_jaguar"
# Libretro Features
supports_no_game = "true"
database = "Atari - Jaguar"
database = "Atari - Jaguar|Atari - Jaguar CD"
savestate = "true"
savestate_features = "3"
cheats = "true"
+26 -1
View File
@@ -8,7 +8,8 @@ Inputs (committed in this repo):
leading comments)
site/style.css the one stylesheet
site/assets/* images, copied verbatim
site/thumbnails/* Jaguar CD artwork mirror, copied verbatim
site/thumbnails/* Jaguar CD artwork mirror, copied verbatim, plus one
drop-in zip per system (see write_thumbnail_zips)
docs/cd-boot-matrix.md parsed for the CD compatibility table
Makefile CORE_BASE_VERSION -> JSON-LD softwareVersion
@@ -42,6 +43,7 @@ import json
import re
import shutil
import struct
import zipfile
import subprocess
import sys
from pathlib import Path
@@ -154,6 +156,28 @@ def die(msg):
# ------------------------------------------------------- repo-derived facts
def write_thumbnail_zips(src, dest):
"""Write <dest>/<System>.zip for each system folder in src.
The zip holds only <System>/Named_*/*.png, so it unpacks straight into
RetroArch's thumbnails directory (and is what libretro-thumbnails#141 is
offered). Entries are sorted with a fixed timestamp, so the same images
always give the same bytes.
"""
for system in sorted(p for p in src.iterdir() if p.is_dir()):
pngs = sorted(f for f in system.glob("Named_*/*.png") if f.is_file())
if not pngs:
continue
with zipfile.ZipFile(dest / (system.name + ".zip"), "w",
zipfile.ZIP_DEFLATED) as zf:
for f in pngs:
info = zipfile.ZipInfo(f.relative_to(src).as_posix(),
(1996, 1, 1, 0, 0, 0))
info.compress_type = zipfile.ZIP_DEFLATED
info.external_attr = 0o644 << 16
zf.writestr(info, f.read_bytes())
def read_core_version(makefile):
"""softwareVersion for the JSON-LD, straight from the Makefile.
@@ -1734,6 +1758,7 @@ def main():
thumbs_src = SITE_SRC / "thumbnails"
if thumbs_src.is_dir():
shutil.copytree(thumbs_src, out / "thumbnails")
write_thumbnail_zips(thumbs_src, out / "thumbnails")
(out / ".nojekyll").write_text("")
nav_items = []
+20 -8
View File
@@ -5,7 +5,9 @@ libretro-thumbnails has an "Atari - Jaguar CD" repository (libretro-thumbnails/l
The Virtual Jaguar desktop app falls back to this mirror for disc titles that libretro-thumbnails
does not have, so upstream art wins as soon as it exists. URL layout is the same as
thumbnails.libretro.com: `<base>/Atari - Jaguar CD/<Named_Boxarts|Named_Titles|Named_Snaps>/<name>.png`
(spaces and punctuation URL-encoded). Not submitted to libretro-thumbnails.
(spaces and punctuation URL-encoded). Offered to libretro-thumbnails in
libretro-thumbnails/libretro-thumbnails#141; the site also serves every image as one zip,
`<base>/Atari - Jaguar CD.zip`, built by `scripts/build_site.py`. It unzips to `Atari - Jaguar CD/Named_*/`.
Layout follows libretro-thumbnails: `Named_Boxarts/`, `Named_Titles/`, `Named_Snaps/`, one PNG per
game, named exactly after the game name in libretro-database
@@ -74,11 +76,21 @@ was used for the title and snap.
Primal Rage, World Tour Racing. Better gameplay snaps for the rest would need a human at the pad.
- Headless caveat from the repo docs applies: confirm in RetroArch if exact presentation matters.
## Upstream status (checked 2026-10-13, read-only)
## Upstream status (2026-10-17)
- No `Atari_-_Jaguar_CD` repo exists, and libretro-thumbnails has no submodule for it.
- libretro-thumbnails issue #141 "Missing repository" (opened 2024-07) is still open; a maintainer noted
there is no database for the system.
- libretro-database ships `metadat/redump/Atari - Jaguar CD.dat` but no `rdb/Atari - Jaguar CD.rdb`, so
RetroArch cannot yet scan Jaguar CD discs into a matching playlist; the thumbnail repo name only
matters once that rdb exists.
For RetroArch to show these without the mirror, four things have to land:
1. **Thumbnail repo.** `libretro-thumbnails/Atari_-_Jaguar_CD` does not exist yet. Only an org
maintainer can create it; requested in libretro-thumbnails#141. After that, these files go in by
PR, and a submodule entry goes into libretro-thumbnails/libretro-thumbnails.
2. **Database.** libretro-database already has `metadat/redump/Atari - Jaguar CD.dat` (one Track 1
CRC per game), but no `rdb/Atari - Jaguar CD.rdb`. The rdb is built by libretro-super's
`libretro-build-database.sh`, which needs a `build_libretro_database "Atari - Jaguar CD" "rom.crc"` line.
3. **Core info.** `virtualjaguar_libretro.info` has to list the database:
`database = "Atari - Jaguar|Atari - Jaguar CD"`.
4. **RetroArch scanner.** Every Jaguar CD track is `AUDIO` in the cue sheet. RetroArch's cue and CHD
CRC paths hash only data tracks, so a scan computes no CRC and an rdb alone matches nothing. The
fix has to hash Track 1.
Until all four land, Manual Scan with the custom system name `Atari - Jaguar CD` labels Redump-named
discs by file name, and that is enough for thumbnails, once the repo from item 1 exists.
+3
View File
@@ -20,6 +20,9 @@ that libretro-thumbnails does not have.</p>
<p>Layout matches libretro-thumbnails:
<code>/thumbnails/Atari%20-%20Jaguar%20CD/&lt;Named_Boxarts|Named_Titles|Named_Snaps&gt;/&lt;Redump%20name&gt;.png</code></p>
<ul>
<li><a href="Atari%20-%20Jaguar%20CD.zip">Atari - Jaguar CD.zip</a>: every image in one file. It unzips
to an <code>Atari - Jaguar CD</code> folder; put that folder in RetroArch's <code>thumbnails</code>
directory</li>
<li><a href="Atari%20-%20Jaguar%20CD/README.md">README</a>: sources and attribution (box art from
TheGamesDB, titles and snaps generated with Virtual Jaguar)</li>
<li><a href="Atari%20-%20Jaguar%20CD/SOURCES.tsv">SOURCES.tsv</a>: one row per game, with every file name and its source</li>