Skip to content

1.1.0

Latest

Choose a tag to compare

@guitaripod guitaripod released this 30 Jul 17:13
· 1 commit to master since this release

Performance

Two hot paths were burning CPU on every visit:

  • The gzip cache held one entry and cleared itself on every miss. A page load fetches app.js, style.css, data.json and art.json, so each evicted the last and the 2.8 MB data.json was recompressed on every load — 41 ms of CPU per request. Now an 8-entry LRU: 41 ms → 1 ms.
  • /__status re-parsed 2.8 MB of JSON on every poll, every 6 seconds during a cover download. Now cached against file mtime and size: 20 ms → 0.5 ms.

Idle cost is 36 MB of RAM and 0.00% CPU.

Lifecycle

  • ./start.sh --status — shows whether it's running, the URL, the passphrase, disk used and cover count, whether the container is up or down. Reads the passphrase from the data volume instead of grepping logs, which rotate.
  • The startup banner now reports the real cover count (2888 covers ready) instead of always claiming a download is in progress, and only suggests a SteamGridDB key when covers are actually placeholders.
  • Cover downloads run at nice 10 and are capped at 6 parallel requests (ART_WORKERS, lower it on a Raspberry Pi).
  • In-page polling backs off to 30 s when the tab is hidden and resumes on return.

Removed

The Cloudflare Workers deployment (src/worker.js, wrangler.jsonc) is gone, along with the hosted instance. Self-hosting is the only path, which was always the point.

Install

docker run -d --name ps3catalog -p 8731:8080 -v ps3catalog:/data ghcr.io/guitaripod/ps3catalog:v1.1.0
docker logs ps3catalog        # prints your passphrase