Skip to content

feat: ocr#18836

Merged
alextran1502 merged 56 commits intoimmich-app:mainfrom
flipped-1121:ocr
Oct 27, 2025
Merged

feat: ocr#18836
alextran1502 merged 56 commits intoimmich-app:mainfrom
flipped-1121:ocr

Conversation

@flipped-1121
Copy link
Contributor

Description

feat: add OCR functionality and related configurations

  • Added new OCR-related translations in English and Simplified Chinese
  • Integrated PaddleOCR for text recognition in images
  • Enhanced search capabilities by adding an “OCR” search type
  • Implemented backend support for OCR processing, including database schema updates and service integration
  • Updated frontend components to support OCR settings and search filters, including mobile OCR search-filter functionality

How Has This Been Tested?

  • Tested on a fresh full deployment
  • Tested on an incremental / rolling upgrade

Screenshots (if appropriate)

image

PixPin_2025-05-13_13-07-29.mp4
PixPin_2025-05-13_13-29-25.mp4

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/)

@mertalev
Copy link
Member

I rebased and made some changes:

  • I switched the library to RapidOCR, which means it uses ONNX Runtime and hence has wider HWA compatibility
  • The response is now sent as columnar arrays since the number of results can be quite high
  • The detection and recognition scores are both stored in the DB
  • The box positions are normalized so they're independent of the resolution at which the image was processed
  • Changed the settings options to have a detection threshold, recognition threshold and max resolution, which I think are the main parameters an admin would care about
  • Indexed the search table with a trigram index
  • Removed the ocr endpoint in favor of adding an ocr field to the existing endpoints

To do is to update the mobile app, add tests and do more testing. The defaults may also need to be tweaked - it is fairly slow with these settings.

flipped-1121 and others added 18 commits September 8, 2025 19:29
…ation and unwarping options, update PaddleOCR integration, and improve response structure
…date asset job status and schema to accommodate new OCR table structure
…dual coordinates instead of bounding box, and adjust related service and repository files
- Updated OCR settings to include minimum detection box score, minimum detection score, and minimum recognition score.
- Refactored PaddleOCRecognizer to utilize new scoring parameters.
- Introduced new database tables for asset OCR data and search functionality.
- Modified related services and repositories to support the new OCR features.
- Updated translations for improved clarity in settings UI.
fix max resolution key

set min threshold to 0.1

fix bind
@mertalev mertalev changed the title feat: add OCR functionality and related configurations feat: ocr Oct 15, 2025
@mertalev mertalev marked this pull request as ready for review October 15, 2025 20:59
@alextran1502
Copy link
Member

# Conflicts:
#	i18n/en.json
#	mobile/openapi/README.md
#	mobile/openapi/lib/api.dart
#	mobile/openapi/lib/api_client.dart
@dodysw3
Copy link

dodysw3 commented Oct 24, 2025

Hi on this fork, when using Nvidia CUDA on a 12GB vram, I noticed after a while, the gpu run out of memory:

immich_machine_learning | ONNXRuntimeError: Traceback (most recent call
immich_machine_learning | last):
immich_machine_learning | File
immich_machine_learning | "/opt/venv/lib/python3.11/site-packages/rapidocr/in
immich_machine_learning | ference_engine/onnxruntime/main.py", line 90, in
immich_machine_learning | call
immich_machine_learning | return
immich_machine_learning | self.session.run(self.get_output_names(),
immich_machine_learning | input_dict)[0]
immich_machine_learning | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
immich_machine_learning | ^^^^^^^^^^^^^
immich_machine_learning | File
immich_machine_learning | "/opt/venv/lib/python3.11/site-packages/onnxruntime
immich_machine_learning | /capi/onnxruntime_inference_collection.py", line
immich_machine_learning | 220, in run
immich_machine_learning | return self._sess.run(output_names, input_feed,
immich_machine_learning | run_options)
immich_machine_learning | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
immich_machine_learning | ^^^^^^^^^^^^^
immich_machine_learning | onnxruntime.capi.onnxruntime_pybind11_state.Runtime
immich_machine_learning | Exception: [ONNXRuntimeError] : 6 :
immich_machine_learning | RUNTIME_EXCEPTION : Non-zero status code returned
immich_machine_learning | while running Resize node. Name:'Resize.6' Status
immich_machine_learning | Message:
immich_machine_learning | /onnxruntime_src/onnxruntime/core/framework/bfc_are
immich_machine_learning | na.cc:376 void*
immich_machine_learning | onnxruntime::BFCArena::AllocateRawInternal(size_t,
immich_machine_learning | bool, onnxruntime::Stream*, bool,
immich_machine_learning | onnxruntime::WaitNotificationFn) Failed to allocate
immich_machine_learning | memory for requested buffer of size 802160640

I wonder if there is a known memory leak issues or too aggressive caching on RapidOCR side?

@alextran1502 alextran1502 requested a review from jrasm91 October 24, 2025 15:15
@mertalev
Copy link
Member

Hi on this fork, when using Nvidia CUDA on a 12GB vram, I noticed after a while, the gpu run out of memory:

immich_machine_learning | ONNXRuntimeError: Traceback (most recent call

immich_machine_learning | last):

immich_machine_learning | File

immich_machine_learning | "/opt/venv/lib/python3.11/site-packages/rapidocr/in

immich_machine_learning | ference_engine/onnxruntime/main.py", line 90, in

immich_machine_learning | call

