- Inside an album, SELECT cycles newest / oldest / file name A-Z / Z-A
(natural, case-insensitive; name orders drop the month headers and
L/R jump by initial letter). Asset originalFileName is now parsed.
- Full-screen viewer: Triangle or the "Save to Vita" button downloads
the original (falling back to Immich's full-size / preview JPEG) and
exports it to the Photos app via ScePhotoExport (new src/export.c).
The video downloader is now a generic download_to_file().
- R / L turn the whole viewer 90 degrees clockwise / counter-clockwise
so the Vita can be held upright (new src/viewrot.c): it renders into
a portrait render target drawn rotated, and maps d-pad, sticks and
touch into the turned screen. Zoom moves to the right stick only.
SCREEN_W/H are now variables for that logical screen.
- Server & Backup page: album cover shape setting (vertical 3:4,
square, panoramic 16:9), saved as covershape= in config.txt.
- Test builds: "rup" holds the right stick up in test_input.txt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The album grid now shows a filtered + sorted view of the list:
- SQUARE (or tap the header pill) opens the keyboard to filter albums
by name (case-insensitive); O clears the filter before going back.
- SELECT (or tap the chip) cycles the order: modified newest/oldest,
name A-Z/Z-A. Uses the album's updatedAt from GET /api/albums.
- Cover eviction no longer drops a texture that a visible card still
uses when two albums share the same cover photo.
- README: albums controls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restyle the README: centered hero header, a screenshot row (timeline,
Places map, server/backup), and an emoji feature list. Refresh the feature
set and controls for what shipped since (smart search, the Places map +
cluster gallery, analog-stick map control) and link the releases page.
Screenshots live in docs/.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uKJQMYDE9Nrq9ECsU3MxH
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>
Scrollable chronological photo grid with full-screen viewer, fetching
previews from an Immich server via its REST API. Thumbnails stream in
on a background thread over a keep-alive connection. JPEG decoding is
done with libjpeg directly (vita2d's loader rejects Immich's
APP2-first JPEGs). JSON parsed with vendored jsmn (the vitasdk jansson
package is built as PIC, which vita-elf-create can't handle).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>