## immich-app/immich — v3.2.4…v3.3.0-rc.0

_206+ commits._

### Features
- **feat(ml): trt-rtx (#31863)** (76c239c)
- **feat(server): sync OAuth claims on login (#8073) (#29013)** (b35eeb3)
- **feat: extract manufacturer and device for samsung videos (#29375)** (7c0dc08)
- **feat: people management (#31620)** (c12d5e6)
- **feat: memory UI for birthday (#31798)** (9c06df3)
- **feat(server): add support for .jfif files (#31778)** (f8f4051)
- **feat: editors can update album title & description (#31805)** (c4f9e0f)
- **feat(ml): optimized model inference (#31750)** (23f1f87)
- **feat(ml): improve model loading (#31742)** (de13aab)
- **feat(web): add leave album action (#31768)** (253692f)
- **feat(server): linear-light resampling (#31236)** (c0a9146)
- **feat(web): default the activity log to show the latest (#28938)** (7622e95)
- **feat: improved storage template onboarding (#31531)** (a410436)
- **feat(web): use ui lib's context menu for albums page (#31725)** (1aedf1b)
- **feat: birthday memories (#30831)** (d6d0947)
- **feat(mobile): asset face v3 (#31615)** (efbbd32)
- **feat: asset face v3 (#31591)** (54e7ffa)
- **feat(mobile): write the previous checksum when the upload finishes (#31577)** (c68ecb3)
- **feat(web): improve non-Latin text rendering on the map (#31611)** (c6b363e)
- **feat(mobile): stack edited photos over the original on upload (#31082)** (962ffaa)
- **feat: people merge improvements (#31456)** (7b51c50)
- **feat: server imports linting (#31537)** (221ddd3)
- **feat: NestJS 12 and ESM (#31237)** (2a62622)

### Fixes
- **fix: email template (#31859)** (42c4501)
- **fix: library watcher should respect ignore patterns (#31418)** (76c08fa)
- **fix(web): album inconsistencies (#31857)** (0f179b9)
- **fix(server): emit sidecarwrites and assetupdates consequently (#31777)** (5f0c9a5)
- **fix(ml): stricter typing and request validation (#31856)** (ab159b8)
- **fix: favorite workflow step description (#31840)** (d73acbb)
- **fix(server): exclude hidden assets from large files search (#31479)** (8ede1d5)
- **fix(mobile): don't stack an upload with itself (#31851)** (638b6ac)
- **fix(server): write tag updates to exif table (#31425)** (54987c7)
- **fix(server): use GeoNames for reverse-geocoded country names (#30199)** (aa02337)
- **fix(web): keep other comments visible when deleting a comment (#31848)** (970c496)
- **fix(mobile): don't clear cached initial image operation on completion (#31822)** (523c26e)
- **fix(mobile): make cancellation in image providers consistent (#31823)** (93f65b7)
- **fix(server): incorrect scaling of rotated videos when transcoding (#31473)** (d1faeb8)
- **fix: face bounding box label alignment (#31793)** (87e76d8)
- **fix(web): remember selected search type (#31799)** (efb44b8)
- **fix(mobile): ask before deleting local only photos on android 10 and below (#31146)** (fbff5f4)
- **fix: prevent rendering the search filter scrollbar when not needed (#31776)** (520a708)
- **fix(server): attach error handler to accepted sockets to prevent crash on connection reset (#31079)** (e598e10)
- **fix(web): prevent race when editing album description during upload (#31758)** (647a445)
- **fix(mobile): resume after the app was launched in the background (#31557)** (a4af862)
- **fix(mobile): play the server copy when the local video file cannot be read (#31606)** (2466eae)
- **fix(deps): update typescript-projects (#31717)** (92f498d)
- **fix(deps): update dependency @immich/ui to ^0.90.0 (#31720)** (d7bd961)
- **fix: save user_version in migration transaction (#31039)** (da5c2fe)
- **fix(web): refresh people after setting person thumbnail (#31744)** (20862f1)
- **fix(mobile): retry the background backup when connectivity is restored (#30909)** (3e2e8e0)
- **fix(server): compare integrity paths independently of unicode normalization (#31102)** (351ddff)
- **fix: preserve scroll position on memories page (#31588)** (aa38c40)
- **fix: page path in better face clusters guide (#31671)** (9566fb7)
- **fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android (#31709)** (f367ab2)
- **fix(mobile): ios clear file cache feedback (#31401)** (f48d4b3)
- **fix(web): queue buttons focus outline (#31657)** (69e108a)
- **fix(web): scrollable search dropdown on mobile web (#31634)** (227ef01)
- **fix(mobile): clamp out of range datetimes so timeline queries cannot crash (#30490)** (909b8aa)
- **fix(web): correct memory title date (#31643)** (747af32)
- **fix(docs): update README_zh_CN: typos, links, cleanup  (#31654)** (e952715)
- **perf: faster server cold start (#31630)** (64a2fc8)
- **fix(mobile): sync status page goes blank when the counts query fails (#31642)** (398a04e)
- **fix(mobile): prevent live photo from getting stuck during dismiss animation (#28080)** (9994eb3)
- **fix(mobile): show the real date for android local photos with no exif (#29193)** (e8c6218)
- **fix(mobile): fill video placeholder to prevent flicker on open (#31621)** (5c80373)
- **fix: set limit maximum zoom in asset viewer (#31609)** (810454a)
- **fix(mobile): make EXIF provider reactive (#31552)** (bd59a37)
- **fix(web): refactor some styling (#31269)** (32b2cdb)
- **fix(mobile): load more than one image on Android with Remove animations (#31587)** (2e98d74)
- **fix(web): trim strings before searching/comparing (#31614)** (320d909)
- **fix: vscode formatting (#31612)** (891c405)
- **fix: skip faces of other users when reassigning faces (#31580)** (e35aa71)
- **fix: make local album provider reactive (#31582)** (bea31eb)
- **fix: metadata extraction of faces (#31551)** (a84de01)
- **fix: put back search untagged button (#31476)** (49491d9)
- **fix: feature face update ignores soft-deleted faces (#31533)** (ef9718e)
- **fix: face label clipping (again) (#31402)** (53395d0)
- **fix: honor memory filters on explore page (#31540)** (acd91c2)
- **fix(web): show full path on hover in duplicates utility (#31468)** (070ef03)
- **fix(web): scroll timeline to top when navigating without a scroll target (#31464)** (0f901ee)
- **fix: sync client disconnect (#31461)** (9abb605)
- **fix(web): preserve search type (#31394)** (5747009)
- **fix(web): asset remains in timeline after archive (#31348)** (2152191)
- **fix: show partner assets on people page (#31435)** (be3bb2a)
- **fix: immich-dev (#31447)** (f6501d2)
- **fix(server): vacuum after migrations, concurrent reindex (#31424)** (e039168)
- **fix: only run version check in production env (#31443)** (72f1034)
- **fix(web): change "View asset owners" to "Hide asset owners" when enabled (#31393)** (f0b12b9)
- **fix: backport PRs requested review team (#31377)** (86ae0dd)
- **fix(deps): update dependency maplibre-gl to v6 [security] (#31355)** (68e3409)
- **fix: memory page navigation (#31334)** (d2245c7)
- **fix(mobile): hide negative age (#31341)** (9563309)

### Docs
- **docs: update backup settings menu path to Database Dump Settings (#31270)** (6f14ae5)
- **docs: document locked folder session behaviour (#31735)** (8de97ae)
- **docs: link to the docker compose builder (#31610)** (f304885)
- **docs(server): document the UTC timestamp format for timeBucket (#31421)** (7abd625)

### Chore
- **chore: version v3.3.0-rc.0** (a9d1022)
- **chore(web): update translations (#31376)** (3b2ed90)
- **chore(deps): update dependency opentofu to v1.12.6 (#31173)** (8fb3737)
- **chore(deps): update terraform cloudflare to v4.52.9 (#31325)** (de5c49a)
- **chore(deps): update grafana/grafana docker tag to v12.4.11-ubuntu (#31324)** (8d3a87b)
- **chore: log assets deletion in background job (#31770)** (0733cc1)
- **refactor(web): rating shortcuts action (#31804)** (c25b6e3)
- **refactor(web): use ui's Select and remove old settings dropdown component (#31841)** (4d51dca)
- **refactor(web): a few more album actions (#31839)** (93ad364)
- **chore(deps): update node (#31813)** (bf5b21b)
- **chore(deps): update base-image to v202609281550 (#31850)** (ae49913)
- **chore: clean up hwaccel device_cgroup_rules (#31812)** (6b978d0)
- **chore(mobile): enable dead code CI (#31753)** (2ccd0ef)
- **chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.12 (#31714)** (7f14913)
- **chore(deps): update dependency eslint-plugin-unicorn to v75 (#31721)** (e66f2c7)
- **refactor(web): stack-related service and actions (#29403)** (5689b0c)
- **refactor(web): breadcrumbs navbar for tags and folders (#31727)** (8b1b9b9)
- **chore(deps): update dependency @types/node to ^24.13.5 (#31713)** (959d46c)
- **refactor(web): use actions and ui lib context menu (#31729)** (a9ce155)
- **chore(mobile): migrate OCR, Tag, and UserMetadata to Store (#31704)** (91247f1)
- **chore(deps): update github-actions (#31718)** (0fa1399)
- **chore(deps): update machine-learning (#29123)** (202015e)
- **chore(mobile): make Person Store reactive via Drift (#31661)** (241ca1e)
- **chore(mobile): mise clean command (#31635)** (47f349c)
- **refactor: remove assets from album action (#29210)** (c5cdbef)
- **chore(docs): add note about opening issues to contributing (#31607)** (6c0a34f)
- **chore(mobile): centralize duplicate mesmerizing header components (#31590)** (64de380)
- **chore: drop tsc-alias (#31583)** (ab5a9ae)
- **chore(deps): update base-image to v202609151314 (#31585)** (9e0362d)
- **chore(deps): update dependency onnxruntime to v1.29.0 (#31563)** (8ab8ce8)
- **chore(deps): update dependency onnxruntime-migraphx to v1.27.1 (#31568)** (cab12ec)
- **chore: transition to nullable user.oauthId (#31560)** (99fd561)
- **chore(deps): update github/codeql-action action to v4.38.0 (#31575)** (76e8513)
- **refactor(web): simplify some styling (#31550)** (bc1d6a6)
- **chore(deps): update node.js to v24.21.0 (#31576)** (1fb13c2)
- **chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.9 (#31562)** (b6e9ae9)
- **chore(deps): update node (#31329)** (e55ac29)
- **refactor: reenable cloud ids (#30345)** (ca4637a)
- **refactor: migrate to new changePassword endpoint (#31277)** (d2928ce)
- **chore: reset shouldChangePassword on password change (#31276)** (db6a5b0)
- **chore(mobile): shared DataController for management of data sources (#31457)** (c9eeede)
- **chore(mobile): name pr builds after their pr number (#31541)** (aa8c5be)
- **chore(deps): update node.js to v24.21.0 (#28626)** (f4461c9)
- **chore: separate renovate groups for ml engines (#31516)** (eb84a5a)
- **refactor: error handling (#31455)** (f346fe1)
- **chore(mobile): static Store to unify and streamline reactivity (#31099)** (6874c07)
- **chore: version v3.2.0 (#31441)** (c0eed49)
- **chore(mobile): correctly rename person form state class (#31428)** (7a6cfa6)
- **chore(deps): update github-actions (#31328)** (c5fea7f)
- **refactor(mobile): convert `CropAspectRatio` to an enhanced enum (#31119)** (d6dc6dc)
- **chore(mobile): split out Timeline dragging into new widget (#31255)** (ed38695)
- **chore(mobile): split Timeline widget into smaller parts (#31223)** (df7494b)
- **chore(mobile): remove unused code (#31280)** (8d90cbe)
- **chore: pump flutter to 3.47.2 (#31285)** (1dedbe4)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/immich-app/immich?utm_source=github-action)._