Startup: bundle the Immich logo (app0:logo.png, transparent + AA) and show a
spinning-logo loading screen while the first page loads on a thread.
Search bar: logo to the left of the field; d-pad up from the top row focuses
the bar, left/right move across field/map/cloud (indigo ring), X activates,
down or [] returns to the grid. The selection square stays hidden while focused.
Cloud: "Made by SadsArches with love" credit; the O/Back button lives on the
See-details menu (top-right, tappable). Reverted the back circle from the
image/detail view.
Resume from sleep: an RTC wall-clock jump triggers an append-only camera
re-scan (startup reserves array headroom so it can't realloc under the worker
/sync threads).
Play overlay redrawn with the AA disc + a baked play-triangle glyph.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- all text renders in the bundled Overpass SemiBold (Immich's
typeface) via vita2d's FreeType path, with a per-pixel-size font
instance cache (vita2d's glyph atlas caches glyphs at their first
drawn size, which rendered stray oversized letters when sizes mixed)
and a system-PGF fallback if the TTF fails to load; the OFL license
ships in the vpk next to the font
- freetype's bzip2 references get failing stubs (the SDK ships no
libbz2 and plain TTFs never hit that path)
- icon rebuilt from the official high-res Immich logo: anti-aliased,
flattened onto white so the LiveArea no longer shows it on black
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The "unsupported protocol" failure was never about HTTPS: the Vita
resolved the public domain to the WAN IP, the router (no NAT loopback)
answered with its own admin page, and curl reported the resulting
HTTP/0.9 garbage as CURLE_UNSUPPORTED_PROTOCOL. serverip= pins the
hostname to the LAN IP via CURLOPT_RESOLVE, keeping Host/SNI intact
for the reverse proxy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>