12 Commits
Author SHA1 Message Date
ninoandClaude Opus 5.5 64a240b082 Viewer: save to Vita, turn with L/R; album name order, cover shape setting
- 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>
2026-10-24 13:08:11 -06:00
ninoandClaude Sonnet 4.6 07890191cf Add albums support, API layer, and Docker improvements
- Add albums browsing and navigation (src/albums.c, src/app.c)
- Extract API calls into dedicated src/api.c module
- Improve display and UI components
- Update CMakeLists.txt to include new source files
- Refactor Dockerfile for better build process

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-23 14:11:00 -06:00
SadsandClaude Opus 4.8 66b9d77ac4 Add geotag "Places" map with raster LOD tile pyramid
New src/map.c (unity-build part) adds a map screen reached from the search
bar's map button:
- Fetches geotag markers (GET /api/map/markers), projects with Web Mercator.
- Clusters markers into count "bubbles" in map space (anchored to the world,
  so panning translates them instead of reshuffling); pan (d-pad/touch),
  zoom (L/R/pinch). X or tap zooms into a cluster, or opens a lone/co-located
  photo — fetching that asset on demand if it isn't paged into the grid —
  and returns to the map on back.
- Base map: a Web-Mercator LOD tile pyramid generated offline from a MapChart
  PNG (tools/png_to_tiles.py -> assets/maptiles.pak); the level matching the
  on-screen scale is drawn from 256px JPEG tiles decoded into pooled textures
  (the crash-safe path), with a coarse overview underneath so there are no
  gaps while tiles stream in. Georeferencing (full longitude, lat band) was
  fit from isolated-island centroids so markers land on land.

main.c uses a larger vita2d vertex pool; app.c wires the mode in.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 04:24:03 +02:00
SadsandClaude Opus 4.8 fc2127450f Cloud-status badges from Immich SVGs; remove the bottom HUD bar
Replace the grid status dot with the Immich cloud icons (rasterized from the
provided SVGs to white transparent PNGs: cloud = on server, cloud-off = on
device, cloud-done = on both). Drawn white in the cell's bottom-right corner,
no background, with a 1px dark shadow for legibility (red tint on failure).
Icons rendered high-res, thinned, and LANCZOS-downscaled so they stay
anti-aliased at badge size.

Also drop the bottom HUD hint bar on every page (draw_hud is now a no-op).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 19:33:04 +02:00
SadsandClaude Opus 4.8 e54179f5c3 Startup logo spinner, search-bar focus nav, resume rescan, logo + AA play
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>
2026-06-13 17:39:01 +02:00
Sads ba7a30c41d Smart search bar 2026-06-13 14:46:07 +02:00
SadsandClaude Fable 5 462c4580f0 Immich theming: Overpass font, anti-aliased white icon
- 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>
2026-06-13 01:52:14 +02:00
Sads aab839fae8 added touch scroll 2026-06-12 22:13:48 +02:00
Sads f09f0d0757 Add camera media sync with upload support 2026-06-12 13:18:52 +02:00
Sads ea759255da Downloads and plays MP4 videos using the Vita's GPU decoder. Shows
progress on download, supports pause/resume and seeking during playback.
  Videos are deleted after viewing.
2026-06-12 12:07:54 +02:00
SadsandClaude Fable 5 bb137f2da9 Add serverip= config option to pin the domain to a LAN IP
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>
2026-06-12 00:07:08 +02:00
SadsandClaude Fable 5 b7ac3768a8 Initial commit: Immich client PoC for PS Vita
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>
2026-06-11 23:34:27 +02:00