Based on Immich v3.3.1
Gallery changes
- fix(e2e): write map-marker GPS only after the upload pipeline finishes (#1169)
- fix(server): one taken-date and filter predicate for the timeline, suggestions, facets, map and search (#1158)
- feat: per-user favorites — asset_favorite overlay, viewer hearts, cross-scope filters (#763) (#819)
- feat(spaces): let space editors edit space members' assets (#734) (#992)
Other Gallery changes
- refactor: read the viewer's space role from the spaces list on web and mobile (#1161)
- refactor(server): resolve the viewer's scope in one module (#1157)
- refactor(web): one person-scope module for personal vs space people (#1160)
- refactor(server): let the S3 backend own its proxy read slot and route storage I/O through the backend (#1159)
- refactor(server): route personal face placement through one face-assignment module (#1156)
Upstream commits
- chore: version v3.3.1
- docs: Add MACHINE_LEARNING_MODEL_REVISION variable to docs (immich-app#32247)
- chore(web): update translations (immich-app#32246)
- fix: show date on memories page (immich-app#32245)
- fix: run workflow steps in their configured order (immich-app#32241)
- feat: shared person indicator (immich-app#32238)
- fix: include unamed people in otherPeople (immich-app#32239)
- fix(mobile): prevent rapid toggling and rerendering of cells (immich-app#32236)
- fix: clarify people sharing does not share assets (immich-app#32234)
- chore: mark people users endpoints as beta (immich-app#32233)
- docs: document persistent QNAP database storage (immich-app#32229)
- fix: include partner shared assets for people even without showInTimeline (immich-app#32226)
- feat: custom release notes (immich-app#32191)
- fix(server): read ISO values above 65535 (immich-app#32183)
- fix(mobile): keep memories full screen while swiping (immich-app#32174)
- chore: version v3.3.0
- fix(web): show face name label above box when it would be hidden (immich-app#32168)
- fix(ml): incorrect outputs on alchemist and battlemage (immich-app#32148)
- fix: memories mobile sync for older clients (immich-app#32167)
- fix: memory upcoming query (immich-app#32166)
- feat: birthday memory on mobile (immich-app#32165)
- chore: milder birthday memory text (immich-app#32163)
- fix(web): don't swallow Escape when person name editor is closed (immich-app#32161)
- chore(web): update translations (immich-app#32022)
- fix: allow translation backports (immich-app#32153)
- feat(ml): ppocr v6 (immich-app#32151)
- fix: person without assets (immich-app#32117)
- fix: select hidden people (immich-app#32116)
- docs: add QNAP install guide (immich-app#32105)
- fix(web): album reactivity (immich-app#32111)
- fix: people page search (immich-app#32108)
- fix: strip workflow step ids from user-facing actions (immich-app#32106)
- fix: bounding box label clipping due to reactivity issue (immich-app#32107)
- fix(web): no trash actions when trash is empty (immich-app#32104)
- fix: stale memory cover (immich-app#32101)
- fix(server): don't select an audio stream ffprobe could not identify (immich-app#32062)
- chore: version v3.3.0-rc.2
- chore(deps): update dependency sharp to v0.35.4 [security] (immich-app#32032)
- chore(deps): update base-image to v202610021601 (immich-app#32031)
- fix: improper filename sanitizing (immich-app#32028)
- fix: assetTagFilter any matching (immich-app#32027)
- fix: metadata extraction for media streams with unknown profile (immich-app#32023)
- fix(cli): sidecar precedence (immich-app#32021)
- fix(ml): upgrade to openvino 2026.4.1 (immich-app#32020)
- feat(web): default to date storage template during onboarding (immich-app#32018)
- feat(web): add shortcut to remove assets from an album (immich-app#32015)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation (immich-app#32011)
- fix(mobile): don't re-upload a photo the server already has (immich-app#32004)
- fix(mobile): don't start the foreground backup in iOS background launches (immich-app#32002)
- fix(mobile): make the iOS background batch wait for its remote sync (immich-app#32003)
- fix(mobile): face thumbnail stuck blank after renaming a person (immich-app#32001)
- fix(server): include album owner for album shared links (immich-app#31990)
- fix: stale memory thumbnail (immich-app#31977)
- fix(web): alt names (immich-app#31987)
- fix: storage usage display on virtiofs and alike (immich-app#31983)
- refactor(web): tag and create shared link actions (immich-app#31976)
- fix(web): highlight thumbnail select icon on button hover (immich-app#31974)
- fix(server): make library exclusion matching consistently case-insensitive (immich-app#31973)
- fix(ml): widen empty half-precision arrays (immich-app#31962)
- fix(ml): serialize trt-rtx sessions (immich-app#31963)
- chore: version v3.3.0-rc.1
- feat: bulk person management (immich-app#31960)
- feat(mobile): editors can update album title & description (immich-app#31959)
- fix: restore folder view scroll position (immich-app#31946)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation (immich-app#31938)
- fix(server): dont queue unneeded jobs when no xmp file exists (immich-app#31936)
- fix(server): make "limit" paramter use z.coerce (immich-app#31934)
- feat: auto-sync name changes to connected users (immich-app#31931)
- feat(server): create all for owner (immich-app#31930)
- fix(server): person birthdate timezone bug (immich-app#31906)
- fix(deps): update typescript-projects (immich-app#31922)
- chore(deps): update base-image to v202609291109 (immich-app#31921)
- chore(deps): update dependency nodemailer to v9.1.1 [security] (immich-app#31905)
- fix: person management ids validation and permissions (immich-app#31902)
- fix: pick the previous release by version, not reachability (immich-app#31897)
- fix(web): cull offscreen thumbnails on individual shared links (immich-app#31891)
- chore: version v3.3.0-rc.0
- chore(web): update translations (immich-app#31376)
- feat(ml): trt-rtx (immich-app#31863)
- feat(server): sync OAuth claims on login (immich-app#8073) (immich-app#29013)
- feat: extract manufacturer and device for samsung videos (immich-app#29375)
- chore(deps): update dependency opentofu to v1.12.6 (immich-app#31173)
- chore(deps): update terraform cloudflare to v4.52.9 (immich-app#31325)
- docs: update backup settings menu path to Database Dump Settings (immich-app#31270)
- fix: email template (immich-app#31859)
- chore(deps): update grafana/grafana docker tag to v12.4.11-ubuntu (immich-app#31324)
- fix: library watcher should respect ignore patterns (immich-app#31418)
- feat: people management (immich-app#31620)
- fix(web): album inconsistencies (immich-app#31857)
- chore: log assets deletion in background job (immich-app#31770)
- fix(server): emit sidecarwrites and assetupdates consequently (immich-app#31777)
- refactor(web): rating shortcuts action (immich-app#31804)
- fix(ml): stricter typing and request validation (immich-app#31856)
- refactor(web): use ui's Select and remove old settings dropdown component (immich-app#31841)
- fix: favorite workflow step description (immich-app#31840)
- refactor(web): a few more album actions (immich-app#31839)
- chore(deps): update node (immich-app#31813)
- fix(server): exclude hidden assets from large files search (immich-app#31479)
- fix(mobile): don't stack an upload with itself (immich-app#31851)
- chore(deps): update base-image to v202609281550 (immich-app#31850)
- fix(server): write tag updates to exif table (immich-app#31425)
- fix(server): use GeoNames for reverse-geocoded country names (immich-app#30199)
- fix(web): keep other comments visible when deleting a comment (immich-app#31848)
- chore: clean up hwaccel device_cgroup_rules (immich-app#31812)
- fix(mobile): don't clear cached initial image operation on completion (immich-app#31822)
- fix(mobile): make cancellation in image providers consistent (immich-app#31823)
- fix(server): incorrect scaling of rotated videos when transcoding (immich-app#31473)
- feat: memory UI for birthday (immich-app#31798)
- feat(server): add support for .jfif files (immich-app#31778)
- feat: editors can update album title & description (immich-app#31805)
- feat(ml): optimized model inference (immich-app#31750)
- feat(ml): improve model loading (immich-app#31742)
- fix: face bounding box label alignment (immich-app#31793)
- fix(web): remember selected search type (immich-app#31799)
- feat(web): add leave album action (immich-app#31768)
- feat(server): linear-light resampling (immich-app#31236)
- fix(mobile): ask before deleting local only photos on android 10 and below (immich-app#31146)
- fix: prevent rendering the search filter scrollbar when not needed (immich-app#31776)
- feat(web): default the activity log to show the latest (immich-app#28938)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset (immich-app#31079)
- chore(mobile): enable dead code CI (immich-app#31753)
- fix(web): prevent race when editing album description during upload (immich-app#31758)
- chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.12 (immich-app#31714)
- fix(mobile): resume after the app was launched in the background (immich-app#31557)
- fix(mobile): play the server copy when the local video file cannot be read (immich-app#31606)
- chore(deps): update dependency eslint-plugin-unicorn to v75 (immich-app#31721)
- fix(deps): update typescript-projects (immich-app#31717)
- fix(deps): update dependency @immich/ui to ^0.90.0 (immich-app#31720)
- fix: save user_version in migration transaction (immich-app#31039)
- fix(web): refresh people after setting person thumbnail (immich-app#31744)
- fix(mobile): retry the background backup when connectivity is restored (immich-app#30909)
- fix(server): compare integrity paths independently of unicode normalization (immich-app#31102)
- refactor(web): stack-related service and actions (immich-app#29403)
- refactor(web): breadcrumbs navbar for tags and folders (immich-app#31727)
- chore(deps): update dependency @types/node to ^24.13.5 (immich-app#31713)
- docs: document locked folder session behaviour (immich-app#31735)
- fix: preserve scroll position on memories page (immich-app#31588)
- feat: improved storage template onboarding (immich-app#31531)
- refactor(web): use actions and ui lib context menu (immich-app#31729)
- feat(web): use ui lib's context menu for albums page (immich-app#31725)
- fix: page path in better face clusters guide (immich-app#31671)
- chore(mobile): migrate OCR, Tag, and UserMetadata to Store (immich-app#31704)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android (immich-app#31709)
- chore(deps): update github-actions (immich-app#31718)
- feat: birthday memories (immich-app#30831)
- fix(mobile): ios clear file cache feedback (immich-app#31401)
- chore(deps): update machine-learning (immich-app#29123)
- fix(web): queue buttons focus outline (immich-app#31657)
- fix(web): scrollable search dropdown on mobile web (immich-app#31634)
- chore(mobile): make Person Store reactive via Drift (immich-app#31661)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash (immich-app#30490)
- fix(web): correct memory title date (immich-app#31643)
- chore(mobile): mise clean command (immich-app#31635)
- fix(docs): update README_zh_CN: typos, links, cleanup (immich-app#31654)
- perf: faster server cold start (immich-app#31630)
- fix(mobile): sync status page goes blank when the counts query fails (immich-app#31642)
- fix(mobile): prevent live photo from getting stuck during dismiss animation (immich-app#28080)
- fix(mobile): show the real date for android local photos with no exif (immich-app#29193)
- fix(mobile): fill video placeholder to prevent flicker on open (immich-app#31621)
- feat(mobile): asset face v3 (immich-app#31615)
- feat: asset face v3 (immich-app#31591)
- fix: set limit maximum zoom in asset viewer (immich-app#31609)
- feat(mobile): write the previous checksum when the upload finishes (immich-app#31577)
- fix(mobile): make EXIF provider reactive (immich-app#31552)
- fix(web): refactor some styling (immich-app#31269)
- feat(web): improve non-Latin text rendering on the map (immich-app#31611)
- fix(mobile): load more than one image on Android with Remove animations (immich-app#31587)
- refactor: remove assets from album action (immich-app#29210)
- fix(web): trim strings before searching/comparing (immich-app#31614)
- docs: link to the docker compose builder (immich-app#31610)
- chore(docs): add note about opening issues to contributing (immich-app#31607)
- fix: vscode formatting (immich-app#31612)
- chore(mobile): centralize duplicate mesmerizing header components (immich-app#31590)
- feat(mobile): stack edited photos over the original on upload (immich-app#31082)
- chore: drop tsc-alias (immich-app#31583)
- fix: skip faces of other users when reassigning faces (immich-app#31580)
- chore(deps): update base-image to v202609151314 (immich-app#31585)
- chore(deps): update dependency onnxruntime to v1.29.0 (immich-app#31563)
- chore(deps): update dependency onnxruntime-migraphx to v1.27.1 (immich-app#31568)
- chore: transition to nullable user.oauthId (immich-app#31560)
- chore(deps): update github/codeql-action action to v4.38.0 (immich-app#31575)
- refactor(web): simplify some styling (immich-app#31550)
- fix: make local album provider reactive (immich-app#31582)
- chore(deps): update node.js to v24.21.0 (immich-app#31576)
- chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.9 (immich-app#31562)
- chore(deps): update node (immich-app#31329)
- refactor: reenable cloud ids (immich-app#30345)
- feat: people merge improvements (immich-app#31456)
- fix: metadata extraction of faces (immich-app#31551)
- refactor: migrate to new changePassword endpoint (immich-app#31277)
- chore: reset shouldChangePassword on password change (immich-app#31276)
- chore(mobile): shared DataController for management of data sources (immich-app#31457)
- fix: put back search untagged button (immich-app#31476)
- fix: feature face update ignores soft-deleted faces (immich-app#31533)
- fix: face label clipping (again) (immich-app#31402)
- fix: honor memory filters on explore page (immich-app#31540)
- chore(mobile): name pr builds after their pr number (immich-app#31541)
- chore(deps): update node.js to v24.21.0 (immich-app#28626)
- feat: server imports linting (immich-app#31537)
- chore: separate renovate groups for ml engines (immich-app#31516)
- fix(web): show full path on hover in duplicates utility (immich-app#31468)
- fix(web): scroll timeline to top when navigating without a scroll target (immich-app#31464)
- docs(server): document the UTC timestamp format for timeBucket (immich-app#31421)
- fix: sync client disconnect (immich-app#31461)
- fix(web): preserve search type (immich-app#31394)
- refactor: error handling (immich-app#31455)
- fix(web): asset remains in timeline after archive (immich-app#31348)
- chore(mobile): static Store to unify and streamline reactivity (immich-app#31099)