Category: immich
-

Highlights
Welcome to version
v2.2.0of 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
v2versions - 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


- New mutable Docker tag for
-
Highlights
This release contains mostly bug fixes, with a few minor enhancements. Here are some of the highlights:
- Improved slideshow shuffle order (web)
- Edit seconds and milliseconds (web)
- Upload to stack (web)
- Local album event notifications (web)
- Notable fix: mobile search page scrolls back to the top
As always, this release also contains the latest translations.

-
I have a large collection of photos and videos approximately 255.000.

I set the following datasets for immich configuration and then installed the app. external-library is the mountpoint of a folder of my pool that contains many nested folders with photos. I use TrueNAS 25.10 RC1 and immich v2.0.1 stable.

Thumbnail generation is never complete and crashes the app leading to a loop of continuous restarts. Then immich becomes not accessible from the browser.
I then tried to use docker compose to set an immich container that would be presumably more stable. Unfortunately I have the same issue…
Immich server log output in Portainer:
[Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/version-history, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/features, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/theme, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/config, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/statistics, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/media-types, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/license, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/license, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/license, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/server/version-check, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] SessionController {/api/sessions}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions/:id, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions/:id, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sessions/:id/lock, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] SharedLinkController {/api/shared-links}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/me, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, PATCH} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id/assets, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id/assets, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] StackController {/api/stacks}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/stacks/:id/assets/:assetId, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] SyncController {/api/sync}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/full-sync, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/delta-sync, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/stream, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/ack, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/ack, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/sync/ack, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] SystemConfigController {/api/system-config}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-config, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-config/defaults, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-config, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-config/storage-template-options, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] SystemMetadataController {/api/system-metadata}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-metadata/admin-onboarding, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-metadata/admin-onboarding, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-metadata/reverse-geocoding-state, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/system-metadata/version-check-state, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] TagController {/api/tags}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/assets, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/:id, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/:id, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/:id, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/:id/assets, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/tags/:id/assets, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] TimelineController {/api/timeline}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/timeline/buckets, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/timeline/bucket, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] TrashController {/api/trash}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/trash/empty, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/trash/restore, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/trash/restore/assets, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] UserAdminController {/api/admin/users}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/statistics, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/preferences, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/preferences, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/restore, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] UserController {/api/users}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/preferences, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/preferences, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/license, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/license, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/license, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, PUT} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/:id, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/profile-image, POST} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/profile-image, DELETE} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/users/:id/profile-image, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RoutesResolver] ViewController {/api/view}: [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/view/folder/unique-paths, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:RouterExplorer] Mapped {/api/view/folder, GET} route [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:NestApplication] Nest application successfully started [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:Bootstrap] Immich Server is listening on http://[::1]:2283 [v2.0.1] [production] [Nest] 35 - 10/08/2025, 1:02:37 PM LOG [Api:MachineLearningRepository] Machine learning server became healthy (http://immich-machine-learning:3003). -
First time immich becomes stable.