immich_machine_learning | return

immich_machine_learning | self.session.run(self.get_output_names(),

immich_machine_learning | input_dict)[0]

immich_machine_learning | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

immich_machine_learning | ^^^^^^^^^^^^^

immich_machine_learning | File

immich_machine_learning | "/opt/venv/lib/python3.11/site-packages/onnxruntime

immich_machine_learning | /capi/onnxruntime_inference_collection.py", line

immich_machine_learning | 220, in run

immich_machine_learning | return self._sess.run(output_names, input_feed,

immich_machine_learning | run_options)

immich_machine_learning | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

immich_machine_learning | ^^^^^^^^^^^^^

immich_machine_learning | onnxruntime.capi.onnxruntime_pybind11_state.Runtime

immich_machine_learning | Exception: [ONNXRuntimeError] : 6 :

immich_machine_learning | RUNTIME_EXCEPTION : Non-zero status code returned

immich_machine_learning | while running Resize node. Name:'Resize.6' Status

immich_machine_learning | Message:

immich_machine_learning | /onnxruntime_src/onnxruntime/core/framework/bfc_are

immich_machine_learning | na.cc:376 void*

immich_machine_learning | onnxruntime::BFCArena::AllocateRawInternal(size_t,

immich_machine_learning | bool, onnxruntime::Stream*, bool,

immich_machine_learning | onnxruntime::WaitNotificationFn) Failed to allocate

immich_machine_learning | memory for requested buffer of size 802160640

I wonder if there is a known memory leak issues or too aggressive caching on RapidOCR side?

Have you changed any of the OCR settings or concurrency from default?

Copy link
Member

@jrasm91 jrasm91 left a comment

Choose a reason for hiding this comment

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

A quick look at everything and it looks great. Thanks for also writing medium tests!

@dodysw3
Copy link

dodysw3 commented Oct 25, 2025

Have you changed any of the OCR settings or concurrency from default?

Hi, not much. It was default, yes my setup has multiple GPUs, but the issue persists irrespective of OCR concurrency setting. However I did find a solution although I don't have an explanation. The OOM issue disappear when this is set in environment variable:

MACHINE_LEARNING_WORKERS=1
MACHINE_LEARNING_REQUEST_THREADS=1

This setting despite only using 1 gpu, it's much faster than cpu, so it's what I used now.

Edit: utilizing reverse proxy at https://github.com/apetersson/immich_ml_balancer and keeping the same principle of ensuring each gpu only run a single request thread (above params and pinning specific GPU for each immich ml service), all gpus can now be utilized without out of memory issue.

@alextran1502 alextran1502 enabled auto-merge (squash) October 27, 2025 13:51
@alextran1502 alextran1502 merged commit 02b2904 into immich-app:main Oct 27, 2025
69 checks passed
"rich>=13.4.2",
"tokenizers>=0.15.0,<1.0",
"uvicorn[standard]>=0.22.0,<1.0",
"setuptools>=78.1.0",
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think this is used anywhere.

Suggested change
"setuptools>=78.1.0",

alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Oct 31, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v2.1.0` -> `v2.2.1` |

---

### Release Notes

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

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

[Compare Source](immich-app/immich@v2.2.0...v2.2.1)

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

#### What's Changed

##### 🐛 Bug fixes

- fix(mobile): regression - not displayed activity button in top bar by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23366](immich-app/immich#23366)
- fix: asset copy validation error by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;23387](immich-app/immich#23387)
- fix(ml): ocr failing with rootless docker by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23402](immich-app/immich#23402)
- fix(mobile): video seeking on android by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23405](immich-app/immich#23405)
- fix: button condition rendering by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23400](immich-app/immich#23400)
- fix: view in timeline does not jump to the timeline correctly by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23428](immich-app/immich#23428)
- fix: show close button on purchase modal by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23436](immich-app/immich#23436)

##### 📚 Documentation

- chore: update android signing fingerprints to docs by [@&#8203;luneth](https://github.com/luneth) in [#&#8203;23361](immich-app/immich#23361)

##### 🌐 Translations

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

#### New Contributors

- [@&#8203;luneth](https://github.com/luneth) made their first contribution in [#&#8203;23361](immich-app/immich#23361)

**Full Changelog**: <immich-app/immich@v2.2.0...v2.2.1>

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

[Compare Source](immich-app/immich@v2.1.0...v2.2.0)

### v2.2.0

*The month following our [stable release ](https://immich.app/blog/stable-release)**🎉** has flown by! We are blown away by the support from everyone around this milestone, especially for the [Retro DVD ](https://immich.store/products/immich-retro)**📀**! If you want to get one for yourself, you still can, but once this batch is gone, we won’t be making any more, **EVER!** So get one while you can from [immich.store](https://immich.store/)!*

<img width="2292" height="209" alt="image" src="https://github.com/user-attachments/assets/3829caef-8674-4ab0-a0d0-954c317e8987" />

#### Highlights

Welcome to version `v2.2.0` of Immich. This release comes with the traditional Immich fashion, where the features and enhancements list is longer than the bug fixes list. Let’s dive right into the highlights of this exciting release

- New mutable Docker tag for `v2` versions
- Optical Character Recognition (OCR)
- \[Web] Wasm implementation for justified layout calculation 🦀
- \[Web] UI improvement for the review duplicates screen
- \[Mobile] Show albums in the asset’s detail sheet
- \[Mobile] Show similar photos
- \[Mobile] Chat-style for activity view
- \[Mobile] High precision seeking for video
- \[Mobile] New UI to present server-client version mismatch
- Option to create a new user as an admin
- Notable fix: older iOS devices freeze when spawning background tasks
- Notable fix: temporary files on iOS are now cleaned up properly

##### Docker tag for `v2` versions

The `example.env` file has been updated to use `IMMICH_VERSION=v2`, which is a mutable Docker tag that points to the latest `2.x.x` release image.

##### Optical Character Recognition (OCR)

OCR search has been one of the most requested features on our users' wishlists. Thanks to the fantastic work of [@&#8203;flipped-1121](https://github.com/flipped-1121) and [@&#8203;mertalev](https://github.com/mertalev), Immich can now recognize texts in images, adding a powerful capability to its already powerful search features. This will help users find lost family recipes or a crypto wallet’s passphrase more easily.

The OCR pipeline is integrated into the existing machine learning flow. For new uploads, it will run automatically with the existing machine learning flow. For existing setups, you can go to `Administration > Job > Click on “All” for OCR job` to extract OCR information for your gallery

<p align="center">
<img width="800" alt="image" src="https://github.com/user-attachments/assets/ece151cf-4268-406a-a68f-ce3c9c869c15" />
</p>

To search for letters in photos, a new radio button has been added to the search type on the web app, and in the dropdown list on the mobile app.

<p align="center">
<img width="500" alt="image" src="https://github.com/user-attachments/assets/adb161c8-717d-4030-b5eb-4f3cfef11a96" />
</p>

OCR currently has official support for English, Chinese (Simplified), Chinese (Traditional) and Japanese text. Languages using Latin script generally work as well, but may have lower accuracy or interpret characters without the diacritics.

##### \[Web] Wasm implementation for justified layout calculation  🦀

This release comes with a blazing-fast re-implementation of the justified layout on the web, which makes calculating the size of the thumbnails in each bucket several times faster, significantly improving the rendering performance for a large bucket, i.e., 10s of thousands of assets in a single month

##### \[Web] UI improvement for the review duplicates screen

To help you decide which asset to keep in a group of duplicates, more information has been added to the info section below each asset, including date/time, location, and the number of albums the asset is in. The info section has been redesigned to make scanning the information faster, with different properties getting highlighted. We will keep improving on this interface to make it more intuitive

<p align="center">
<img width="800" alt="image" src="https://github.com/user-attachments/assets/0bee8443-b44e-4264-a4ab-36a99cef4596" />
</p>

##### \[Mobile\] Show albums in the asset’s detail

You can view and navigate to the albums that the asset belongs to in the info sheet

<p align="center">

<img width="300" alt="image" src="https://github.com/user-attachments/assets/96bb194a-cc54-478b-9958-b6e8eea9b03c" />

</p>

##### \[Mobile\] Show similar photos

The popular feature “Show similar photos” has made its way to the mobile app. You can use the button in the detail sheet to find similar images to the one you are viewing.

<p align="center">
<img width="300" alt="image" src="https://github.com/user-attachments/assets/45cb751d-da22-4fe8-bc47-406dbb9c9cfc" />
</p>

##### \[Mobile\] Chat-style for album activity view

The album’s activity view now displays the messages and actions in a chat-style view, making it easier to follow

<p align="center">
<img width="300" alt="image" src="https://github.com/user-attachments/assets/a5a8a4aa-ebbe-4282-844b-27e9df14a529" />
</p>

##### \[Mobile\] High precision seeking for video

The progress bar of the video player now has higher precision duration handling. This makes seeking much more fluid than before, as well as making position updates in the progress bar smooth, rather than jumping from second to second.

##### \[Mobile] New UI to present server-client version mismatch

As we are now in the stable-era, we want to make the notification of a new version more subtle, less distracting. The update message and icon’s color on the mobile app have been redesigned for that purpose.

When your server version is older than the available one, a message with a clickable link is displayed, directing you to the latest release notes. When your mobile app version is older than the one available on the App Store, a message with a clickable link appears, directing you to the App Store to perform the update.

| Server update                                                                                                         | App update                                                                                                                          |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| <img width="300" alt="image" src="https://github.com/user-attachments/assets/c136aab6-ef39-4769-ab35-b6719b188ed5" /> | <img width="300" height="2340" alt="image" src="https://github.com/user-attachments/assets/3bead2e2-f202-48b8-9164-c5c29c999434" /> |

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

#### What's Changed

##### 🔒 Security

- fix(server): bump valkey to 8 by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;22911](immich-app/immich#22911)

##### 🚀 Features

- feat(ml): coreml by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;17718](immich-app/immich#17718)
- feat(server): Option to configure SMTPS transport by [@&#8203;clementmartin](https://github.com/clementmartin) in [#&#8203;22833](immich-app/immich#22833)
- feat: show location & date on duplicate asset comparison overview by [@&#8203;adrianjost](https://github.com/adrianjost) in [#&#8203;22632](immich-app/immich#22632)
- feat: view the user's app version on the user page by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;21345](immich-app/immich#21345)
- feat: GHA for iOS release flow by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23196](immich-app/immich#23196)
- feat(web): add search filter for camera lens model. by [@&#8203;dagstuan](https://github.com/dagstuan) in [#&#8203;21792](immich-app/immich#21792)
- feat(web): load original videos by [@&#8203;andre-antunesdesa](https://github.com/andre-antunesdesa) in [#&#8203;20041](immich-app/immich#20041)
- feat(cli): add --delete-duplicates option by [@&#8203;RobinJ1995](https://github.com/RobinJ1995) in [#&#8203;20035](immich-app/immich#20035)
- feat: ocr by [@&#8203;flipped-1121](https://github.com/flipped-1121) in [#&#8203;18836](immich-app/immich#18836)
- feat: show "appears in" albums on asset viewer bottom sheet by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;21925](immich-app/immich#21925)
- feat: getAssetOcr endpoint by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23331](immich-app/immich#23331)
- feat(mobile): view similar photos by [@&#8203;vitoksmile](https://github.com/vitoksmile) in [#&#8203;22148](immich-app/immich#22148)
- feat(mobile): chat-style album activities timeline by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23185](immich-app/immich#23185)

##### 🌟 Enhancements

- feat(album): show per-user contributions in shared albums by [@&#8203;Chaoscontrol](https://github.com/Chaoscontrol) in [#&#8203;21740](immich-app/immich#21740)
- feat: add video auto play setting by [@&#8203;Saschl](https://github.com/Saschl) in [#&#8203;20416](immich-app/immich#20416)
- fix(web): improve scrubber behavior on scroll-limited timelines by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;22917](immich-app/immich#22917)
- feat(web): Download links and Obtainium link generator on Utilities page and onboarding by [@&#8203;NicholasFlamy](https://github.com/NicholasFlamy) in [#&#8203;20589](immich-app/immich#20589)
- feat(web): create user as admin by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23026](immich-app/immich#23026)
- chore: rework backup success notification descriptions by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23024](immich-app/immich#23024)
- feat(mobile): Change the UI of asset activity list to bottom sheet by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23075](immich-app/immich#23075)
- feat: improved update messaging on app bar server info by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;22938](immich-app/immich#22938)
- refactor(web): improve date labels in scrubber   by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;23046](immich-app/immich#23046)
- feat: support database dumps for pg18 by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;23186](immich-app/immich#23186)
- feat: improvements of thumbnail animations by [@&#8203;Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#&#8203;20300](immich-app/immich#20300)
- feat(web): reactively update shared link expiration by [@&#8203;khanbasharat3a1](https://github.com/khanbasharat3a1) in [#&#8203;22274](immich-app/immich#22274)
- feat: (mobile) open asset viewer from album activity page by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23182](immich-app/immich#23182)
- feat(mobile): high precision seeking by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;22346](immich-app/immich#22346)
- feat(web): wasm justified layout, sync edition by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23194](immich-app/immich#23194)
- feat: logout sessions on password change  by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;23188](immich-app/immich#23188)
- feat(server): enhance metadata reading for video files by [@&#8203;tstachl](https://github.com/tstachl) in [#&#8203;23258](immich-app/immich#23258)
- feat: improve UI for resolving duplication detection by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23145](immich-app/immich#23145)
- feat: toasts by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23298](immich-app/immich#23298)
- feat: asset copy by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;23172](immich-app/immich#23172)

##### 🐛 Bug fixes

- fix(web): prevent photo-only memories showing mute button by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;22802](immich-app/immich#22802)
- fix: get all assets for the Recents album on iOS by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22956](immich-app/immich#22956)
- fix: tag clean up query and add tests by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;22633](immich-app/immich#22633)
- fix: unit overlapses value in server stats card by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22994](immich-app/immich#22994)
- fix: navigate to time action by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;20928](immich-app/immich#20928)
- fix: remove assets from shared link by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;22935](immich-app/immich#22935)
- fix(server): only asset owner should see favorite status by [@&#8203;pwojtaszko](https://github.com/pwojtaszko) in [#&#8203;20654](immich-app/immich#20654)
- fix(web): render context overlays over the scrollbar by [@&#8203;PaulSonOfLars](https://github.com/PaulSonOfLars) in [#&#8203;23007](immich-app/immich#23007)
- fix(web): two scrollbars in folder view by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;23045](immich-app/immich#23045)
- fix: skip ML availability check if ML is disabled by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;23053](immich-app/immich#23053)
- chore: skip dialog for single merged asset by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;22958](immich-app/immich#22958)
- fix(mobile): notate experimental network features, cleanup mis assigned translation tags by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;23021](immich-app/immich#23021)
- fix(ml): pin cudnn version by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23110](immich-app/immich#23110)
- fix(server): use GPSLongitudeRef and GPSLatitudeRef EXIF fields by [@&#8203;ruippeixotog](https://github.com/ruippeixotog) in [#&#8203;21445](immich-app/immich#21445)
- fix: allow editing all images by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23144](immich-app/immich#23144)
- fix: isolate freeze app on older ios device by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22509](immich-app/immich#22509)
- fix: android skip posting hash response after detached from engine by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23192](immich-app/immich#23192)
- fix: back/forward navigation won't reset scroll in timeline by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;22838](immich-app/immich#22838)
- fix: handle null bucketId or name in android local sync by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23224](immich-app/immich#23224)
- fix: fetch original name before upload by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;21877](immich-app/immich#21877)
- fix: focus-trap on safari by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;23246](immich-app/immich#23246)
- fix(web): disable picture-in-picture on video viewer by [@&#8203;tstachl](https://github.com/tstachl) in [#&#8203;23318](immich-app/immich#23318)
- fix: make hitbox on app bar dialog bigger by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23316](immich-app/immich#23316)
- fix: clear temp cache on iOS before uploads by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23326](immich-app/immich#23326)

##### 📚 Documentation

- fix(web): clarify some transcoding settings by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;22797](immich-app/immich#22797)
- docs: fix small error by [@&#8203;0xflotus](https://github.com/0xflotus) in [#&#8203;22890](immich-app/immich#22890)
- docs: Expand on OpenVINO WSL HW accel by [@&#8203;Mraedis](https://github.com/Mraedis) in [#&#8203;21054](immich-app/immich#21054)
- docs: clarify well-known usage by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23018](immich-app/immich#23018)
- feat: move community projects and guides to immich-aweseome by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23016](immich-app/immich#23016)
- fix(docs): cli upload json format example by [@&#8203;leepeuker](https://github.com/leepeuker) in [#&#8203;22858](immich-app/immich#22858)
- docs: update [backup-and-restore.md](http://backup-and-restore.md) by [@&#8203;nickwebcouk](https://github.com/nickwebcouk) in [#&#8203;21065](immich-app/immich#21065)

#### New Contributors

- [@&#8203;Chaoscontrol](https://github.com/Chaoscontrol) made their first contribution in [#&#8203;21740](immich-app/immich#21740)
- [@&#8203;meesfrensel](https://github.com/meesfrensel) made their first contribution in [#&#8203;22802](immich-app/immich#22802)
- [@&#8203;0xflotus](https://github.com/0xflotus) made their first contribution in [#&#8203;22890](immich-app/immich#22890)
- [@&#8203;clementmartin](https://github.com/clementmartin) made their first contribution in [#&#8203;22833](immich-app/immich#22833)
- [@&#8203;leepeuker](https://github.com/leepeuker) made their first contribution in [#&#8203;22858](immich-app/immich#22858)
- [@&#8203;nickwebcouk](https://github.com/nickwebcouk) made their first contribution in [#&#8203;21065](immich-app/immich#21065)
- [@&#8203;idubnori](https://github.com/idubnori) made their first contribution in [#&#8203;23075](immich-app/immich#23075)
- [@&#8203;ruippeixotog](https://github.com/ruippeixotog) made their first contribution in [#&#8203;21445](immich-app/immich#21445)
- [@&#8203;Nykri](https://github.com/Nykri) made their first contribution in [#&#8203;22888](immich-app/immich#22888)
- [@&#8203;slagiewka](https://github.com/slagiewka) made their first contribution in [#&#8203;23130](immich-app/immich#23130)
- [@&#8203;khanbasharat3a1](https://github.com/khanbasharat3a1) made their first contribution in [#&#8203;22274](immich-app/immich#22274)
- [@&#8203;andre-antunesdesa](https://github.com/andre-antunesdesa) made their first contribution in [#&#8203;20041](immich-app/immich#20041)
- [@&#8203;RobinJ1995](https://github.com/RobinJ1995) made their first contribution in [#&#8203;20035](immich-app/immich#20035)
- [@&#8203;flipped-1121](https://github.com/flipped-1121) made their first contribution in [#&#8203;18836](immich-app/immich#18836)
- [@&#8203;ZacWarham](https://github.com/ZacWarham) made their first contribution in [#&#8203;23275](immich-app/immich#23275)
- [@&#8203;tstachl](https://github.com/tstachl) made their first contribution in [#&#8203;23258](immich-app/immich#23258)

**Full Changelog**: <immich-app/immich@v2.1.0...v2.2.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:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTUuNCIsInVwZGF0ZWRJblZlciI6IjQxLjE1NS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbWFnZSJdfQ==-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/1905
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 Oct 31, 2025
…1 (#1904)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v2.1.0` -> `v2.2.1` |

