* add immich_model
* graph per shape
* decouple ocr from ort
* prepared graphs
* use f16 for accelerators
* preload all shapes
* warm-up pass after preload
* keep precision for fp32 graphs
* ensure padding for text recognition
* optimize postprocessing for fp16 outputs
* handle raw ctc logits
* use f16 output for rknn
* mmap token embedding
* read device metadata
* ask before deleting local only photos on android 10 and below
* move the delete consent prompt into _cleanupLocalAssets
* ask on android 11 as well before deleting local photos
* ask before deleting only where android shows no prompt
* split the local delete prompt into its own helper
* pick the local delete dialog in one flat branch and rename notBackedUp to isLocalOnly
* run the first resume after a background launch with a full local sync
* keep the untouched lines of the swift file as they were
* check the background launch at the first resume even after a pause
* play the server copy when the local video file cannot be read
* flatten the video source choice and add tests for it
* drop the platform override from the video viewer test
* fix(mobile): retry the background backup when connectivity is restored
* return the backup result from the zone and drop the unrelated upload test
* flip the background worker bool to needsRetry
* decide the background retry from the upload callbacks
* run the background worker offline again and retry on reconnect with a separate connected gated request
* retry the background backup when any upload fails and keep one worker at a time
* always hand the retry to the connected worker and release the worker lock if startWork throws
* respect the charging only setting on the connected retry worker
* fix(server): compare integrity paths independently of unicode normalization
The untracked-file check compared on-disk paths against the database
byte for byte. macOS writes decomposed (NFD) filenames while an upload
stores the composed (NFC) form, so every asset with a non-ASCII name
came back from getAssetPathsByPaths under a different byte sequence,
was never removed from the candidate set, and was reported as an
untracked file. One reporter saw 14k false positives on a 55k library.
Look the batch up under both normal forms and key the comparison on
NFC, so a path that differs only in normalization is recognised as
tracked.
* test(server): cover normalized integrity lookup
Add documentation for how Locked Folder access applies to the current session, including the temporary unlock period and visibility of locked assets elsewhere in Immich while the session is elevated.
Refs #30724, #29690, #26185.
* add clear file cache handling and snackbar
* create function to count deleted cache size
* clean up code and test
* ensure stable behaviour on non ios device
* refactor(mobile): simplify clear file cache feedback
* fix(mobile): clamp out of range datetimes so timeline queries cannot crash
* replace the per column converters with a clamping custom type
* heal each table in one statement, rename the clamp type, read dates as stored
* one medium test for the clamp, drop the dart side bounds, private clamp type
Update README_zh_CN: typos, links, cleanup
Fixes and cleanup in the Chinese README: corrects image attribute typo (atl -> alt), removes an outdated maintenance note and the Star history embed, normalizes the official docs link (adds trailing slash), and updates the contributors graph URL to the immich-app/immich repository. These are content/metadata adjustments only.
low hanging fruits for the speedup of immich startup
1. don't wait 1s if we actually got the lock
2. move full import from the top of the file to be imported lazily in the branch
* fix(mobile): show the real date for android local photos with no exif
photos with no exif date showed their copy-to-phone date in the "on this device" albums instead of the real date. fall back to the earlier of date_modified/date_added (matches the server + ios), plus a migration to fix the rows already saved wrong.
* persist migration progress when the date backfill fails
* fix local date migration for trash and epoch rows
* cover epoch dates in both local asset tables
* simplify the created date pick and rework the migration test
* heal no-exif dates from mediastore in the v27 migration
* check gallery access from dart and skip dates that do not parse
* let the date heal run once and never block the version
* read the trashed assets through the same cast the sync uses