Skip to content

fix(server): compare integrity paths independently of unicode normalization - #31102

Merged
jrasm91 merged 3 commits into
immich-app:mainfrom
justadityaraj:fix/integrity-unicode-normalization
Sep 23, 2026
Merged

jrasm91 merged 3 commits into
immich-app:mainfrom
justadityaraj:fix/integrity-unicode-normalization

Conversation

@justadityaraj

@justadityaraj justadityaraj commented Aug 28, 2026 •

Copy link
Copy Markdown
Contributor

Description

Fixes #30657 — Integrity check reports false positives for non-ASCII filenames.

Problem

The untracked-file integrity check compared on-disk paths with database paths byte for byte. macOS filesystems can return decomposed Unicode filenames while the database holds the composed form, so tracked assets were reported as untracked. The reporter saw about 14,000 false positives in a 55,000-asset library.

Fix

Query each batch using its original, NFC, and NFD path forms, then compare returned asset, asset-file, and person-thumbnail paths in NFC. ASCII paths do not expand because identical variants collapse in the existing set.

User impact

Integrity scans no longer report files as untracked solely because the filesystem and database use different canonical Unicode forms.

Verification

  • pnpm --filter immich test -- src/services/integrity.service.spec.ts --run — 9/9 passed after merging current main; the regression covers both NFC-to-NFD and NFD-to-NFC lookups.
  • prettier --check and eslint --max-warnings 0 on the changed service files — passed.
  • pnpm --filter immich check — passed.
  • git diff upstream/main...HEAD --check — passed.

Checklist:

  • I have carefully read CONTRIBUTING.md
  • I have performed a self-review of my own code
  • I have made corresponding changes to the documentation if applicable
  • I have no unrelated changes in the PR.
  • I have confirmed that any new dependencies are strictly necessary.
  • I have written tests for new code (if applicable)
  • I have followed naming conventions/patterns in the surrounding code
  • All code in src/services/ uses repositories implementations for database calls, filesystem operations, etc.
  • All code in src/repositories/ is pretty basic/simple and does not have any immich specific logic (that belongs in src/services/)

Please describe to which degree, if any, an LLM was used in creating this pull request.

An LLM assisted with scaffolding and reviewing the focused unit test and running verification commands. The root cause, normalization boundary, final code, and observed results were reviewed and confirmed by me.

…zation

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.
@jrasm91
jrasm91 merged commit 351ddff into immich-app:main Sep 23, 2026
64 of 65 checks passed
dadezzz pushed a commit to dadezzz/kubernetes that referenced this pull request Oct 8, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v3.2.4` → `v3.3.0` |
| [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v3.2.4` → `v3.3.0` |

---

### Release Notes

<details>
<summary>immich-app/immich (ghcr.io/immich-app/immich-machine-learning)</summary>

### [`v3.3.0`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

[Compare Source](immich-app/immich@v3.2.4...v3.3.0)

##### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <immich-app/immich#32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

##### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> Opt-in to the new machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#&#8203;4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

##### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

##### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31082](immich-app/immich#31082)
- feat: birthday memories by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;30831](immich-app/immich#30831)
- feat: people management by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@&#8203;nekorevend](https://github.com/nekorevend) in [#&#8203;28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31236](immich-app/immich#31236)
- feat(web): add leave album action by [@&#8203;kojomba](https://github.com/kojomba) in [#&#8203;31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@&#8203;Trithereon](https://github.com/Trithereon) in [#&#8203;31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@&#8203;rufusutt](https://github.com/rufusutt) in [#&#8203;30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@&#8203;jonastahl](https://github.com/jonastahl) in [#&#8203;29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#&#8203;8073](immich-app/immich#8073)) by [@&#8203;thomasdelorge](https://github.com/thomasdelorge) in [#&#8203;29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@&#8203;Pecacheu](https://github.com/Pecacheu) in [#&#8203;31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@&#8203;swbchangle](https://github.com/swbchangle) in [#&#8203;31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@&#8203;TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#&#8203;31609](immich-app/immich#31609)
- feat: asset face v3 by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;28080](immich-app/immich#28080)
- perf: faster server cold start by [@&#8203;holoskii](https://github.com/holoskii) in [#&#8203;31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@&#8203;Dhruthiya](https://github.com/Dhruthiya) in [#&#8203;31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@&#8203;yranandika05](https://github.com/yranandika05) in [#&#8203;31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@&#8203;justadityaraj](https://github.com/justadityaraj) in [#&#8203;31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@&#8203;dikshit-n](https://github.com/dikshit-n) in [#&#8203;31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@&#8203;aashish00021](https://github.com/aashish00021) in [#&#8203;31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@&#8203;DawidKrynski](https://github.com/DawidKrynski) in [#&#8203;31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@&#8203;fabxyz](https://github.com/fabxyz) in [#&#8203;31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@&#8203;DawidKrynski](https://github.com/DawidKrynski) in [#&#8203;31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@&#8203;jorbrock](https://github.com/jorbrock) in [#&#8203;31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@&#8203;xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#&#8203;31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31418](immich-app/immich#31418)
- fix: email template by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@&#8203;raahu1l](https://github.com/raahu1l) in [#&#8203;31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@&#8203;RxChi1d](https://github.com/RxChi1d) in [#&#8203;30901](immich-app/immich#30901)
- fix: stale memory cover by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32090](immich-app/immich#32090)
- fix: people page search by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32094](immich-app/immich#32094)
- fix(web): album reactivity by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;32110](immich-app/immich#32110)
- fix: memory upcoming query by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@&#8203;joepadmiraal](https://github.com/joepadmiraal) in [#&#8203;32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;31139](immich-app/immich#31139)
- feat: new FAQ entries by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@&#8203;arth3mis](https://github.com/arth3mis) in [#&#8203;31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@&#8203;alangrainger](https://github.com/alangrainger) in [#&#8203;31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@&#8203;howroyd](https://github.com/howroyd) in [#&#8203;31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@&#8203;MalibThalion](https://github.com/MalibThalion) in [#&#8203;31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@&#8203;hraabis](https://github.com/hraabis) in [#&#8203;30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;31376](immich-app/immich#31376)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;31864](immich-app/immich#31864)

##### New Contributors

- [@&#8203;Pecacheu](https://github.com/Pecacheu) made their first contribution in [#&#8203;31096](immich-app/immich#31096)
- [@&#8203;swbchangle](https://github.com/swbchangle) made their first contribution in [#&#8203;31143](immich-app/immich#31143)
- [@&#8203;maximal](https://github.com/maximal) made their first contribution in [#&#8203;31304](immich-app/immich#31304)
- [@&#8203;TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#&#8203;31609](immich-app/immich#31609)
- [@&#8203;holoskii](https://github.com/holoskii) made their first contribution in [#&#8203;31630](immich-app/immich#31630)
- [@&#8203;lg114](https://github.com/lg114) made their first contribution in [#&#8203;31654](immich-app/immich#31654)
- [@&#8203;Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#&#8203;31643](immich-app/immich#31643)
- [@&#8203;howroyd](https://github.com/howroyd) made their first contribution in [#&#8203;31735](immich-app/immich#31735)
- [@&#8203;dikshit-n](https://github.com/dikshit-n) made their first contribution in [#&#8203;31758](immich-app/immich#31758)
- [@&#8203;aashish00021](https://github.com/aashish00021) made their first contribution in [#&#8203;31079](immich-app/immich#31079)
- [@&#8203;nekorevend](https://github.com/nekorevend) made their first contribution in [#&#8203;28938](immich-app/immich#28938)
- [@&#8203;kojomba](https://github.com/kojomba) made their first contribution in [#&#8203;31768](immich-app/immich#31768)
- [@&#8203;DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#&#8203;31799](immich-app/immich#31799)
- [@&#8203;Trithereon](https://github.com/Trithereon) made their first contribution in [#&#8203;31778](immich-app/immich#31778)
- [@&#8203;fabxyz](https://github.com/fabxyz) made their first contribution in [#&#8203;31473](immich-app/immich#31473)
- [@&#8203;rufusutt](https://github.com/rufusutt) made their first contribution in [#&#8203;30199](immich-app/immich#30199)
- [@&#8203;avaly](https://github.com/avaly) made their first contribution in [#&#8203;31770](immich-app/immich#31770)
- [@&#8203;MalibThalion](https://github.com/MalibThalion) made their first contribution in [#&#8203;31270](immich-app/immich#31270)
- [@&#8203;jonastahl](https://github.com/jonastahl) made their first contribution in [#&#8203;29375](immich-app/immich#29375)
- [@&#8203;thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#&#8203;29013](immich-app/immich#29013)
- [@&#8203;raahu1l](https://github.com/raahu1l) made their first contribution in [#&#8203;31860](immich-app/immich#31860)
- [@&#8203;hraabis](https://github.com/hraabis) made their first contribution in [#&#8203;30695](immich-app/immich#30695)
- [@&#8203;ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#&#8203;32123](immich-app/immich#32123)
- [@&#8203;joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#&#8203;32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNDEuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE0MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Oct 8, 2026
….3.0

##### [\`v3.3.0\`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <https://github.com/immich-app/immich/discussions/32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> Opt-in to the new machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@santoshakil](https://github.com/santoshakil) in [#31082](immich-app/immich#31082)
- feat: birthday memories by [@alextran1502](https://github.com/alextran1502) in [#30831](immich-app/immich#30831)
- feat: people management by [@danieldietzler](https://github.com/danieldietzler) in [#31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@mertalev](https://github.com/mertalev) in [#31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@meesfrensel](https://github.com/meesfrensel) in [#31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@bwees](https://github.com/bwees) in [#31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@nekorevend](https://github.com/nekorevend) in [#28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@mertalev](https://github.com/mertalev) in [#31236](immich-app/immich#31236)
- feat(web): add leave album action by [@kojomba](https://github.com/kojomba) in [#31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@mertalev](https://github.com/mertalev) in [#31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@mertalev](https://github.com/mertalev) in [#31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@jrasm91](https://github.com/jrasm91) in [#31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@Trithereon](https://github.com/Trithereon) in [#31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@alextran1502](https://github.com/alextran1502) in [#31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@rufusutt](https://github.com/rufusutt) in [#30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@jonastahl](https://github.com/jonastahl) in [#29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#8073](immich-app/immich#8073)) by [@thomasdelorge](https://github.com/thomasdelorge) in [#29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@cratoo](https://github.com/cratoo) in [#31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@mertalev](https://github.com/mertalev) in [#32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@Pecacheu](https://github.com/Pecacheu) in [#31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@swbchangle](https://github.com/swbchangle) in [#31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@agg23](https://github.com/agg23) in [#29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@mertalev](https://github.com/mertalev) in [#31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@agg23](https://github.com/agg23) in [#30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@meesfrensel](https://github.com/meesfrensel) in [#31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@agg23](https://github.com/agg23) in [#31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@agg23](https://github.com/agg23) in [#31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#31609](immich-app/immich#31609)
- feat: asset face v3 by [@jrasm91](https://github.com/jrasm91) in [#31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@LeLunZ](https://github.com/LeLunZ) in [#31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@santoshakil](https://github.com/santoshakil) in [#29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@LeLunZ](https://github.com/LeLunZ) in [#28080](immich-app/immich#28080)
- perf: faster server cold start by [@holoskii](https://github.com/holoskii) in [#31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@Dhruthiya](https://github.com/Dhruthiya) in [#31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@santoshakil](https://github.com/santoshakil) in [#30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@meesfrensel](https://github.com/meesfrensel) in [#31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@meesfrensel](https://github.com/meesfrensel) in [#31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@yranandika05](https://github.com/yranandika05) in [#31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@agg23](https://github.com/agg23) in [#31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@YarosMallorca](https://github.com/YarosMallorca) in [#31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@justadityaraj](https://github.com/justadityaraj) in [#31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@santoshakil](https://github.com/santoshakil) in [#30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@meesfrensel](https://github.com/meesfrensel) in [#31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@santoshakil](https://github.com/santoshakil) in [#31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@santoshakil](https://github.com/santoshakil) in [#31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@dikshit-n](https://github.com/dikshit-n) in [#31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@aashish00021](https://github.com/aashish00021) in [#31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@santoshakil](https://github.com/santoshakil) in [#31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@DawidKrynski](https://github.com/DawidKrynski) in [#31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@danieldietzler](https://github.com/danieldietzler) in [#31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@fabxyz](https://github.com/fabxyz) in [#31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@DawidKrynski](https://github.com/DawidKrynski) in [#31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@jorbrock](https://github.com/jorbrock) in [#31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@bo0tzz](https://github.com/bo0tzz) in [#31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@mertalev](https://github.com/mertalev) in [#31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@meesfrensel](https://github.com/meesfrensel) in [#31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@etnoy](https://github.com/etnoy) in [#31418](immich-app/immich#31418)
- fix: email template by [@danieldietzler](https://github.com/danieldietzler) in [#31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@bo0tzz](https://github.com/bo0tzz) in [#31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@danieldietzler](https://github.com/danieldietzler) in [#31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@jrasm91](https://github.com/jrasm91) in [#31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@santoshakil](https://github.com/santoshakil) in [#30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@aviv926](https://github.com/aviv926) in [#31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@etnoy](https://github.com/etnoy) in [#31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@bo0tzz](https://github.com/bo0tzz) in [#31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@raahu1l](https://github.com/raahu1l) in [#31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@mertalev](https://github.com/mertalev) in [#31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@mertalev](https://github.com/mertalev) in [#31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@etnoy](https://github.com/etnoy) in [#31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@danieldietzler](https://github.com/danieldietzler) in [#31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@danieldietzler](https://github.com/danieldietzler) in [#31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@meesfrensel](https://github.com/meesfrensel) in [#31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@santoshakil](https://github.com/santoshakil) in [#31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@santoshakil](https://github.com/santoshakil) in [#31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@santoshakil](https://github.com/santoshakil) in [#31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@LeLunZ](https://github.com/LeLunZ) in [#31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@mertalev](https://github.com/mertalev) in [#31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@etnoy](https://github.com/etnoy) in [#31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@danieldietzler](https://github.com/danieldietzler) in [#32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@danieldietzler](https://github.com/danieldietzler) in [#32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@danieldietzler](https://github.com/danieldietzler) in [#32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@RxChi1d](https://github.com/RxChi1d) in [#30901](immich-app/immich#30901)
- fix: stale memory cover by [@danieldietzler](https://github.com/danieldietzler) in [#32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@meesfrensel](https://github.com/meesfrensel) in [#32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@danieldietzler](https://github.com/danieldietzler) in [#32090](immich-app/immich#32090)
- fix: people page search by [@danieldietzler](https://github.com/danieldietzler) in [#32094](immich-app/immich#32094)
- fix(web): album reactivity by [@meesfrensel](https://github.com/meesfrensel) in [#32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@mertalev](https://github.com/mertalev) in [#32110](immich-app/immich#32110)
- fix: memory upcoming query by [@jrasm91](https://github.com/jrasm91) in [#32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@joepadmiraal](https://github.com/joepadmiraal) in [#32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@mmomjian](https://github.com/mmomjian) in [#31139](immich-app/immich#31139)
- feat: new FAQ entries by [@bo0tzz](https://github.com/bo0tzz) in [#31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@arth3mis](https://github.com/arth3mis) in [#31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@alangrainger](https://github.com/alangrainger) in [#31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@meesfrensel](https://github.com/meesfrensel) in [#31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@bo0tzz](https://github.com/bo0tzz) in [#31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@bo0tzz](https://github.com/bo0tzz) in [#31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@howroyd](https://github.com/howroyd) in [#31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@MalibThalion](https://github.com/MalibThalion) in [#31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@hraabis](https://github.com/hraabis) in [#30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31376](immich-app/immich#31376)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31864](immich-app/immich#31864)

#### New Contributors

- [@Pecacheu](https://github.com/Pecacheu) made their first contribution in [#31096](immich-app/immich#31096)
- [@swbchangle](https://github.com/swbchangle) made their first contribution in [#31143](immich-app/immich#31143)
- [@maximal](https://github.com/maximal) made their first contribution in [#31304](immich-app/immich#31304)
- [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#31609](immich-app/immich#31609)
- [@holoskii](https://github.com/holoskii) made their first contribution in [#31630](immich-app/immich#31630)
- [@lg114](https://github.com/lg114) made their first contribution in [#31654](immich-app/immich#31654)
- [@Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#31643](immich-app/immich#31643)
- [@howroyd](https://github.com/howroyd) made their first contribution in [#31735](immich-app/immich#31735)
- [@dikshit-n](https://github.com/dikshit-n) made their first contribution in [#31758](immich-app/immich#31758)
- [@aashish00021](https://github.com/aashish00021) made their first contribution in [#31079](immich-app/immich#31079)
- [@nekorevend](https://github.com/nekorevend) made their first contribution in [#28938](immich-app/immich#28938)
- [@kojomba](https://github.com/kojomba) made their first contribution in [#31768](immich-app/immich#31768)
- [@DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#31799](immich-app/immich#31799)
- [@Trithereon](https://github.com/Trithereon) made their first contribution in [#31778](immich-app/immich#31778)
- [@fabxyz](https://github.com/fabxyz) made their first contribution in [#31473](immich-app/immich#31473)
- [@rufusutt](https://github.com/rufusutt) made their first contribution in [#30199](immich-app/immich#30199)
- [@avaly](https://github.com/avaly) made their first contribution in [#31770](immich-app/immich#31770)
- [@MalibThalion](https://github.com/MalibThalion) made their first contribution in [#31270](immich-app/immich#31270)
- [@jonastahl](https://github.com/jonastahl) made their first contribution in [#29375](immich-app/immich#29375)
- [@thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#29013](immich-app/immich#29013)
- [@raahu1l](https://github.com/raahu1l) made their first contribution in [#31860](immich-app/immich#31860)
- [@hraabis](https://github.com/hraabis) made their first contribution in [#30695](immich-app/immich#30695)
- [@ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#32123](immich-app/immich#32123)
- [@joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Oct 8, 2026
##### [\`v3.3.0\`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <https://github.com/immich-app/immich/discussions/32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> Opt-in to the new machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@santoshakil](https://github.com/santoshakil) in [#31082](immich-app/immich#31082)
- feat: birthday memories by [@alextran1502](https://github.com/alextran1502) in [#30831](immich-app/immich#30831)
- feat: people management by [@danieldietzler](https://github.com/danieldietzler) in [#31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@mertalev](https://github.com/mertalev) in [#31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@meesfrensel](https://github.com/meesfrensel) in [#31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@bwees](https://github.com/bwees) in [#31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@nekorevend](https://github.com/nekorevend) in [#28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@mertalev](https://github.com/mertalev) in [#31236](immich-app/immich#31236)
- feat(web): add leave album action by [@kojomba](https://github.com/kojomba) in [#31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@mertalev](https://github.com/mertalev) in [#31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@mertalev](https://github.com/mertalev) in [#31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@jrasm91](https://github.com/jrasm91) in [#31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@Trithereon](https://github.com/Trithereon) in [#31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@alextran1502](https://github.com/alextran1502) in [#31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@rufusutt](https://github.com/rufusutt) in [#30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@jonastahl](https://github.com/jonastahl) in [#29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#8073](immich-app/immich#8073)) by [@thomasdelorge](https://github.com/thomasdelorge) in [#29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@cratoo](https://github.com/cratoo) in [#31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@mertalev](https://github.com/mertalev) in [#32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@Pecacheu](https://github.com/Pecacheu) in [#31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@swbchangle](https://github.com/swbchangle) in [#31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@agg23](https://github.com/agg23) in [#29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@mertalev](https://github.com/mertalev) in [#31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@agg23](https://github.com/agg23) in [#30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@meesfrensel](https://github.com/meesfrensel) in [#31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@agg23](https://github.com/agg23) in [#31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@agg23](https://github.com/agg23) in [#31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#31609](immich-app/immich#31609)
- feat: asset face v3 by [@jrasm91](https://github.com/jrasm91) in [#31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@LeLunZ](https://github.com/LeLunZ) in [#31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@santoshakil](https://github.com/santoshakil) in [#29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@LeLunZ](https://github.com/LeLunZ) in [#28080](immich-app/immich#28080)
- perf: faster server cold start by [@holoskii](https://github.com/holoskii) in [#31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@Dhruthiya](https://github.com/Dhruthiya) in [#31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@santoshakil](https://github.com/santoshakil) in [#30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@meesfrensel](https://github.com/meesfrensel) in [#31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@meesfrensel](https://github.com/meesfrensel) in [#31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@yranandika05](https://github.com/yranandika05) in [#31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@agg23](https://github.com/agg23) in [#31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@YarosMallorca](https://github.com/YarosMallorca) in [#31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@justadityaraj](https://github.com/justadityaraj) in [#31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@santoshakil](https://github.com/santoshakil) in [#30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@meesfrensel](https://github.com/meesfrensel) in [#31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@santoshakil](https://github.com/santoshakil) in [#31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@santoshakil](https://github.com/santoshakil) in [#31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@dikshit-n](https://github.com/dikshit-n) in [#31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@aashish00021](https://github.com/aashish00021) in [#31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@santoshakil](https://github.com/santoshakil) in [#31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@DawidKrynski](https://github.com/DawidKrynski) in [#31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@danieldietzler](https://github.com/danieldietzler) in [#31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@fabxyz](https://github.com/fabxyz) in [#31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@DawidKrynski](https://github.com/DawidKrynski) in [#31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@jorbrock](https://github.com/jorbrock) in [#31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@bo0tzz](https://github.com/bo0tzz) in [#31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@mertalev](https://github.com/mertalev) in [#31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@meesfrensel](https://github.com/meesfrensel) in [#31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@etnoy](https://github.com/etnoy) in [#31418](immich-app/immich#31418)
- fix: email template by [@danieldietzler](https://github.com/danieldietzler) in [#31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@bo0tzz](https://github.com/bo0tzz) in [#31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@danieldietzler](https://github.com/danieldietzler) in [#31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@jrasm91](https://github.com/jrasm91) in [#31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@santoshakil](https://github.com/santoshakil) in [#30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@aviv926](https://github.com/aviv926) in [#31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@etnoy](https://github.com/etnoy) in [#31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@bo0tzz](https://github.com/bo0tzz) in [#31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@raahu1l](https://github.com/raahu1l) in [#31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@mertalev](https://github.com/mertalev) in [#31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@mertalev](https://github.com/mertalev) in [#31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@etnoy](https://github.com/etnoy) in [#31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@danieldietzler](https://github.com/danieldietzler) in [#31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@danieldietzler](https://github.com/danieldietzler) in [#31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@meesfrensel](https://github.com/meesfrensel) in [#31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@santoshakil](https://github.com/santoshakil) in [#31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@santoshakil](https://github.com/santoshakil) in [#31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@santoshakil](https://github.com/santoshakil) in [#31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@LeLunZ](https://github.com/LeLunZ) in [#31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@mertalev](https://github.com/mertalev) in [#31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@etnoy](https://github.com/etnoy) in [#31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@danieldietzler](https://github.com/danieldietzler) in [#32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@danieldietzler](https://github.com/danieldietzler) in [#32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@danieldietzler](https://github.com/danieldietzler) in [#32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@RxChi1d](https://github.com/RxChi1d) in [#30901](immich-app/immich#30901)
- fix: stale memory cover by [@danieldietzler](https://github.com/danieldietzler) in [#32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@meesfrensel](https://github.com/meesfrensel) in [#32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@danieldietzler](https://github.com/danieldietzler) in [#32090](immich-app/immich#32090)
- fix: people page search by [@danieldietzler](https://github.com/danieldietzler) in [#32094](immich-app/immich#32094)
- fix(web): album reactivity by [@meesfrensel](https://github.com/meesfrensel) in [#32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@mertalev](https://github.com/mertalev) in [#32110](immich-app/immich#32110)
- fix: memory upcoming query by [@jrasm91](https://github.com/jrasm91) in [#32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@joepadmiraal](https://github.com/joepadmiraal) in [#32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@mmomjian](https://github.com/mmomjian) in [#31139](immich-app/immich#31139)
- feat: new FAQ entries by [@bo0tzz](https://github.com/bo0tzz) in [#31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@arth3mis](https://github.com/arth3mis) in [#31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@alangrainger](https://github.com/alangrainger) in [#31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@meesfrensel](https://github.com/meesfrensel) in [#31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@bo0tzz](https://github.com/bo0tzz) in [#31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@bo0tzz](https://github.com/bo0tzz) in [#31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@howroyd](https://github.com/howroyd) in [#31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@MalibThalion](https://github.com/MalibThalion) in [#31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@hraabis](https://github.com/hraabis) in [#30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31376](immich-app/immich#31376)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31864](immich-app/immich#31864)

#### New Contributors

- [@Pecacheu](https://github.com/Pecacheu) made their first contribution in [#31096](immich-app/immich#31096)
- [@swbchangle](https://github.com/swbchangle) made their first contribution in [#31143](immich-app/immich#31143)
- [@maximal](https://github.com/maximal) made their first contribution in [#31304](immich-app/immich#31304)
- [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#31609](immich-app/immich#31609)
- [@holoskii](https://github.com/holoskii) made their first contribution in [#31630](immich-app/immich#31630)
- [@lg114](https://github.com/lg114) made their first contribution in [#31654](immich-app/immich#31654)
- [@Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#31643](immich-app/immich#31643)
- [@howroyd](https://github.com/howroyd) made their first contribution in [#31735](immich-app/immich#31735)
- [@dikshit-n](https://github.com/dikshit-n) made their first contribution in [#31758](immich-app/immich#31758)
- [@aashish00021](https://github.com/aashish00021) made their first contribution in [#31079](immich-app/immich#31079)
- [@nekorevend](https://github.com/nekorevend) made their first contribution in [#28938](immich-app/immich#28938)
- [@kojomba](https://github.com/kojomba) made their first contribution in [#31768](immich-app/immich#31768)
- [@DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#31799](immich-app/immich#31799)
- [@Trithereon](https://github.com/Trithereon) made their first contribution in [#31778](immich-app/immich#31778)
- [@fabxyz](https://github.com/fabxyz) made their first contribution in [#31473](immich-app/immich#31473)
- [@rufusutt](https://github.com/rufusutt) made their first contribution in [#30199](immich-app/immich#30199)
- [@avaly](https://github.com/avaly) made their first contribution in [#31770](immich-app/immich#31770)
- [@MalibThalion](https://github.com/MalibThalion) made their first contribution in [#31270](immich-app/immich#31270)
- [@jonastahl](https://github.com/jonastahl) made their first contribution in [#29375](immich-app/immich#29375)
- [@thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#29013](immich-app/immich#29013)
- [@raahu1l](https://github.com/raahu1l) made their first contribution in [#31860](immich-app/immich#31860)
- [@hraabis](https://github.com/hraabis) made their first contribution in [#30695](immich-app/immich#30695)
- [@ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#32123](immich-app/immich#32123)
- [@joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Oct 8, 2026
….3.0

##### [\`v3.3.0\`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <https://github.com/immich-app/immich/discussions/32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details. All image formats benefit from this change.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

Thumbnails already generated before this release won’t be affected by this change. To make it apply to existing thumbnails, you can run thumbnail generation on all assets in the job panel.

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> We have re-exported and published the *same* machine learning models in an optimized format. This means they can be used as-is and do not require re-running any jobs. Opt-in to the revised machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`.

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@santoshakil](https://github.com/santoshakil) in [#31082](immich-app/immich#31082)
- feat: birthday memories by [@alextran1502](https://github.com/alextran1502) in [#30831](immich-app/immich#30831)
- feat: people management by [@danieldietzler](https://github.com/danieldietzler) in [#31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@mertalev](https://github.com/mertalev) in [#31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@meesfrensel](https://github.com/meesfrensel) in [#31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@bwees](https://github.com/bwees) in [#31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@nekorevend](https://github.com/nekorevend) in [#28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@mertalev](https://github.com/mertalev) in [#31236](immich-app/immich#31236)
- feat(web): add leave album action by [@kojomba](https://github.com/kojomba) in [#31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@mertalev](https://github.com/mertalev) in [#31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@mertalev](https://github.com/mertalev) in [#31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@jrasm91](https://github.com/jrasm91) in [#31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@Trithereon](https://github.com/Trithereon) in [#31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@alextran1502](https://github.com/alextran1502) in [#31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@rufusutt](https://github.com/rufusutt) in [#30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@jonastahl](https://github.com/jonastahl) in [#29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#8073](immich-app/immich#8073)) by [@thomasdelorge](https://github.com/thomasdelorge) in [#29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@cratoo](https://github.com/cratoo) in [#31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@mertalev](https://github.com/mertalev) in [#32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@Pecacheu](https://github.com/Pecacheu) in [#31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@swbchangle](https://github.com/swbchangle) in [#31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@agg23](https://github.com/agg23) in [#29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@mertalev](https://github.com/mertalev) in [#31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@agg23](https://github.com/agg23) in [#30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@meesfrensel](https://github.com/meesfrensel) in [#31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@agg23](https://github.com/agg23) in [#31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@agg23](https://github.com/agg23) in [#31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#31609](immich-app/immich#31609)
- feat: asset face v3 by [@jrasm91](https://github.com/jrasm91) in [#31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@LeLunZ](https://github.com/LeLunZ) in [#31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@santoshakil](https://github.com/santoshakil) in [#29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@LeLunZ](https://github.com/LeLunZ) in [#28080](immich-app/immich#28080)
- perf: faster server cold start by [@holoskii](https://github.com/holoskii) in [#31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@Dhruthiya](https://github.com/Dhruthiya) in [#31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@santoshakil](https://github.com/santoshakil) in [#30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@meesfrensel](https://github.com/meesfrensel) in [#31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@meesfrensel](https://github.com/meesfrensel) in [#31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@yranandika05](https://github.com/yranandika05) in [#31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@agg23](https://github.com/agg23) in [#31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@YarosMallorca](https://github.com/YarosMallorca) in [#31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@justadityaraj](https://github.com/justadityaraj) in [#31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@santoshakil](https://github.com/santoshakil) in [#30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@meesfrensel](https://github.com/meesfrensel) in [#31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@santoshakil](https://github.com/santoshakil) in [#31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@santoshakil](https://github.com/santoshakil) in [#31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@dikshit-n](https://github.com/dikshit-n) in [#31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@aashish00021](https://github.com/aashish00021) in [#31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@santoshakil](https://github.com/santoshakil) in [#31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@DawidKrynski](https://github.com/DawidKrynski) in [#31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@danieldietzler](https://github.com/danieldietzler) in [#31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@fabxyz](https://github.com/fabxyz) in [#31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@DawidKrynski](https://github.com/DawidKrynski) in [#31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@jorbrock](https://github.com/jorbrock) in [#31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@bo0tzz](https://github.com/bo0tzz) in [#31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@mertalev](https://github.com/mertalev) in [#31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@meesfrensel](https://github.com/meesfrensel) in [#31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@etnoy](https://github.com/etnoy) in [#31418](immich-app/immich#31418)
- fix: email template by [@danieldietzler](https://github.com/danieldietzler) in [#31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@bo0tzz](https://github.com/bo0tzz) in [#31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@danieldietzler](https://github.com/danieldietzler) in [#31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@jrasm91](https://github.com/jrasm91) in [#31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@santoshakil](https://github.com/santoshakil) in [#30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@aviv926](https://github.com/aviv926) in [#31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@etnoy](https://github.com/etnoy) in [#31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@bo0tzz](https://github.com/bo0tzz) in [#31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@raahu1l](https://github.com/raahu1l) in [#31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@mertalev](https://github.com/mertalev) in [#31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@mertalev](https://github.com/mertalev) in [#31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@etnoy](https://github.com/etnoy) in [#31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@danieldietzler](https://github.com/danieldietzler) in [#31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@danieldietzler](https://github.com/danieldietzler) in [#31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@meesfrensel](https://github.com/meesfrensel) in [#31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@santoshakil](https://github.com/santoshakil) in [#31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@santoshakil](https://github.com/santoshakil) in [#31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@santoshakil](https://github.com/santoshakil) in [#31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@LeLunZ](https://github.com/LeLunZ) in [#31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@mertalev](https://github.com/mertalev) in [#31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@etnoy](https://github.com/etnoy) in [#31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@danieldietzler](https://github.com/danieldietzler) in [#32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@danieldietzler](https://github.com/danieldietzler) in [#32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@danieldietzler](https://github.com/danieldietzler) in [#32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@RxChi1d](https://github.com/RxChi1d) in [#30901](immich-app/immich#30901)
- fix: stale memory cover by [@danieldietzler](https://github.com/danieldietzler) in [#32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@meesfrensel](https://github.com/meesfrensel) in [#32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@danieldietzler](https://github.com/danieldietzler) in [#32090](immich-app/immich#32090)
- fix: people page search by [@danieldietzler](https://github.com/danieldietzler) in [#32094](immich-app/immich#32094)
- fix(web): album reactivity by [@meesfrensel](https://github.com/meesfrensel) in [#32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@mertalev](https://github.com/mertalev) in [#32110](immich-app/immich#32110)
- fix: memory upcoming query by [@jrasm91](https://github.com/jrasm91) in [#32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@joepadmiraal](https://github.com/joepadmiraal) in [#32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@mmomjian](https://github.com/mmomjian) in [#31139](immich-app/immich#31139)
- feat: new FAQ entries by [@bo0tzz](https://github.com/bo0tzz) in [#31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@arth3mis](https://github.com/arth3mis) in [#31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@alangrainger](https://github.com/alangrainger) in [#31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@meesfrensel](https://github.com/meesfrensel) in [#31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@bo0tzz](https://github.com/bo0tzz) in [#31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@bo0tzz](https://github.com/bo0tzz) in [#31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@howroyd](https://github.com/howroyd) in [#31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@MalibThalion](https://github.com/MalibThalion) in [#31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@hraabis](https://github.com/hraabis) in [#30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31376](immich-app/immich#31376)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31864](immich-app/immich#31864)

#### New Contributors

- [@Pecacheu](https://github.com/Pecacheu) made their first contribution in [#31096](immich-app/immich#31096)
- [@swbchangle](https://github.com/swbchangle) made their first contribution in [#31143](immich-app/immich#31143)
- [@maximal](https://github.com/maximal) made their first contribution in [#31304](immich-app/immich#31304)
- [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#31609](immich-app/immich#31609)
- [@holoskii](https://github.com/holoskii) made their first contribution in [#31630](immich-app/immich#31630)
- [@lg114](https://github.com/lg114) made their first contribution in [#31654](immich-app/immich#31654)
- [@Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#31643](immich-app/immich#31643)
- [@howroyd](https://github.com/howroyd) made their first contribution in [#31735](immich-app/immich#31735)
- [@dikshit-n](https://github.com/dikshit-n) made their first contribution in [#31758](immich-app/immich#31758)
- [@aashish00021](https://github.com/aashish00021) made their first contribution in [#31079](immich-app/immich#31079)
- [@nekorevend](https://github.com/nekorevend) made their first contribution in [#28938](immich-app/immich#28938)
- [@kojomba](https://github.com/kojomba) made their first contribution in [#31768](immich-app/immich#31768)
- [@DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#31799](immich-app/immich#31799)
- [@Trithereon](https://github.com/Trithereon) made their first contribution in [#31778](immich-app/immich#31778)
- [@fabxyz](https://github.com/fabxyz) made their first contribution in [#31473](immich-app/immich#31473)
- [@rufusutt](https://github.com/rufusutt) made their first contribution in [#30199](immich-app/immich#30199)
- [@avaly](https://github.com/avaly) made their first contribution in [#31770](immich-app/immich#31770)
- [@MalibThalion](https://github.com/MalibThalion) made their first contribution in [#31270](immich-app/immich#31270)
- [@jonastahl](https://github.com/jonastahl) made their first contribution in [#29375](immich-app/immich#29375)
- [@thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#29013](immich-app/immich#29013)
- [@raahu1l](https://github.com/raahu1l) made their first contribution in [#31860](immich-app/immich#31860)
- [@hraabis](https://github.com/hraabis) made their first contribution in [#30695](immich-app/immich#30695)
- [@ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#32123](immich-app/immich#32123)
- [@joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Oct 8, 2026
….3.0 (#1956)

##### [\`v3.3.0\`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <https://github.com/immich-app/immich/discussions/32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details. All image formats benefit from this change.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

Thumbnails already generated before this release won’t be affected by this change. To make it apply to existing thumbnails, you can run thumbnail generation on all assets in the job panel.

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> We have re-exported and published the *same* machine learning models in an optimized format. This means they can be used as-is and do not require re-running any jobs. Opt-in to the revised machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`.

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@santoshakil](https://github.com/santoshakil) in [#31082](immich-app/immich#31082)
- feat: birthday memories by [@alextran1502](https://github.com/alextran1502) in [#30831](immich-app/immich#30831)
- feat: people management by [@danieldietzler](https://github.com/danieldietzler) in [#31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@mertalev](https://github.com/mertalev) in [#31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@meesfrensel](https://github.com/meesfrensel) in [#31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@bwees](https://github.com/bwees) in [#31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@nekorevend](https://github.com/nekorevend) in [#28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@mertalev](https://github.com/mertalev) in [#31236](immich-app/immich#31236)
- feat(web): add leave album action by [@kojomba](https://github.com/kojomba) in [#31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@mertalev](https://github.com/mertalev) in [#31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@mertalev](https://github.com/mertalev) in [#31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@jrasm91](https://github.com/jrasm91) in [#31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@Trithereon](https://github.com/Trithereon) in [#31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@alextran1502](https://github.com/alextran1502) in [#31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@rufusutt](https://github.com/rufusutt) in [#30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@jonastahl](https://github.com/jonastahl) in [#29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#8073](immich-app/immich#8073)) by [@thomasdelorge](https://github.com/thomasdelorge) in [#29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@cratoo](https://github.com/cratoo) in [#31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@mertalev](https://github.com/mertalev) in [#32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@Pecacheu](https://github.com/Pecacheu) in [#31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@swbchangle](https://github.com/swbchangle) in [#31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@agg23](https://github.com/agg23) in [#29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@mertalev](https://github.com/mertalev) in [#31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@agg23](https://github.com/agg23) in [#30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@meesfrensel](https://github.com/meesfrensel) in [#31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@agg23](https://github.com/agg23) in [#31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@agg23](https://github.com/agg23) in [#31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#31609](immich-app/immich#31609)
- feat: asset face v3 by [@jrasm91](https://github.com/jrasm91) in [#31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@LeLunZ](https://github.com/LeLunZ) in [#31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@santoshakil](https://github.com/santoshakil) in [#29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@LeLunZ](https://github.com/LeLunZ) in [#28080](immich-app/immich#28080)
- perf: faster server cold start by [@holoskii](https://github.com/holoskii) in [#31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@Dhruthiya](https://github.com/Dhruthiya) in [#31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@santoshakil](https://github.com/santoshakil) in [#30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@meesfrensel](https://github.com/meesfrensel) in [#31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@meesfrensel](https://github.com/meesfrensel) in [#31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@yranandika05](https://github.com/yranandika05) in [#31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@agg23](https://github.com/agg23) in [#31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@YarosMallorca](https://github.com/YarosMallorca) in [#31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@justadityaraj](https://github.com/justadityaraj) in [#31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@santoshakil](https://github.com/santoshakil) in [#30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@meesfrensel](https://github.com/meesfrensel) in [#31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@santoshakil](https://github.com/santoshakil) in [#31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@santoshakil](https://github.com/santoshakil) in [#31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@dikshit-n](https://github.com/dikshit-n) in [#31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@aashish00021](https://github.com/aashish00021) in [#31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@santoshakil](https://github.com/santoshakil) in [#31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@DawidKrynski](https://github.com/DawidKrynski) in [#31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@danieldietzler](https://github.com/danieldietzler) in [#31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@fabxyz](https://github.com/fabxyz) in [#31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@DawidKrynski](https://github.com/DawidKrynski) in [#31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@jorbrock](https://github.com/jorbrock) in [#31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@bo0tzz](https://github.com/bo0tzz) in [#31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@mertalev](https://github.com/mertalev) in [#31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@meesfrensel](https://github.com/meesfrensel) in [#31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@etnoy](https://github.com/etnoy) in [#31418](immich-app/immich#31418)
- fix: email template by [@danieldietzler](https://github.com/danieldietzler) in [#31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@bo0tzz](https://github.com/bo0tzz) in [#31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@danieldietzler](https://github.com/danieldietzler) in [#31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@jrasm91](https://github.com/jrasm91) in [#31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@santoshakil](https://github.com/santoshakil) in [#30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@aviv926](https://github.com/aviv926) in [#31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@etnoy](https://github.com/etnoy) in [#31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@bo0tzz](https://github.com/bo0tzz) in [#31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@raahu1l](https://github.com/raahu1l) in [#31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@mertalev](https://github.com/mertalev) in [#31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@mertalev](https://github.com/mertalev) in [#31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@etnoy](https://github.com/etnoy) in [#31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@danieldietzler](https://github.com/danieldietzler) in [#31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@danieldietzler](https://github.com/danieldietzler) in [#31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@meesfrensel](https://github.com/meesfrensel) in [#31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@santoshakil](https://github.com/santoshakil) in [#31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@santoshakil](https://github.com/santoshakil) in [#31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@santoshakil](https://github.com/santoshakil) in [#31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@LeLunZ](https://github.com/LeLunZ) in [#31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@mertalev](https://github.com/mertalev) in [#31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@etnoy](https://github.com/etnoy) in [#31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@danieldietzler](https://github.com/danieldietzler) in [#32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@danieldietzler](https://github.com/danieldietzler) in [#32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@danieldietzler](https://github.com/danieldietzler) in [#32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@RxChi1d](https://github.com/RxChi1d) in [#30901](immich-app/immich#30901)
- fix: stale memory cover by [@danieldietzler](https://github.com/danieldietzler) in [#32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@meesfrensel](https://github.com/meesfrensel) in [#32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@danieldietzler](https://github.com/danieldietzler) in [#32090](immich-app/immich#32090)
- fix: people page search by [@danieldietzler](https://github.com/danieldietzler) in [#32094](immich-app/immich#32094)
- fix(web): album reactivity by [@meesfrensel](https://github.com/meesfrensel) in [#32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@mertalev](https://github.com/mertalev) in [#32110](immich-app/immich#32110)
- fix: memory upcoming query by [@jrasm91](https://github.com/jrasm91) in [#32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@joepadmiraal](https://github.com/joepadmiraal) in [#32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@mmomjian](https://github.com/mmomjian) in [#31139](immich-app/immich#31139)
- feat: new FAQ entries by [@bo0tzz](https://github.com/bo0tzz) in [#31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@arth3mis](https://github.com/arth3mis) in [#31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@alangrainger](https://github.com/alangrainger) in [#31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@meesfrensel](https://github.com/meesfrensel) in [#31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@bo0tzz](https://github.com/bo0tzz) in [#31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@bo0tzz](https://github.com/bo0tzz) in [#31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@howroyd](https://github.com/howroyd) in [#31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@MalibThalion](https://github.com/MalibThalion) in [#31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@hraabis](https://github.com/hraabis) in [#30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31376](immich-app/immich#31376)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31864](immich-app/immich#31864)

#### New Contributors

- [@Pecacheu](https://github.com/Pecacheu) made their first contribution in [#31096](immich-app/immich#31096)
- [@swbchangle](https://github.com/swbchangle) made their first contribution in [#31143](immich-app/immich#31143)
- [@maximal](https://github.com/maximal) made their first contribution in [#31304](immich-app/immich#31304)
- [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#31609](immich-app/immich#31609)
- [@holoskii](https://github.com/holoskii) made their first contribution in [#31630](immich-app/immich#31630)
- [@lg114](https://github.com/lg114) made their first contribution in [#31654](immich-app/immich#31654)
- [@Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#31643](immich-app/immich#31643)
- [@howroyd](https://github.com/howroyd) made their first contribution in [#31735](immich-app/immich#31735)
- [@dikshit-n](https://github.com/dikshit-n) made their first contribution in [#31758](immich-app/immich#31758)
- [@aashish00021](https://github.com/aashish00021) made their first contribution in [#31079](immich-app/immich#31079)
- [@nekorevend](https://github.com/nekorevend) made their first contribution in [#28938](immich-app/immich#28938)
- [@kojomba](https://github.com/kojomba) made their first contribution in [#31768](immich-app/immich#31768)
- [@DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#31799](immich-app/immich#31799)
- [@Trithereon](https://github.com/Trithereon) made their first contribution in [#31778](immich-app/immich#31778)
- [@fabxyz](https://github.com/fabxyz) made their first contribution in [#31473](immich-app/immich#31473)
- [@rufusutt](https://github.com/rufusutt) made their first contribution in [#30199](immich-app/immich#30199)
- [@avaly](https://github.com/avaly) made their first contribution in [#31770](immich-app/immich#31770)
- [@MalibThalion](https://github.com/MalibThalion) made their first contribution in [#31270](immich-app/immich#31270)
- [@jonastahl](https://github.com/jonastahl) made their first contribution in [#29375](immich-app/immich#29375)
- [@thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#29013](immich-app/immich#29013)
- [@raahu1l](https://github.com/raahu1l) made their first contribution in [#31860](immich-app/immich#31860)
- [@hraabis](https://github.com/hraabis) made their first contribution in [#30695](immich-app/immich#30695)
- [@ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#32123](immich-app/immich#32123)
- [@joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Oct 8, 2026
… tag to v3.3.0 (#1958)

##### [\`v3.3.0\`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <https://github.com/immich-app/immich/discussions/32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details. All image formats benefit from this change.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

Thumbnails already generated before this release won’t be affected by this change. To make it apply to existing thumbnails, you can run thumbnail generation on all assets in the job panel.

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> We have re-exported and published the *same* machine learning models in an optimized format. This means they can be used as-is and do not require re-running any jobs. Opt-in to the revised machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`.

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@santoshakil](https://github.com/santoshakil) in [#31082](immich-app/immich#31082)
- feat: birthday memories by [@alextran1502](https://github.com/alextran1502) in [#30831](immich-app/immich#30831)
- feat: people management by [@danieldietzler](https://github.com/danieldietzler) in [#31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@mertalev](https://github.com/mertalev) in [#31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@meesfrensel](https://github.com/meesfrensel) in [#31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@bwees](https://github.com/bwees) in [#31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@nekorevend](https://github.com/nekorevend) in [#28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@mertalev](https://github.com/mertalev) in [#31236](immich-app/immich#31236)
- feat(web): add leave album action by [@kojomba](https://github.com/kojomba) in [#31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@mertalev](https://github.com/mertalev) in [#31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@mertalev](https://github.com/mertalev) in [#31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@jrasm91](https://github.com/jrasm91) in [#31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@Trithereon](https://github.com/Trithereon) in [#31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@alextran1502](https://github.com/alextran1502) in [#31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@rufusutt](https://github.com/rufusutt) in [#30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@jonastahl](https://github.com/jonastahl) in [#29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#8073](immich-app/immich#8073)) by [@thomasdelorge](https://github.com/thomasdelorge) in [#29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@cratoo](https://github.com/cratoo) in [#31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@mertalev](https://github.com/mertalev) in [#32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@Pecacheu](https://github.com/Pecacheu) in [#31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@swbchangle](https://github.com/swbchangle) in [#31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@agg23](https://github.com/agg23) in [#29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@mertalev](https://github.com/mertalev) in [#31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@agg23](https://github.com/agg23) in [#30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@meesfrensel](https://github.com/meesfrensel) in [#31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@agg23](https://github.com/agg23) in [#31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@agg23](https://github.com/agg23) in [#31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#31609](immich-app/immich#31609)
- feat: asset face v3 by [@jrasm91](https://github.com/jrasm91) in [#31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@LeLunZ](https://github.com/LeLunZ) in [#31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@santoshakil](https://github.com/santoshakil) in [#29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@LeLunZ](https://github.com/LeLunZ) in [#28080](immich-app/immich#28080)
- perf: faster server cold start by [@holoskii](https://github.com/holoskii) in [#31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@Dhruthiya](https://github.com/Dhruthiya) in [#31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@santoshakil](https://github.com/santoshakil) in [#30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@meesfrensel](https://github.com/meesfrensel) in [#31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@meesfrensel](https://github.com/meesfrensel) in [#31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@yranandika05](https://github.com/yranandika05) in [#31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@agg23](https://github.com/agg23) in [#31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@YarosMallorca](https://github.com/YarosMallorca) in [#31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@justadityaraj](https://github.com/justadityaraj) in [#31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@santoshakil](https://github.com/santoshakil) in [#30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@meesfrensel](https://github.com/meesfrensel) in [#31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@santoshakil](https://github.com/santoshakil) in [#31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@santoshakil](https://github.com/santoshakil) in [#31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@dikshit-n](https://github.com/dikshit-n) in [#31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@aashish00021](https://github.com/aashish00021) in [#31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@santoshakil](https://github.com/santoshakil) in [#31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@DawidKrynski](https://github.com/DawidKrynski) in [#31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@danieldietzler](https://github.com/danieldietzler) in [#31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@fabxyz](https://github.com/fabxyz) in [#31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@DawidKrynski](https://github.com/DawidKrynski) in [#31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@jorbrock](https://github.com/jorbrock) in [#31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@bo0tzz](https://github.com/bo0tzz) in [#31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@mertalev](https://github.com/mertalev) in [#31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@meesfrensel](https://github.com/meesfrensel) in [#31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@etnoy](https://github.com/etnoy) in [#31418](immich-app/immich#31418)
- fix: email template by [@danieldietzler](https://github.com/danieldietzler) in [#31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@bo0tzz](https://github.com/bo0tzz) in [#31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@danieldietzler](https://github.com/danieldietzler) in [#31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@jrasm91](https://github.com/jrasm91) in [#31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@santoshakil](https://github.com/santoshakil) in [#30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@aviv926](https://github.com/aviv926) in [#31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@etnoy](https://github.com/etnoy) in [#31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@bo0tzz](https://github.com/bo0tzz) in [#31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@raahu1l](https://github.com/raahu1l) in [#31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@mertalev](https://github.com/mertalev) in [#31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@mertalev](https://github.com/mertalev) in [#31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@etnoy](https://github.com/etnoy) in [#31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@danieldietzler](https://github.com/danieldietzler) in [#31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@danieldietzler](https://github.com/danieldietzler) in [#31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@meesfrensel](https://github.com/meesfrensel) in [#31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@santoshakil](https://github.com/santoshakil) in [#31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@santoshakil](https://github.com/santoshakil) in [#31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@santoshakil](https://github.com/santoshakil) in [#31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@LeLunZ](https://github.com/LeLunZ) in [#31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@mertalev](https://github.com/mertalev) in [#31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@etnoy](https://github.com/etnoy) in [#31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@danieldietzler](https://github.com/danieldietzler) in [#32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@danieldietzler](https://github.com/danieldietzler) in [#32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@danieldietzler](https://github.com/danieldietzler) in [#32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@RxChi1d](https://github.com/RxChi1d) in [#30901](immich-app/immich#30901)
- fix: stale memory cover by [@danieldietzler](https://github.com/danieldietzler) in [#32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@meesfrensel](https://github.com/meesfrensel) in [#32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@danieldietzler](https://github.com/danieldietzler) in [#32090](immich-app/immich#32090)
- fix: people page search by [@danieldietzler](https://github.com/danieldietzler) in [#32094](immich-app/immich#32094)
- fix(web): album reactivity by [@meesfrensel](https://github.com/meesfrensel) in [#32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@mertalev](https://github.com/mertalev) in [#32110](immich-app/immich#32110)
- fix: memory upcoming query by [@jrasm91](https://github.com/jrasm91) in [#32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@joepadmiraal](https://github.com/joepadmiraal) in [#32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@mmomjian](https://github.com/mmomjian) in [#31139](immich-app/immich#31139)
- feat: new FAQ entries by [@bo0tzz](https://github.com/bo0tzz) in [#31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@arth3mis](https://github.com/arth3mis) in [#31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@alangrainger](https://github.com/alangrainger) in [#31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@meesfrensel](https://github.com/meesfrensel) in [#31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@bo0tzz](https://github.com/bo0tzz) in [#31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@bo0tzz](https://github.com/bo0tzz) in [#31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@howroyd](https://github.com/howroyd) in [#31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@MalibThalion](https://github.com/MalibThalion) in [#31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@hraabis](https://github.com/hraabis) in [#30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31376](immich-app/immich#31376)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#31864](immich-app/immich#31864)

#### New Contributors

- [@Pecacheu](https://github.com/Pecacheu) made their first contribution in [#31096](immich-app/immich#31096)
- [@swbchangle](https://github.com/swbchangle) made their first contribution in [#31143](immich-app/immich#31143)
- [@maximal](https://github.com/maximal) made their first contribution in [#31304](immich-app/immich#31304)
- [@TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#31609](immich-app/immich#31609)
- [@holoskii](https://github.com/holoskii) made their first contribution in [#31630](immich-app/immich#31630)
- [@lg114](https://github.com/lg114) made their first contribution in [#31654](immich-app/immich#31654)
- [@Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#31643](immich-app/immich#31643)
- [@howroyd](https://github.com/howroyd) made their first contribution in [#31735](immich-app/immich#31735)
- [@dikshit-n](https://github.com/dikshit-n) made their first contribution in [#31758](immich-app/immich#31758)
- [@aashish00021](https://github.com/aashish00021) made their first contribution in [#31079](immich-app/immich#31079)
- [@nekorevend](https://github.com/nekorevend) made their first contribution in [#28938](immich-app/immich#28938)
- [@kojomba](https://github.com/kojomba) made their first contribution in [#31768](immich-app/immich#31768)
- [@DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#31799](immich-app/immich#31799)
- [@Trithereon](https://github.com/Trithereon) made their first contribution in [#31778](immich-app/immich#31778)
- [@fabxyz](https://github.com/fabxyz) made their first contribution in [#31473](immich-app/immich#31473)
- [@rufusutt](https://github.com/rufusutt) made their first contribution in [#30199](immich-app/immich#30199)
- [@avaly](https://github.com/avaly) made their first contribution in [#31770](immich-app/immich#31770)
- [@MalibThalion](https://github.com/MalibThalion) made their first contribution in [#31270](immich-app/immich#31270)
- [@jonastahl](https://github.com/jonastahl) made their first contribution in [#29375](immich-app/immich#29375)
- [@thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#29013](immich-app/immich#29013)
- [@raahu1l](https://github.com/raahu1l) made their first contribution in [#31860](immich-app/immich#31860)
- [@hraabis](https://github.com/hraabis) made their first contribution in [#30695](immich-app/immich#30695)
- [@ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#32123](immich-app/immich#32123)
- [@joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Oct 13, 2026
….1) (#881)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [immich-app/immich](https://github.com/immich-app/immich) | minor | `v3.2.4` → `v3.3.1` |

---

### Release Notes

<details>
<summary>immich-app/immich</summary>

### [`v3.3.1`](https://github.com/immich-app/immich/releases/tag/v3.3.1)

[Compare Source](immich-app/immich@v3.3.0-rc.2...v3.3.1)

This patch addresses various bugs around people sharing, as well as a scroll issue on mobile. Further, there is now an indicator showing which people are shared.

#### What's Changed

##### 🌟 Enhancements

- feat: shared person indicator by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32223](immich-app/immich#32223)

##### 🐛 Bug fixes

- fix(mobile): keep memories full screen while swiping by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;32171](immich-app/immich#32171)
- fix(server): read ISO values above 65535 by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;32182](immich-app/immich#32182)
- fix: include partner shared assets for people even without showInTimeline by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32219](immich-app/immich#32219)
- fix: clarify people sharing does not share assets by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;32231](immich-app/immich#32231)
- fix(mobile): prevent rapid toggling and rerendering of cells by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;32200](immich-app/immich#32200)
- fix: include unamed people in otherPeople by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;32237](immich-app/immich#32237)
- fix: run workflow steps in their configured order by [@&#8203;infocus13](https://github.com/infocus13) in [#&#8203;32240](immich-app/immich#32240)
- fix: show date on memories page by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;32206](immich-app/immich#32206)

##### 📚 Documentation

- docs: document persistent QNAP database storage by [@&#8203;yuhuan417](https://github.com/yuhuan417) in [#&#8203;32222](immich-app/immich#32222)
- docs: Add MACHINE_LEARNING_MODEL_REVISION variable to docs by [@&#8203;JPar99](https://github.com/JPar99) in [#&#8203;32221](immich-app/immich#32221)

##### 🌐 Translations

- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;32029](immich-app/immich#32029)

#### New Contributors

- [@&#8203;yuhuan417](https://github.com/yuhuan417) made their first contribution in [#&#8203;32222](immich-app/immich#32222)
- [@&#8203;JPar99](https://github.com/JPar99) made their first contribution in [#&#8203;32221](immich-app/immich#32221)
- [@&#8203;infocus13](https://github.com/infocus13) made their first contribution in [#&#8203;32240](immich-app/immich#32240)

**Full Changelog**: <immich-app/immich@v3.3.0...v3.3.1>

### [`v3.3.0`](https://github.com/immich-app/immich/releases/tag/v3.3.0)

[Compare Source](immich-app/immich@v3.2.4...v3.3.0-rc.2)

### v3.3.0

> \[!NOTE]
> We're collecting feedback related to people sharing in this discussion: <immich-app/immich#32196>

Welcome to Immich `v3.3.0`!

This release includes people sharing, birthday memories, auto-stacked mobile edits, and a variety of other enhancements and bug fixes. Keep reading below for the full list of highlights.

#### Highlights

- Shared people management
- Birthday memories
- Auto-stacked mobile edits
- Sync OAuth claims on every login
- Higher quality thumbnails and previews
- Machine learning performance and accuracy improvements (opt-in)
- New OCR models
- Notable fix: correct storage size on MacOS

##### Shared people management

We are very pleased to release the next big milestone towards better sharing: people can now be shared!

As a user you can share people with another user in your cluster group:

![](https://github.com/user-attachments/assets/b011c1a2-b81c-47a8-b3d8-159d829fcf82 " =428x659")

> \[!NOTE]
> The “Manage access” modal can be opened from both the “People” (`/people`) and “Sharing settings” (`/user-settings`) pages in the web application. The modal is not available on mobile, yet.

![](https://github.com/user-attachments/assets/1d302bb6-71ca-481a-893b-9e54897cef5b)

When sharing a person with another user, the shared person:

- Shows up in both users’ list of people (on mobile and web)
- Shows up in the asset viewer / asset detail view on both owned and shared assets
- Can be edited by both users (only the name & birth date fields)

> \[!NOTE]
> Person sharing is directional. This means that each user needs to share each person back for edits to automatically work in both directions.

By default, changes to the name & date of birth are reflected for both users. On the web, the “Edit person” modal has an option to change the name/date of birth for “Only me” instead of the whole group.

![](https://github.com/user-attachments/assets/f40f0358-27c0-42c2-86c3-0fb8487bfdc2 " =424x431")

Also, there is a preference for this behavior in the “Sharing settings”, which can be changed to make this the default behavior when editing a person. The setting can be changed here:[ https://my.immich.app/user-settings?isOpen=feature+peopl](https://my.immich.app/user-settings?isOpen=feature+people.)[e](https://my.immich.app/user-settings?isOpen=feature+people).

![](https://github.com/user-attachments/assets/75cb4553-d59b-4a7b-b399-17136f2e6f3c " =604x113")

The setting has two options:

- “Everyone with shared access” — means an update will apply for everyone, covering the typical family use case where one or two users are supposed to be responsible for the entire family's people.
- “Only me” — means the names and dates of births will remain unchanged for other users

Lastly, by allowing cross-user merging, you can now merge a face from your own assets with people shared with you from other users. This is especially helpful if you didn't want to re-run facial recognition after joining a cluster group before. Now, after setting up bi-directional sharing, users can manually link people together.

##### Birthday memories

In an effort of making Immich more joyful to use, we are introducing memories for people's birthdays.

If it's the birthday of a person in your library, Immich will now celebrate that with a special memory featuring previous birthdays.

![](https://github.com/user-attachments/assets/96c5e974-576e-4d65-b1e8-cdbfe890268b " =1200x534")

##### Auto-stacked mobile edits

When using something other than Immich for editing images on your phone, Immich will now stack those edits on top of the original. This allows for Immich to show all edits in one place, without cluttering the timeline.

This should provide a more organized timeline, especially when you heavily rely on editing assets on your phone.

| ![](https://github.com/user-attachments/assets/372e3770-369e-4fb4-8a4a-98d38225fecd " =259x394") | ![](https://github.com/user-attachments/assets/235fb7fe-6565-4aef-9f68-8eac34eb6488 " =259x394") |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |

##### Sync OAuth claims on every login

Immich supports OAuth claims for storage quota, the user role, and the preferred username. Up until now, those were only synced on registration.

Now, they can be synced on every login, allowing you to do active user management through your IDP, updating quotas and roles as you go and as necessary, and Immich will adopt those changes.

##### Higher quality thumbnails and previews

Immich now uses a more accurate image resampling method, improving detail preservation and brightness, especially for high contrast details. All image formats benefit from this change.

Before

![](https://github.com/user-attachments/assets/565b7033-3b44-4988-ad5f-565596b1aa0f " =375x250")

After

![](https://github.com/user-attachments/assets/2449a36d-8a9f-475c-8f70-f324234738ff " =375x250")

Thumbnails already generated before this release won’t be affected by this change. To make it apply to existing thumbnails, you can run thumbnail generation on all assets in the job panel.

##### Machine learning performance and accuracy improvements (opt-in)

> \[!NOTE]
> We have re-exported and published the *same* machine learning models in an optimized format. This means they can be used as-is and do not require re-running any jobs. Opt-in to the revised machine learning models by adding the following environment variable to the machine learning container: `MACHINE_LEARNING_MODEL_REVISION=v2`.

After a long list of optimizations, ML is both significantly faster and uses less memory. This affects every backend, including CPU inference. However, the level of improvement varies by model and backend. Cases where certain backends (such as OpenVINO) produced wrong outputs at times should be resolved.

RKNPU, used by Rockchip boards, now supports every model in the catalog including OCR for the first time, bringing it to parity with other backends. Additionally, TensorRT RTX is now used for Ampere (30xx) and newer NVIDIA GPUs, improving performance significantly.

To fully benefit, set `MACHINE_LEARNING_MODEL_REVISION=v2`to allow more optimized models to be downloaded and used. Many of the improvements rely on these optimized models and will not take effect when using the old ones. The outputs of the new and old models are numerically equivalent, so switching doesn’t require re-running any tasks. This setting will be the default in a later release.

As always, keep in mind that the very first time you load a model requires more preparation work, so don’t be surprised if it takes some time at first. This preparation is cached and reused, so loading the model will be much faster after the first time.

##### New OCR models

The PP-OCRv6 family is now supported. These models are significantly more accurate than the previous PP-OCRv5 generation while all being multilingual. PP-OCRv6_tiny is efficient and suitable for modest hardware, PP-OCRv6_small is a notable jump in accuracy compared to PP-OCRv5_mobile, and PP-OCRv6_medium improves on PP-OCRv5_server as the highest quality and most demanding option.

##### Notable fix: correct storage size on MacOS

The block size used to calculate the storage capacity and usage has some nuances to it. In some situations (*\**cough*\** Docker on MacOS \*cough\*), we didn’t have enough information to correctly compute accurate values. With this release, the reported storage usage and capacity should now be correct.

##### Technical details

Recent NodeJS releases now expose the `frsize` property, which is sometimes different from `bsize` (“block size”). In those cases the calculate storage sizes could often be off by a factor of`4096` (or more). In fact, [#&#8203;4318](immich-app/immich#4318) has been our fourth oldest open issue (including the renovate dashboard), opened just over three years ago. Now, with accurate block sizes our storage calculation should be correct, even in Docker on MacOS.

We are very happy to finally see this issue resolved, even though it only meant a dependency bump and a tiny code change for us.

As always, please consider supporting the project.

🎉 Cheers! 🎉

#### Support Immich

<p align="center">

<img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!">

</p>

If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store>

***

#### What's Changed

##### 🚀 Features

- feat(mobile): stack edited photos over the original on upload by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31082](immich-app/immich#31082)
- feat: birthday memories by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;30831](immich-app/immich#30831)
- feat: people management by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31620](immich-app/immich#31620)
- feat(ml): trt-rtx by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31863](immich-app/immich#31863)

##### 🌟 Enhancements

- feat(web): improve non-Latin text rendering on the map by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31611](immich-app/immich#31611)
- feat: improved storage template onboarding by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;31531](immich-app/immich#31531)
- feat(web): default the activity log to show the latest by [@&#8203;nekorevend](https://github.com/nekorevend) in [#&#8203;28938](immich-app/immich#28938)
- feat(server): linear-light resampling by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31236](immich-app/immich#31236)
- feat(web): add leave album action by [@&#8203;kojomba](https://github.com/kojomba) in [#&#8203;31768](immich-app/immich#31768)
- feat(ml): improve model loading by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31742](immich-app/immich#31742)
- feat(ml): optimized model inference by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31750](immich-app/immich#31750)
- feat: editors can update album title & description by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31805](immich-app/immich#31805)
- feat(server): add support for .jfif files by [@&#8203;Trithereon](https://github.com/Trithereon) in [#&#8203;31778](immich-app/immich#31778)
- feat: memory UI for birthday by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;31798](immich-app/immich#31798)
- fix(server): use GeoNames for reverse-geocoded country names by [@&#8203;rufusutt](https://github.com/rufusutt) in [#&#8203;30199](immich-app/immich#30199)
- feat: extract manufacturer and device for samsung videos by [@&#8203;jonastahl](https://github.com/jonastahl) in [#&#8203;29375](immich-app/immich#29375)
- feat(server): sync OAuth claims on login ([#&#8203;8073](immich-app/immich#8073)) by [@&#8203;thomasdelorge](https://github.com/thomasdelorge) in [#&#8203;29013](immich-app/immich#29013)
- feat(mobile): editors can update album title & description by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31954](immich-app/immich#31954)
- feat(web): add shortcut to remove assets from an album by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;31940](immich-app/immich#31940)
- feat(ml): ppocr v6 by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;32147](immich-app/immich#32147)

##### 🐛 Bug fixes

- fix: Build SDK in dev container by [@&#8203;Pecacheu](https://github.com/Pecacheu) in [#&#8203;31096](immich-app/immich#31096)
- fix(ml): race when submitting to rknn execution queue by [@&#8203;swbchangle](https://github.com/swbchangle) in [#&#8203;31143](immich-app/immich#31143)
- fix(mobile): use timeline scroll velocity to add placeholders by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;29443](immich-app/immich#29443)
- fix(ml): openvino config has unnecessary devices and volumes by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31253](immich-app/immich#31253)
- fix(mobile): rewrite slideshow controller system by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;30771](immich-app/immich#30771)
- fix: make local album provider reactive by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31582](immich-app/immich#31582)
- fix(web): trim strings before searching/comparing by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31614](immich-app/immich#31614)
- fix(mobile): load more than one image on Android with Remove animations by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31587](immich-app/immich#31587)
- fix(mobile): make EXIF provider reactive by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31552](immich-app/immich#31552)
- fix: set limit maximum zoom in asset viewer by [@&#8203;TokenLimitExceeded](https://github.com/TokenLimitExceeded) in [#&#8203;31609](immich-app/immich#31609)
- feat: asset face v3 by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31591](immich-app/immich#31591)
- fix(mobile): fill video placeholder to prevent flicker on open by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;31621](immich-app/immich#31621)
- fix(mobile): show the real date for android local photos with no exif by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;29193](immich-app/immich#29193)
- fix(mobile): prevent live photo from getting stuck during dismiss animation by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;28080](immich-app/immich#28080)
- perf: faster server cold start by [@&#8203;holoskii](https://github.com/holoskii) in [#&#8203;31630](immich-app/immich#31630)
- fix(web): correct memory title date by [@&#8203;Dhruthiya](https://github.com/Dhruthiya) in [#&#8203;31643](immich-app/immich#31643)
- fix(mobile): clamp out of range datetimes so timeline queries cannot crash by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30490](immich-app/immich#30490)
- fix(web): scrollable search dropdown on mobile web by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31634](immich-app/immich#31634)
- fix(web): queue buttons focus outline by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31657](immich-app/immich#31657)
- fix(mobile): ios clear file cache feedback by [@&#8203;yranandika05](https://github.com/yranandika05) in [#&#8203;31401](immich-app/immich#31401)
- fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android by [@&#8203;agg23](https://github.com/agg23) in [#&#8203;31709](immich-app/immich#31709)
- fix: preserve scroll position on memories page by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;31588](immich-app/immich#31588)
- fix(server): compare integrity paths independently of unicode normalization by [@&#8203;justadityaraj](https://github.com/justadityaraj) in [#&#8203;31102](immich-app/immich#31102)
- fix(mobile): retry the background backup when connectivity is restored by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30909](immich-app/immich#30909)
- fix(web): refresh people after setting person thumbnail by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31744](immich-app/immich#31744)
- fix: save user_version in migration transaction by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;31039](immich-app/immich#31039)
- fix(mobile): play the server copy when the local video file cannot be read by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31606](immich-app/immich#31606)
- fix(mobile): resume after the app was launched in the background by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31557](immich-app/immich#31557)
- fix(web): prevent race when editing album description during upload by [@&#8203;dikshit-n](https://github.com/dikshit-n) in [#&#8203;31758](immich-app/immich#31758)
- fix(server): attach error handler to accepted sockets to prevent crash on connection reset by [@&#8203;aashish00021](https://github.com/aashish00021) in [#&#8203;31079](immich-app/immich#31079)
- fix(mobile): ask before deleting local only photos on android 10 and below by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31146](immich-app/immich#31146)
- fix(web): remember selected search type by [@&#8203;DawidKrynski](https://github.com/DawidKrynski) in [#&#8203;31799](immich-app/immich#31799)
- fix: face bounding box label alignment by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31793](immich-app/immich#31793)
- fix(server): incorrect scaling of rotated videos when transcoding by [@&#8203;fabxyz](https://github.com/fabxyz) in [#&#8203;31473](immich-app/immich#31473)
- fix(web): keep other comments visible when deleting a comment by [@&#8203;DawidKrynski](https://github.com/DawidKrynski) in [#&#8203;31848](immich-app/immich#31848)
- fix(server): write tag updates to exif table by [@&#8203;jorbrock](https://github.com/jorbrock) in [#&#8203;31425](immich-app/immich#31425)
- fix(server): exclude hidden assets from large files search by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31479](immich-app/immich#31479)
- fix: favorite workflow step description by [@&#8203;xCJPECKOVERx](https://github.com/xCJPECKOVERx) in [#&#8203;31840](immich-app/immich#31840)
- fix(ml): stricter typing and request validation by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31856](immich-app/immich#31856)
- fix(server): emit sidecarwrites and assetupdates consequently by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31777](immich-app/immich#31777)
- fix: library watcher should respect ignore patterns by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31418](immich-app/immich#31418)
- fix: email template by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31859](immich-app/immich#31859)
- fix(web): cull offscreen thumbnails on individual shared links by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31890](immich-app/immich#31890)
- fix: person management ids validation and permissions by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31898](immich-app/immich#31898)
- fix(server): person birthdate timezone bug by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;31901](immich-app/immich#31901)
- fix(mobile): face thumbnail stuck blank after renaming a person by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;30769](immich-app/immich#30769)
- fix(server): make "limit" paramter use z.coerce by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;31899](immich-app/immich#31899)
- fix(server): dont queue unneeded jobs when no xmp file exists by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31927](immich-app/immich#31927)
- fix(server): ignore Samsung Gallery rotation tag for HEIF orientation by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31937](immich-app/immich#31937)
- fix: restore folder view scroll position by [@&#8203;raahu1l](https://github.com/raahu1l) in [#&#8203;31860](immich-app/immich#31860)
- fix(ml): widen empty half-precision arrays by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31950](immich-app/immich#31950)
- fix(ml): serialize trt-rtx sessions by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31951](immich-app/immich#31951)
- fix(server): make library exclusion matching consistently case-insensitive by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31970](immich-app/immich#31970)
- fix: stale memory thumbnail by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31975](immich-app/immich#31975)
- fix: storage usage display on virtiofs and alike by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;31982](immich-app/immich#31982)
- fix(server): include album owner for album shared links by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31837](immich-app/immich#31837)
- fix(mobile): don't re-upload a photo the server already has by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31941](immich-app/immich#31941)
- fix(mobile): make the iOS background batch wait for its remote sync by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31942](immich-app/immich#31942)
- fix(mobile): don't start the foreground backup in iOS background launches by [@&#8203;santoshakil](https://github.com/santoshakil) in [#&#8203;31943](immich-app/immich#31943)
- fix(mobile): image jumps when full-res image loads during pinch or zoom animation by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;31948](immich-app/immich#31948)
- fix(ml): upgrade to openvino 2026.4.1 by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;31996](immich-app/immich#31996)
- fix(cli): sidecar precedence by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;31929](immich-app/immich#31929)
- fix: metadata extraction for media streams with unknown profile by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32007](immich-app/immich#32007)
- fix: assetTagFilter any matching by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32008](immich-app/immich#32008)
- fix: improper filename sanitizing by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32009](immich-app/immich#32009)
- fix(server): don't select an audio stream ffprobe could not identify by [@&#8203;RxChi1d](https://github.com/RxChi1d) in [#&#8203;30901](immich-app/immich#30901)
- fix: stale memory cover by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32098](immich-app/immich#32098)
- fix(web): no trash actions when trash is empty by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;32097](immich-app/immich#32097)
- fix: bounding box label clipping due to reactivity issue by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32090](immich-app/immich#32090)
- fix: people page search by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;32094](immich-app/immich#32094)
- fix(web): album reactivity by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;32095](immich-app/immich#32095)
- fix(ml): incorrect outputs on alchemist and battlemage by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;32110](immich-app/immich#32110)
- fix: memory upcoming query by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;32164](immich-app/immich#32164)
- fix(web): show face name label above box when it would be hidden by [@&#8203;joepadmiraal](https://github.com/joepadmiraal) in [#&#8203;32088](immich-app/immich#32088)

##### 📚 Documentation

- chore(docs): deprecate outlook SMTP by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;31139](immich-app/immich#31139)
- feat: new FAQ entries by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31227](immich-app/immich#31227)
- fix(docs): add needed mobile app developer setup step by [@&#8203;arth3mis](https://github.com/arth3mis) in [#&#8203;31263](immich-app/immich#31263)
- docs(server): document the UTC timestamp format for timeBucket by [@&#8203;alangrainger](https://github.com/alangrainger) in [#&#8203;31421](immich-app/immich#31421)
- chore(docs): add note about opening issues to contributing by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;31607](immich-app/immich#31607)
- docs: link to the docker compose builder by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31610](immich-app/immich#31610)
- fix: page path in better face clusters guide by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;31671](immich-app/immich#31671)
- docs: document locked folder session behaviour by [@&#8203;howroyd](https://github.com/howroyd) in [#&#8203;31735](immich-app/immich#31735)
- docs: update backup settings menu path to Database Dump Settings by [@&#8203;MalibThalion](https://github.com/MalibThalion) in [#&#8203;31270](immich-app/immich#31270)
- docs: add QNAP install guide by [@&#8203;hraabis](https://github.com/hraabis) in [#&#8203;30695](immich-app/immich#30695)

##### 🌐 Translations

- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;31376](immich-app/immich#31376)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;31864](immich-app/immich#31864)

#### New Contributors

- [@&#8203;Pecacheu](https://github.com/Pecacheu) made their first contribution in [#&#8203;31096](immich-app/immich#31096)
- [@&#8203;swbchangle](https://github.com/swbchangle) made their first contribution in [#&#8203;31143](immich-app/immich#31143)
- [@&#8203;maximal](https://github.com/maximal) made their first contribution in [#&#8203;31304](immich-app/immich#31304)
- [@&#8203;TokenLimitExceeded](https://github.com/TokenLimitExceeded) made their first contribution in [#&#8203;31609](immich-app/immich#31609)
- [@&#8203;holoskii](https://github.com/holoskii) made their first contribution in [#&#8203;31630](immich-app/immich#31630)
- [@&#8203;lg114](https://github.com/lg114) made their first contribution in [#&#8203;31654](immich-app/immich#31654)
- [@&#8203;Dhruthiya](https://github.com/Dhruthiya) made their first contribution in [#&#8203;31643](immich-app/immich#31643)
- [@&#8203;howroyd](https://github.com/howroyd) made their first contribution in [#&#8203;31735](immich-app/immich#31735)
- [@&#8203;dikshit-n](https://github.com/dikshit-n) made their first contribution in [#&#8203;31758](immich-app/immich#31758)
- [@&#8203;aashish00021](https://github.com/aashish00021) made their first contribution in [#&#8203;31079](immich-app/immich#31079)
- [@&#8203;nekorevend](https://github.com/nekorevend) made their first contribution in [#&#8203;28938](immich-app/immich#28938)
- [@&#8203;kojomba](https://github.com/kojomba) made their first contribution in [#&#8203;31768](immich-app/immich#31768)
- [@&#8203;DawidKrynski](https://github.com/DawidKrynski) made their first contribution in [#&#8203;31799](immich-app/immich#31799)
- [@&#8203;Trithereon](https://github.com/Trithereon) made their first contribution in [#&#8203;31778](immich-app/immich#31778)
- [@&#8203;fabxyz](https://github.com/fabxyz) made their first contribution in [#&#8203;31473](immich-app/immich#31473)
- [@&#8203;rufusutt](https://github.com/rufusutt) made their first contribution in [#&#8203;30199](immich-app/immich#30199)
- [@&#8203;avaly](https://github.com/avaly) made their first contribution in [#&#8203;31770](immich-app/immich#31770)
- [@&#8203;MalibThalion](https://github.com/MalibThalion) made their first contribution in [#&#8203;31270](immich-app/immich#31270)
- [@&#8203;jonastahl](https://github.com/jonastahl) made their first contribution in [#&#8203;29375](immich-app/immich#29375)
- [@&#8203;thomasdelorge](https://github.com/thomasdelorge) made their first contribution in [#&#8203;29013](immich-app/immich#29013)
- [@&#8203;raahu1l](https://github.com/raahu1l) made their first contribution in [#&#8203;31860](immich-app/immich#31860)
- [@&#8203;hraabis](https://github.com/hraabis) made their first contribution in [#&#8203;30695](immich-app/immich#30695)
- [@&#8203;ChocolateChipKookie](https://github.com/ChocolateChipKookie) made their first contribution in [#&#8203;32123](immich-app/immich#32123)
- [@&#8203;joepadmiraal](https://github.com/joepadmiraal) made their first contribution in [#&#8203;32088](immich-app/immich#32088)

**Full Changelog**: <immich-app/immich@v3.2.4...v3.3.0>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/London)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNTUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE1NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.hayden.moe/hayden/phoebe/pulls/881
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: Integrity check reports false positives for assets with non-ASCII filenames (NFC/NFD Unicode normalization mismatch)

3 participants