Skip to content

feat(mobile): Allow users to set profile picture from asset viewer - #25517

Merged
alextran1502 merged 28 commits into
immich-app:mainfrom
timonrieger:feat/mobile-profile-picture
Feb 22, 2026
Merged

feat(mobile): Allow users to set profile picture from asset viewer#25517
alextran1502 merged 28 commits into
immich-app:mainfrom
timonrieger:feat/mobile-profile-picture

Conversation

@timonrieger

@timonrieger timonrieger commented Jan 25, 2026

Copy link
Copy Markdown
Collaborator

Description

Adds the ability to set a profile picture from any remote asset in the mobile app. Users can select a remote asset and crop it before setting it as their profile picture.

  • Added setProfilePicture action button type with visibility logic (owner, not locked, RemoteAsset)
  • Created SetProfilePictureActionButton widget
  • Created ProfilePictureCropPage with 1:1 aspect ratio cropping
  • Extracted imageToUint8List utility function to remove duplicate code
  • Updated uploadProfileImageProvider to accept optional fileName parameter
  • Integrated into the action button system and viewer kebab menu

How Has This Been Tested?

  • Added unit tests for setProfilePicture button visibility logic covering:
    • Should show when owner, not locked, and asset is RemoteAsset
    • Should not show when not owner
    • Should not show when in locked view
    • Should not show when asset is not RemoteAsset
  • Manual testing of profile picture selection and cropping flow
  • Verified image conversion utility works correctly (and does not break the the other references)

Screen Recording

ScreenRecording_01-26-2026.00-29-44_1.mov

Checklist:

  • 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 was used to generate unit tests for the setProfilePicture action button visibility logic, following the existing test patterns in the codebase.

**Root cause:**
The autogenerated Dart OpenAPI client (`UsersApi.createProfileImage()`) had two issues:
1. It set `Content-Type: multipart/form-data` without a boundary, which overrode the correct header that Dart's `MultipartRequest` would set (`multipart/form-data; boundary=...`).
2. It added the file to both `mp.fields` and `mp.files`, creating a duplicate text field.

**Result:**
Multer on the server failed to parse the multipart body, so `@UploadedFile()` was `undefined` → accessing `file.path` in `UserService.createProfileImage()` threw → **500 Internal Server Error**.

