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>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# vitaImmich
|
||||
|
||||
Minimal proof-of-concept [Immich](https://immich.app/) client for the PS Vita.
|
||||
It connects to your Immich server and shows your photo library as a scrollable
|
||||
chronological grid (newest first), with a full-screen viewer.
|
||||
|
||||
## Requirements
|
||||
|
||||
- A PS Vita with HENkaku/h-encore and VitaShell
|
||||
- An Immich server reachable from the Vita's Wi-Fi (recent Immich version —
|
||||
it uses `POST /api/search/random` and `GET /api/assets/{id}/thumbnail`)
|
||||
- An Immich API key (web UI → Account Settings → API Keys)
|
||||
|
||||
## Building
|
||||
|
||||
Needs [VitaSDK](https://vitasdk.org/) with the `libvita2d`, `curl`, `openssl`,
|
||||
`zstd`, `zlib`, `libpng`, `libjpeg-turbo` and `freetype` packages installed
|
||||
(via `vdpm`).
|
||||
|
||||
```sh
|
||||
export VITASDK=$HOME/vitasdk
|
||||
export PATH=$VITASDK/bin:$PATH
|
||||
cmake -B build -S .
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
This produces `build/vitaImmich.vpk`.
|
||||
|
||||
## Installing & configuring
|
||||
|
||||
1. Copy `vitaImmich.vpk` to the Vita and install it with VitaShell.
|
||||
2. Launch it once — it creates `ux0:data/vitaimmich/config.txt`.
|
||||
3. Edit that file (VitaShell → SELECT for FTP makes this easy):
|
||||
|
||||
```
|
||||
server=http://192.168.1.100:2283
|
||||
apikey=your-immich-api-key
|
||||
```
|
||||
|
||||
4. Relaunch the app.
|
||||
|
||||
## Controls
|
||||
|
||||
Grid view:
|
||||
|
||||
| Button | Action |
|
||||
| ------------- | ------------------------------- |
|
||||
| D-pad | Move selection (hold to repeat) |
|
||||
| L / R | Jump two rows up / down |
|
||||
| X | Open photo full screen |
|
||||
| START | Exit |
|
||||
|
||||
Full-screen view:
|
||||
|
||||
| Button | Action |
|
||||
| ------------- | ----------------------- |
|
||||
| Left / Right | Previous / next photo |
|
||||
| X | Retry a failed photo |
|
||||
| O | Back to grid |
|
||||
| START | Exit |
|
||||
|
||||
More of the library is fetched automatically (100 photos at a time, newest
|
||||
first) as you scroll toward the end. Errors are shown on screen and logged
|
||||
to `ux0:data/vitaimmich/log.txt`.
|
||||
|
||||
## PoC limitations
|
||||
|
||||
- TLS certificate verification is disabled (no CA bundle is shipped), so
|
||||
prefer plain HTTP on a trusted LAN or treat HTTPS as unverified.
|
||||
- Thumbnails stream in on a background thread (one at a time over a
|
||||
keep-alive connection); cells show a grey placeholder until loaded.
|
||||
- Caps at 1000 photos per launch; no albums, search, video or upload.
|
||||
Reference in New Issue
Block a user