---

### Release Notes

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

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

[Compare Source](immich-app/immich@v2.2.0...v2.2.1)

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

#### What's Changed

##### 🐛 Bug fixes

- fix(mobile): regression - not displayed activity button in top bar by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23366](immich-app/immich#23366)
- fix: asset copy validation error by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;23387](immich-app/immich#23387)
- fix(ml): ocr failing with rootless docker by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23402](immich-app/immich#23402)
- fix(mobile): video seeking on android by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23405](immich-app/immich#23405)
- fix: button condition rendering by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23400](immich-app/immich#23400)
- fix: view in timeline does not jump to the timeline correctly by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23428](immich-app/immich#23428)
- fix: show close button on purchase modal by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23436](immich-app/immich#23436)

##### 📚 Documentation

- chore: update android signing fingerprints to docs by [@&#8203;luneth](https://github.com/luneth) in [#&#8203;23361](immich-app/immich#23361)

##### 🌐 Translations

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

#### New Contributors

- [@&#8203;luneth](https://github.com/luneth) made their first contribution in [#&#8203;23361](immich-app/immich#23361)

**Full Changelog**: <immich-app/immich@v2.2.0...v2.2.1>

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

[Compare Source](immich-app/immich@v2.1.0...v2.2.0)

### v2.2.0

*The month following our [stable release ](https://immich.app/blog/stable-release)**🎉** has flown by! We are blown away by the support from everyone around this milestone, especially for the [Retro DVD ](https://immich.store/products/immich-retro)**📀**! If you want to get one for yourself, you still can, but once this batch is gone, we won’t be making any more, **EVER!** So get one while you can from [immich.store](https://immich.store/)!*

<img width="2292" height="209" alt="image" src="https://github.com/user-attachments/assets/3829caef-8674-4ab0-a0d0-954c317e8987" />

#### Highlights

Welcome to version `v2.2.0` of Immich. This release comes with the traditional Immich fashion, where the features and enhancements list is longer than the bug fixes list. Let’s dive right into the highlights of this exciting release

- New mutable Docker tag for `v2` versions
- Optical Character Recognition (OCR)
- \[Web] Wasm implementation for justified layout calculation 🦀
- \[Web] UI improvement for the review duplicates screen
- \[Mobile] Show albums in the asset’s detail sheet
- \[Mobile] Show similar photos
- \[Mobile] Chat-style for activity view
- \[Mobile] High precision seeking for video
- \[Mobile] New UI to present server-client version mismatch
- Option to create a new user as an admin
- Notable fix: older iOS devices freeze when spawning background tasks
- Notable fix: temporary files on iOS are now cleaned up properly

##### Docker tag for `v2` versions

The `example.env` file has been updated to use `IMMICH_VERSION=v2`, which is a mutable Docker tag that points to the latest `2.x.x` release image.

##### Optical Character Recognition (OCR)

OCR search has been one of the most requested features on our users' wishlists. Thanks to the fantastic work of [@&#8203;flipped-1121](https://github.com/flipped-1121) and [@&#8203;mertalev](https://github.com/mertalev), Immich can now recognize texts in images, adding a powerful capability to its already powerful search features. This will help users find lost family recipes or a crypto wallet’s passphrase more easily.

The OCR pipeline is integrated into the existing machine learning flow. For new uploads, it will run automatically with the existing machine learning flow. For existing setups, you can go to `Administration > Job > Click on “All” for OCR job` to extract OCR information for your gallery

<p align="center">
<img width="800" alt="image" src="https://github.com/user-attachments/assets/ece151cf-4268-406a-a68f-ce3c9c869c15" />
</p>

To search for letters in photos, a new radio button has been added to the search type on the web app, and in the dropdown list on the mobile app.

<p align="center">
<img width="500" alt="image" src="https://github.com/user-attachments/assets/adb161c8-717d-4030-b5eb-4f3cfef11a96" />
</p>

OCR currently has official support for English, Chinese (Simplified), Chinese (Traditional) and Japanese text. Languages using Latin script generally work as well, but may have lower accuracy or interpret characters without the diacritics.

##### \[Web] Wasm implementation for justified layout calculation  🦀

This release comes with a blazing-fast re-implementation of the justified layout on the web, which makes calculating the size of the thumbnails in each bucket several times faster, significantly improving the rendering performance for a large bucket, i.e., 10s of thousands of assets in a single month

##### \[Web] UI improvement for the review duplicates screen

To help you decide which asset to keep in a group of duplicates, more information has been added to the info section below each asset, including date/time, location, and the number of albums the asset is in. The info section has been redesigned to make scanning the information faster, with different properties getting highlighted. We will keep improving on this interface to make it more intuitive

<p align="center">
<img width="800" alt="image" src="https://github.com/user-attachments/assets/0bee8443-b44e-4264-a4ab-36a99cef4596" />
</p>

##### \[Mobile\] Show albums in the asset’s detail

You can view and navigate to the albums that the asset belongs to in the info sheet

<p align="center">

<img width="300" alt="image" src="https://github.com/user-attachments/assets/96bb194a-cc54-478b-9958-b6e8eea9b03c" />

</p>

##### \[Mobile\] Show similar photos

The popular feature “Show similar photos” has made its way to the mobile app. You can use the button in the detail sheet to find similar images to the one you are viewing.

<p align="center">
<img width="300" alt="image" src="https://github.com/user-attachments/assets/45cb751d-da22-4fe8-bc47-406dbb9c9cfc" />
</p>

##### \[Mobile\] Chat-style for album activity view

The album’s activity view now displays the messages and actions in a chat-style view, making it easier to follow

<p align="center">
<img width="300" alt="image" src="https://github.com/user-attachments/assets/a5a8a4aa-ebbe-4282-844b-27e9df14a529" />
</p>

##### \[Mobile\] High precision seeking for video

The progress bar of the video player now has higher precision duration handling. This makes seeking much more fluid than before, as well as making position updates in the progress bar smooth, rather than jumping from second to second.

##### \[Mobile] New UI to present server-client version mismatch

As we are now in the stable-era, we want to make the notification of a new version more subtle, less distracting. The update message and icon’s color on the mobile app have been redesigned for that purpose.

When your server version is older than the available one, a message with a clickable link is displayed, directing you to the latest release notes. When your mobile app version is older than the one available on the App Store, a message with a clickable link appears, directing you to the App Store to perform the update.

| Server update                                                                                                         | App update                                                                                                                          |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| <img width="300" alt="image" src="https://github.com/user-attachments/assets/c136aab6-ef39-4769-ab35-b6719b188ed5" /> | <img width="300" height="2340" alt="image" src="https://github.com/user-attachments/assets/3bead2e2-f202-48b8-9164-c5c29c999434" /> |

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

#### What's Changed

##### 🔒 Security

- fix(server): bump valkey to 8 by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;22911](immich-app/immich#22911)

##### 🚀 Features

- feat(ml): coreml by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;17718](immich-app/immich#17718)
- feat(server): Option to configure SMTPS transport by [@&#8203;clementmartin](https://github.com/clementmartin) in [#&#8203;22833](immich-app/immich#22833)
- feat: show location & date on duplicate asset comparison overview by [@&#8203;adrianjost](https://github.com/adrianjost) in [#&#8203;22632](immich-app/immich#22632)
- feat: view the user's app version on the user page by [@&#8203;aviv926](https://github.com/aviv926) in [#&#8203;21345](immich-app/immich#21345)
- feat: GHA for iOS release flow by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23196](immich-app/immich#23196)
- feat(web): add search filter for camera lens model. by [@&#8203;dagstuan](https://github.com/dagstuan) in [#&#8203;21792](immich-app/immich#21792)
- feat(web): load original videos by [@&#8203;andre-antunesdesa](https://github.com/andre-antunesdesa) in [#&#8203;20041](immich-app/immich#20041)
- feat(cli): add --delete-duplicates option by [@&#8203;RobinJ1995](https://github.com/RobinJ1995) in [#&#8203;20035](immich-app/immich#20035)
- feat: ocr by [@&#8203;flipped-1121](https://github.com/flipped-1121) in [#&#8203;18836](immich-app/immich#18836)
- feat: show "appears in" albums on asset viewer bottom sheet by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;21925](immich-app/immich#21925)
- feat: getAssetOcr endpoint by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23331](immich-app/immich#23331)
- feat(mobile): view similar photos by [@&#8203;vitoksmile](https://github.com/vitoksmile) in [#&#8203;22148](immich-app/immich#22148)
- feat(mobile): chat-style album activities timeline by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23185](immich-app/immich#23185)

##### 🌟 Enhancements

- feat(album): show per-user contributions in shared albums by [@&#8203;Chaoscontrol](https://github.com/Chaoscontrol) in [#&#8203;21740](immich-app/immich#21740)
- feat: add video auto play setting by [@&#8203;Saschl](https://github.com/Saschl) in [#&#8203;20416](immich-app/immich#20416)
- fix(web): improve scrubber behavior on scroll-limited timelines by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;22917](immich-app/immich#22917)
- feat(web): Download links and Obtainium link generator on Utilities page and onboarding by [@&#8203;NicholasFlamy](https://github.com/NicholasFlamy) in [#&#8203;20589](immich-app/immich#20589)
- feat(web): create user as admin by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23026](immich-app/immich#23026)
- chore: rework backup success notification descriptions by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23024](immich-app/immich#23024)
- feat(mobile): Change the UI of asset activity list to bottom sheet by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23075](immich-app/immich#23075)
- feat: improved update messaging on app bar server info by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;22938](immich-app/immich#22938)
- refactor(web): improve date labels in scrubber   by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;23046](immich-app/immich#23046)
- feat: support database dumps for pg18 by [@&#8203;zackpollard](https://github.com/zackpollard) in [#&#8203;23186](immich-app/immich#23186)
- feat: improvements of thumbnail animations by [@&#8203;Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#&#8203;20300](immich-app/immich#20300)
- feat(web): reactively update shared link expiration by [@&#8203;khanbasharat3a1](https://github.com/khanbasharat3a1) in [#&#8203;22274](immich-app/immich#22274)
- feat: (mobile) open asset viewer from album activity page by [@&#8203;idubnori](https://github.com/idubnori) in [#&#8203;23182](immich-app/immich#23182)
- feat(mobile): high precision seeking by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;22346](immich-app/immich#22346)
- feat(web): wasm justified layout, sync edition by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23194](immich-app/immich#23194)
- feat: logout sessions on password change  by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;23188](immich-app/immich#23188)
- feat(server): enhance metadata reading for video files by [@&#8203;tstachl](https://github.com/tstachl) in [#&#8203;23258](immich-app/immich#23258)
- feat: improve UI for resolving duplication detection by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;23145](immich-app/immich#23145)
- feat: toasts by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23298](immich-app/immich#23298)
- feat: asset copy by [@&#8203;danieldietzler](https://github.com/danieldietzler) in [#&#8203;23172](immich-app/immich#23172)

##### 🐛 Bug fixes

- fix(web): prevent photo-only memories showing mute button by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;22802](immich-app/immich#22802)
- fix: get all assets for the Recents album on iOS by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22956](immich-app/immich#22956)
- fix: tag clean up query and add tests by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;22633](immich-app/immich#22633)
- fix: unit overlapses value in server stats card by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22994](immich-app/immich#22994)
- fix: navigate to time action by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;20928](immich-app/immich#20928)
- fix: remove assets from shared link by [@&#8203;MontejoJorge](https://github.com/MontejoJorge) in [#&#8203;22935](immich-app/immich#22935)
- fix(server): only asset owner should see favorite status by [@&#8203;pwojtaszko](https://github.com/pwojtaszko) in [#&#8203;20654](immich-app/immich#20654)
- fix(web): render context overlays over the scrollbar by [@&#8203;PaulSonOfLars](https://github.com/PaulSonOfLars) in [#&#8203;23007](immich-app/immich#23007)
- fix(web): two scrollbars in folder view by [@&#8203;YarosMallorca](https://github.com/YarosMallorca) in [#&#8203;23045](immich-app/immich#23045)
- fix: skip ML availability check if ML is disabled by [@&#8203;bo0tzz](https://github.com/bo0tzz) in [#&#8203;23053](immich-app/immich#23053)
- chore: skip dialog for single merged asset by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;22958](immich-app/immich#22958)
- fix(mobile): notate experimental network features, cleanup mis assigned translation tags by [@&#8203;mmomjian](https://github.com/mmomjian) in [#&#8203;23021](immich-app/immich#23021)
- fix(ml): pin cudnn version by [@&#8203;mertalev](https://github.com/mertalev) in [#&#8203;23110](immich-app/immich#23110)
- fix(server): use GPSLongitudeRef and GPSLatitudeRef EXIF fields by [@&#8203;ruippeixotog](https://github.com/ruippeixotog) in [#&#8203;21445](immich-app/immich#21445)
- fix: allow editing all images by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23144](immich-app/immich#23144)
- fix: isolate freeze app on older ios device by [@&#8203;alextran1502](https://github.com/alextran1502) in [#&#8203;22509](immich-app/immich#22509)
- fix: android skip posting hash response after detached from engine by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23192](immich-app/immich#23192)
- fix: back/forward navigation won't reset scroll in timeline by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;22838](immich-app/immich#22838)
- fix: handle null bucketId or name in android local sync by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23224](immich-app/immich#23224)
- fix: fetch original name before upload by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;21877](immich-app/immich#21877)
- fix: focus-trap on safari by [@&#8203;midzelis](https://github.com/midzelis) in [#&#8203;23246](immich-app/immich#23246)
- fix(web): disable picture-in-picture on video viewer by [@&#8203;tstachl](https://github.com/tstachl) in [#&#8203;23318](immich-app/immich#23318)
- fix: make hitbox on app bar dialog bigger by [@&#8203;bwees](https://github.com/bwees) in [#&#8203;23316](immich-app/immich#23316)
- fix: clear temp cache on iOS before uploads by [@&#8203;shenlong-tanwen](https://github.com/shenlong-tanwen) in [#&#8203;23326](immich-app/immich#23326)

##### 📚 Documentation

- fix(web): clarify some transcoding settings by [@&#8203;meesfrensel](https://github.com/meesfrensel) in [#&#8203;22797](immich-app/immich#22797)
- docs: fix small error by [@&#8203;0xflotus](https://github.com/0xflotus) in [#&#8203;22890](immich-app/immich#22890)
- docs: Expand on OpenVINO WSL HW accel by [@&#8203;Mraedis](https://github.com/Mraedis) in [#&#8203;21054](immich-app/immich#21054)
- docs: clarify well-known usage by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23018](immich-app/immich#23018)
- feat: move community projects and guides to immich-aweseome by [@&#8203;jrasm91](https://github.com/jrasm91) in [#&#8203;23016](immich-app/immich#23016)
- fix(docs): cli upload json format example by [@&#8203;leepeuker](https://github.com/leepeuker) in [#&#8203;22858](immich-app/immich#22858)
- docs: update [backup-and-restore.md](http://backup-and-restore.md) by [@&#8203;nickwebcouk](https://github.com/nickwebcouk) in [#&#8203;21065](immich-app/immich#21065)

#### New Contributors

- [@&#8203;Chaoscontrol](https://github.com/Chaoscontrol) made their first contribution in [#&#8203;21740](immich-app/immich#21740)
- [@&#8203;meesfrensel](https://github.com/meesfrensel) made their first contribution in [#&#8203;22802](immich-app/immich#22802)
- [@&#8203;0xflotus](https://github.com/0xflotus) made their first contribution in [#&#8203;22890](immich-app/immich#22890)
- [@&#8203;clementmartin](https://github.com/clementmartin) made their first contribution in [#&#8203;22833](immich-app/immich#22833)
- [@&#8203;leepeuker](https://github.com/leepeuker) made their first contribution in [#&#8203;22858](immich-app/immich#22858)
- [@&#8203;nickwebcouk](https://github.com/nickwebcouk) made their first contribution in [#&#8203;21065](immich-app/immich#21065)
- [@&#8203;idubnori](https://github.com/idubnori) made their first contribution in [#&#8203;23075](immich-app/immich#23075)
- [@&#8203;ruippeixotog](https://github.com/ruippeixotog) made their first contribution in [#&#8203;21445](immich-app/immich#21445)
- [@&#8203;Nykri](https://github.com/Nykri) made their first contribution in [#&#8203;22888](immich-app/immich#22888)
- [@&#8203;slagiewka](https://github.com/slagiewka) made their first contribution in [#&#8203;23130](immich-app/immich#23130)
- [@&#8203;khanbasharat3a1](https://github.com/khanbasharat3a1) made their first contribution in [#&#8203;22274](immich-app/immich#22274)
- [@&#8203;andre-antunesdesa](https://github.com/andre-antunesdesa) made their first contribution in [#&#8203;20041](immich-app/immich#20041)
- [@&#8203;RobinJ1995](https://github.com/RobinJ1995) made their first contribution in [#&#8203;20035](immich-app/immich#20035)
- [@&#8203;flipped-1121](https://github.com/flipped-1121) made their first contribution in [#&#8203;18836](immich-app/immich#18836)
- [@&#8203;ZacWarham](https://github.com/ZacWarham) made their first contribution in [#&#8203;23275](immich-app/immich#23275)
- [@&#8203;tstachl](https://github.com/tstachl) made their first contribution in [#&#8203;23258](immich-app/immich#23258)

**Full Changelog**: <immich-app/immich@v2.1.0...v2.2.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:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTUuNCIsInVwZGF0ZWRJblZlciI6IjQxLjE1NS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbWFnZSJdfQ==-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/1904
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
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.

7 participants