Login: an interactive sign-in screen (server/email/password via the on-screen
keyboard, touch + d-pad, password masked) shown when there's no usable
credential or a config login fails, plus a "Try the demo server" button. The
bundled Immich logo is now the official transparent PNG (clean edges), drawn
minified on a slow spin for the startup loader.
Logout (cloud menu, top-left) returns to the sign-in screen instead of quitting;
on re-auth, reset_for_account_change() pauses the sync thread, drains the
thumbnail worker, recycles thumbnails, drops the old library/local/search state
and reloads from the new account. The thumbnail worker now builds its auth
header (and resolve list) per request, so a new token takes effect immediately
instead of looping on "invalid user token"; g_serverip is cleared on logout.
Grid: Square now drops focus to the grid AND hides the top bar in one press.
Verified against demo.immich.app (v2.7.5) over TLS 1.2: login, grid/search,
cloud page, logout -> Try demo account switch, all with working thumbnails.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>