**Workaround:**
Bypass the autogenerated method in `UserApiRepository.createProfileImage()` and send the multipart request directly using the same `ApiClient` (basePath + auth), ensuring:
- No manual `Content-Type` header (let `MultipartRequest` set it with boundary)
- File only in `mp.files`, not `mp.fields`
- Proper filename fallback
This reverts commit fcf37d2.
…. Replace inline image-to-Uint8List conversion with the new utility in EditImagePage, DriftEditImagePage, and ProfilePictureCropPage.
This reverts commit 68a6165.
This reverts commit 8e85057.
Comment on lines +64 to +67
Future<bool> upload(XFile file, {String? fileName}) async {
state = state.copyWith(status: UploadProfileStatus.loading);

var profileImagePath = await _userService.createProfileImage(file.name, await file.readAsBytes());
var profileImagePath = await _userService.createProfileImage(fileName ?? file.name, await file.readAsBytes());

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XFile.fromData() ignores the name parameter for IO-backed files (see flutter/flutter#87812 and flutter/packages#4416), so we must pass fileName explicitly, applied in

final xFile = XFile.fromData(pngBytes, mimeType: 'image/png');

compatible with existing implementation

var success = await ref.watch(uploadProfileImageProvider.notifier).upload(image);

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pulled this into a new util function, as we had this in use in three locations now

@shenlong-tanwen shenlong-tanwen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might also be best if we can remove the image_picker dependency and just let user pick a profile picture from their remote assets. But that can be a separate PR. Can you refactor the widget before I start testing the implementation?

Comment on lines +31 to +33
final cropController = useCropController();
final isLoading = useState<bool>(false);
final didInitCropController = useRef(false);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are moving away from using hooks. Can you refactor this to not use hooks but a StatefulWidget instead?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done and tested

@alextran1502
alextran1502 enabled auto-merge (squash) February 22, 2026 05:52
@alextran1502
alextran1502 merged commit f0cf331 into immich-app:main Feb 22, 2026
44 checks passed
@timonrieger
timonrieger deleted the feat/mobile-profile-picture branch February 22, 2026 09:46
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 20, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [immich-app/immich](https://github.com/immich-app/immich) | minor | `v2.5.6` → `v2.6.1` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/2) for more information.

---

### Release Notes

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

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

[Compare Source](immich-app/immich@v2.6.0...v2.6.1)

### v2.6.1

#### Hot fixes

- Fixed a failed migration issue on the mobile app when the URL Switching feature is used

#### What's Changed

##### 🐛 Bug fixes

- fix(server): fallback to email when name is empty by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27016](immich-app/immich#27016)
- fix: ignore errors deleting untitled album by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27020](immich-app/immich#27020)
- fix(web): wrap long album title by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27012](immich-app/immich#27012)
- fix(web): stop in-progress uploads on logout by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27021](immich-app/immich#27021)
- fix: writing empty exif tags by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27025](immich-app/immich#27025)
- fix(web): disable send button by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27051](immich-app/immich#27051)
- fix(mobile): server url migration by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27050](immich-app/immich#27050)

**Full Changelog**: <immich-app/immich@v2.6.0...v2.6.1>

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

[Compare Source](immich-app/immich@v2.5.6...v2.6.0)

### v2.6.0

Welcome to Immich `v2.6.0`, This release is a collection of more than *350 commits over 6 weeks*. I know, it is an eternity between releases compared to our previous era. This version focuses on bug fixes and enhancements across the app to provide a more delightful and smoother experience to you. This release also prepares for the next major release in the coming month, which will remove the old timeline implementation. Let's dive into the highlights of the release:

> \[!WARNING]
> For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
>
> ps: The old timeline has an exclamation icon next to the logo. <img width="525" height="120" alt="image" src="https://github.com/user-attachments/assets/ed36ea22-b16e-472f-961c-c19501712ba5" />

### Highlights

- Map side panel (web)
- Pick album cover (mobile)
- Shared link slugs (mobile)
- Shared link presets (web)
- Native HTTP clients (mobile)
- Video player and asset viewer improvements (mobile)
- Improved search results (mobile)
- `schema-check`: a new `immich-admin` command
- Read profile claims from ID token (OAuth)
- Notable fix: cast videos now automatically loop
- Notable fix: correctly extract make and model from Sony XAVC video files
- Notable fix: escape key handling on web
- Notable fix: healthcheck endpoint in maintenance mode
- Notable fix: timeline rendering for RTL languages like Arabic and Hebrew
- Notable fix: prevent server crash when extracting invalid metadata

#### Map side panel (web)

The map view on the web now opens a mini-timeline component as a side panel when you click on a cluster of assets. This makes it easier to view the cluster at a glance and enables bulk actions, such as adding to favorites and adding to an album.

<img width="800" alt="image" src="https://github.com/user-attachments/assets/6f90b04d-4aa7-4f68-b59c-c2b912e638f7" />

#### Pick album cover (mobile)

Users can now pick a new album cover directly from the mobile app.

<https://github.com/user-attachments/assets/7f99dc80-21c6-4ce6-9f75-8e6b0163dcaa>

#### Shared link slugs (mobile)

The mobile app now also supports setting a shared link slug, a feature that's been available on the web for a while.

<https://github.com/user-attachments/assets/5420995a-cfd4-471d-a3ac-db4fa45de780>

#### Shared link presets (web)

The expiration form input on the web was always a bit confusing, but it's been updated to make it easier to see and understand when a shared link will expire.

<img width="400" alt="image" src="https://github.com/user-attachments/assets/9d6124a9-eec2-43e8-b228-e1ac6c0415e8" />

#### Native HTTP clients (mobile)

The mobile app now uses native HTTP clients across both Android and iOS, with support for mTLS, self-signed certificates, basic auth, and custom headers. These features should now be more reliable and extend to background tasks, video playback, and other parts of the app. This also improves the app's overall network request performance thanks to HTTP/2 and HTTP/3, multiplexing, and caching.

#### Video player and asset viewer improvements (mobile)

The asset viewer has undergone many improvements under the hood to make it simpler, faster and more reliable. We've also added playback support for GIFs, enabled video zooming, and made many more bug fixes and tweaks.

##### The asset viewer now uses a gradient for actions, and video controls have been restyled

<img width="300" alt="image" src="https://github.com/user-attachments/assets/9a4e0892-f178-45fc-812c-10a6cba3f48b" />

##### Inline asset details

This used to be a bottom sheet and had a lot of glue for alignment. The new version is much more responsive and less buggy.

##### Before

<https://github.com/user-attachments/assets/43b59b59-7d6a-48d0-94d7-84b8cae1c2a9>

##### After

<https://github.com/user-attachments/assets/9217b6f4-1c92-40b0-bd95-a0681307cf38>

#### Improved search results (mobile)

The search results page now loads more results without rebuilding the entire grid, and should now load much faster. There are also new screens for when there are no search results and when all results have been loaded.

<https://github.com/user-attachments/assets/42ce69d4-1618-48ee-9cb9-91ec22e12b27>

#### `schema-check`: a new `immich-admin` command

A new `immich-admin` command has been added in this release: `schema-check`. The command runs a report on the database to check if any indexes, constraints, tables, or columns are missing. This check also runs automatically on startup.

#### Read profile claims from `idToken` (OAuth)

Prior to `v2.6.0`, Immich resolved the `email` and other claims from the [userinfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) endpoint. Now, Immich also supports reading those claims directly from the `idToken`. This makes it possible to use providers such as Microsoft ADFS that do not support the userinfo endpoint.

***

As always, there are many more QoL improvements, bug fixes, and enhancements in this release. Please find the full release note below

#### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.6.0 -->

#### What's Changed

##### 🔒 Security

- fix(server): restrict individual shared link asset removal to owners by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26868](immich-app/immich#26868)
- fix: add to shared link by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26886](immich-app/immich#26886)

##### 🚀 Features

- feat: shared link login by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25678](immich-app/immich#25678)
- feat: schema-check by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25904](immich-app/immich#25904)
- feat: add people deeplink by [@&#8203;arne182](https://github.com/arne182) in [#&#8203;25686](immich-app/immich#25686)
- feat(mobile): inline asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25952](immich-app/immich#25952)
- feat(mobile): filter by tags by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26196](immich-app/immich#26196)
- feat: add .mxf file support by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24644](immich-app/immich#24644)
- feat: tap to see next/previous image by [@&#8203;thezeroalpha](https://github.com/thezeroalpha) in [#&#8203;20286](immich-app/immich#20286)
- feat(mobile): Allow users to set album cover from mobile app by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25515](immich-app/immich#25515)
- feat(mobile): Allow users to set profile picture from asset viewer by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25517](immich-app/immich#25517)
- feat: ROCm 7.2 and MIGraphX support  by [@&#8203;kprinssu](https://github.com/kprinssu) in [#&#8203;26178](immich-app/immich#26178)
- feat(web): map timeline sidepanel by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26532](immich-app/immich#26532)
- feat: add responsive layout to broken asset by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26384](immich-app/immich#26384)
- feat(web): toggle zoom on double-click in photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26732](immich-app/immich#26732)
- feat(mobile): show animated images in asset viewer by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26614](immich-app/immich#26614)
- feat(mobile): open in browser by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26369](immich-app/immich#26369)

##### 🌟 Enhancements

- feat: verify permissions by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25647](immich-app/immich#25647)
- feat(web): change link expiration logic & presets  by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26064](immich-app/immich#26064)
- feat(mobile): dynamic layout in new timeline by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23837](immich-app/immich#23837)
- feat(cli): change progress bar to display file size by [@&#8203;Nykri](https://github.com/Nykri) in [#&#8203;23328](immich-app/immich#23328)
- feat(mobile): dynamic multi-line album name by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26040](immich-app/immich#26040)
- feat(mobile): hide search by context/OCR if disabled on server ([#&#8203;25472](immich-app/immich#25472)) by [@&#8203;Nacolis](https://github.com/Nacolis) in [#&#8203;26063](immich-app/immich#26063)
- fix(release): add docker-compose.rootless.yml to released assets by [@&#8203;dnozay](https://github.com/dnozay) in [#&#8203;26261](immich-app/immich#26261)
- feat(web): show ocr text boxes in panoramas by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;25727](immich-app/immich#25727)
- feat(web): loop chromecast video by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;24410](immich-app/immich#24410)
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24669](immich-app/immich#24669)
- feat(mobile): timeline - add bottomWidgetBuilder  by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;25634](immich-app/immich#25634)
- feat(mobile): video zooming in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;22036](immich-app/immich#22036)
- feat(mobile): Add slug support for shared links by [@&#8203;Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#&#8203;26441](immich-app/immich#26441)
- feat: warn when losing transparency during thumbnail generation by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26243](immich-app/immich#26243)
- perf(mobile): optimized album sorting by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;25179](immich-app/immich#25179)
- feat(mobile): prompt when deleting from trash by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26392](immich-app/immich#26392)
- feat: getAssetEdits respond with edit IDs by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26445](immich-app/immich#26445)
- fix(server): accept showAt and hideAt for creating memories by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26429](immich-app/immich#26429)
- feat(server): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26446](immich-app/immich#26446)
- feat: splash screen error page by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26460](immich-app/immich#26460)
- feat(mobile): add confirmation dialog to permanent delete action by [@&#8203;ByteSizedMarius](https://github.com/ByteSizedMarius) in [#&#8203;26442](immich-app/immich#26442)
- feat: enhance face-editor positioning by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26303](immich-app/immich#26303)
- feat: improve HEIC, HEIF and JPEG XL browser support detection by [@&#8203;nicosemp](https://github.com/nicosemp) in [#&#8203;26122](immich-app/immich#26122)
- refactor(web): remove replaceAsset action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26444](immich-app/immich#26444)
- feat(web): bounding box for faces when hovering over the face in photo view by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26667](immich-app/immich#26667)
- feat(mobile): keep search results visible by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26498](immich-app/immich#26498)
- feat(mobile): use shared native client by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;25942](immich-app/immich#25942)
- feat(mobile): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26518](immich-app/immich#26518)
- feat(ml): enable openvino for cpu by [@&#8203;apejcic](https://github.com/apejcic) in [#&#8203;22948](immich-app/immich#22948)
- feat: responsive video duration in thumbnail by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26770](immich-app/immich#26770)
- feat(web): animate zoom toggle with cubicOut easing by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26731](immich-app/immich#26731)
- feat(mobile): consolidate video controls by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26673](immich-app/immich#26673)
- feat(web): add shortcut "p" to open/close the face tag box by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26826](immich-app/immich#26826)
- feat(mobile): use material design 3 slider by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26829](immich-app/immich#26829)
- feat: adaptive progressive image loading for photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26636](immich-app/immich#26636)
- fix(server): extract make/model from sony video files by [@&#8203;brendanngo](https://github.com/brendanngo) in [#&#8203;26833](immich-app/immich#26833)
- chore(mobile): remove background from asset viewer back button by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26851](immich-app/immich#26851)
- feat(server): support IDPs that only send the userinfo in the ID token by [@&#8203;Belnadifia](https://github.com/Belnadifia) in [#&#8203;26717](immich-app/immich#26717)
- feat(web): improve OCR overlay text fitting, reactivity, and accessibility by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26678](immich-app/immich#26678)
- fix(web): allow pasting PIN code from clipboard or password manager by [@&#8203;pressslav](https://github.com/pressslav) in [#&#8203;26944](immich-app/immich#26944)

##### 🐛 Bug fixes

- fix: ignore checksum constraint error when logging by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26113](immich-app/immich#26113)
- fix(web): use locale for date picker by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26125](immich-app/immich#26125)
- fix(web): escape shortcut handling by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26096](immich-app/immich#26096)
- fix(mobile): Login routing on Splash screen by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;26128](immich-app/immich#26128)
- fix: null local date time in timeline queries by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26133](immich-app/immich#26133)
- fix(web): prevent event manager from throwing error by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26156](immich-app/immich#26156)
- fix(web): improve api key modal responsiveness by [@&#8203;klenner1](https://github.com/klenner1) in [#&#8203;26151](immich-app/immich#26151)
- fix(web): show correct assets in memory gallery by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26157](immich-app/immich#26157)
- fix(web): add missing [@&#8203;immich/ui](https://github.com/immich/ui) translations by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26143](immich-app/immich#26143)
- fix(mobile): timeline handling on foldable phones + ensuring that images are not cut off by [@&#8203;bkchr](https://github.com/bkchr) in [#&#8203;25088](immich-app/immich#25088)
- fix(mobile): prevent nav bar label text wrapping by [@&#8203;chrislongros](https://github.com/chrislongros) in [#&#8203;26011](immich-app/immich#26011)
- fix(mobile): hide latest version warnings by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26036](immich-app/immich#26036)
- fix(mobile): inconsistent query for people by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;24437](immich-app/immich#24437)
- fix(web): timeline multi select group state by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26180](immich-app/immich#26180)
- fix(web): add checkerboard background for transparent images by [@&#8203;agent-steven](https://github.com/agent-steven) in [#&#8203;26091](immich-app/immich#26091)
- fix(mobile): inherit toolbar opacity by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25694](immich-app/immich#25694)
- fix(web): focus tag input when modal opens by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26256](immich-app/immich#26256)
- fix(web): clear face boxes when switching assets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26249](immich-app/immich#26249)
- fix(web): clear unsaved asset description when changing asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26255](immich-app/immich#26255)
- fix(web): clear cache when asset changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26257](immich-app/immich#26257)
- fix: utc time zone upserts by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;26258](immich-app/immich#26258)
- fix: metadata crash by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26327](immich-app/immich#26327)
- fix: prevent server crash when extraction of metadata fails if the assets are corrupted by [@&#8203;Devansh-Jani](https://github.com/Devansh-Jani) in [#&#8203;26042](immich-app/immich#26042)
- fix(server): db restore failure when `DB_URL` is set to unix-domain socket connection by [@&#8203;fabio-garavini](https://github.com/fabio-garavini) in [#&#8203;26252](immich-app/immich#26252)
- fix: Download the edited version when downloading multiple photos by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;26259](immich-app/immich#26259)
- fix: include `DROP INDEX` in transaction to prevent missing index on rollback by [@&#8203;haoxi911](https://github.com/haoxi911) in [#&#8203;25399](immich-app/immich#25399)
- fix: safari address bar color by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26346](immich-app/immich#26346)
- fix(web): prevent panorama image reload during asset updates by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26349](immich-app/immich#26349)
- fix(web): favoriting assets opened via GalleryViewer by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26350](immich-app/immich#26350)
- fix(i18n): add translation key for partner's photos by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26348](immich-app/immich#26348)
- fix(web): single select scroll behavior by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26358](immich-app/immich#26358)
- perf: add indexes to improve People API response times by [@&#8203;bxtdvd](https://github.com/bxtdvd) in [#&#8203;26337](immich-app/immich#26337)
- fix: pin code reset modal by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26370](immich-app/immich#26370)
- fix(mobile): Reset "People" search filter chip if no selections are made by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26267](immich-app/immich#26267)
- fix(cli): delete sidecar files after upload if requested by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26353](immich-app/immich#26353)
- fix(web): album description auto height by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26420](immich-app/immich#26420)
- fix(web): prevent side panel overlap during transition by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26398](immich-app/immich#26398)
- fix(web): storage template example by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;26424](immich-app/immich#26424)
- fix(web): prevent `state_unsafe_mutation` error on people page by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26438](immich-app/immich#26438)
- fix: missing deletedAt and isVisible columns on mobile by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26414](immich-app/immich#26414)
- fix(mobile): joinLocal on archived timeline by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26387](immich-app/immich#26387)
- fix: always show library scan button by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;26428](immich-app/immich#26428)
- fix: retain asset when either asset is a favorite by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26473](immich-app/immich#26473)
- fix(web): prevent null folder tree on concurrent load by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26489](immich-app/immich#26489)
- fix(web): toast warning when trying to upload unsupported file type by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26492](immich-app/immich#26492)
- fix(mobile): birthday picker shows limited months when no date exists by [@&#8203;socksprox](https://github.com/socksprox) in [#&#8203;26407](immich-app/immich#26407)
- fix: consider DAR when extracting video dimension by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;25293](immich-app/immich#25293)
- feat(mobile): Prevent premature image cache eviction when higher image loading is enabled by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26208](immich-app/immich#26208)
- refactor: star rating by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26357](immich-app/immich#26357)
- fix(mobile): set correct initial system-ui mode in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;26500](immich-app/immich#26500)
- fix(server): Live Photo migration bug when album is in template by [@&#8203;NikhilAlapati](https://github.com/NikhilAlapati) in [#&#8203;25329](immich-app/immich#25329)
- fix(web): handle delete shortcut on shared link page as remove by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26552](immich-app/immich#26552)
- fix(mobile): prevent video player from being recreated unnecessarily by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26553](immich-app/immich#26553)
- fix(mobile): don't cut off top corners of app bar by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26550](immich-app/immich#26550)
- feat: update onnxruntime-openvino to 1.24.1 and intel drivers by [@&#8203;savely-krasovsky](https://github.com/savely-krasovsky) in [#&#8203;26565](immich-app/immich#26565)
- fix: hide download action for local/merged assets by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26461](immich-app/immich#26461)
- fix(web): top bar z index on search page by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26582](immich-app/immich#26582)
- fix(web): show shared link download button when logged in by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26629](immich-app/immich#26629)
- fix(mobile): asset viewer hero animation by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26545](immich-app/immich#26545)
- fix(web): timeline and asset viewer RTL support by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26513](immich-app/immich#26513)
- fix(server): clean up edited thumbnail when deleting asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26664](immich-app/immich#26664)
- fix: implement existing withStacked on searchAssetBuilder by [@&#8203;babbitt](https://github.com/babbitt) in [#&#8203;26607](immich-app/immich#26607)
- fix(mobile): video state by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26574](immich-app/immich#26574)
- fix(maintenance mode): wait for valid server config on restart by [@&#8203;insertish](https://github.com/insertish) in [#&#8203;26456](immich-app/immich#26456)
- fix(web): inconsistent asset nav bar state after visiting shared link by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26674](immich-app/immich#26674)
- fix(web): download toast showing wrong filename for motion assets by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26689](immich-app/immich#26689)
- fix(mobile): add safe area for asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26675](immich-app/immich#26675)
- fix(web): combobox dropdown positioning in modals by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26707](immich-app/immich#26707)
- fix(web): video stealing focus when it plays again when looping by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26704](immich-app/immich#26704)
- fix(ml): batch size setting by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26524](immich-app/immich#26524)
- fix(server): clarify transcoding bitrate policy by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26711](immich-app/immich#26711)
- fix: playback style migration by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;26718](immich-app/immich#26718)
- fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26741](immich-app/immich#26741)
- fix(server): opus handling as accepted audio codec in transcode policy by [@&#8203;skatsubo](https://github.com/skatsubo) in [#&#8203;26736](immich-app/immich#26736)
- fix(web): refresh recent albums sidebar after album changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26757](immich-app/immich#26757)
- fix(web): show the correct cursor at crop bounds when editing an asset by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26748](immich-app/immich#26748)
- fix(web): recalculate face bounding boxes by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26737](immich-app/immich#26737)
- fix(web): context menu overflow by [@&#8203;SevereCloud](https://github.com/SevereCloud) in [#&#8203;26760](immich-app/immich#26760)
- fix(web): correct tag rounding in search options by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26814](immich-app/immich#26814)
- fix(web): prevent unrelated assets from appearing in tag view by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26816](immich-app/immich#26816)
- fix(mobile): use tabular figures in backup page by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26830](immich-app/immich#26830)
- fix(mobile): wrap backup error message text by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26834](immich-app/immich#26834)
- fix(server): use correct day ordering in timeline buckets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26821](immich-app/immich#26821)
- fix(web): face selection box position resetting on browser resize by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26766](immich-app/immich#26766)
- fix: use correct original URL for 360 video panorama playback by [@&#8203;luis15pt](https://github.com/luis15pt) in [#&#8203;26831](immich-app/immich#26831)
- fix(web): disable drag and drop for internal items by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26897](immich-app/immich#26897)
- fix(web): keep header fixed on individual shared links by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26892](immich-app/immich#26892)
- fix: SMTP over TLS by [@&#8203;nathanielhourt](https://github.com/nathanielhourt) in [#&#8203;26893](immich-app/immich#26893)
- fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset in [#&#8203;26890](immich-app/immich#26890)
- fix(mobile): use shared auth for background\_downloader by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26911](immich-app/immich#26911)
- fix(web): prevent search page error on missing album filter by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26948](immich-app/immich#26948)
- fix(server): sync files to disk by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26881](immich-app/immich#26881)
- fix(web): jump to primary stacked asset from memory by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26978](immich-app/immich#26978)
- fix(mobile): reflect asset deletions instantly by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26835](immich-app/immich#26835)
- fix: healthcheck by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26989](immich-app/immich#26989)
- fix(web): escape handling for tagging and adding a face in asset viewer by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26870](immich-app/immich#26870)
- fix: filter after searching by asset id by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26994](immich-app/immich#26994)
- fix: bounding box return type by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27014](immich-app/immich#27014)
- fix: validate accept header before returning html by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27019](immich-app/immich#27019)

##### 📚 Documentation

- chore(docs): Update help channel for developers by [@&#8203;Mraedis](https://github.com/Mraedis) in [#&#8203;26284](immich-app/immich#26284)
- feat(docs): Explain configuration file location for Docker Compose by [@&#8203;keunes](https://github.com/keunes) in [#&#8203;24989](immich-app/immich#24989)
- chore(docs): add quick-start guide for DevPod with docker by [@&#8203;dhlavaty](https://github.com/dhlavaty) in [#&#8203;26213](immich-app/immich#26213)
- feat(docs): Adding information about parameter c= by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;26430](https://github.com/immich-app/immich/pull/26430)
- feat: doc links by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26519](https://github.com/immich-app/immich/pull/26519)
- fix(docs): add ocr to job flow diagram by [@&#8203;niij](https://github.com/niij) in [#&#8203;26505](https://github.com/immich-app/immich/pull/26505)

##### 🌐 Translations

- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26118](https://github.com/immich-app/immich/pull/26118)
- fix: clarify external domain setting is used for emails too by [@&#8203;chrislongros](https://github.com/chrislongros) in [#&#8203;26009](https://github.com/immich-app/immich/pull/26009)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26167](https://github.com/immich-app/immich/pull/26167)
- fix(web): error page i18n by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26517](https://github.com/immich-app/immich/pull/26517)
- chore(web): clarify locale settings description by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;25562](https://github.com/immich-app/immich/pull/25562)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26192](https://github.com/immich-app/immich/pull/26192)

#### New Contributors

- [@&#8203;klenner1](https://github.com/klenner1) made their first contribution in [#&#8203;26151](immich-app/immich#26151)
- [@&#8203;bkchr](https://github.com/bkchr) made their first contribution in [#&#8203;25088](immich-app/immich#25088)
- [@&#8203;chrislongros](https://github.com/chrislongros) made their first contribution in [#&#8203;26011](immich-app/immich#26011)
- [@&#8203;agent-steven](https://github.com/agent-steven) made their first contribution in [#&#8203;26091](immich-app/immich#26091)
- [@&#8203;dhlavaty](https://github.com/dhlavaty) made their first contribution in [#&#8203;26238](https://github.com/immich-app/immich/pull/26238)
- [@&#8203;Nacolis](https://github.com/Nacolis) made their first contribution in [#&#8203;26063](immich-app/immich#26063)
- [@&#8203;ewinnd](https://github.com/ewinnd) made their first contribution in [#&#8203;26277](https://github.com/immich-app/immich/pull/26277)
- [@&#8203;dnozay](https://github.com/dnozay) made their first contribution in [#&#8203;26261](immich-app/immich#26261)
- [@&#8203;keunes](https://github.com/keunes) made their first contribution in [#&#8203;24989](immich-app/immich#24989)
- [@&#8203;Devansh-Jani](https://github.com/Devansh-Jani) made their first contribution in [#&#8203;26042](immich-app/immich#26042)
- [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) made their first contribution in [#&#8203;26196](immich-app/immich#26196)
- [@&#8203;fabio-garavini](https://github.com/fabio-garavini) made their first contribution in [#&#8203;26252](immich-app/immich#26252)
- [@&#8203;haoxi911](https://github.com/haoxi911) made their first contribution in [#&#8203;25399](immich-app/immich#25399)
- [@&#8203;thezeroalpha](https://github.com/thezeroalpha) made their first contribution in [#&#8203;20286](immich-app/immich#20286)
- [@&#8203;socksprox](https://github.com/socksprox) made their first contribution in [#&#8203;26407](immich-app/immich#26407)
- [@&#8203;kprinssu](https://github.com/kprinssu) made their first contribution in [#&#8203;26178](immich-app/immich#26178)
- [@&#8203;babbitt](https://github.com/babbitt) made their first contribution in [#&#8203;26607](immich-app/immich#26607)
- [@&#8203;niij](https://github.com/niij) made their first contribution in [#&#8203;26505](https://github.com/immich-app/immich/pull/26505)
- [@&#8203;cratoo](https://github.com/cratoo) made their first contribution in [#&#8203;26667](immich-app/immich#26667)
- [@&#8203;M123-dev](https://github.com/M123-dev) made their first contribution in [#&#8203;26630](https://github.com/immich-app/immich/pull/26630)
- [@&#8203;apejcic](https://github.com/apejcic) made their first contribution in [#&#8203;22948](immich-app/immich#22948)
- [@&#8203;SevereCloud](https://github.com/SevereCloud) made their first contribution in [#&#8203;26760](immich-app/immich#26760)
- [@&#8203;brendanngo](https://github.com/brendanngo) made their first contribution in [#&#8203;26833](immich-app/immich#26833)
- [@&#8203;luis15pt](https://github.com/luis15pt) made their first contribution in [#&#8203;26831](immich-app/immich#26831)
- [@&#8203;nathanielhourt](https://github.com/nathanielhourt) made their first contribution in [#&#8203;26893](immich-app/immich#26893)
- [@&#8203;Belnadifia](https://github.com/Belnadifia) made their first contribution in [#&#8203;26717](immich-app/immich#26717)
- [@&#8203;pressslav](https://github.com/pressslav) made their first contribution in [#&#8203;26944](immich-app/immich#26944)

**Full Changelog**: <immich-app/immich@v2.5.6...v2.6.0>

</details>

---

### Configuration

📅 **Schedule**: 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 is behind base branch, 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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4886
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 20, 2026
….6.1 (#4887)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v2.5.6` → `v2.6.1` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/2) for more information.

---

### Release Notes

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

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

[Compare Source](immich-app/immich@v2.6.0...v2.6.1)

### v2.6.1

#### Hot fixes

- Fixed a failed migration issue on the mobile app when the URL Switching feature is used

#### What's Changed

##### 🐛 Bug fixes

- fix(server): fallback to email when name is empty by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27016](immich-app/immich#27016)
- fix: ignore errors deleting untitled album by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27020](immich-app/immich#27020)
- fix(web): wrap long album title by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27012](immich-app/immich#27012)
- fix(web): stop in-progress uploads on logout by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27021](immich-app/immich#27021)
- fix: writing empty exif tags by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27025](immich-app/immich#27025)
- fix(web): disable send button by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27051](immich-app/immich#27051)
- fix(mobile): server url migration by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27050](immich-app/immich#27050)

**Full Changelog**: <immich-app/immich@v2.6.0...v2.6.1>

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

[Compare Source](immich-app/immich@v2.5.6...v2.6.0)

### v2.6.0

Welcome to Immich `v2.6.0`, This release is a collection of more than *350 commits over 6 weeks*. I know, it is an eternity between releases compared to our previous era. This version focuses on bug fixes and enhancements across the app to provide a more delightful and smoother experience to you. This release also prepares for the next major release in the coming month, which will remove the old timeline implementation. Let's dive into the highlights of the release:

> \[!WARNING]
> For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
>
> ps: The old timeline has an exclamation icon next to the logo. <img width="525" height="120" alt="image" src="https://github.com/user-attachments/assets/ed36ea22-b16e-472f-961c-c19501712ba5" />

### Highlights

- Map side panel (web)
- Pick album cover (mobile)
- Shared link slugs (mobile)
- Shared link presets (web)
- Native HTTP clients (mobile)
- Video player and asset viewer improvements (mobile)
- Improved search results (mobile)
- `schema-check`: a new `immich-admin` command
- Read profile claims from ID token (OAuth)
- Notable fix: cast videos now automatically loop
- Notable fix: correctly extract make and model from Sony XAVC video files
- Notable fix: escape key handling on web
- Notable fix: healthcheck endpoint in maintenance mode
- Notable fix: timeline rendering for RTL languages like Arabic and Hebrew
- Notable fix: prevent server crash when extracting invalid metadata

#### Map side panel (web)

The map view on the web now opens a mini-timeline component as a side panel when you click on a cluster of assets. This makes it easier to view the cluster at a glance and enables bulk actions, such as adding to favorites and adding to an album.

<img width="800" alt="image" src="https://github.com/user-attachments/assets/6f90b04d-4aa7-4f68-b59c-c2b912e638f7" />

#### Pick album cover (mobile)

Users can now pick a new album cover directly from the mobile app.

<https://github.com/user-attachments/assets/7f99dc80-21c6-4ce6-9f75-8e6b0163dcaa>

#### Shared link slugs (mobile)

The mobile app now also supports setting a shared link slug, a feature that's been available on the web for a while.

<https://github.com/user-attachments/assets/5420995a-cfd4-471d-a3ac-db4fa45de780>

#### Shared link presets (web)

The expiration form input on the web was always a bit confusing, but it's been updated to make it easier to see and understand when a shared link will expire.

<img width="400" alt="image" src="https://github.com/user-attachments/assets/9d6124a9-eec2-43e8-b228-e1ac6c0415e8" />

#### Native HTTP clients (mobile)

The mobile app now uses native HTTP clients across both Android and iOS, with support for mTLS, self-signed certificates, basic auth, and custom headers. These features should now be more reliable and extend to background tasks, video playback, and other parts of the app. This also improves the app's overall network request performance thanks to HTTP/2 and HTTP/3, multiplexing, and caching.

#### Video player and asset viewer improvements (mobile)

The asset viewer has undergone many improvements under the hood to make it simpler, faster and more reliable. We've also added playback support for GIFs, enabled video zooming, and made many more bug fixes and tweaks.

##### The asset viewer now uses a gradient for actions, and video controls have been restyled

<img width="300" alt="image" src="https://github.com/user-attachments/assets/9a4e0892-f178-45fc-812c-10a6cba3f48b" />

##### Inline asset details

This used to be a bottom sheet and had a lot of glue for alignment. The new version is much more responsive and less buggy.

##### Before

<https://github.com/user-attachments/assets/43b59b59-7d6a-48d0-94d7-84b8cae1c2a9>

##### After

<https://github.com/user-attachments/assets/9217b6f4-1c92-40b0-bd95-a0681307cf38>

#### Improved search results (mobile)

The search results page now loads more results without rebuilding the entire grid, and should now load much faster. There are also new screens for when there are no search results and when all results have been loaded.

<https://github.com/user-attachments/assets/42ce69d4-1618-48ee-9cb9-91ec22e12b27>

#### `schema-check`: a new `immich-admin` command

A new `immich-admin` command has been added in this release: `schema-check`. The command runs a report on the database to check if any indexes, constraints, tables, or columns are missing. This check also runs automatically on startup.

#### Read profile claims from `idToken` (OAuth)

Prior to `v2.6.0`, Immich resolved the `email` and other claims from the [userinfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) endpoint. Now, Immich also supports reading those claims directly from the `idToken`. This makes it possible to use providers such as Microsoft ADFS that do not support the userinfo endpoint.

***

As always, there are many more QoL improvements, bug fixes, and enhancements in this release. Please find the full release note below

#### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.6.0 -->

#### What's Changed

##### 🔒 Security

- fix(server): restrict individual shared link asset removal to owners by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26868](immich-app/immich#26868)
- fix: add to shared link by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26886](immich-app/immich#26886)

##### 🚀 Features

- feat: shared link login by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25678](immich-app/immich#25678)
- feat: schema-check by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25904](immich-app/immich#25904)
- feat: add people deeplink by [@&#8203;arne182](https://github.com/arne182) in [#&#8203;25686](immich-app/immich#25686)
- feat(mobile): inline asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25952](immich-app/immich#25952)
- feat(mobile): filter by tags by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26196](immich-app/immich#26196)
- feat: add .mxf file support by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24644](immich-app/immich#24644)
- feat: tap to see next/previous image by [@&#8203;thezeroalpha](https://github.com/thezeroalpha) in [#&#8203;20286](immich-app/immich#20286)
- feat(mobile): Allow users to set album cover from mobile app by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25515](immich-app/immich#25515)
- feat(mobile): Allow users to set profile picture from asset viewer by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25517](immich-app/immich#25517)
- feat: ROCm 7.2 and MIGraphX support  by [@&#8203;kprinssu](https://github.com/kprinssu) in [#&#8203;26178](immich-app/immich#26178)
- feat(web): map timeline sidepanel by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26532](immich-app/immich#26532)
- feat: add responsive layout to broken asset by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26384](immich-app/immich#26384)
- feat(web): toggle zoom on double-click in photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26732](immich-app/immich#26732)
- feat(mobile): show animated images in asset viewer by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26614](immich-app/immich#26614)
- feat(mobile): open in browser by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26369](immich-app/immich#26369)

##### 🌟 Enhancements

- feat: verify permissions by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25647](immich-app/immich#25647)
- feat(web): change link expiration logic & presets  by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26064](immich-app/immich#26064)
- feat(mobile): dynamic layout in new timeline by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23837](immich-app/immich#23837)
- feat(cli): change progress bar to display file size by [@&#8203;Nykri](https://github.com/Nykri) in [#&#8203;23328](immich-app/immich#23328)
- feat(mobile): dynamic multi-line album name by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26040](immich-app/immich#26040)
- feat(mobile): hide search by context/OCR if disabled on server ([#&#8203;25472](immich-app/immich#25472)) by [@&#8203;Nacolis](https://github.com/Nacolis) in [#&#8203;26063](immich-app/immich#26063)
- fix(release): add docker-compose.rootless.yml to released assets by [@&#8203;dnozay](https://github.com/dnozay) in [#&#8203;26261](immich-app/immich#26261)
- feat(web): show ocr text boxes in panoramas by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;25727](immich-app/immich#25727)
- feat(web): loop chromecast video by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;24410](immich-app/immich#24410)
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24669](immich-app/immich#24669)
- feat(mobile): timeline - add bottomWidgetBuilder  by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;25634](immich-app/immich#25634)
- feat(mobile): video zooming in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;22036](immich-app/immich#22036)
- feat(mobile): Add slug support for shared links by [@&#8203;Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#&#8203;26441](immich-app/immich#26441)
- feat: warn when losing transparency during thumbnail generation by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26243](immich-app/immich#26243)
- perf(mobile): optimized album sorting by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;25179](immich-app/immich#25179)
- feat(mobile): prompt when deleting from trash by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26392](immich-app/immich#26392)
- feat: getAssetEdits respond with edit IDs by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26445](immich-app/immich#26445)
- fix(server): accept showAt and hideAt for creating memories by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26429](immich-app/immich#26429)
- feat(server): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26446](immich-app/immich#26446)
- feat: splash screen error page by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26460](immich-app/immich#26460)
- feat(mobile): add confirmation dialog to permanent delete action by [@&#8203;ByteSizedMarius](https://github.com/ByteSizedMarius) in [#&#8203;26442](immich-app/immich#26442)
- feat: enhance face-editor positioning by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26303](immich-app/immich#26303)
- feat: improve HEIC, HEIF and JPEG XL browser support detection by [@&#8203;nicosemp](https://github.com/nicosemp) in [#&#8203;26122](immich-app/immich#26122)
- refactor(web): remove replaceAsset action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26444](immich-app/immich#26444)
- feat(web): bounding box for faces when hovering over the face in photo view by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26667](immich-app/immich#26667)
- feat(mobile): keep search results visible by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26498](immich-app/immich#26498)
- feat(mobile): use shared native client by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;25942](immich-app/immich#25942)
- feat(mobile): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26518](immich-app/immich#26518)
- feat(ml): enable openvino for cpu by [@&#8203;apejcic](https://github.com/apejcic) in [#&#8203;22948](immich-app/immich#22948)
- feat: responsive video duration in thumbnail by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26770](immich-app/immich#26770)
- feat(web): animate zoom toggle with cubicOut easing by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26731](immich-app/immich#26731)
- feat(mobile): consolidate video controls by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26673](immich-app/immich#26673)
- feat(web): add shortcut "p" to open/close the face tag box by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26826](immich-app/immich#26826)
- feat(mobile): use material design 3 slider by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26829](immich-app/immich#26829)
- feat: adaptive progressive image loading for photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26636](immich-app/immich#26636)
- fix(server): extract make/model from sony video files by [@&#8203;brendanngo](https://github.com/brendanngo) in [#&#8203;26833](immich-app/immich#26833)
- chore(mobile): remove background from asset viewer back button by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26851](immich-app/immich#26851)
- feat(server): support IDPs that only send the userinfo in the ID token by [@&#8203;Belnadifia](https://github.com/Belnadifia) in [#&#8203;26717](immich-app/immich#26717)
- feat(web): improve OCR overlay text fitting, reactivity, and accessibility by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26678](immich-app/immich#26678)
- fix(web): allow pasting PIN code from clipboard or password manager by [@&#8203;pressslav](https://github.com/pressslav) in [#&#8203;26944](immich-app/immich#26944)

##### 🐛 Bug fixes

- fix: ignore checksum constraint error when logging by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26113](immich-app/immich#26113)
- fix(web): use locale for date picker by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26125](immich-app/immich#26125)
- fix(web): escape shortcut handling by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26096](immich-app/immich#26096)
- fix(mobile): Login routing on Splash screen by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;26128](immich-app/immich#26128)
- fix: null local date time in timeline queries by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26133](immich-app/immich#26133)
- fix(web): prevent event manager from throwing error by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26156](immich-app/immich#26156)
- fix(web): improve api key modal responsiveness by [@&#8203;klenner1](https://github.com/klenner1) in [#&#8203;26151](immich-app/immich#26151)
- fix(web): show correct assets in memory gallery by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26157](immich-app/immich#26157)
- fix(web): add missing [@&#8203;immich/ui](https://github.com/immich/ui) translations by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26143](immich-app/immich#26143)
- fix(mobile): timeline handling on foldable phones + ensuring that images are not cut off by [@&#8203;bkchr](https://github.com/bkchr) in [#&#8203;25088](immich-app/immich#25088)
- fix(mobile): prevent nav bar label text wrapping by [@&#8203;chrislongros](https://github.com/chrislongros) in [#&#8203;26011](immich-app/immich#26011)
- fix(mobile): hide latest version warnings by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26036](immich-app/immich#26036)
- fix(mobile): inconsistent query for people by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;24437](immich-app/immich#24437)
- fix(web): timeline multi select group state by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26180](immich-app/immich#26180)
- fix(web): add checkerboard background for transparent images by [@&#8203;agent-steven](https://github.com/agent-steven) in [#&#8203;26091](immich-app/immich#26091)
- fix(mobile): inherit toolbar opacity by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25694](immich-app/immich#25694)
- fix(web): focus tag input when modal opens by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26256](immich-app/immich#26256)
- fix(web): clear face boxes when switching assets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26249](immich-app/immich#26249)
- fix(web): clear unsaved asset description when changing asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26255](immich-app/immich#26255)
- fix(web): clear cache when asset changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26257](immich-app/immich#26257)
- fix: utc time zone upserts by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;26258](immich-app/immich#26258)
- fix: metadata crash by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26327](immich-app/immich#26327)
- fix: prevent server crash when extraction of metadata fails if the assets are corrupted by [@&#8203;Devansh-Jani](https://github.com/Devansh-Jani) in [#&#8203;26042](immich-app/immich#26042)
- fix(server): db restore failure when `DB_URL` is set to unix-domain socket connection by [@&#8203;fabio-garavini](https://github.com/fabio-garavini) in [#&#8203;26252](immich-app/immich#26252)
- fix: Download the edited version when downloading multiple photos by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;26259](immich-app/immich#26259)
- fix: include `DROP INDEX` in transaction to prevent missing index on rollback by [@&#8203;haoxi911](https://github.com/haoxi911) in [#&#8203;25399](immich-app/immich#25399)
- fix: safari address bar color by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26346](immich-app/immich#26346)
- fix(web): prevent panorama image reload during asset updates by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26349](immich-app/immich#26349)
- fix(web): favoriting assets opened via GalleryViewer by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26350](immich-app/immich#26350)
- fix(i18n): add translation key for partner's photos by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26348](immich-app/immich#26348)
- fix(web): single select scroll behavior by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26358](immich-app/immich#26358)
- perf: add indexes to improve People API response times by [@&#8203;bxtdvd](https://github.com/bxtdvd) in [#&#8203;26337](immich-app/immich#26337)
- fix: pin code reset modal by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26370](immich-app/immich#26370)
- fix(mobile): Reset "People" search filter chip if no selections are made by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26267](immich-app/immich#26267)
- fix(cli): delete sidecar files after upload if requested by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26353](immich-app/immich#26353)
- fix(web): album description auto height by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26420](immich-app/immich#26420)
- fix(web): prevent side panel overlap during transition by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26398](immich-app/immich#26398)
- fix(web): storage template example by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;26424](immich-app/immich#26424)
- fix(web): prevent `state_unsafe_mutation` error on people page by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26438](immich-app/immich#26438)
- fix: missing deletedAt and isVisible columns on mobile by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26414](immich-app/immich#26414)
- fix(mobile): joinLocal on archived timeline by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26387](immich-app/immich#26387)
- fix: always show library scan button by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;26428](immich-app/immich#26428)
- fix: retain asset when either asset is a favorite by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26473](immich-app/immich#26473)
- fix(web): prevent null folder tree on concurrent load by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26489](immich-app/immich#26489)
- fix(web): toast warning when trying to upload unsupported file type by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26492](immich-app/immich#26492)
- fix(mobile): birthday picker shows limited months when no date exists by [@&#8203;socksprox](https://github.com/socksprox) in [#&#8203;26407](immich-app/immich#26407)
- fix: consider DAR when extracting video dimension by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;25293](immich-app/immich#25293)
- feat(mobile): Prevent premature image cache eviction when higher image loading is enabled by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26208](immich-app/immich#26208)
- refactor: star rating by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26357](immich-app/immich#26357)
- fix(mobile): set correct initial system-ui mode in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;26500](immich-app/immich#26500)
- fix(server): Live Photo migration bug when album is in template by [@&#8203;NikhilAlapati](https://github.com/NikhilAlapati) in [#&#8203;25329](immich-app/immich#25329)
- fix(web): handle delete shortcut on shared link page as remove by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26552](immich-app/immich#26552)
- fix(mobile): prevent video player from being recreated unnecessarily by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26553](immich-app/immich#26553)
- fix(mobile): don't cut off top corners of app bar by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26550](immich-app/immich#26550)
- feat: update onnxruntime-openvino to 1.24.1 and intel drivers by [@&#8203;savely-krasovsky](https://github.com/savely-krasovsky) in [#&#8203;26565](immich-app/immich#26565)
- fix: hide download action for local/merged assets by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26461](immich-app/immich#26461)
- fix(web): top bar z index on search page by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26582](immich-app/immich#26582)
- fix(web): show shared link download button when logged in by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26629](immich-app/immich#26629)
- fix(mobile): asset viewer hero animation by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26545](immich-app/immich#26545)
- fix(web): timeline and asset viewer RTL support by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26513](immich-app/immich#26513)
- fix(server): clean up edited thumbnail when deleting asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26664](immich-app/immich#26664)
- fix: implement existing withStacked on searchAssetBuilder by [@&#8203;babbitt](https://github.com/babbitt) in [#&#8203;26607](immich-app/immich#26607)
- fix(mobile): video state by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26574](immich-app/immich#26574)
- fix(maintenance mode): wait for valid server config on restart by [@&#8203;insertish](https://github.com/insertish) in [#&#8203;26456](immich-app/immich#26456)
- fix(web): inconsistent asset nav bar state after visiting shared link by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26674](immich-app/immich#26674)
- fix(web): download toast showing wrong filename for motion assets by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26689](immich-app/immich#26689)
- fix(mobile): add safe area for asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26675](immich-app/immich#26675)
- fix(web): combobox dropdown positioning in modals by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26707](immich-app/immich#26707)
- fix(web): video stealing focus when it plays again when looping by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26704](immich-app/immich#26704)
- fix(ml): batch size setting by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26524](immich-app/immich#26524)
- fix(server): clarify transcoding bitrate policy by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26711](immich-app/immich#26711)
- fix: playback style migration by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;26718](immich-app/immich#26718)
- fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26741](immich-app/immich#26741)
- fix(server): opus handling as accepted audio codec in transcode policy by [@&#8203;skatsubo](https://github.com/skatsubo) in [#&#8203;26736](immich-app/immich#26736)
- fix(web): refresh recent albums sidebar after album changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26757](immich-app/immich#26757)
- fix(web): show the correct cursor at crop bounds when editing an asset by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26748](immich-app/immich#26748)
- fix(web): recalculate face bounding boxes by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26737](immich-app/immich#26737)
- fix(web): context menu overflow by [@&#8203;SevereCloud](https://github.com/SevereCloud) in [#&#8203;26760](immich-app/immich#26760)
- fix(web): correct tag rounding in search options by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26814](immich-app/immich#26814)
- fix(web): prevent unrelated assets from appearing in tag view by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26816](immich-app/immich#26816)
- fix(mobile): use tabular figures in backup page by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26830](immich-app/immich#26830)
- fix(mobile): wrap backup error message text by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26834](immich-app/immich#26834)
- fix(server): use correct day ordering in timeline buckets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26821](immich-app/immich#26821)
- fix(web): face selection box position resetting on browser resize by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26766](immich-app/immich#26766)
- fix: use correct original URL for 360 video panorama playback by [@&#8203;luis15pt](https://github.com/luis15pt) in [#&#8203;26831](immich-app/immich#26831)
- fix(web): disable drag and drop for internal items by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26897](immich-app/immich#26897)
- fix(web): keep header fixed on individual shared links by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26892](immich-app/immich#26892)
- fix: SMTP over TLS by [@&#8203;nathanielhourt](https://github.com/nathanielhourt) in [#&#8203;26893](immich-app/immich#26893)
- fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset in [#&#8203;26890](immich-app/immich#26890)
- fix(mobile): use shared auth for background\_downloader by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26911](immich-app/immich#26911)
- fix(web): prevent search page error on missing album filter by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26948](immich-app/immich#26948)
- fix(server): sync files to disk by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26881](immich-app/immich#26881)
- fix(web): jump to primary stacked asset from memory by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26978](immich-app/immich#26978)
- fix(mobile): reflect asset deletions instantly by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26835](immich-app/immich#26835)
- fix: healthcheck by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26989](immich-app/immich#26989)
- fix(web): escape handling for tagging and adding a face in asset viewer by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26870](immich-app/immich#26870)
- fix: filter after searching by asset id by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26994](immich-app/immich#26994)
- fix: bounding box return type by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27014](immich-app/immich#27014)
- fix: validate accept header before returning html by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27019](immich-app/immich#27019)

##### 📚 Documentation

- chore(docs): Update help channel for developers by [@&#8203;Mraedis](https://github.com/Mraedis) in [#&#8203;26284](immich-app/immich#26284)
- feat(docs): Explain configuration file location for Docker Compose by [@&#8203;keunes](https://github.com/keunes) in [#&#8203;24989](immich-app/immich#24989)
- chore(docs): add quick-start guide for DevPod with docker by [@&#8203;dhlavaty](https://github.com/dhlavaty) in [#&#8203;26213](immich-app/immich#26213)
- feat(docs): Adding information about parameter c= by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;26430](https://github.com/immich-app/immich/pull/26430)
- feat: doc links by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26519](https://github.com/immich-app/immich/pull/26519)
- fix(docs): add ocr to job flow diagram by [@&#8203;niij](https://github.com/niij) in [#&#8203;26505](https://github.com/immich-app/immich/pull/26505)

##### 🌐 Translations

- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26118](https://github.com/immich-app/immich/pull/26118)
- fix: clarify external domain setting is used for emails too by [@&#8203;chrislongros](https://github.com/chrislongros) in [#&#8203;26009](https://github.com/immich-app/immich/pull/26009)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26167](https://github.com/immich-app/immich/pull/26167)
- fix(web): error page i18n by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26517](https://github.com/immich-app/immich/pull/26517)
- chore(web): clarify locale settings description by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;25562](https://github.com/immich-app/immich/pull/25562)
- chore(web): update translations by [@&#8203;weblate](https://github.com/weblate) in [#&#8203;26192](https://github.com/immich-app/immich/pull/26192)

#### New Contributors

- [@&#8203;klenner1](https://github.com/klenner1) made their first contribution in [#&#8203;26151](immich-app/immich#26151)
- [@&#8203;bkchr](https://github.com/bkchr) made their first contribution in [#&#8203;25088](immich-app/immich#25088)
- [@&#8203;chrislongros](https://github.com/chrislongros) made their first contribution in [#&#8203;26011](immich-app/immich#26011)
- [@&#8203;agent-steven](https://github.com/agent-steven) made their first contribution in [#&#8203;26091](immich-app/immich#26091)
- [@&#8203;dhlavaty](https://github.com/dhlavaty) made their first contribution in [#&#8203;26238](https://github.com/immich-app/immich/pull/26238)
- [@&#8203;Nacolis](https://github.com/Nacolis) made their first contribution in [#&#8203;26063](immich-app/immich#26063)
- [@&#8203;ewinnd](https://github.com/ewinnd) made their first contribution in [#&#8203;26277](https://github.com/immich-app/immich/pull/26277)
- [@&#8203;dnozay](https://github.com/dnozay) made their first contribution in [#&#8203;26261](immich-app/immich#26261)
- [@&#8203;keunes](https://github.com/keunes) made their first contribution in [#&#8203;24989](immich-app/immich#24989)
- [@&#8203;Devansh-Jani](https://github.com/Devansh-Jani) made their first contribution in [#&#8203;26042](immich-app/immich#26042)
- [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) made their first contribution in [#&#8203;26196](immich-app/immich#26196)
- [@&#8203;fabio-garavini](https://github.com/fabio-garavini) made their first contribution in [#&#8203;26252](immich-app/immich#26252)
- [@&#8203;haoxi911](https://github.com/haoxi911) made their first contribution in [#&#8203;25399](immich-app/immich#25399)
- [@&#8203;thezeroalpha](https://github.com/thezeroalpha) made their first contribution in [#&#8203;20286](immich-app/immich#20286)
- [@&#8203;socksprox](https://github.com/socksprox) made their first contribution in [#&#8203;26407](immich-app/immich#26407)
- [@&#8203;kprinssu](https://github.com/kprinssu) made their first contribution in [#&#8203;26178](immich-app/immich#26178)
- [@&#8203;babbitt](https://github.com/babbitt) made their first contribution in [#&#8203;26607](immich-app/immich#26607)
- [@&#8203;niij](https://github.com/niij) made their first contribution in [#&#8203;26505](https://github.com/immich-app/immich/pull/26505)
- [@&#8203;cratoo](https://github.com/cratoo) made their first contribution in [#&#8203;26667](immich-app/immich#26667)
- [@&#8203;M123-dev](https://github.com/M123-dev) made their first contribution in [#&#8203;26630](https://github.com/immich-app/immich/pull/26630)
- [@&#8203;apejcic](https://github.com/apejcic) made their first contribution in [#&#8203;22948](immich-app/immich#22948)
- [@&#8203;SevereCloud](https://github.com/SevereCloud) made their first contribution in [#&#8203;26760](immich-app/immich#26760)
- [@&#8203;brendanngo](https://github.com/brendanngo) made their first contribution in [#&#8203;26833](immich-app/immich#26833)
- [@&#8203;luis15pt](https://github.com/luis15pt) made their first contribution in [#&#8203;26831](immich-app/immich#26831)
- [@&#8203;nathanielhourt](https://github.com/nathanielhourt) made their first contribution in [#&#8203;26893](immich-app/immich#26893)
- [@&#8203;Belnadifia](https://github.com/Belnadifia) made their first contribution in [#&#8203;26717](immich-app/immich#26717)
- [@&#8203;pressslav](https://github.com/pressslav) made their first contribution in [#&#8203;26944](immich-app/immich#26944)

**Full Changelog**: <immich-app/immich@v2.5.6...v2.6.0>

</details>

---

### Configuration

📅 **Schedule**: 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 is behind base branch, 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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4887
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Mar 21, 2026
##### [\`v2.6.1\`](https://github.com/immich-app/immich/releases/tag/v2.6.1)

##### v2.6.1

##### Hot fixes

- Fixed a failed migration issue on the mobile app when the URL Switching feature is used

##### What's Changed

##### 🐛 Bug fixes

- fix(server): fallback to email when name is empty by [@jrasm91](https://github.com/jrasm91) in [#27016](immich-app/immich#27016)
- fix: ignore errors deleting untitled album by [@jrasm91](https://github.com/jrasm91) in [#27020](immich-app/immich#27020)
- fix(web): wrap long album title by [@jrasm91](https://github.com/jrasm91) in [#27012](immich-app/immich#27012)
- fix(web): stop in-progress uploads on logout by [@jrasm91](https://github.com/jrasm91) in [#27021](immich-app/immich#27021)
- fix: writing empty exif tags by [@danieldietzler](https://github.com/danieldietzler) in [#27025](immich-app/immich#27025)
- fix(web): disable send button by [@jrasm91](https://github.com/jrasm91) in [#27051](immich-app/immich#27051)
- fix(mobile): server url migration by [@mertalev](https://github.com/mertalev) in [#27050](immich-app/immich#27050)

**Full Changelog**: <immich-app/immich@v2.6.0...v2.6.1>

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

##### v2.6.0

Welcome to Immich `v2.6.0`, This release is a collection of more than *350 commits over 6 weeks*. I know, it is an eternity between releases compared to our previous era. This version focuses on bug fixes and enhancements across the app to provide a more delightful and smoother experience to you. This release also prepares for the next major release in the coming month, which will remove the old timeline implementation. Let's dive into the highlights of the release:

> \[!WARNING]
> For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
>
> ps: The old timeline has an exclamation icon next to the logo. <img width="525" height="120" alt="image" src="https://github.com/user-attachments/assets/ed36ea22-b16e-472f-961c-c19501712ba5" />

##### Highlights

- Map side panel (web)
- Pick album cover (mobile)
- Shared link slugs (mobile)
- Shared link presets (web)
- Native HTTP clients (mobile)
- Video player and asset viewer improvements (mobile)
- Improved search results (mobile)
- `schema-check`: a new `immich-admin` command
- Read profile claims from ID token (OAuth)
- Notable fix: cast videos now automatically loop
- Notable fix: correctly extract make and model from Sony XAVC video files
- Notable fix: escape key handling on web
- Notable fix: healthcheck endpoint in maintenance mode
- Notable fix: timeline rendering for RTL languages like Arabic and Hebrew
- Notable fix: prevent server crash when extracting invalid metadata

##### Map side panel (web)

The map view on the web now opens a mini-timeline component as a side panel when you click on a cluster of assets. This makes it easier to view the cluster at a glance and enables bulk actions, such as adding to favorites and adding to an album.

<img width="800" alt="image" src="https://github.com/user-attachments/assets/6f90b04d-4aa7-4f68-b59c-c2b912e638f7" />
##### Pick album cover (mobile)

Users can now pick a new album cover directly from the mobile app.

<https://github.com/user-attachments/assets/7f99dc80-21c6-4ce6-9f75-8e6b0163dcaa>

##### Shared link slugs (mobile)

The mobile app now also supports setting a shared link slug, a feature that's been available on the web for a while.

<https://github.com/user-attachments/assets/5420995a-cfd4-471d-a3ac-db4fa45de780>

##### Shared link presets (web)

The expiration form input on the web was always a bit confusing, but it's been updated to make it easier to see and understand when a shared link will expire.

<img width="400" alt="image" src="https://github.com/user-attachments/assets/9d6124a9-eec2-43e8-b228-e1ac6c0415e8" />
##### Native HTTP clients (mobile)

The mobile app now uses native HTTP clients across both Android and iOS, with support for mTLS, self-signed certificates, basic auth, and custom headers. These features should now be more reliable and extend to background tasks, video playback, and other parts of the app. This also improves the app's overall network request performance thanks to HTTP/2 and HTTP/3, multiplexing, and caching.

##### Video player and asset viewer improvements (mobile)

The asset viewer has undergone many improvements under the hood to make it simpler, faster and more reliable. We've also added playback support for GIFs, enabled video zooming, and made many more bug fixes and tweaks.

##### The asset viewer now uses a gradient for actions, and video controls have been restyled

<img width="300" alt="image" src="https://github.com/user-attachments/assets/9a4e0892-f178-45fc-812c-10a6cba3f48b" />
##### Inline asset details

This used to be a bottom sheet and had a lot of glue for alignment. The new version is much more responsive and less buggy.

##### Before

<https://github.com/user-attachments/assets/43b59b59-7d6a-48d0-94d7-84b8cae1c2a9>

##### After

<https://github.com/user-attachments/assets/9217b6f4-1c92-40b0-bd95-a0681307cf38>

##### Improved search results (mobile)

The search results page now loads more results without rebuilding the entire grid, and should now load much faster. There are also new screens for when there are no search results and when all results have been loaded.

<https://github.com/user-attachments/assets/42ce69d4-1618-48ee-9cb9-91ec22e12b27>

##### `schema-check`: a new `immich-admin` command

A new `immich-admin` command has been added in this release: `schema-check`. The command runs a report on the database to check if any indexes, constraints, tables, or columns are missing. This check also runs automatically on startup.

##### Read profile claims from `idToken` (OAuth)

Prior to `v2.6.0`, Immich resolved the `email` and other claims from the [userinfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) endpoint. Now, Immich also supports reading those claims directly from the `idToken`. This makes it possible to use providers such as Microsoft ADFS that do not support the userinfo endpoint.

***

As always, there are many more QoL improvements, bug fixes, and enhancements in this release. Please find the full release note below

##### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.6.0 -->

##### What's Changed

##### 🔒 Security

- fix(server): restrict individual shared link asset removal to owners by [@michelheusschen](https://github.com/michelheusschen) in [#26868](immich-app/immich#26868)
- fix: add to shared link by [@jrasm91](https://github.com/jrasm91) in [#26886](immich-app/immich#26886)

##### 🚀 Features

- feat: shared link login by [@jrasm91](https://github.com/jrasm91) in [#25678](immich-app/immich#25678)
- feat: schema-check by [@jrasm91](https://github.com/jrasm91) in [#25904](immich-app/immich#25904)
- feat: add people deeplink by [@arne182](https://github.com/arne182) in [#25686](immich-app/immich#25686)
- feat(mobile): inline asset details by [@uhthomas](https://github.com/uhthomas) in [#25952](immich-app/immich#25952)
- feat(mobile): filter by tags by [@benjamonnguyen](https://github.com/benjamonnguyen) in [#26196](immich-app/immich#26196)
- feat: add .mxf file support by [@timonrieger](https://github.com/timonrieger) in [#24644](immich-app/immich#24644)
- feat: tap to see next/previous image by [@thezeroalpha](https://github.com/thezeroalpha) in [#20286](immich-app/immich#20286)
- feat(mobile): Allow users to set album cover from mobile app by [@timonrieger](https://github.com/timonrieger) in [#25515](immich-app/immich#25515)
- feat(mobile): Allow users to set profile picture from asset viewer by [@timonrieger](https://github.com/timonrieger) in [#25517](immich-app/immich#25517)
- feat: ROCm 7.2 and MIGraphX support  by [@kprinssu](https://github.com/kprinssu) in [#26178](immich-app/immich#26178)
- feat(web): map timeline sidepanel by [@michelheusschen](https://github.com/michelheusschen) in [#26532](immich-app/immich#26532)
- feat: add responsive layout to broken asset by [@midzelis](https://github.com/midzelis) in [#26384](immich-app/immich#26384)
- feat(web): toggle zoom on double-click in photo viewer by [@midzelis](https://github.com/midzelis) in [#26732](immich-app/immich#26732)
- feat(mobile): show animated images in asset viewer by [@LeLunZ](https://github.com/LeLunZ) in [#26614](immich-app/immich#26614)
- feat(mobile): open in browser by [@YarosMallorca](https://github.com/YarosMallorca) in [#26369](immich-app/immich#26369)

##### 🌟 Enhancements

- feat: verify permissions by [@jrasm91](https://github.com/jrasm91) in [#25647](immich-app/immich#25647)
- feat(web): change link expiration logic & presets  by [@YarosMallorca](https://github.com/YarosMallorca) in [#26064](immich-app/immich#26064)
- feat(mobile): dynamic layout in new timeline by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#23837](immich-app/immich#23837)
- feat(cli): change progress bar to display file size by [@Nykri](https://github.com/Nykri) in [#23328](immich-app/immich#23328)
- feat(mobile): dynamic multi-line album name by [@uhthomas](https://github.com/uhthomas) in [#26040](immich-app/immich#26040)
- feat(mobile): hide search by context/OCR if disabled on server ([#25472](immich-app/immich#25472)) by [@Nacolis](https://github.com/Nacolis) in [#26063](immich-app/immich#26063)
- fix(release): add docker-compose.rootless.yml to released assets by [@dnozay](https://github.com/dnozay) in [#26261](immich-app/immich#26261)
- feat(web): show ocr text boxes in panoramas by [@meesfrensel](https://github.com/meesfrensel) in [#25727](immich-app/immich#25727)
- feat(web): loop chromecast video by [@etnoy](https://github.com/etnoy) in [#24410](immich-app/immich#24410)
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by [@timonrieger](https://github.com/timonrieger) in [#24669](immich-app/immich#24669)
- feat(mobile): timeline - add bottomWidgetBuilder  by [@PeterOmbodi](https://github.com/PeterOmbodi) in [#25634](immich-app/immich#25634)
- feat(mobile): video zooming in asset viewer by [@goalie2002](https://github.com/goalie2002) in [#22036](immich-app/immich#22036)
- feat(mobile): Add slug support for shared links by [@Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#26441](immich-app/immich#26441)
- feat: warn when losing transparency during thumbnail generation by [@midzelis](https://github.com/midzelis) in [#26243](immich-app/immich#26243)
- perf(mobile): optimized album sorting by [@YarosMallorca](https://github.com/YarosMallorca) in [#25179](immich-app/immich#25179)
- feat(mobile): prompt when deleting from trash by [@YarosMallorca](https://github.com/YarosMallorca) in [#26392](immich-app/immich#26392)
- feat: getAssetEdits respond with edit IDs by [@bwees](https://github.com/bwees) in [#26445](immich-app/immich#26445)
- fix(server): accept showAt and hideAt for creating memories by [@meesfrensel](https://github.com/meesfrensel) in [#26429](immich-app/immich#26429)
- feat(server): SyncAssetEditV1 by [@bwees](https://github.com/bwees) in [#26446](immich-app/immich#26446)
- feat: splash screen error page by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26460](immich-app/immich#26460)
- feat(mobile): add confirmation dialog to permanent delete action by [@ByteSizedMarius](https://github.com/ByteSizedMarius) in [#26442](immich-app/immich#26442)
- feat: enhance face-editor positioning by [@midzelis](https://github.com/midzelis) in [#26303](immich-app/immich#26303)
- feat: improve HEIC, HEIF and JPEG XL browser support detection by [@nicosemp](https://github.com/nicosemp) in [#26122](immich-app/immich#26122)
- refactor(web): remove replaceAsset action by [@timonrieger](https://github.com/timonrieger) in [#26444](immich-app/immich#26444)
- feat(web): bounding box for faces when hovering over the face in photo view by [@cratoo](https://github.com/cratoo) in [#26667](immich-app/immich#26667)
- feat(mobile): keep search results visible by [@uhthomas](https://github.com/uhthomas) in [#26498](immich-app/immich#26498)
- feat(mobile): use shared native client by [@mertalev](https://github.com/mertalev) in [#25942](immich-app/immich#25942)
- feat(mobile): SyncAssetEditV1 by [@bwees](https://github.com/bwees) in [#26518](immich-app/immich#26518)
- feat(ml): enable openvino for cpu by [@apejcic](https://github.com/apejcic) in [#22948](immich-app/immich#22948)
- feat: responsive video duration in thumbnail by [@midzelis](https://github.com/midzelis) in [#26770](immich-app/immich#26770)
- feat(web): animate zoom toggle with cubicOut easing by [@midzelis](https://github.com/midzelis) in [#26731](immich-app/immich#26731)
- feat(mobile): consolidate video controls by [@uhthomas](https://github.com/uhthomas) in [#26673](immich-app/immich#26673)
- feat(web): add shortcut "p" to open/close the face tag box by [@cratoo](https://github.com/cratoo) in [#26826](immich-app/immich#26826)
- feat(mobile): use material design 3 slider by [@uhthomas](https://github.com/uhthomas) in [#26829](immich-app/immich#26829)
- feat: adaptive progressive image loading for photo viewer by [@midzelis](https://github.com/midzelis) in [#26636](immich-app/immich#26636)
- fix(server): extract make/model from sony video files by [@brendanngo](https://github.com/brendanngo) in [#26833](immich-app/immich#26833)
- chore(mobile): remove background from asset viewer back button by [@uhthomas](https://github.com/uhthomas) in [#26851](immich-app/immich#26851)
- feat(server): support IDPs that only send the userinfo in the ID token by [@Belnadifia](https://github.com/Belnadifia) in [#26717](immich-app/immich#26717)
- feat(web): improve OCR overlay text fitting, reactivity, and accessibility by [@midzelis](https://github.com/midzelis) in [#26678](immich-app/immich#26678)
- fix(web): allow pasting PIN code from clipboard or password manager by [@pressslav](https://github.com/pressslav) in [#26944](immich-app/immich#26944)

##### 🐛 Bug fixes

- fix: ignore checksum constraint error when logging by [@jrasm91](https://github.com/jrasm91) in [#26113](immich-app/immich#26113)
- fix(web): use locale for date picker by [@michelheusschen](https://github.com/michelheusschen) in [#26125](immich-app/immich#26125)
- fix(web): escape shortcut handling by [@michelheusschen](https://github.com/michelheusschen) in [#26096](immich-app/immich#26096)
- fix(mobile): Login routing on Splash screen by [@PeterOmbodi](https://github.com/PeterOmbodi) in [#26128](immich-app/immich#26128)
- fix: null local date time in timeline queries by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26133](immich-app/immich#26133)
- fix(web): prevent event manager from throwing error by [@michelheusschen](https://github.com/michelheusschen) in [#26156](immich-app/immich#26156)
- fix(web): improve api key modal responsiveness by [@klenner1](https://github.com/klenner1) in [#26151](immich-app/immich#26151)
- fix(web): show correct assets in memory gallery by [@michelheusschen](https://github.com/michelheusschen) in [#26157](immich-app/immich#26157)
- fix(web): add missing [@immich/ui](https://github.com/immich/ui) translations by [@michelheusschen](https://github.com/michelheusschen) in [#26143](immich-app/immich#26143)
- fix(mobile): timeline handling on foldable phones + ensuring that images are not cut off by [@bkchr](https://github.com/bkchr) in [#25088](immich-app/immich#25088)
- fix(mobile): prevent nav bar label text wrapping by [@chrislongros](https://github.com/chrislongros) in [#26011](immich-app/immich#26011)
- fix(mobile): hide latest version warnings by [@uhthomas](https://github.com/uhthomas) in [#26036](immich-app/immich#26036)
- fix(mobile): inconsistent query for people by [@YarosMallorca](https://github.com/YarosMallorca) in [#24437](immich-app/immich#24437)
- fix(web): timeline multi select group state by [@michelheusschen](https://github.com/michelheusschen) in [#26180](immich-app/immich#26180)
- fix(web): add checkerboard background for transparent images by [@agent-steven](https://github.com/agent-steven) in [#26091](immich-app/immich#26091)
- fix(mobile): inherit toolbar opacity by [@uhthomas](https://github.com/uhthomas) in [#25694](immich-app/immich#25694)
- fix(web): focus tag input when modal opens by [@michelheusschen](https://github.com/michelheusschen) in [#26256](immich-app/immich#26256)
- fix(web): clear face boxes when switching assets by [@michelheusschen](https://github.com/michelheusschen) in [#26249](immich-app/immich#26249)
- fix(web): clear unsaved asset description when changing asset by [@michelheusschen](https://github.com/michelheusschen) in [#26255](immich-app/immich#26255)
- fix(web): clear cache when asset changes by [@michelheusschen](https://github.com/michelheusschen) in [#26257](immich-app/immich#26257)
- fix: utc time zone upserts by [@danieldietzler](https://github.com/danieldietzler) in [#26258](immich-app/immich#26258)
- fix: metadata crash by [@jrasm91](https://github.com/jrasm91) in [#26327](immich-app/immich#26327)
- fix: prevent server crash when extraction of metadata fails if the assets are corrupted by [@Devansh-Jani](https://github.com/Devansh-Jani) in [#26042](immich-app/immich#26042)
- fix(server): db restore failure when `DB_URL` is set to unix-domain socket connection by [@fabio-garavini](https://github.com/fabio-garavini) in [#26252](immich-app/immich#26252)
- fix: Download the edited version when downloading multiple photos by [@MontejoJorge](https://github.com/MontejoJorge) in [#26259](immich-app/immich#26259)
- fix: include `DROP INDEX` in transaction to prevent missing index on rollback by [@haoxi911](https://github.com/haoxi911) in [#25399](immich-app/immich#25399)
- fix: safari address bar color by [@jrasm91](https://github.com/jrasm91) in [#26346](immich-app/immich#26346)
- fix(web): prevent panorama image reload during asset updates by [@michelheusschen](https://github.com/michelheusschen) in [#26349](immich-app/immich#26349)
- fix(web): favoriting assets opened via GalleryViewer by [@michelheusschen](https://github.com/michelheusschen) in [#26350](immich-app/immich#26350)
- fix(i18n): add translation key for partner's photos by [@timonrieger](https://github.com/timonrieger) in [#26348](immich-app/immich#26348)
- fix(web): single select scroll behavior by [@timonrieger](https://github.com/timonrieger) in [#26358](immich-app/immich#26358)
- perf: add indexes to improve People API response times by [@bxtdvd](https://github.com/bxtdvd) in [#26337](immich-app/immich#26337)
- fix: pin code reset modal by [@jrasm91](https://github.com/jrasm91) in [#26370](immich-app/immich#26370)
- fix(mobile): Reset "People" search filter chip if no selections are made by [@benjamonnguyen](https://github.com/benjamonnguyen) in [#26267](immich-app/immich#26267)
- fix(cli): delete sidecar files after upload if requested by [@timonrieger](https://github.com/timonrieger) in [#26353](immich-app/immich#26353)
- fix(web): album description auto height by [@michelheusschen](https://github.com/michelheusschen) in [#26420](immich-app/immich#26420)
- fix(web): prevent side panel overlap during transition by [@michelheusschen](https://github.com/michelheusschen) in [#26398](immich-app/immich#26398)
- fix(web): storage template example by [@mmomjian](https://github.com/mmomjian) in [#26424](immich-app/immich#26424)
- fix(web): prevent `state_unsafe_mutation` error on people page by [@michelheusschen](https://github.com/michelheusschen) in [#26438](immich-app/immich#26438)
- fix: missing deletedAt and isVisible columns on mobile by [@bwees](https://github.com/bwees) in [#26414](immich-app/immich#26414)
- fix(mobile): joinLocal on archived timeline by [@YarosMallorca](https://github.com/YarosMallorca) in [#26387](immich-app/immich#26387)
- fix: always show library scan button by [@etnoy](https://github.com/etnoy) in [#26428](immich-app/immich#26428)
- fix: retain asset when either asset is a favorite by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26473](immich-app/immich#26473)
- fix(web): prevent null folder tree on concurrent load by [@michelheusschen](https://github.com/michelheusschen) in [#26489](immich-app/immich#26489)
- fix(web): toast warning when trying to upload unsupported file type by [@meesfrensel](https://github.com/meesfrensel) in [#26492](immich-app/immich#26492)
- fix(mobile): birthday picker shows limited months when no date exists by [@socksprox](https://github.com/socksprox) in [#26407](immich-app/immich#26407)
- fix: consider DAR when extracting video dimension by [@alextran1502](https://github.com/alextran1502) in [#25293](immich-app/immich#25293)
- feat(mobile): Prevent premature image cache eviction when higher image loading is enabled by [@LeLunZ](https://github.com/LeLunZ) in [#26208](immich-app/immich#26208)
- refactor: star rating by [@meesfrensel](https://github.com/meesfrensel) in [#26357](immich-app/immich#26357)
- fix(mobile): set correct initial system-ui mode in asset viewer by [@goalie2002](https://github.com/goalie2002) in [#26500](immich-app/immich#26500)
- fix(server): Live Photo migration bug when album is in template by [@NikhilAlapati](https://github.com/NikhilAlapati) in [#25329](immich-app/immich#25329)
- fix(web): handle delete shortcut on shared link page as remove by [@meesfrensel](https://github.com/meesfrensel) in [#26552](immich-app/immich#26552)
- fix(mobile): prevent video player from being recreated unnecessarily by [@uhthomas](https://github.com/uhthomas) in [#26553](immich-app/immich#26553)
- fix(mobile): don't cut off top corners of app bar by [@uhthomas](https://github.com/uhthomas) in [#26550](immich-app/immich#26550)
- feat: update onnxruntime-openvino to 1.24.1 and intel drivers by [@savely-krasovsky](https://github.com/savely-krasovsky) in [#26565](immich-app/immich#26565)
- fix: hide download action for local/merged assets by [@YarosMallorca](https://github.com/YarosMallorca) in [#26461](immich-app/immich#26461)
- fix(web): top bar z index on search page by [@YarosMallorca](https://github.com/YarosMallorca) in [#26582](immich-app/immich#26582)
- fix(web): show shared link download button when logged in by [@Snowknight26](https://github.com/Snowknight26) in [#26629](immich-app/immich#26629)
- fix(mobile): asset viewer hero animation by [@uhthomas](https://github.com/uhthomas) in [#26545](immich-app/immich#26545)
- fix(web): timeline and asset viewer RTL support by [@meesfrensel](https://github.com/meesfrensel) in [#26513](immich-app/immich#26513)
- fix(server): clean up edited thumbnail when deleting asset by [@michelheusschen](https://github.com/michelheusschen) in [#26664](immich-app/immich#26664)
- fix: implement existing withStacked on searchAssetBuilder by [@babbitt](https://github.com/babbitt) in [#26607](immich-app/immich#26607)
- fix(mobile): video state by [@uhthomas](https://github.com/uhthomas) in [#26574](immich-app/immich#26574)
- fix(maintenance mode): wait for valid server config on restart by [@insertish](https://github.com/insertish) in [#26456](immich-app/immich#26456)
- fix(web): inconsistent asset nav bar state after visiting shared link by [@Snowknight26](https://github.com/Snowknight26) in [#26674](immich-app/immich#26674)
- fix(web): download toast showing wrong filename for motion assets by [@Snowknight26](https://github.com/Snowknight26) in [#26689](immich-app/immich#26689)
- fix(mobile): add safe area for asset details by [@uhthomas](https://github.com/uhthomas) in [#26675](immich-app/immich#26675)
- fix(web): combobox dropdown positioning in modals by [@michelheusschen](https://github.com/michelheusschen) in [#26707](immich-app/immich#26707)
- fix(web): video stealing focus when it plays again when looping by [@Snowknight26](https://github.com/Snowknight26) in [#26704](immich-app/immich#26704)
- fix(ml): batch size setting by [@mertalev](https://github.com/mertalev) in [#26524](immich-app/immich#26524)
- fix(server): clarify transcoding bitrate policy by [@meesfrensel](https://github.com/meesfrensel) in [#26711](immich-app/immich#26711)
- fix: playback style migration by [@alextran1502](https://github.com/alextran1502) in [#26718](immich-app/immich#26718)
- fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails by [@Snowknight26](https://github.com/Snowknight26) in [#26741](immich-app/immich#26741)
- fix(server): opus handling as accepted audio codec in transcode policy by [@skatsubo](https://github.com/skatsubo) in [#26736](immich-app/immich#26736)
- fix(web): refresh recent albums sidebar after album changes by [@michelheusschen](https://github.com/michelheusschen) in [#26757](immich-app/immich#26757)
- fix(web): show the correct cursor at crop bounds when editing an asset by [@Snowknight26](https://github.com/Snowknight26) in [#26748](immich-app/immich#26748)
- fix(web): recalculate face bounding boxes by [@cratoo](https://github.com/cratoo) in [#26737](immich-app/immich#26737)
- fix(web): context menu overflow by [@SevereCloud](https://github.com/SevereCloud) in [#26760](immich-app/immich#26760)
- fix(web): correct tag rounding in search options by [@michelheusschen](https://github.com/michelheusschen) in [#26814](immich-app/immich#26814)
- fix(web): prevent unrelated assets from appearing in tag view by [@michelheusschen](https://github.com/michelheusschen) in [#26816](immich-app/immich#26816)
- fix(mobile): use tabular figures in backup page by [@uhthomas](https://github.com/uhthomas) in [#26830](immich-app/immich#26830)
- fix(mobile): wrap backup error message text by [@uhthomas](https://github.com/uhthomas) in [#26834](immich-app/immich#26834)
- fix(server): use correct day ordering in timeline buckets by [@michelheusschen](https://github.com/michelheusschen) in [#26821](immich-app/immich#26821)
- fix(web): face selection box position resetting on browser resize by [@Snowknight26](https://github.com/Snowknight26) in [#26766](immich-app/immich#26766)
- fix: use correct original URL for 360 video panorama playback by [@luis15pt](https://github.com/luis15pt) in [#26831](immich-app/immich#26831)
- fix(web): disable drag and drop for internal items by [@michelheusschen](https://github.com/michelheusschen) in [#26897](immich-app/immich#26897)
- fix(web): keep header fixed on individual shared links by [@michelheusschen](https://github.com/michelheusschen) in [#26892](immich-app/immich#26892)
- fix: SMTP over TLS by [@nathanielhourt](https://github.com/nathanielhourt) in [#26893](immich-app/immich#26893)
- fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset in [#26890](immich-app/immich#26890)
- fix(mobile): use shared auth for background\_downloader by [@mertalev](https://github.com/mertalev) in [#26911](immich-app/immich#26911)
- fix(web): prevent search page error on missing album filter by [@michelheusschen](https://github.com/michelheusschen) in [#26948](immich-app/immich#26948)
- fix(server): sync files to disk by [@uhthomas](https://github.com/uhthomas) in [#26881](immich-app/immich#26881)
- fix(web): jump to primary stacked asset from memory by [@michelheusschen](https://github.com/michelheusschen) in [#26978](immich-app/immich#26978)
- fix(mobile): reflect asset deletions instantly by [@uhthomas](https://github.com/uhthomas) in [#26835](immich-app/immich#26835)
- fix: healthcheck by [@jrasm91](https://github.com/jrasm91) in [#26989](immich-app/immich#26989)
- fix(web): escape handling for tagging and adding a face in asset viewer by [@cratoo](https://github.com/cratoo) in [#26870](immich-app/immich#26870)
- fix: filter after searching by asset id by [@jrasm91](https://github.com/jrasm91) in [#26994](immich-app/immich#26994)
- fix: bounding box return type by [@jrasm91](https://github.com/jrasm91) in [#27014](immich-app/immich#27014)
- fix: validate accept header before returning html by [@jrasm91](https://github.com/jrasm91) in [#27019](immich-app/immich#27019)

##### 📚 Documentation

- chore(docs): Update help channel for developers by [@Mraedis](https://github.com/Mraedis) in [#26284](immich-app/immich#26284)
- feat(docs): Explain configuration file location for Docker Compose by [@keunes](https://github.com/keunes) in [#24989](immich-app/immich#24989)
- chore(docs): add quick-start guide for DevPod with docker by [@dhlavaty](https://github.com/dhlavaty) in [#26213](immich-app/immich#26213)
- feat(docs): Adding information about parameter c= by [@aviv926](https://github.com/aviv926) in [#26430](immich-app/immich#26430)
- feat: doc links by [@jrasm91](https://github.com/jrasm91) in [#26519](immich-app/immich#26519)
- fix(docs): add ocr to job flow diagram by [@niij](https://github.com/niij) in [#26505](immich-app/immich#26505)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26118](immich-app/immich#26118)
- fix: clarify external domain setting is used for emails too by [@chrislongros](https://github.com/chrislongros) in [#26009](immich-app/immich#26009)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26167](immich-app/immich#26167)
- fix(web): error page i18n by [@meesfrensel](https://github.com/meesfrensel) in [#26517](immich-app/immich#26517)
- chore(web): clarify locale settings description by [@meesfrensel](https://github.com/meesfrensel) in [#25562](immich-app/immich#25562)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26192](immich-app/immich#26192)

##### New Contributors

- [@klenner1](https://github.com/klenner1) made their first contribution in [#26151](immich-app/immich#26151)
- [@bkchr](https://github.com/bkchr) made their first contribution in [#25088](immich-app/immich#25088)
- [@chrislongros](https://github.com/chrislongros) made their first contribution in [#26011](immich-app/immich#26011)
- [@agent-steven](https://github.com/agent-steven) made their first contribution in [#26091](immich-app/immich#26091)
- [@dhlavaty](https://github.com/dhlavaty) made their first contribution in [#26238](immich-app/immich#26238)
- [@Nacolis](https://github.com/Nacolis) made their first contribution in [#26063](immich-app/immich#26063)
- [@ewinnd](https://github.com/ewinnd) made their first contribution in [#26277](immich-app/immich#26277)
- [@dnozay](https://github.com/dnozay) made their first contribution in [#26261](immich-app/immich#26261)
- [@keunes](https://github.com/keunes) made their first contribution in [#24989](immich-app/immich#24989)
- [@Devansh-Jani](https://github.com/Devansh-Jani) made their first contribution in [#26042](immich-app/immich#26042)
- [@benjamonnguyen](https://github.com/benjamonnguyen) made their first contribution in [#26196](immich-app/immich#26196)
- [@fabio-garavini](https://github.com/fabio-garavini) made their first contribution in [#26252](immich-app/immich#26252)
- [@haoxi911](https://github.com/haoxi911) made their first contribution in [#25399](immich-app/immich#25399)
- [@thezeroalpha](https://github.com/thezeroalpha) made their first contribution in [#20286](immich-app/immich#20286)
- [@socksprox](https://github.com/socksprox) made their first contribution in [#26407](immich-app/immich#26407)
- [@kprinssu](https://github.com/kprinssu) made their first contribution in [#26178](immich-app/immich#26178)
- [@babbitt](https://github.com/babbitt) made their first contribution in [#26607](immich-app/immich#26607)
- [@niij](https://github.com/niij) made their first contribution in [#26505](immich-app/immich#26505)
- [@cratoo](https://github.com/cratoo) made their first contribution in [#26667](immich-app/immich#26667)
- [@M123-dev](https://github.com/M123-dev) made their first contribution in [#26630](immich-app/immich#26630)
- [@apejcic](https://github.com/apejcic) made their first contribution in [#22948](immich-app/immich#22948)
- [@SevereCloud](https://github.com/SevereCloud) made their first contribution in [#26760](immich-app/immich#26760)
- [@brendanngo](https://github.com/brendanngo) made their first contribution in [#26833](immich-app/immich#26833)
- [@luis15pt](https://github.com/luis15pt) made their first contribution in [#26831](immich-app/immich#26831)
- [@nathanielhourt](https://github.com/nathanielhourt) made their first contribution in [#26893](immich-app/immich#26893)
- [@Belnadifia](https://github.com/Belnadifia) made their first contribution in [#26717](immich-app/immich#26717)
- [@pressslav](https://github.com/pressslav) made their first contribution in [#26944](immich-app/immich#26944)

**Full Changelog**: <immich-app/immich@v2.5.6...v2.6.0>
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Mar 21, 2026
##### [\`v2.6.1\`](https://github.com/immich-app/immich/releases/tag/v2.6.1)

##### v2.6.1

##### Hot fixes

- Fixed a failed migration issue on the mobile app when the URL Switching feature is used

##### What's Changed

##### 🐛 Bug fixes

- fix(server): fallback to email when name is empty by [@jrasm91](https://github.com/jrasm91) in [#27016](immich-app/immich#27016)
- fix: ignore errors deleting untitled album by [@jrasm91](https://github.com/jrasm91) in [#27020](immich-app/immich#27020)
- fix(web): wrap long album title by [@jrasm91](https://github.com/jrasm91) in [#27012](immich-app/immich#27012)
- fix(web): stop in-progress uploads on logout by [@jrasm91](https://github.com/jrasm91) in [#27021](immich-app/immich#27021)
- fix: writing empty exif tags by [@danieldietzler](https://github.com/danieldietzler) in [#27025](immich-app/immich#27025)
- fix(web): disable send button by [@jrasm91](https://github.com/jrasm91) in [#27051](immich-app/immich#27051)
- fix(mobile): server url migration by [@mertalev](https://github.com/mertalev) in [#27050](immich-app/immich#27050)

**Full Changelog**: <immich-app/immich@v2.6.0...v2.6.1>

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

##### v2.6.0

Welcome to Immich `v2.6.0`, This release is a collection of more than *350 commits over 6 weeks*. I know, it is an eternity between releases compared to our previous era. This version focuses on bug fixes and enhancements across the app to provide a more delightful and smoother experience to you. This release also prepares for the next major release in the coming month, which will remove the old timeline implementation. Let's dive into the highlights of the release:

> \[!WARNING]
> For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
>
> ps: The old timeline has an exclamation icon next to the logo. <img width="525" height="120" alt="image" src="https://github.com/user-attachments/assets/ed36ea22-b16e-472f-961c-c19501712ba5" />

##### Highlights

- Map side panel (web)
- Pick album cover (mobile)
- Shared link slugs (mobile)
- Shared link presets (web)
- Native HTTP clients (mobile)
- Video player and asset viewer improvements (mobile)
- Improved search results (mobile)
- `schema-check`: a new `immich-admin` command
- Read profile claims from ID token (OAuth)
- Notable fix: cast videos now automatically loop
- Notable fix: correctly extract make and model from Sony XAVC video files
- Notable fix: escape key handling on web
- Notable fix: healthcheck endpoint in maintenance mode
- Notable fix: timeline rendering for RTL languages like Arabic and Hebrew
- Notable fix: prevent server crash when extracting invalid metadata

##### Map side panel (web)

The map view on the web now opens a mini-timeline component as a side panel when you click on a cluster of assets. This makes it easier to view the cluster at a glance and enables bulk actions, such as adding to favorites and adding to an album.

<img width="800" alt="image" src="https://github.com/user-attachments/assets/6f90b04d-4aa7-4f68-b59c-c2b912e638f7" />
##### Pick album cover (mobile)

Users can now pick a new album cover directly from the mobile app.

<https://github.com/user-attachments/assets/7f99dc80-21c6-4ce6-9f75-8e6b0163dcaa>

##### Shared link slugs (mobile)

The mobile app now also supports setting a shared link slug, a feature that's been available on the web for a while.

<https://github.com/user-attachments/assets/5420995a-cfd4-471d-a3ac-db4fa45de780>

##### Shared link presets (web)

The expiration form input on the web was always a bit confusing, but it's been updated to make it easier to see and understand when a shared link will expire.

<img width="400" alt="image" src="https://github.com/user-attachments/assets/9d6124a9-eec2-43e8-b228-e1ac6c0415e8" />
##### Native HTTP clients (mobile)

The mobile app now uses native HTTP clients across both Android and iOS, with support for mTLS, self-signed certificates, basic auth, and custom headers. These features should now be more reliable and extend to background tasks, video playback, and other parts of the app. This also improves the app's overall network request performance thanks to HTTP/2 and HTTP/3, multiplexing, and caching.

##### Video player and asset viewer improvements (mobile)

The asset viewer has undergone many improvements under the hood to make it simpler, faster and more reliable. We've also added playback support for GIFs, enabled video zooming, and made many more bug fixes and tweaks.

##### The asset viewer now uses a gradient for actions, and video controls have been restyled

<img width="300" alt="image" src="https://github.com/user-attachments/assets/9a4e0892-f178-45fc-812c-10a6cba3f48b" />
##### Inline asset details

This used to be a bottom sheet and had a lot of glue for alignment. The new version is much more responsive and less buggy.

##### Before

<https://github.com/user-attachments/assets/43b59b59-7d6a-48d0-94d7-84b8cae1c2a9>

##### After

<https://github.com/user-attachments/assets/9217b6f4-1c92-40b0-bd95-a0681307cf38>

##### Improved search results (mobile)

The search results page now loads more results without rebuilding the entire grid, and should now load much faster. There are also new screens for when there are no search results and when all results have been loaded.

<https://github.com/user-attachments/assets/42ce69d4-1618-48ee-9cb9-91ec22e12b27>

##### `schema-check`: a new `immich-admin` command

A new `immich-admin` command has been added in this release: `schema-check`. The command runs a report on the database to check if any indexes, constraints, tables, or columns are missing. This check also runs automatically on startup.

##### Read profile claims from `idToken` (OAuth)

Prior to `v2.6.0`, Immich resolved the `email` and other claims from the [userinfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) endpoint. Now, Immich also supports reading those claims directly from the `idToken`. This makes it possible to use providers such as Microsoft ADFS that do not support the userinfo endpoint.

***

As always, there are many more QoL improvements, bug fixes, and enhancements in this release. Please find the full release note below

##### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.6.0 -->

##### What's Changed

##### 🔒 Security

- fix(server): restrict individual shared link asset removal to owners by [@michelheusschen](https://github.com/michelheusschen) in [#26868](immich-app/immich#26868)
- fix: add to shared link by [@jrasm91](https://github.com/jrasm91) in [#26886](immich-app/immich#26886)

##### 🚀 Features

- feat: shared link login by [@jrasm91](https://github.com/jrasm91) in [#25678](immich-app/immich#25678)
- feat: schema-check by [@jrasm91](https://github.com/jrasm91) in [#25904](immich-app/immich#25904)
- feat: add people deeplink by [@arne182](https://github.com/arne182) in [#25686](immich-app/immich#25686)
- feat(mobile): inline asset details by [@uhthomas](https://github.com/uhthomas) in [#25952](immich-app/immich#25952)
- feat(mobile): filter by tags by [@benjamonnguyen](https://github.com/benjamonnguyen) in [#26196](immich-app/immich#26196)
- feat: add .mxf file support by [@timonrieger](https://github.com/timonrieger) in [#24644](immich-app/immich#24644)
- feat: tap to see next/previous image by [@thezeroalpha](https://github.com/thezeroalpha) in [#20286](immich-app/immich#20286)
- feat(mobile): Allow users to set album cover from mobile app by [@timonrieger](https://github.com/timonrieger) in [#25515](immich-app/immich#25515)
- feat(mobile): Allow users to set profile picture from asset viewer by [@timonrieger](https://github.com/timonrieger) in [#25517](immich-app/immich#25517)
- feat: ROCm 7.2 and MIGraphX support  by [@kprinssu](https://github.com/kprinssu) in [#26178](immich-app/immich#26178)
- feat(web): map timeline sidepanel by [@michelheusschen](https://github.com/michelheusschen) in [#26532](immich-app/immich#26532)
- feat: add responsive layout to broken asset by [@midzelis](https://github.com/midzelis) in [#26384](immich-app/immich#26384)
- feat(web): toggle zoom on double-click in photo viewer by [@midzelis](https://github.com/midzelis) in [#26732](immich-app/immich#26732)
- feat(mobile): show animated images in asset viewer by [@LeLunZ](https://github.com/LeLunZ) in [#26614](immich-app/immich#26614)
- feat(mobile): open in browser by [@YarosMallorca](https://github.com/YarosMallorca) in [#26369](immich-app/immich#26369)

##### 🌟 Enhancements

- feat: verify permissions by [@jrasm91](https://github.com/jrasm91) in [#25647](immich-app/immich#25647)
- feat(web): change link expiration logic & presets  by [@YarosMallorca](https://github.com/YarosMallorca) in [#26064](immich-app/immich#26064)
- feat(mobile): dynamic layout in new timeline by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#23837](immich-app/immich#23837)
- feat(cli): change progress bar to display file size by [@Nykri](https://github.com/Nykri) in [#23328](immich-app/immich#23328)
- feat(mobile): dynamic multi-line album name by [@uhthomas](https://github.com/uhthomas) in [#26040](immich-app/immich#26040)
- feat(mobile): hide search by context/OCR if disabled on server ([#25472](immich-app/immich#25472)) by [@Nacolis](https://github.com/Nacolis) in [#26063](immich-app/immich#26063)
- fix(release): add docker-compose.rootless.yml to released assets by [@dnozay](https://github.com/dnozay) in [#26261](immich-app/immich#26261)
- feat(web): show ocr text boxes in panoramas by [@meesfrensel](https://github.com/meesfrensel) in [#25727](immich-app/immich#25727)
- feat(web): loop chromecast video by [@etnoy](https://github.com/etnoy) in [#24410](immich-app/immich#24410)
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by [@timonrieger](https://github.com/timonrieger) in [#24669](immich-app/immich#24669)
- feat(mobile): timeline - add bottomWidgetBuilder  by [@PeterOmbodi](https://github.com/PeterOmbodi) in [#25634](immich-app/immich#25634)
- feat(mobile): video zooming in asset viewer by [@goalie2002](https://github.com/goalie2002) in [#22036](immich-app/immich#22036)
- feat(mobile): Add slug support for shared links by [@Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#26441](immich-app/immich#26441)
- feat: warn when losing transparency during thumbnail generation by [@midzelis](https://github.com/midzelis) in [#26243](immich-app/immich#26243)
- perf(mobile): optimized album sorting by [@YarosMallorca](https://github.com/YarosMallorca) in [#25179](immich-app/immich#25179)
- feat(mobile): prompt when deleting from trash by [@YarosMallorca](https://github.com/YarosMallorca) in [#26392](immich-app/immich#26392)
- feat: getAssetEdits respond with edit IDs by [@bwees](https://github.com/bwees) in [#26445](immich-app/immich#26445)
- fix(server): accept showAt and hideAt for creating memories by [@meesfrensel](https://github.com/meesfrensel) in [#26429](immich-app/immich#26429)
- feat(server): SyncAssetEditV1 by [@bwees](https://github.com/bwees) in [#26446](immich-app/immich#26446)
- feat: splash screen error page by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26460](immich-app/immich#26460)
- feat(mobile): add confirmation dialog to permanent delete action by [@ByteSizedMarius](https://github.com/ByteSizedMarius) in [#26442](immich-app/immich#26442)
- feat: enhance face-editor positioning by [@midzelis](https://github.com/midzelis) in [#26303](immich-app/immich#26303)
- feat: improve HEIC, HEIF and JPEG XL browser support detection by [@nicosemp](https://github.com/nicosemp) in [#26122](immich-app/immich#26122)
- refactor(web): remove replaceAsset action by [@timonrieger](https://github.com/timonrieger) in [#26444](immich-app/immich#26444)
- feat(web): bounding box for faces when hovering over the face in photo view by [@cratoo](https://github.com/cratoo) in [#26667](immich-app/immich#26667)
- feat(mobile): keep search results visible by [@uhthomas](https://github.com/uhthomas) in [#26498](immich-app/immich#26498)
- feat(mobile): use shared native client by [@mertalev](https://github.com/mertalev) in [#25942](immich-app/immich#25942)
- feat(mobile): SyncAssetEditV1 by [@bwees](https://github.com/bwees) in [#26518](immich-app/immich#26518)
- feat(ml): enable openvino for cpu by [@apejcic](https://github.com/apejcic) in [#22948](immich-app/immich#22948)
- feat: responsive video duration in thumbnail by [@midzelis](https://github.com/midzelis) in [#26770](immich-app/immich#26770)
- feat(web): animate zoom toggle with cubicOut easing by [@midzelis](https://github.com/midzelis) in [#26731](immich-app/immich#26731)
- feat(mobile): consolidate video controls by [@uhthomas](https://github.com/uhthomas) in [#26673](immich-app/immich#26673)
- feat(web): add shortcut "p" to open/close the face tag box by [@cratoo](https://github.com/cratoo) in [#26826](immich-app/immich#26826)
- feat(mobile): use material design 3 slider by [@uhthomas](https://github.com/uhthomas) in [#26829](immich-app/immich#26829)
- feat: adaptive progressive image loading for photo viewer by [@midzelis](https://github.com/midzelis) in [#26636](immich-app/immich#26636)
- fix(server): extract make/model from sony video files by [@brendanngo](https://github.com/brendanngo) in [#26833](immich-app/immich#26833)
- chore(mobile): remove background from asset viewer back button by [@uhthomas](https://github.com/uhthomas) in [#26851](immich-app/immich#26851)
- feat(server): support IDPs that only send the userinfo in the ID token by [@Belnadifia](https://github.com/Belnadifia) in [#26717](immich-app/immich#26717)
- feat(web): improve OCR overlay text fitting, reactivity, and accessibility by [@midzelis](https://github.com/midzelis) in [#26678](immich-app/immich#26678)
- fix(web): allow pasting PIN code from clipboard or password manager by [@pressslav](https://github.com/pressslav) in [#26944](immich-app/immich#26944)

##### 🐛 Bug fixes

- fix: ignore checksum constraint error when logging by [@jrasm91](https://github.com/jrasm91) in [#26113](immich-app/immich#26113)
- fix(web): use locale for date picker by [@michelheusschen](https://github.com/michelheusschen) in [#26125](immich-app/immich#26125)
- fix(web): escape shortcut handling by [@michelheusschen](https://github.com/michelheusschen) in [#26096](immich-app/immich#26096)
- fix(mobile): Login routing on Splash screen by [@PeterOmbodi](https://github.com/PeterOmbodi) in [#26128](immich-app/immich#26128)
- fix: null local date time in timeline queries by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26133](immich-app/immich#26133)
- fix(web): prevent event manager from throwing error by [@michelheusschen](https://github.com/michelheusschen) in [#26156](immich-app/immich#26156)
- fix(web): improve api key modal responsiveness by [@klenner1](https://github.com/klenner1) in [#26151](immich-app/immich#26151)
- fix(web): show correct assets in memory gallery by [@michelheusschen](https://github.com/michelheusschen) in [#26157](immich-app/immich#26157)
- fix(web): add missing [@immich/ui](https://github.com/immich/ui) translations by [@michelheusschen](https://github.com/michelheusschen) in [#26143](immich-app/immich#26143)
- fix(mobile): timeline handling on foldable phones + ensuring that images are not cut off by [@bkchr](https://github.com/bkchr) in [#25088](immich-app/immich#25088)
- fix(mobile): prevent nav bar label text wrapping by [@chrislongros](https://github.com/chrislongros) in [#26011](immich-app/immich#26011)
- fix(mobile): hide latest version warnings by [@uhthomas](https://github.com/uhthomas) in [#26036](immich-app/immich#26036)
- fix(mobile): inconsistent query for people by [@YarosMallorca](https://github.com/YarosMallorca) in [#24437](immich-app/immich#24437)
- fix(web): timeline multi select group state by [@michelheusschen](https://github.com/michelheusschen) in [#26180](immich-app/immich#26180)
- fix(web): add checkerboard background for transparent images by [@agent-steven](https://github.com/agent-steven) in [#26091](immich-app/immich#26091)
- fix(mobile): inherit toolbar opacity by [@uhthomas](https://github.com/uhthomas) in [#25694](immich-app/immich#25694)
- fix(web): focus tag input when modal opens by [@michelheusschen](https://github.com/michelheusschen) in [#26256](immich-app/immich#26256)
- fix(web): clear face boxes when switching assets by [@michelheusschen](https://github.com/michelheusschen) in [#26249](immich-app/immich#26249)
- fix(web): clear unsaved asset description when changing asset by [@michelheusschen](https://github.com/michelheusschen) in [#26255](immich-app/immich#26255)
- fix(web): clear cache when asset changes by [@michelheusschen](https://github.com/michelheusschen) in [#26257](immich-app/immich#26257)
- fix: utc time zone upserts by [@danieldietzler](https://github.com/danieldietzler) in [#26258](immich-app/immich#26258)
- fix: metadata crash by [@jrasm91](https://github.com/jrasm91) in [#26327](immich-app/immich#26327)
- fix: prevent server crash when extraction of metadata fails if the assets are corrupted by [@Devansh-Jani](https://github.com/Devansh-Jani) in [#26042](immich-app/immich#26042)
- fix(server): db restore failure when `DB_URL` is set to unix-domain socket connection by [@fabio-garavini](https://github.com/fabio-garavini) in [#26252](immich-app/immich#26252)
- fix: Download the edited version when downloading multiple photos by [@MontejoJorge](https://github.com/MontejoJorge) in [#26259](immich-app/immich#26259)
- fix: include `DROP INDEX` in transaction to prevent missing index on rollback by [@haoxi911](https://github.com/haoxi911) in [#25399](immich-app/immich#25399)
- fix: safari address bar color by [@jrasm91](https://github.com/jrasm91) in [#26346](immich-app/immich#26346)
- fix(web): prevent panorama image reload during asset updates by [@michelheusschen](https://github.com/michelheusschen) in [#26349](immich-app/immich#26349)
- fix(web): favoriting assets opened via GalleryViewer by [@michelheusschen](https://github.com/michelheusschen) in [#26350](immich-app/immich#26350)
- fix(i18n): add translation key for partner's photos by [@timonrieger](https://github.com/timonrieger) in [#26348](immich-app/immich#26348)
- fix(web): single select scroll behavior by [@timonrieger](https://github.com/timonrieger) in [#26358](immich-app/immich#26358)
- perf: add indexes to improve People API response times by [@bxtdvd](https://github.com/bxtdvd) in [#26337](immich-app/immich#26337)
- fix: pin code reset modal by [@jrasm91](https://github.com/jrasm91) in [#26370](immich-app/immich#26370)
- fix(mobile): Reset "People" search filter chip if no selections are made by [@benjamonnguyen](https://github.com/benjamonnguyen) in [#26267](immich-app/immich#26267)
- fix(cli): delete sidecar files after upload if requested by [@timonrieger](https://github.com/timonrieger) in [#26353](immich-app/immich#26353)
- fix(web): album description auto height by [@michelheusschen](https://github.com/michelheusschen) in [#26420](immich-app/immich#26420)
- fix(web): prevent side panel overlap during transition by [@michelheusschen](https://github.com/michelheusschen) in [#26398](immich-app/immich#26398)
- fix(web): storage template example by [@mmomjian](https://github.com/mmomjian) in [#26424](immich-app/immich#26424)
- fix(web): prevent `state_unsafe_mutation` error on people page by [@michelheusschen](https://github.com/michelheusschen) in [#26438](immich-app/immich#26438)
- fix: missing deletedAt and isVisible columns on mobile by [@bwees](https://github.com/bwees) in [#26414](immich-app/immich#26414)
- fix(mobile): joinLocal on archived timeline by [@YarosMallorca](https://github.com/YarosMallorca) in [#26387](immich-app/immich#26387)
- fix: always show library scan button by [@etnoy](https://github.com/etnoy) in [#26428](immich-app/immich#26428)
- fix: retain asset when either asset is a favorite by [@shenlong-tanwen](https://github.com/shenlong-tanwen) in [#26473](immich-app/immich#26473)
- fix(web): prevent null folder tree on concurrent load by [@michelheusschen](https://github.com/michelheusschen) in [#26489](immich-app/immich#26489)
- fix(web): toast warning when trying to upload unsupported file type by [@meesfrensel](https://github.com/meesfrensel) in [#26492](immich-app/immich#26492)
- fix(mobile): birthday picker shows limited months when no date exists by [@socksprox](https://github.com/socksprox) in [#26407](immich-app/immich#26407)
- fix: consider DAR when extracting video dimension by [@alextran1502](https://github.com/alextran1502) in [#25293](immich-app/immich#25293)
- feat(mobile): Prevent premature image cache eviction when higher image loading is enabled by [@LeLunZ](https://github.com/LeLunZ) in [#26208](immich-app/immich#26208)
- refactor: star rating by [@meesfrensel](https://github.com/meesfrensel) in [#26357](immich-app/immich#26357)
- fix(mobile): set correct initial system-ui mode in asset viewer by [@goalie2002](https://github.com/goalie2002) in [#26500](immich-app/immich#26500)
- fix(server): Live Photo migration bug when album is in template by [@NikhilAlapati](https://github.com/NikhilAlapati) in [#25329](immich-app/immich#25329)
- fix(web): handle delete shortcut on shared link page as remove by [@meesfrensel](https://github.com/meesfrensel) in [#26552](immich-app/immich#26552)
- fix(mobile): prevent video player from being recreated unnecessarily by [@uhthomas](https://github.com/uhthomas) in [#26553](immich-app/immich#26553)
- fix(mobile): don't cut off top corners of app bar by [@uhthomas](https://github.com/uhthomas) in [#26550](immich-app/immich#26550)
- feat: update onnxruntime-openvino to 1.24.1 and intel drivers by [@savely-krasovsky](https://github.com/savely-krasovsky) in [#26565](immich-app/immich#26565)
- fix: hide download action for local/merged assets by [@YarosMallorca](https://github.com/YarosMallorca) in [#26461](immich-app/immich#26461)
- fix(web): top bar z index on search page by [@YarosMallorca](https://github.com/YarosMallorca) in [#26582](immich-app/immich#26582)
- fix(web): show shared link download button when logged in by [@Snowknight26](https://github.com/Snowknight26) in [#26629](immich-app/immich#26629)
- fix(mobile): asset viewer hero animation by [@uhthomas](https://github.com/uhthomas) in [#26545](immich-app/immich#26545)
- fix(web): timeline and asset viewer RTL support by [@meesfrensel](https://github.com/meesfrensel) in [#26513](immich-app/immich#26513)
- fix(server): clean up edited thumbnail when deleting asset by [@michelheusschen](https://github.com/michelheusschen) in [#26664](immich-app/immich#26664)
- fix: implement existing withStacked on searchAssetBuilder by [@babbitt](https://github.com/babbitt) in [#26607](immich-app/immich#26607)
- fix(mobile): video state by [@uhthomas](https://github.com/uhthomas) in [#26574](immich-app/immich#26574)
- fix(maintenance mode): wait for valid server config on restart by [@insertish](https://github.com/insertish) in [#26456](immich-app/immich#26456)
- fix(web): inconsistent asset nav bar state after visiting shared link by [@Snowknight26](https://github.com/Snowknight26) in [#26674](immich-app/immich#26674)
- fix(web): download toast showing wrong filename for motion assets by [@Snowknight26](https://github.com/Snowknight26) in [#26689](immich-app/immich#26689)
- fix(mobile): add safe area for asset details by [@uhthomas](https://github.com/uhthomas) in [#26675](immich-app/immich#26675)
- fix(web): combobox dropdown positioning in modals by [@michelheusschen](https://github.com/michelheusschen) in [#26707](immich-app/immich#26707)
- fix(web): video stealing focus when it plays again when looping by [@Snowknight26](https://github.com/Snowknight26) in [#26704](immich-app/immich#26704)
- fix(ml): batch size setting by [@mertalev](https://github.com/mertalev) in [#26524](immich-app/immich#26524)
- fix(server): clarify transcoding bitrate policy by [@meesfrensel](https://github.com/meesfrensel) in [#26711](immich-app/immich#26711)
- fix: playback style migration by [@alextran1502](https://github.com/alextran1502) in [#26718](immich-app/immich#26718)
- fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails by [@Snowknight26](https://github.com/Snowknight26) in [#26741](immich-app/immich#26741)
- fix(server): opus handling as accepted audio codec in transcode policy by [@skatsubo](https://github.com/skatsubo) in [#26736](immich-app/immich#26736)
- fix(web): refresh recent albums sidebar after album changes by [@michelheusschen](https://github.com/michelheusschen) in [#26757](immich-app/immich#26757)
- fix(web): show the correct cursor at crop bounds when editing an asset by [@Snowknight26](https://github.com/Snowknight26) in [#26748](immich-app/immich#26748)
- fix(web): recalculate face bounding boxes by [@cratoo](https://github.com/cratoo) in [#26737](immich-app/immich#26737)
- fix(web): context menu overflow by [@SevereCloud](https://github.com/SevereCloud) in [#26760](immich-app/immich#26760)
- fix(web): correct tag rounding in search options by [@michelheusschen](https://github.com/michelheusschen) in [#26814](immich-app/immich#26814)
- fix(web): prevent unrelated assets from appearing in tag view by [@michelheusschen](https://github.com/michelheusschen) in [#26816](immich-app/immich#26816)
- fix(mobile): use tabular figures in backup page by [@uhthomas](https://github.com/uhthomas) in [#26830](immich-app/immich#26830)
- fix(mobile): wrap backup error message text by [@uhthomas](https://github.com/uhthomas) in [#26834](immich-app/immich#26834)
- fix(server): use correct day ordering in timeline buckets by [@michelheusschen](https://github.com/michelheusschen) in [#26821](immich-app/immich#26821)
- fix(web): face selection box position resetting on browser resize by [@Snowknight26](https://github.com/Snowknight26) in [#26766](immich-app/immich#26766)
- fix: use correct original URL for 360 video panorama playback by [@luis15pt](https://github.com/luis15pt) in [#26831](immich-app/immich#26831)
- fix(web): disable drag and drop for internal items by [@michelheusschen](https://github.com/michelheusschen) in [#26897](immich-app/immich#26897)
- fix(web): keep header fixed on individual shared links by [@michelheusschen](https://github.com/michelheusschen) in [#26892](immich-app/immich#26892)
- fix: SMTP over TLS by [@nathanielhourt](https://github.com/nathanielhourt) in [#26893](immich-app/immich#26893)
- fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset in [#26890](immich-app/immich#26890)
- fix(mobile): use shared auth for background\_downloader by [@mertalev](https://github.com/mertalev) in [#26911](immich-app/immich#26911)
- fix(web): prevent search page error on missing album filter by [@michelheusschen](https://github.com/michelheusschen) in [#26948](immich-app/immich#26948)
- fix(server): sync files to disk by [@uhthomas](https://github.com/uhthomas) in [#26881](immich-app/immich#26881)
- fix(web): jump to primary stacked asset from memory by [@michelheusschen](https://github.com/michelheusschen) in [#26978](immich-app/immich#26978)
- fix(mobile): reflect asset deletions instantly by [@uhthomas](https://github.com/uhthomas) in [#26835](immich-app/immich#26835)
- fix: healthcheck by [@jrasm91](https://github.com/jrasm91) in [#26989](immich-app/immich#26989)
- fix(web): escape handling for tagging and adding a face in asset viewer by [@cratoo](https://github.com/cratoo) in [#26870](immich-app/immich#26870)
- fix: filter after searching by asset id by [@jrasm91](https://github.com/jrasm91) in [#26994](immich-app/immich#26994)
- fix: bounding box return type by [@jrasm91](https://github.com/jrasm91) in [#27014](immich-app/immich#27014)
- fix: validate accept header before returning html by [@jrasm91](https://github.com/jrasm91) in [#27019](immich-app/immich#27019)

##### 📚 Documentation

- chore(docs): Update help channel for developers by [@Mraedis](https://github.com/Mraedis) in [#26284](immich-app/immich#26284)
- feat(docs): Explain configuration file location for Docker Compose by [@keunes](https://github.com/keunes) in [#24989](immich-app/immich#24989)
- chore(docs): add quick-start guide for DevPod with docker by [@dhlavaty](https://github.com/dhlavaty) in [#26213](immich-app/immich#26213)
- feat(docs): Adding information about parameter c= by [@aviv926](https://github.com/aviv926) in [#26430](immich-app/immich#26430)
- feat: doc links by [@jrasm91](https://github.com/jrasm91) in [#26519](immich-app/immich#26519)
- fix(docs): add ocr to job flow diagram by [@niij](https://github.com/niij) in [#26505](immich-app/immich#26505)

##### 🌐 Translations

- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26118](immich-app/immich#26118)
- fix: clarify external domain setting is used for emails too by [@chrislongros](https://github.com/chrislongros) in [#26009](immich-app/immich#26009)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26167](immich-app/immich#26167)
- fix(web): error page i18n by [@meesfrensel](https://github.com/meesfrensel) in [#26517](immich-app/immich#26517)
- chore(web): clarify locale settings description by [@meesfrensel](https://github.com/meesfrensel) in [#25562](immich-app/immich#25562)
- chore(web): update translations by [@weblate](https://github.com/weblate) in [#26192](immich-app/immich#26192)

##### New Contributors

- [@klenner1](https://github.com/klenner1) made their first contribution in [#26151](immich-app/immich#26151)
- [@bkchr](https://github.com/bkchr) made their first contribution in [#25088](immich-app/immich#25088)
- [@chrislongros](https://github.com/chrislongros) made their first contribution in [#26011](immich-app/immich#26011)
- [@agent-steven](https://github.com/agent-steven) made their first contribution in [#26091](immich-app/immich#26091)
- [@dhlavaty](https://github.com/dhlavaty) made their first contribution in [#26238](immich-app/immich#26238)
- [@Nacolis](https://github.com/Nacolis) made their first contribution in [#26063](immich-app/immich#26063)
- [@ewinnd](https://github.com/ewinnd) made their first contribution in [#26277](immich-app/immich#26277)
- [@dnozay](https://github.com/dnozay) made their first contribution in [#26261](immich-app/immich#26261)
- [@keunes](https://github.com/keunes) made their first contribution in [#24989](immich-app/immich#24989)
- [@Devansh-Jani](https://github.com/Devansh-Jani) made their first contribution in [#26042](immich-app/immich#26042)
- [@benjamonnguyen](https://github.com/benjamonnguyen) made their first contribution in [#26196](immich-app/immich#26196)
- [@fabio-garavini](https://github.com/fabio-garavini) made their first contribution in [#26252](immich-app/immich#26252)
- [@haoxi911](https://github.com/haoxi911) made their first contribution in [#25399](immich-app/immich#25399)
- [@thezeroalpha](https://github.com/thezeroalpha) made their first contribution in [#20286](immich-app/immich#20286)
- [@socksprox](https://github.com/socksprox) made their first contribution in [#26407](immich-app/immich#26407)
- [@kprinssu](https://github.com/kprinssu) made their first contribution in [#26178](immich-app/immich#26178)
- [@babbitt](https://github.com/babbitt) made their first contribution in [#26607](immich-app/immich#26607)
- [@niij](https://github.com/niij) made their first contribution in [#26505](immich-app/immich#26505)
- [@cratoo](https://github.com/cratoo) made their first contribution in [#26667](immich-app/immich#26667)
- [@M123-dev](https://github.com/M123-dev) made their first contribution in [#26630](immich-app/immich#26630)
- [@apejcic](https://github.com/apejcic) made their first contribution in [#22948](immich-app/immich#22948)
- [@SevereCloud](https://github.com/SevereCloud) made their first contribution in [#26760](immich-app/immich#26760)
- [@brendanngo](https://github.com/brendanngo) made their first contribution in [#26833](immich-app/immich#26833)
- [@luis15pt](https://github.com/luis15pt) made their first contribution in [#26831](immich-app/immich#26831)
- [@nathanielhourt](https://github.com/nathanielhourt) made their first contribution in [#26893](immich-app/immich#26893)
- [@Belnadifia](https://github.com/Belnadifia) made their first contribution in [#26717](immich-app/immich#26717)
- [@pressslav](https://github.com/pressslav) made their first contribution in [#26944](immich-app/immich#26944)

**Full Changelog**: <immich-app/immich@v2.5.6...v2.6.0>
blake-hamm added a commit to blake-hamm/bhamm-lab that referenced this pull request Jul 4, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v2.0.1-openvino` → `v2.7.5-openvino` |
| [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v2.0.1` → `v2.7.5` |

---

### Release Notes

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

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.7.4...v2.7.5)

### v2.7.5

#### What's Changed

##### 🐛 Bug fixes

- fix(server): add rate limit and deduplication to version check by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;27747](https://github.com/immich-app/immich/pull/27747)

##### 🌐 Translations

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

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.7.4...v2.7.5>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.7.3...v2.7.4)

##### v2.7.4

This release addresses some issues with image rendering on the mobile app

##### What's Changed

##### 🐛 Bug fixes

- refactor(mobile): cleanup iOS image loading pipeline by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27672](https://github.com/immich-app/immich/pull/27672)
- fix(server): hide original filename when not showing metadata by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;27581](https://github.com/immich-app/immich/pull/27581)
- fix(mobile): fix Flutter cache eviction on thumbnails    by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27663](https://github.com/immich-app/immich/pull/27663)
- chore: pump cronet version by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;27685](https://github.com/immich-app/immich/pull/27685)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.7.3...v2.7.4>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.7.2...v2.7.3)

##### v2.7.3

##### What's Changed

##### 🐛 Bug fixes

- fix(server): avoid false restore failures on large database imports by [@&#8203;ErasmusAndre](https://github.com/ErasmusAndre) in [#&#8203;27420](https://github.com/immich-app/immich/pull/27420)
- fix(mobile): improve image load cancellation handling by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27624](https://github.com/immich-app/immich/pull/27624)
- fix(server): people search not showing for 3 or less characters by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;27629](https://github.com/immich-app/immich/pull/27629)
- fix(web): don't cache empty search results for people search by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;27632](https://github.com/immich-app/immich/pull/27632)
- fix(mobile): get provider refs before async gaps in backup page by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27597](https://github.com/immich-app/immich/pull/27597)
- fix: ssr open graph tags by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27639](https://github.com/immich-app/immich/pull/27639)

##### 📚 Documentation

- fix(docs): updated docker deprecation link  by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;27633](https://github.com/immich-app/immich/pull/27633)

##### New Contributors

- [@&#8203;fluffy](https://github.com/fluffy) made their first contribution in [#&#8203;27606](https://github.com/immich-app/immich/pull/27606)
- [@&#8203;ErasmusAndre](https://github.com/ErasmusAndre) made their first contribution in [#&#8203;27420](https://github.com/immich-app/immich/pull/27420)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.7.2...v2.7.3>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.7.0...v2.7.2)

You knew it was coming :sweat\_smile:

This release addresses the following issues:

- Fix an issue with the default helmet.json file
- Fix an issue with ML containers not working on some older CPUs
- Fix an issue with importing external libraries

<!-- Release notes generated using configuration in .github/release.yml at v2.7.2 -->

##### What's Changed

##### 🐛 Bug fixes

- fix: csp quotes by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;27592](https://github.com/immich-app/immich/pull/27592)
- fix(ml): downgrade numpy by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27591](https://github.com/immich-app/immich/pull/27591)
- fix(server): library import batch size by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27595](https://github.com/immich-app/immich/pull/27595)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.7.0...v2.7.2>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.6.3...v2.7.0)

##### v2.7.0

Welcome to Immich `v2.7.0`!

This release includes enhancements to the asset viewer, security improvements, changes to the duplicate APIs and viewer, and a bunch of bug fixes. Keep reading below for the complete highlights and a note on the upcoming `v3.0.0` release.

> \[!NOTE]\
> We're working on a managed backup service for Immich with end-to-end encrypted backups of your library to a remote datacentre where only you hold the keys.
>
> We've put together a quick survey (\~5 mins) to get a better idea of how you're backing things up today and what you'd actually want from something like this. Your answers help us figure out what to prioritise, so we'd really appreciate it if you took a few minutes to fill it out.
>
> Leave your email at the end if you're interested in joining our free closed beta when it's ready.
>
> <https://futo-backups-survey.immich.app/>

##### Known limitations

- The machine learning service on `amd64` currently requires the `>= x86-64-v2` microarchitecture. This will be patched in an upcoming patch release for backward compatibility with very old processors (before \~2010), but it will become a minimum requirement in 3.0. `arm64` is not affected by this change.

##### Highlights

- Remove from album (asset viewer)
- Move to locked folder (folder page)
- Editor shortcuts
- Create a new face on-the-fly in the face tag editor
- Resolve duplicates
- Helmet configuration
- Version check infrastructure
- Notable fix: live photo and video download in Safari
- Notable fix: escape HTML in the Panorama Photo Viewer

##### Remove from album

The web has a new action, "Remove from album," available in the asset viewer that makes it easier to remove an asset from an album. This action is available to both album and asset owners.

<img width="360" height="202" alt="image" src="https://github.com/user-attachments/assets/e5facb24-ed10-4adc-957a-37147cca5634" />

##### Move to locked folder in the Folder view

Similarly, the folder view now includes the "Move to locked folder" action.

<img width="1900" height="762" alt="image" src="https://github.com/user-attachments/assets/c39e792b-81da-4c31-a23f-03f96853fe8e" />

##### Editor shortcuts

Users on the web can now edit with keyboard shortcuts. Press `e` to open the editor. Once in the editor, press `[` or `]` to rotate the asset +/- 90 degrees. Finally, save any changes and close the editor with `ENTER`.

<https://github.com/user-attachments/assets/969de104-b02d-41a6-830b-3e1a49541d14>

##### Create a new face on-the-fly in the face tag editor

You can now create a new face/person on the fly from the face tagging editor interface

<img width="350" alt="image" src="https://github.com/user-attachments/assets/c39db0e3-da47-4421-9040-5f51650deee9" />

<img width="350" alt="image" src="https://github.com/user-attachments/assets/0c81a1ee-c54e-4167-9dff-95719fe44595" />

##### Deduplication improvements

The duplicate screen has gone through a bunch of iterations since it was first introduced all the way back in May, 2024. The latest release moves a bunch of logic from the client to the server, which now automatically suggests which asset to keep based on image size and EXIF data. Additionally, the new server implementation will automatically synchronize metadata, including albums, favorite status, rating, description, visibility, location, and tags. For more information about this process, see the new [documentation](https://docs.immich.app/features/duplicates-utility).

##### Helmet configuration

You can now opt in to using a [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) in Immich. The new environment variant `IMMICH_HELMET_FILE` accepts a boolean or a path to a [helmet](https://helmetjs.github.io/) configuration file.

**Recommend action:** The team recommends setting `IMMICH_HELMET_FILE=true` to enable the default policy. Then, please let us know if you run into any issues with it.

##### Background and details

Since Immich is deployed in so many different ways, it has been hard to figure out how to enable a CSP that would not conflict with or break existing installs that might use 3rd party map providers, custom CSS, embed Immich in an iframe, or other such features. In this release, we have added the ability to both opt in to a default policy and configure a custom one. To use the default policy, simply set the environment variable `IMMICH_HELMET_FILE=true`. To use a custom policy, set the environment variable to a path on disk (within the immich-server) that contains a valid helmet configuration (e.g. `IMMICH_HELMET_FILE=/opt/immich/helmet.json`). CSP can be used to control what scripts are allowed to run on the page, which domains to load images from, etc. Additionally, it can be used to configure headers for [Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy), [X-Powered-By](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Powered-By), [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options), and others.

##### New version check infrastructure

Prior to this release, instances that used the automatic version check feature would send HTTP requests to `github.com`. Now, we have set up a small service at `version.immich.cloud` to handle these types of requests. This avoids any privacy implications of connecting to `github.com` , as well as moves the request load to our own infrastructure.

##### Notable fix: live photo and video download in Safari

When downloading files in Safari with the same name, it will simply overwrite the file instead of automatically renaming it. In this release, the still and motion parts of a live photo are now named differently to prevent this from happening.

##### Notable fix: escape HTML in panorama photo viewer

In `v2.6.0`, we added the ability to show/view clip text in the panorama viewer, but introduced an XSS vulnerability, which has been fixed in this release. Interestingly, this was XSS using text in the image, which would then get read by OCR.

##### Notable fix: Immich User Agent for external requests

Similar to the mobile app, the server now sends a custom [User Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-Agent) header. The format for the User Agent is `immich-server/{version}`. For example, `immich-server/2.7.0`.

##### `v3.0.0`

Just a heads up that this is the likely to be the last release before  `v3.0.0`. Being a major release there will be a handful of breaking changes, *although it's worth noting that nothing is currently planned that requires  user intervention*. It is mainly changes that impact 3rd party developers. More information and details should be available in the coming weeks.

##### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.7.0 -->

##### What's Changed

##### 🚀 Features

- feat: add support for helmet configuration by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27058](https://github.com/immich-app/immich/pull/27058)
- feat: create new person in face editor by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;27364](https://github.com/immich-app/immich/pull/27364)

##### 🌟 Enhancements

- feat(web): add a seperate tooltip for switching from dark to light mode by [@&#8203;Vogeluff](https://github.com/Vogeluff) in [#&#8203;27297](https://github.com/immich-app/immich/pull/27297)
- feat(web): focus on face-editor search input by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;27136](https://github.com/immich-app/immich/pull/27136)
- feat(web): add RemoveFromAlbumAction to asset viewer nav bar by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;27000](https://github.com/immich-app/immich/pull/27000)
- feat(web): add shortcuts to rotate images by [@&#8203;squishykid](https://github.com/squishykid) in [#&#8203;26927](https://github.com/immich-app/immich/pull/26927)
- feat(server): add checksum algorithm field by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;26573](https://github.com/immich-app/immich/pull/26573)
- feat(server): resolve duplicates by [@&#8203;Phlogi](https://github.com/Phlogi) in [#&#8203;25316](https://github.com/immich-app/immich/pull/25316)
- chore(mobile): reduce spacing on video controls by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;27313](https://github.com/immich-app/immich/pull/27313)
- perf(server): optimize people page query by [@&#8203;ffchung](https://github.com/ffchung) in [#&#8203;27346](https://github.com/immich-app/immich/pull/27346)
- feat(web): dim photo outside hovered face bounding box by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;27402](https://github.com/immich-app/immich/pull/27402)
- feat(web): OCR overlay interactivity during zoom by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;27039](https://github.com/immich-app/immich/pull/27039)
- feat: add move to lock folder in folder view by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;27384](https://github.com/immich-app/immich/pull/27384)
- feat(web): highlight active person thumbnail in detail panel and edit faces panel by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;27401](https://github.com/immich-app/immich/pull/27401)
- feat: move version checks to our own infrastructure by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;27450](https://github.com/immich-app/immich/pull/27450)
- feat: add preview button when selecting images by [@&#8203;johnmaguire](https://github.com/johnmaguire) in [#&#8203;27305](https://github.com/immich-app/immich/pull/27305)
- fix: user-agent format by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27488](https://github.com/immich-app/immich/pull/27488)
- chore(mobile): reduce buffering timer duration by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;27111](https://github.com/immich-app/immich/pull/27111)
- fix(mobile): use key on video controls by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;27512](https://github.com/immich-app/immich/pull/27512)
- feat(server): Add support for .ts files by [@&#8203;ray](https://github.com/ray) in [#&#8203;27529](https://github.com/immich-app/immich/pull/27529)

##### 🐛 Bug fixes

- fix(server): refresh unedited asset dimensions on metadata extraction by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27220](https://github.com/immich-app/immich/pull/27220)
- fix(server): memory fragmentation by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27027](https://github.com/immich-app/immich/pull/27027)
- fix(database restores): don't assume onboarding has completed by [@&#8203;insertish](https://github.com/insertish) in [#&#8203;27052](https://github.com/immich-app/immich/pull/27052)
- fix(web): preserve timezone when changing timestamp (Closes [#&#8203;25354](https://github.com/immich-app/immich/issues/25354)) by [@&#8203;updatemike](https://github.com/updatemike) in [#&#8203;27095](https://github.com/immich-app/immich/pull/27095)
- fix: various command palette usages by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27304](https://github.com/immich-app/immich/pull/27304)
- fix(web): keep map view open after closing asset viewer by [@&#8203;diiogofer](https://github.com/diiogofer) in [#&#8203;26980](https://github.com/immich-app/immich/pull/26980)
- fix(web): prevent Safari from overwriting live photo image with video by [@&#8203;saurav61091](https://github.com/saurav61091) in [#&#8203;26898](https://github.com/immich-app/immich/pull/26898)
- fix(mobile): video icon not showing on memories by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27311](https://github.com/immich-app/immich/pull/27311)
- fix(mobile): mismatch between system and app color when using low-chroma system color scheme by [@&#8203;putuprema](https://github.com/putuprema) in [#&#8203;27282](https://github.com/immich-app/immich/pull/27282)
- fix(mobile): images loads sometimes cancel too early by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27067](https://github.com/immich-app/immich/pull/27067)
- fix(mobile): streamline error handling for live photo saving by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27337](https://github.com/immich-app/immich/pull/27337)
- fix(web): keep upload totals stable when dismissing items ([#&#8203;27247](https://github.com/immich-app/immich/issues/27247)) by [@&#8203;Nicolas-micuda-becker](https://github.com/Nicolas-micuda-becker) in [#&#8203;27354](https://github.com/immich-app/immich/pull/27354)
- fix(mobile): low upload timeout on android by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27399](https://github.com/immich-app/immich/pull/27399)
- fix(web): add drop shadow to asset viewer nav bar and prevent button shrinking by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;27404](https://github.com/immich-app/immich/pull/27404)
- fix(mobile): favorite button not updating state by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27271](https://github.com/immich-app/immich/pull/27271)
- fix: detection of WebM container by [@&#8203;chanb22](https://github.com/chanb22) in [#&#8203;24182](https://github.com/immich-app/immich/pull/24182)
- fix(web): prevent AssetUpdate from adding unrelated timeline assets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27369](https://github.com/immich-app/immich/pull/27369)
- fix: withFilePath select edited or unedited file by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;27328](https://github.com/immich-app/immich/pull/27328)
- fix(web): Enable stack selector in shared album view by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24641](https://github.com/immich-app/immich/pull/24641)
- fix(server): use substring matching for person name search by [@&#8203;okxint](https://github.com/okxint) in [#&#8203;26903](https://github.com/immich-app/immich/pull/26903)
- fix: escape html by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27469](https://github.com/immich-app/immich/pull/27469)
- fix(mobile): ignore pointer events on toasts by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26990](https://github.com/immich-app/immich/pull/26990)
- fix(mobile): reset video controls hide timer when showing controls ch… by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26985](https://github.com/immich-app/immich/pull/26985)
- fix(mobile): don't update search filters in-place by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26965](https://github.com/immich-app/immich/pull/26965)
- fix(web): isFullScreen initial value check is incorrect by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;27520](https://github.com/immich-app/immich/pull/27520)
- fix(mobile): transparent system navbar when trash bottom bar is visible by [@&#8203;putuprema](https://github.com/putuprema) in [#&#8203;27093](https://github.com/immich-app/immich/pull/27093)
- fix: timestamp handling for database backup in Web UI by [@&#8203;AfonsoMendoncaRibeiro](https://github.com/AfonsoMendoncaRibeiro) in [#&#8203;27359](https://github.com/immich-app/immich/pull/27359)
- fix: allow bots to access /s/ urls  by [@&#8203;domints](https://github.com/domints) in [#&#8203;27579](https://github.com/immich-app/immich/pull/27579)

##### 📚 Documentation

- feat(docs): add keycloack example to oauth docs by [@&#8203;robson90](https://github.com/robson90) in [#&#8203;27425](https://github.com/immich-app/immich/pull/27425)

##### 🌐 Translations

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

##### New Contributors

- [@&#8203;Vogeluff](https://github.com/Vogeluff) made their first contribution in [#&#8203;27297](https://github.com/immich-app/immich/pull/27297)
- [@&#8203;updatemike](https://github.com/updatemike) made their first contribution in [#&#8203;27095](https://github.com/immich-app/immich/pull/27095)
- [@&#8203;diiogofer](https://github.com/diiogofer) made their first contribution in [#&#8203;26980](https://github.com/immich-app/immich/pull/26980)
- [@&#8203;squishykid](https://github.com/squishykid) made their first contribution in [#&#8203;26927](https://github.com/immich-app/immich/pull/26927)
- [@&#8203;Phlogi](https://github.com/Phlogi) made their first contribution in [#&#8203;25316](https://github.com/immich-app/immich/pull/25316)
- [@&#8203;saurav61091](https://github.com/saurav61091) made their first contribution in [#&#8203;26898](https://github.com/immich-app/immich/pull/26898)
- [@&#8203;putuprema](https://github.com/putuprema) made their first contribution in [#&#8203;27282](https://github.com/immich-app/immich/pull/27282)
- [@&#8203;ffchung](https://github.com/ffchung) made their first contribution in [#&#8203;27346](https://github.com/immich-app/immich/pull/27346)
- [@&#8203;chanb22](https://github.com/chanb22) made their first contribution in [#&#8203;24182](https://github.com/immich-app/immich/pull/24182)
- [@&#8203;robson90](https://github.com/robson90) made their first contribution in [#&#8203;27425](https://github.com/immich-app/immich/pull/27425)
- [@&#8203;okxint](https://github.com/okxint) made their first contribution in [#&#8203;26903](https://github.com/immich-app/immich/pull/26903)
- [@&#8203;johnmaguire](https://github.com/johnmaguire) made their first contribution in [#&#8203;27305](https://github.com/immich-app/immich/pull/27305)
- [@&#8203;ray](https://github.com/ray) made their first contribution in [#&#8203;27529](https://github.com/immich-app/immich/pull/27529)
- [@&#8203;AfonsoMendoncaRibeiro](https://github.com/AfonsoMendoncaRibeiro) made their first contribution in [#&#8203;27359](https://github.com/immich-app/immich/pull/27359)
- [@&#8203;domints](https://github.com/domints) made their first contribution in [#&#8203;27579](https://github.com/immich-app/immich/pull/27579)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.6.3...v2.7.0>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.6.2...v2.6.3)

##### v2.6.3

##### What's Changed

##### 🐛 Bug fixes

- fix(mobile): remove upload timeout by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27237](https://github.com/immich-app/immich/pull/27237)
- fix(web): prevent horizontal scroll bar in asset viewer side panel by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27270](https://github.com/immich-app/immich/pull/27270)
- fix(web): shifting motion image button by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27275](https://github.com/immich-app/immich/pull/27275)
- chore(docs): withPeople parameter description by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27262](https://github.com/immich-app/immich/pull/27262)
- fix(server): filter out empty search suggestions by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27292](https://github.com/immich-app/immich/pull/27292)
- fix: incorrect asset face sync by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;27243](https://github.com/immich-app/immich/pull/27243)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.6.2...v2.6.3>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.6.1...v2.6.2)

##### v2.6.2

This release addresses the following issues

- Fixed a bug where the shared link would error out when public users upload to the shared link
- Fixed a bug where the URL switching feature doesn't work with external URLs
- Fixed a bug where the "add to album" selection box on the web doesn't include albums that are shared with the user
- Fixed several issues regarding the search filter on the mobile app and the web

<!-- Release notes generated using configuration in .github/release.yml at v2.6.2 -->

##### What's Changed

##### 🐛 Bug fixes

- fix(mobile): simplified chinese not available by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27066](https://github.com/immich-app/immich/pull/27066)
- fix(web): allow showing combobox items outside modals by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27075](https://github.com/immich-app/immich/pull/27075)
- fix(web): preserve album scroll when adding to other albums by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27078](https://github.com/immich-app/immich/pull/27078)
- fix(server): queue version check job when config changed by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;27094](https://github.com/immich-app/immich/pull/27094)
- fix: shared link add to album by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27063](https://github.com/immich-app/immich/pull/27063)
- fix: svelte reactivity issues by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27109](https://github.com/immich-app/immich/pull/27109)
- fix(mobile): cronet image cache clearing on android by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;27054](https://github.com/immich-app/immich/pull/27054)
- fix(mobile): view similar photos from search by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27149](https://github.com/immich-app/immich/pull/27149)
- fix(mobile): no results before applying filter by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27155](https://github.com/immich-app/immich/pull/27155)
- fix(mobile): star rating always defaults to 0 by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27157](https://github.com/immich-app/immich/pull/27157)
- fix: download original stale cache when edited by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27195](https://github.com/immich-app/immich/pull/27195)
- fix(web): restore duplicate viewer arrow key navigation by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;27176](https://github.com/immich-app/immich/pull/27176)
- fix(web): update upload summary when removing items ([#&#8203;27035](https://github.com/immich-app/immich/issues/27035)) by [@&#8203;Nicolas-micuda-becker](https://github.com/Nicolas-micuda-becker) in [#&#8203;27139](https://github.com/immich-app/immich/pull/27139)
- fix(mobile): option padding on search dropdowns by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27154](https://github.com/immich-app/immich/pull/27154)
- fix(mobile): add keys to people list by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27112](https://github.com/immich-app/immich/pull/27112)
- fix(mobile): add cookie for auxiliary url by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27209](https://github.com/immich-app/immich/pull/27209)
- fix: album picker show all albums by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27211](https://github.com/immich-app/immich/pull/27211)
- fix(server): album permissions for editors by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27214](https://github.com/immich-app/immich/pull/27214)
- fix(mobile/web): album cover buttons consistency by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;27213](https://github.com/immich-app/immich/pull/27213)

##### 📚 Documentation

- fix(docs): clarify ML CPU architecture by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;27187](https://github.com/immich-app/immich/pull/27187)

##### New Contributors

- [@&#8203;Nicolas-micuda-becker](https://github.com/Nicolas-micuda-becker) made their first contribution in [#&#8203;27139](https://github.com/immich-app/immich/pull/27139)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.6.1...v2.6.2>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.6.0...v2.6.1)

##### v2.6.1

##### Hot fixes

- Fixed a failed migration issue on the mobile app when the URL Switching feature is used

##### What's Changed

##### 🐛 Bug fixes

- fix(server): fallback to email when name is empty by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27016](https://github.com/immich-app/immich/pull/27016)
- fix: ignore errors deleting untitled album by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27020](https://github.com/immich-app/immich/pull/27020)
- fix(web): wrap long album title by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27012](https://github.com/immich-app/immich/pull/27012)
- fix(web): stop in-progress uploads on logout by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27021](https://github.com/immich-app/immich/pull/27021)
- fix: writing empty exif tags by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;27025](https://github.com/immich-app/immich/pull/27025)
- fix(web): disable send button by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27051](https://github.com/immich-app/immich/pull/27051)
- fix(mobile): server url migration by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;27050](https://github.com/immich-app/immich/pull/27050)

**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.6.0...v2.6.1>

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

[Compare Source](https://github.com/immich-app/immich/compare/v2.5.6...v2.6.0)

##### v2.6.0

Welcome to Immich `v2.6.0`, This release is a collection of more than *350 commits over 6 weeks*. I know, it is an eternity between releases compared to our previous era. This version focuses on bug fixes and enhancements across the app to provide a more delightful and smoother experience to you. This release also prepares for the next major release in the coming month, which will remove the old timeline implementation. Let's dive into the highlights of the release:

> \[!WARNING]
> For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
>
> ps: The old timeline has an exclamation icon next to the logo. <img width="525" height="120" alt="image" src="https://github.com/user-attachments/assets/ed36ea22-b16e-472f-961c-c19501712ba5" />

##### Highlights

- Map side panel (web)
- Pick album cover (mobile)
- Shared link slugs (mobile)
- Shared link presets (web)
- Native HTTP clients (mobile)
- Video player and asset viewer improvements (mobile)
- Improved search results (mobile)
- `schema-check`: a new `immich-admin` command
- Read profile claims from ID token (OAuth)
- Notable fix: cast videos now automatically loop
- Notable fix: correctly extract make and model from Sony XAVC video files
- Notable fix: escape key handling on web
- Notable fix: healthcheck endpoint in maintenance mode
- Notable fix: timeline rendering for RTL languages like Arabic and Hebrew
- Notable fix: prevent server crash when extracting invalid metadata

##### Map side panel (web)

The map view on the web now opens a mini-timeline component as a side panel when you click on a cluster of assets. This makes it easier to view the cluster at a glance and enables bulk actions, such as adding to favorites and adding to an album.

<img width="800" alt="image" src="https://github.com/user-attachments/assets/6f90b04d-4aa7-4f68-b59c-c2b912e638f7" />

##### Pick album cover (mobile)

Users can now pick a new album cover directly from the mobile app.

<https://github.com/user-attachments/assets/7f99dc80-21c6-4ce6-9f75-8e6b0163dcaa>

##### Shared link slugs (mobile)

The mobile app now also supports setting a shared link slug, a feature that's been available on the web for a while.

<https://github.com/user-attachments/assets/5420995a-cfd4-471d-a3ac-db4fa45de780>

##### Shared link presets (web)

The expiration form input on the web was always a bit confusing, but it's been updated to make it easier to see and understand when a shared link will expire.

<img width="400" alt="image" src="https://github.com/user-attachments/assets/9d6124a9-eec2-43e8-b228-e1ac6c0415e8" />

##### Native HTTP clients (mobile)

The mobile app now uses native HTTP clients across both Android and iOS, with support for mTLS, self-signed certificates, basic auth, and custom headers. These features should now be more reliable and extend to background tasks, video playback, and other parts of the app. This also improves the app's overall network request performance thanks to HTTP/2 and HTTP/3, multiplexing, and caching.

##### Video player and asset viewer improvements (mobile)

The asset viewer has undergone many improvements under the hood to make it simpler, faster and more reliable. We've also added playback support for GIFs, enabled video zooming, and made many more bug fixes and tweaks.

##### The asset viewer now uses a gradient for actions, and video controls have been restyled

<img width="300" alt="image" src="https://github.com/user-attachments/assets/9a4e0892-f178-45fc-812c-10a6cba3f48b" />

##### Inline asset details

This used to be a bottom sheet and had a lot of glue for alignment. The new version is much more responsive and less buggy.

##### Before

<https://github.com/user-attachments/assets/43b59b59-7d6a-48d0-94d7-84b8cae1c2a9>

##### After

<https://github.com/user-attachments/assets/9217b6f4-1c92-40b0-bd95-a0681307cf38>

##### Improved search results (mobile)

The search results page now loads more results without rebuilding the entire grid, and should now load much faster. There are also new screens for when there are no search results and when all results have been loaded.

<https://github.com/user-attachments/assets/42ce69d4-1618-48ee-9cb9-91ec22e12b27>

##### `schema-check`: a new `immich-admin` command

A new `immich-admin` command has been added in this release: `schema-check`. The command runs a report on the database to check if any indexes, constraints, tables, or columns are missing. This check also runs automatically on startup.

##### Read profile claims from `idToken` (OAuth)

Prior to `v2.6.0`, Immich resolved the `email` and other claims from the [userinfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) endpoint. Now, Immich also supports reading those claims directly from the `idToken`. This makes it possible to use providers such as Microsoft ADFS that do not support the userinfo endpoint.

***

As always, there are many more QoL improvements, bug fixes, and enhancements in this release. Please find the full release note below

##### 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>

***

<!-- Release notes generated using configuration in .github/release.yml at v2.6.0 -->

##### What's Changed

##### 🔒 Security

- fix(server): restrict individual shared link asset removal to owners by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26868](https://github.com/immich-app/immich/pull/26868)
- fix: add to shared link by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26886](https://github.com/immich-app/immich/pull/26886)

##### 🚀 Features

- feat: shared link login by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25678](https://github.com/immich-app/immich/pull/25678)
- feat: schema-check by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25904](https://github.com/immich-app/immich/pull/25904)
- feat: add people deeplink by [@&#8203;arne182](https://github.com/arne182) in [#&#8203;25686](https://github.com/immich-app/immich/pull/25686)
- feat(mobile): inline asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25952](https://github.com/immich-app/immich/pull/25952)
- feat(mobile): filter by tags by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26196](https://github.com/immich-app/immich/pull/26196)
- feat: add .mxf file support by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24644](https://github.com/immich-app/immich/pull/24644)
- feat: tap to see next/previous image by [@&#8203;thezeroalpha](https://github.com/thezeroalpha) in [#&#8203;20286](https://github.com/immich-app/immich/pull/20286)
- feat(mobile): Allow users to set album cover from mobile app by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25515](https://github.com/immich-app/immich/pull/25515)
- feat(mobile): Allow users to set profile picture from asset viewer by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;25517](https://github.com/immich-app/immich/pull/25517)
- feat: ROCm 7.2 and MIGraphX support  by [@&#8203;kprinssu](https://github.com/kprinssu) in [#&#8203;26178](https://github.com/immich-app/immich/pull/26178)
- feat(web): map timeline sidepanel by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26532](https://github.com/immich-app/immich/pull/26532)
- feat: add responsive layout to broken asset by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26384](https://github.com/immich-app/immich/pull/26384)
- feat(web): toggle zoom on double-click in photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26732](https://github.com/immich-app/immich/pull/26732)
- feat(mobile): show animated images in asset viewer by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26614](https://github.com/immich-app/immich/pull/26614)
- feat(mobile): open in browser by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26369](https://github.com/immich-app/immich/pull/26369)

##### 🌟 Enhancements

- feat: verify permissions by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;25647](https://github.com/immich-app/immich/pull/25647)
- feat(web): change link expiration logic & presets  by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26064](https://github.com/immich-app/immich/pull/26064)
- feat(mobile): dynamic layout in new timeline by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23837](https://github.com/immich-app/immich/pull/23837)
- feat(cli): change progress bar to display file size by [@&#8203;Nykri](https://github.com/Nykri) in [#&#8203;23328](https://github.com/immich-app/immich/pull/23328)
- feat(mobile): dynamic multi-line album name by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26040](https://github.com/immich-app/immich/pull/26040)
- feat(mobile): hide search by context/OCR if disabled on server ([#&#8203;25472](https://github.com/immich-app/immich/issues/25472)) by [@&#8203;Nacolis](https://github.com/Nacolis) in [#&#8203;26063](https://github.com/immich-app/immich/pull/26063)
- fix(release): add docker-compose.rootless.yml to released assets by [@&#8203;dnozay](https://github.com/dnozay) in [#&#8203;26261](https://github.com/immich-app/immich/pull/26261)
- feat(web): show ocr text boxes in panoramas by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;25727](https://github.com/immich-app/immich/pull/25727)
- feat(web): loop chromecast video by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;24410](https://github.com/immich-app/immich/pull/24410)
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;24669](https://github.com/immich-app/immich/pull/24669)
- feat(mobile): timeline - add bottomWidgetBuilder  by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;25634](https://github.com/immich-app/immich/pull/25634)
- feat(mobile): video zooming in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;22036](https://github.com/immich-app/immich/pull/22036)
- feat(mobile): Add slug support for shared links by [@&#8203;Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#&#8203;26441](https://github.com/immich-app/immich/pull/26441)
- feat: warn when losing transparency during thumbnail generation by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26243](https://github.com/immich-app/immich/pull/26243)
- perf(mobile): optimized album sorting by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;25179](https://github.com/immich-app/immich/pull/25179)
- feat(mobile): prompt when deleting from trash by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26392](https://github.com/immich-app/immich/pull/26392)
- feat: getAssetEdits respond with edit IDs by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26445](https://github.com/immich-app/immich/pull/26445)
- fix(server): accept showAt and hideAt for creating memories by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26429](https://github.com/immich-app/immich/pull/26429)
- feat(server): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26446](https://github.com/immich-app/immich/pull/26446)
- feat: splash screen error page by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26460](https://github.com/immich-app/immich/pull/26460)
- feat(mobile): add confirmation dialog to permanent delete action by [@&#8203;ByteSizedMarius](https://github.com/ByteSizedMarius) in [#&#8203;26442](https://github.com/immich-app/immich/pull/26442)
- feat: enhance face-editor positioning by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26303](https://github.com/immich-app/immich/pull/26303)
- feat: improve HEIC, HEIF and JPEG XL browser support detection by [@&#8203;nicosemp](https://github.com/nicosemp) in [#&#8203;26122](https://github.com/immich-app/immich/pull/26122)
- refactor(web): remove replaceAsset action by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26444](https://github.com/immich-app/immich/pull/26444)
- feat(web): bounding box for faces when hovering over the face in photo view by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26667](https://github.com/immich-app/immich/pull/26667)
- feat(mobile): keep search results visible by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26498](https://github.com/immich-app/immich/pull/26498)
- feat(mobile): use shared native client by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;25942](https://github.com/immich-app/immich/pull/25942)
- feat(mobile): SyncAssetEditV1 by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26518](https://github.com/immich-app/immich/pull/26518)
- feat(ml): enable openvino for cpu by [@&#8203;apejcic](https://github.com/apejcic) in [#&#8203;22948](https://github.com/immich-app/immich/pull/22948)
- feat: responsive video duration in thumbnail by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26770](https://github.com/immich-app/immich/pull/26770)
- feat(web): animate zoom toggle with cubicOut easing by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26731](https://github.com/immich-app/immich/pull/26731)
- feat(mobile): consolidate video controls by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26673](https://github.com/immich-app/immich/pull/26673)
- feat(web): add shortcut "p" to open/close the face tag box by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26826](https://github.com/immich-app/immich/pull/26826)
- feat(mobile): use material design 3 slider by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26829](https://github.com/immich-app/immich/pull/26829)
- feat: adaptive progressive image loading for photo viewer by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26636](https://github.com/immich-app/immich/pull/26636)
- fix(server): extract make/model from sony video files by [@&#8203;brendanngo](https://github.com/brendanngo) in [#&#8203;26833](https://github.com/immich-app/immich/pull/26833)
- chore(mobile): remove background from asset viewer back button by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26851](https://github.com/immich-app/immich/pull/26851)
- feat(server): support IDPs that only send the userinfo in the ID token by [@&#8203;Belnadifia](https://github.com/Belnadifia) in [#&#8203;26717](https://github.com/immich-app/immich/pull/26717)
- feat(web): improve OCR overlay text fitting, reactivity, and accessibility by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;26678](https://github.com/immich-app/immich/pull/26678)
- fix(web): allow pasting PIN code from clipboard or password manager by [@&#8203;pressslav](https://github.com/pressslav) in [#&#8203;26944](https://github.com/immich-app/immich/pull/26944)

##### 🐛 Bug fixes

- fix: ignore checksum constraint error when logging by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26113](https://github.com/immich-app/immich/pull/26113)
- fix(web): use locale for date picker by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26125](https://github.com/immich-app/immich/pull/26125)
- fix(web): escape shortcut handling by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26096](https://github.com/immich-app/immich/pull/26096)
- fix(mobile): Login routing on Splash screen by [@&#8203;PeterOmbodi](https://github.com/PeterOmbodi) in [#&#8203;26128](https://github.com/immich-app/immich/pull/26128)
- fix: null local date time in timeline queries by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26133](https://github.com/immich-app/immich/pull/26133)
- fix(web): prevent event manager from throwing error by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26156](https://github.com/immich-app/immich/pull/26156)
- fix(web): improve api key modal responsiveness by [@&#8203;klenner1](https://github.com/klenner1) in [#&#8203;26151](https://github.com/immich-app/immich/pull/26151)
- fix(web): show correct assets in memory gallery by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26157](https://github.com/immich-app/immich/pull/26157)
- fix(web): add missing [@&#8203;immich/ui](https://github.com/immich/ui) translations by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26143](https://github.com/immich-app/immich/pull/26143)
- fix(mobile): timeline handling on foldable phones + ensuring that images are not cut off by [@&#8203;bkchr](https://github.com/bkchr) in [#&#8203;25088](https://github.com/immich-app/immich/pull/25088)
- fix(mobile): prevent nav bar label text wrapping by [@&#8203;chrislongros](https://github.com/chrislongros) in [#&#8203;26011](https://github.com/immich-app/immich/pull/26011)
- fix(mobile): hide latest version warnings by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26036](https://github.com/immich-app/immich/pull/26036)
- fix(mobile): inconsistent query for people by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;24437](https://github.com/immich-app/immich/pull/24437)
- fix(web): timeline multi select group state by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26180](https://github.com/immich-app/immich/pull/26180)
- fix(web): add checkerboard background for transparent images by [@&#8203;agent-steven](https://github.com/agent-steven) in [#&#8203;26091](https://github.com/immich-app/immich/pull/26091)
- fix(mobile): inherit toolbar opacity by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;25694](https://github.com/immich-app/immich/pull/25694)
- fix(web): focus tag input when modal opens by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26256](https://github.com/immich-app/immich/pull/26256)
- fix(web): clear face boxes when switching assets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26249](https://github.com/immich-app/immich/pull/26249)
- fix(web): clear unsaved asset description when changing asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26255](https://github.com/immich-app/immich/pull/26255)
- fix(web): clear cache when asset changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26257](https://github.com/immich-app/immich/pull/26257)
- fix: utc time zone upserts by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;26258](https://github.com/immich-app/immich/pull/26258)
- fix: metadata crash by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26327](https://github.com/immich-app/immich/pull/26327)
- fix: prevent server crash when extraction of metadata fails if the assets are corrupted by [@&#8203;Devansh-Jani](https://github.com/Devansh-Jani) in [#&#8203;26042](https://github.com/immich-app/immich/pull/26042)
- fix(server): db restore failure when `DB_URL` is set to unix-domain socket connection by [@&#8203;fabio-garavini](https://github.com/fabio-garavini) in [#&#8203;26252](https://github.com/immich-app/immich/pull/26252)
- fix: Download the edited version when downloading multiple photos by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;26259](https://github.com/immich-app/immich/pull/26259)
- fix: include `DROP INDEX` in transaction to prevent missing index on rollback by [@&#8203;haoxi911](https://github.com/haoxi911) in [#&#8203;25399](https://github.com/immich-app/immich/pull/25399)
- fix: safari address bar color by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26346](https://github.com/immich-app/immich/pull/26346)
- fix(web): prevent panorama image reload during asset updates by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26349](https://github.com/immich-app/immich/pull/26349)
- fix(web): favoriting assets opened via GalleryViewer by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26350](https://github.com/immich-app/immich/pull/26350)
- fix(i18n): add translation key for partner's photos by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26348](https://github.com/immich-app/immich/pull/26348)
- fix(web): single select scroll behavior by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26358](https://github.com/immich-app/immich/pull/26358)
- perf: add indexes to improve People API response times by [@&#8203;bxtdvd](https://github.com/bxtdvd) in [#&#8203;26337](https://github.com/immich-app/immich/pull/26337)
- fix: pin code reset modal by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26370](https://github.com/immich-app/immich/pull/26370)
- fix(mobile): Reset "People" search filter chip if no selections are made by [@&#8203;benjamonnguyen](https://github.com/benjamonnguyen) in [#&#8203;26267](https://github.com/immich-app/immich/pull/26267)
- fix(cli): delete sidecar files after upload if requested by [@&#8203;timonrieger](https://github.com/timonrieger) in [#&#8203;26353](https://github.com/immich-app/immich/pull/26353)
- fix(web): album description auto height by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26420](https://github.com/immich-app/immich/pull/26420)
- fix(web): prevent side panel overlap during transition by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26398](https://github.com/immich-app/immich/pull/26398)
- fix(web): storage template example by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;26424](https://github.com/immich-app/immich/pull/26424)
- fix(web): prevent `state_unsafe_mutation` error on people page by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26438](https://github.com/immich-app/immich/pull/26438)
- fix: missing deletedAt and isVisible columns on mobile by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;26414](https://github.com/immich-app/immich/pull/26414)
- fix(mobile): joinLocal on archived timeline by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26387](https://github.com/immich-app/immich/pull/26387)
- fix: always show library scan button by [@&#8203;etnoy](https://github.com/etnoy) in [#&#8203;26428](https://github.com/immich-app/immich/pull/26428)
- fix: retain asset when either asset is a favorite by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;26473](https://github.com/immich-app/immich/pull/26473)
- fix(web): prevent null folder tree on concurrent load by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26489](https://github.com/immich-app/immich/pull/26489)
- fix(web): toast warning when trying to upload unsupported file type by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26492](https://github.com/immich-app/immich/pull/26492)
- fix(mobile): birthday picker shows limited months when no date exists by [@&#8203;socksprox](https://github.com/socksprox) in [#&#8203;26407](https://github.com/immich-app/immich/pull/26407)
- fix: consider DAR when extracting video dimension by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;25293](https://github.com/immich-app/immich/pull/25293)
- feat(mobile): Prevent premature image cache eviction when higher image loading is enabled by [@&#8203;LeLunZ](https://github.com/LeLunZ) in [#&#8203;26208](https://github.com/immich-app/immich/pull/26208)
- refactor: star rating by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26357](https://github.com/immich-app/immich/pull/26357)
- fix(mobile): set correct initial system-ui mode in asset viewer by [@&#8203;goalie2002](https://github.com/goalie2002) in [#&#8203;26500](https://github.com/immich-app/immich/pull/26500)
- fix(server): Live Photo migration bug when album is in template by [@&#8203;NikhilAlapati](https://github.com/NikhilAlapati) in [#&#8203;25329](https://github.com/immich-app/immich/pull/25329)
- fix(web): handle delete shortcut on shared link page as remove by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26552](https://github.com/immich-app/immich/pull/26552)
- fix(mobile): prevent video player from being recreated unnecessarily by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26553](https://github.com/immich-app/immich/pull/26553)
- fix(mobile): don't cut off top corners of app bar by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26550](https://github.com/immich-app/immich/pull/26550)
- feat: update onnxruntime-openvino to 1.24.1 and intel drivers by [@&#8203;savely-krasovsky](https://github.com/savely-krasovsky) in [#&#8203;26565](https://github.com/immich-app/immich/pull/26565)
- fix: hide download action for local/merged assets by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26461](https://github.com/immich-app/immich/pull/26461)
- fix(web): top bar z index on search page by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;26582](https://github.com/immich-app/immich/pull/26582)
- fix(web): show shared link download button when logged in by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26629](https://github.com/immich-app/immich/pull/26629)
- fix(mobile): asset viewer hero animation by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26545](https://github.com/immich-app/immich/pull/26545)
- fix(web): timeline and asset viewer RTL support by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26513](https://github.com/immich-app/immich/pull/26513)
- fix(server): clean up edited thumbnail when deleting asset by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26664](https://github.com/immich-app/immich/pull/26664)
- fix: implement existing withStacked on searchAssetBuilder by [@&#8203;babbitt](https://github.com/babbitt) in [#&#8203;26607](https://github.com/immich-app/immich/pull/26607)
- fix(mobile): video state by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26574](https://github.com/immich-app/immich/pull/26574)
- fix(maintenance mode): wait for valid server config on restart by [@&#8203;insertish](https://github.com/insertish) in [#&#8203;26456](https://github.com/immich-app/immich/pull/26456)
- fix(web): inconsistent asset nav bar state after visiting shared link by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26674](https://github.com/immich-app/immich/pull/26674)
- fix(web): download toast showing wrong filename for motion assets by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26689](https://github.com/immich-app/immich/pull/26689)
- fix(mobile): add safe area for asset details by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26675](https://github.com/immich-app/immich/pull/26675)
- fix(web): combobox dropdown positioning in modals by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26707](https://github.com/immich-app/immich/pull/26707)
- fix(web): video stealing focus when it plays again when looping by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26704](https://github.com/immich-app/immich/pull/26704)
- fix(ml): batch size setting by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26524](https://github.com/immich-app/immich/pull/26524)
- fix(server): clarify transcoding bitrate policy by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;26711](https://github.com/immich-app/immich/pull/26711)
- fix: playback style migration by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;26718](https://github.com/immich-app/immich/pull/26718)
- fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26741](https://github.com/immich-app/immich/pull/26741)
- fix(server): opus handling as accepted audio codec in transcode policy by [@&#8203;skatsubo](https://github.com/skatsubo) in [#&#8203;26736](https://github.com/immich-app/immich/pull/26736)
- fix(web): refresh recent albums sidebar after album changes by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26757](https://github.com/immich-app/immich/pull/26757)
- fix(web): show the correct cursor at crop bounds when editing an asset by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26748](https://github.com/immich-app/immich/pull/26748)
- fix(web): recalculate face bounding boxes by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26737](https://github.com/immich-app/immich/pull/26737)
- fix(web): context menu overflow by [@&#8203;SevereCloud](https://github.com/SevereCloud) in [#&#8203;26760](https://github.com/immich-app/immich/pull/26760)
- fix(web): correct tag rounding in search options by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26814](https://github.com/immich-app/immich/pull/26814)
- fix(web): prevent unrelated assets from appearing in tag view by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26816](https://github.com/immich-app/immich/pull/26816)
- fix(mobile): use tabular figures in backup page by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26830](https://github.com/immich-app/immich/pull/26830)
- fix(mobile): wrap backup error message text by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26834](https://github.com/immich-app/immich/pull/26834)
- fix(server): use correct day ordering in timeline buckets by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26821](https://github.com/immich-app/immich/pull/26821)
- fix(web): face selection box position resetting on browser resize by [@&#8203;Snowknight26](https://github.com/Snowknight26) in [#&#8203;26766](https://github.com/immich-app/immich/pull/26766)
- fix: use correct original URL for 360 video panorama playback by [@&#8203;luis15pt](https://github.com/luis15pt) in [#&#8203;26831](https://github.com/immich-app/immich/pull/26831)
- fix(web): disable drag and drop for internal items by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26897](https://github.com/immich-app/immich/pull/26897)
- fix(web): keep header fixed on individual shared links by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26892](https://github.com/immich-app/immich/pull/26892)
- fix: SMTP over TLS by [@&#8203;nathanielhourt](https://github.com/nathanielhourt) in [#&#8203;26893](https://github.com/immich-app/immich/pull/26893)
- fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset in [#&#8203;26890](https://github.com/immich-app/immich/pull/26890)
- fix(mobile): use shared auth for background\_downloader by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;26911](https://github.com/immich-app/immich/pull/26911)
- fix(web): prevent search page error on missing album filter by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26948](https://github.com/immich-app/immich/pull/26948)
- fix(server): sync files to disk by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26881](https://github.com/immich-app/immich/pull/26881)
- fix(web): jump to primary stacked asset from memory by [@&#8203;michelheusschen](https://github.com/michelheusschen) in [#&#8203;26978](https://github.com/immich-app/immich/pull/26978)
- fix(mobile): reflect asset deletions instantly by [@&#8203;uhthomas](https://github.com/uhthomas) in [#&#8203;26835](https://github.com/immich-app/immich/pull/26835)
- fix: healthcheck by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26989](https://github.com/immich-app/immich/pull/26989)
- fix(web): escape handling for tagging and adding a face in asset viewer by [@&#8203;cratoo](https://github.com/cratoo) in [#&#8203;26870](https://github.com/immich-app/immich/pull/26870)
- fix: filter after searching by asset id by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;26994](https://github.com/immich-app/immich/pull/26994)
- fix: bounding box return type by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27014](https://github.com/immich-app/immich/pull/27014)
- fix: validate accept header before returning html by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;27019](https://github.com/immich-app/immich/pull/27019)

##### 📚 Documentation

- chore(docs): Update help channel for developers by [@&#8203;Mraedis](https://github.com/Mraedis) in [#&#8203;26284](https://github.com/immich-app/immich/pull/26284)
- feat(docs): Explain configuration file location for Docker Compose by [@&#8203;keunes](https://github.com/keunes) in [#&#8203;24989](https://github.com/immich-app/immich/pull/24989)
- chore(docs): add quick-start guide for DevPod …
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.

3 participants