Releases: immich-app/immich
v2.7.2
You knew it was coming 😅
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
What's Changed
🐛 Bug fixes
- fix: csp quotes by @bo0tzz in #27592
- fix(ml): downgrade numpy by @mertalev in #27591
- fix(server): library import batch size by @mertalev in #27595
Full Changelog: v2.7.0...v2.7.2
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.
Known limitations
- The machine learning service on
amd64currently requires the>= x86-64-v2microarchitecture. 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.arm64is 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.
Move to locked folder in the Folder view
Similarly, the folder view now includes the "Move to locked folder" action.
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.
slice.mp4
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
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.
Helmet configuration
You can now opt in to using a Content Security Policy (CSP) in Immich. The new environment variant IMMICH_HELMET_FILE accepts a boolean or a path to a helmet 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, X-Powered-By, 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 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
If you find the project helpful, you can support Immich by purchasing a product key at https://buy.immich.app or our merchandise at https://immich.store
What's Changed
🚀 Features
- feat: add support for helmet configuration by @jrasm91 in #27058
- feat: create new person in face editor by @alextran1502 in #27364
🌟 Enhancements
- feat(web): add a seperate tooltip for switching from dark to light mode by @Vogeluff in #27297
- feat(web): focus on face-editor search input by @cratoo in #27136
- feat(web): add RemoveFromAlbumAction to asset viewer nav bar by @timonrieger in #27000
- feat(web): add shortcuts to rotate images by @squishykid in #26927
- feat(server): add checksum algorithm field by @etnoy in #26573
- feat(server): resolve duplicates by @Phlogi in #25316
- chore(mobile): reduce spacing on video controls by @uhthomas in #27313
- perf(server): optimize people page query by @ffchung in #27346
- feat(web): dim photo outside hovered face bounding box by @midzelis in #27402
- feat(web): OCR overlay interactivity during zoom by @midzelis in #27039
- feat: add move to lock folder in folder view by @alextran1502 in #27384
- feat(web): highlight active person thumbnail in detail panel and edit faces panel by @midzelis in #27401
- feat: move version checks to our own infrastructure by @zackpollard in #27450
- feat: add preview button when selecting images by @johnmaguire in #27305
- fix: user-agent format by @jrasm91 in #27488
- chore(mobile): reduce buffering timer duration by @uhthomas in #27111
- fix(mobile): use key on video controls by @uhthomas in #27512
- feat(server): Add support for .ts files by @ray in #27529
🐛 Bug fixes
- fix(server): refresh unedited asset dimensions on metadata extraction by @michelheusschen in #27220
- fix(server): memory fragmentation by @mertalev in https://g...
v2.6.3
v2.6.3
What's Changed
🐛 Bug fixes
- fix(mobile): remove upload timeout by @mertalev in #27237
- fix(web): prevent horizontal scroll bar in asset viewer side panel by @michelheusschen in #27270
- fix(web): shifting motion image button by @YarosMallorca in #27275
- chore(docs): withPeople parameter description by @YarosMallorca in #27262
- fix(server): filter out empty search suggestions by @michelheusschen in #27292
- fix: incorrect asset face sync by @bwees in #27243
Full Changelog: v2.6.2...v2.6.3
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
What's Changed
🐛 Bug fixes
- fix(mobile): simplified chinese not available by @YarosMallorca in #27066
- fix(web): allow showing combobox items outside modals by @michelheusschen in #27075
- fix(web): preserve album scroll when adding to other albums by @michelheusschen in #27078
- fix(server): queue version check job when config changed by @uhthomas in #27094
- fix: shared link add to album by @jrasm91 in #27063
- fix: svelte reactivity issues by @danieldietzler in #27109
- fix(mobile): cronet image cache clearing on android by @LeLunZ in #27054
- fix(mobile): view similar photos from search by @YarosMallorca in #27149
- fix(mobile): no results before applying filter by @YarosMallorca in #27155
- fix(mobile): star rating always defaults to 0 by @YarosMallorca in #27157
- fix: download original stale cache when edited by @danieldietzler in #27195
- fix(web): restore duplicate viewer arrow key navigation by @michelheusschen in #27176
- fix(web): update upload summary when removing items (#27035) by @Nicolas-micuda-becker in #27139
- fix(mobile): option padding on search dropdowns by @YarosMallorca in #27154
- fix(mobile): add keys to people list by @YarosMallorca in #27112
- fix(mobile): add cookie for auxiliary url by @mertalev in #27209
- fix: album picker show all albums by @danieldietzler in #27211
- fix(server): album permissions for editors by @YarosMallorca in #27214
- fix(mobile/web): album cover buttons consistency by @YarosMallorca in #27213
📚 Documentation
New Contributors
- @Nicolas-micuda-becker made their first contribution in #27139
Full Changelog: v2.6.1...v2.6.2
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 in #27016
- fix: ignore errors deleting untitled album by @jrasm91 in #27020
- fix(web): wrap long album title by @jrasm91 in #27012
- fix(web): stop in-progress uploads on logout by @jrasm91 in #27021
- fix: writing empty exif tags by @danieldietzler in #27025
- fix(web): disable send button by @jrasm91 in #27051
- fix(mobile): server url migration by @mertalev in #27050
Full Changelog: v2.6.0...v2.6.1
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.

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 newimmich-admincommand- 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.
Pick album cover (mobile)
Users can now pick a new album cover directly from the mobile app.
540300751-58fc1937-aed8-40b8-869c-9cb47c1d40c2.mov
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.
shasre-slug.mp4
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.
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
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
ScreenRecording_03-19-2026_15-37-19_1.mov
After
ScreenRecording_03-19-2026.14-23-44_1.mp4
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.
screen-20260224-231550-1771974915747.2.mp4
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 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
If you find the project helpful, you can support Immich by purchasing a product key at https://buy.immich.app or our merchandise at https://immich.store
What's Changed
🔒 Security
- fix(server): restrict individual shared link asset removal to owners by @michelheusschen in #26868
- fix: add to shared link by @jrasm91 in #26886
🚀 Features
- feat: shared link login by @jrasm91 in #25678
- feat: schema-check by @jrasm91 in #25904
- feat: add people deeplink by @arne182 in #25686
- feat(mobile): inline asset details by @uhthomas in #25952
- feat(mobile): filter by tags by @benjamonnguyen in #26196
- feat: add .mxf file support by @timonrieger in #24644
- feat: tap to see next/previous image by @thezeroalpha in #20286
- feat(mobile): Allow users to set album cover from mobile app by @timonrieger in #25515
- feat(mobile): Allow users to set profile picture from asset viewer by @timonrieger in #25517
- feat: ROCm 7.2 and MIGraphX support by @kprinssu in #26178
- feat(web): map timeline sidepanel by @michelheusschen in #26532
- feat: add responsive layout to broken asset by @midzelis in #26384
- feat(web): toggle zoom on double-click in photo viewer by @midzelis in #26732
- feat(mobile): show animated images in asset viewer by @LeLunZ in #26614
- feat(mobile): open in browser by @YarosMallorca in #26369
🌟 Enhancements
- feat: verify permissions by @jrasm91 in #25647
- feat(web): change link expiration logic & presets by @YarosMallorca in #26064
- feat(mobile): dynamic layout in new timeline by @shenlong-tanwen in #23837
- feat(cli): change progress bar to display file size by @Nykri in #23328
- feat(mobile): dynamic multi-line album name by @uhthomas in #26040
- feat(mobile): hide search by context/OCR if disabled on server (#25472) by @Nacolis in #26063
- fix(release): add docker-compose.rootless.yml to released assets by @dnozay in #26261
- feat(web): show ocr text boxes in panoramas by @meesfrensel in #25727
- feat(web): loop chromecast video by @etnoy in #24410
- chore(web): merge "Add to album" and "Add to shared album" actions into a single action by @timonrieger in #24669
- feat(mobile): timeline - add bottomWidgetBuilder by @PeterOmbodi in #25634
- feat(mobile): video zooming in asset viewer by @goalie2002 in #22036
- feat(mobile): Add slug support for shared links by @Lauritz-Tieste in #26441
- feat: warn when losing transparency during thumbnail generation by @midzelis in #26243
- perf(mobile): optimized album sorting by @YarosMallorca in #25179
- feat(mobile): prompt when deleting from trash by @YarosMallorca in #26392
- feat: getAssetEdits respond with edit IDs by @bwees in #26445
- fix(server): accept showAt and hideAt for creating memories by @meesfrensel in #26429
- feat(server): SyncAssetEditV1 by @bwees in #26446
- feat: splash screen error page by ...
v2.5.6
v2.5.6
This patch release addresses the following issues
- Fixed an issue where thumbnail generation runs every night when
full-size image generationoption is enabled. - Fixed an issue where iOS is slow to start in some cases.
- Fixed an issue where Android device cannot delete asset using Free Up Space feature if it has more than a few thousand assets
🐛 Bug fixes
- fix: enhance album sorting functionality with order handling by @LeLunZ in #24816
- fix: add missing translations for image editor by @michelheusschen in #25957
- fix: image and video download complete notification shows "file_name" by @romoisverycool in #25975
- fix: user profile refetched each time on opening app dialog by @shenlong-tanwen in #25992
- fix: improve albums page load time on firefox by @michelheusschen in #26025
- fix: reduce queue graph jitter and include paused count by @michelheusschen in #26023
- fix(web): toast fixed location by @YarosMallorca in #25966
- fix: scroll jump when opening show & hide people by @michelheusschen in #25932
- fix(web): display storage unit next to value instead of absolute positioning in admin user page by @K0lin in #25985
- fix: iOS slow start by @alextran1502 in #26043
- fix: profile dialog auto dismiss after opening on iPad by @alextran1502 in #26046
- fix(web): prevent context menu from overflowing viewport by @ttpss930141011 in #26041
- fix: slideshow setting dropdown overflow by @michelheusschen in #26066
- fix: free up space using small batch size to reliably work on Android by @alextran1502 in #26047
- fix(web): removing a person in an asset, doesn't remove the asset in … by @dolfje in #26068
- fix(mobile): handle image stream completion when no image is emitted by @LeLunZ in #25984
- fix: evict image from cache on error during image loading by @LeLunZ in #26078
- fix(server): thumbnail queueing by @mertalev in #26077
- fix: create face exif orientation handling by @bwees in #26108
- fix(web): refresh text by @jrasm91 in #26071
- fix: correctly cancel select all assets by @michelheusschen in #26067
- fix: person thumbnail generation on edited assets by @bwees in #26112
- fix: local date time group fall back by @alextran1502 in #26110
📚 Documentation
- feat(docs): version policy by @mmomjian in #25979
- feat(deployment): rootless compose file by @mmomjian in #25931
- docs: update ml-hardware-acceleration.md by @cmrtdev in #25755
🌐 Translations
New Contributors
- @ttpss930141011 made their first contribution in #26041
- @dolfje made their first contribution in #26068
- @cmrtdev made their first contribution in #25755
- @nicosemp made their first contribution in #25599
Full Changelog: v2.5.5...v2.5.6
v2.5.5
v2.5.5
v2.5.4 was in the way of getting out, and we got another annoyance bug fixed, so we rolled it into v2.5.5
Happy Friday! This release addresses more bugs from the v2.5.0 release. Enjoy!
- Fixed an issue where changing the timezone on the web changes the time instead of the timezone
- Fixed an issue where background task on iOS don't get triggered as often
- Fixes some issues regarding the usage of self-signed certificate and mLTS on the mobile app
🐛 Bug fixes
- fix(mobile): cancel share download when dialog is dismissed by @cmdPromptCritical in #25466
- fix: album dto docs by @jrasm91 in #25873
- fix: null validation by @jrasm91 in #25891
- fix(server): deleting stacked assets by @jrasm91 in #25874
- fix: close tag modal after tagging assets by @michelheusschen in #25884
- fix: correctly sync shared link download with metadata toggle by @michelheusschen in #25885
- fix: date time picker text color in dark mode by @alextran1502 in #25883
- fix: allow null tagIds in search dto by @michelheusschen in #25920
- fix: improve asset editor exit handling by @michelheusschen in #25917
- fix: make switch labels properly clickable by @michelheusschen in #25898
- fix: ensure theme stays in sync with @immich/ui by @michelheusschen in #25922
- fix: preserve hidden people state across pagination by @michelheusschen in #25886
- fix: file name search label by @alextran1502 in #25916
- fix(mobile): mtls on native clients by @mertalev in #25802
- fix: time zone upserts by @danieldietzler in #25889
- fix(web): Ensure profile picture is cropped to 1:1 ratio by @aditya-ai-architect in #25892
- fix(mobile): reset asset index on timeline refresh by @uhthomas in #25729
- fix: timezone in timeline bucketing by @shenlong-tanwen in #25894
- fix(mobile): Update preview and PageController position when the asset count decreases while the last item is selected by @PeterOmbodi in #25563
- fix(server): use provided database username for restore & ensure name is not mangled by @insertish in #25679
- fix: image download complete notification shows an extra {file_name} template tag by @romoisverycool in #25936
- fix: face and edit handling by @bwees in #25738
- fix: queue assets missing fullsize files for thumbnail regeneration by @midzelis in #25794
- fix: dedupe version announcement modal by @jrasm91 in #25946
- fix(cli): suppress startup messages for immich-admin by @VahantSharma in #25928
📚 Documentation
- docs: update manual backup/restore to match the automatic process by @insertish in #25924
- fix(docs): add missing --json-output arg to CLI example by @Xiol in #25870
- docs: remove writeTimeout on traefik example by @kaysond in #25837
🌐 Translations
New Contributors
- @aditya-ai-architect made their first contribution in #25892
- @VahantSharma made their first contribution in #25927
- @Xiol made their first contribution in #25870
- @cmdPromptCritical made their first contribution in #25466
- @romoisverycool made their first contribution in #25936
- @didekoning made their first contribution in #25937
Full Changelog: v2.5.3...v2.5.5
v2.5.3
What's Changed
🐛 Bug fixes
- chore: remove random code snippet by @jrasm91 in #25677
- fix: reset and unsaved change states in editor by @bwees in #25588
- fix: no notification if release check is disabled by @jrasm91 in #25688
- fix(mobile): hide latest version if disabled by @uhthomas in #25691
- fix(web): enable asset viewer navigation across memory boundaries by @midzelis in #25741
- fix: upload progress bar flickering by @alextran1502 in #25829
- fix: prevent stale values in edit user form after save by @michelheusschen in #25859
- fix: prevent album page get rebuilt when resuming app by @alextran1502 in #25862
- fix: prevent backspace from accidentally triggering delete modals by @michelheusschen in #25858
- fix: metadata extraction race condition by @danieldietzler in #25866
- fix: reset zoom when navigating between assets by @michelheusschen in #25863
📚 Documentation
- docs(openapi): Add descriptions to OpenAPI specification by @timonrieger in #25185
- fix(docs): clarify supported vector version by @mmomjian in #25753
Full Changelog: v2.5.2...v2.5.3
v2.5.2
v2.5.2
v2.5.1 has been sacrificed for the release God, so the Android app can now be released
Note
This version of the mobile app will pull down some data from the server to fix the incorrect data in the mobile app local database, so you will see the sync icon running for a little bit
Hotfixes
- Fixed a bug where the video aspect ratio is played incorrectly for the remote asset
- Fixed a bug where memory generation failed
- Fixed a bug where memories don't show on the web until the page is refreshed
- Fixed a bug where the
Load original imageoption doesn't render the image on iOS
What's Changed
🐛 Bug fixes
- fix: deleting asset from asset-viewer on search results by @midzelis in #25596
- fix: escape handling in search asset viewer by @danieldietzler in #25621
- fix: correctly show owner in album options modal by @danieldietzler in #25618
- fix(server): don't assume maintenance action is set by @insertish in #25622
- fix: album card ranges by @danieldietzler in #25639
- fix(mobile): show controls by default on motion photos by @goalie2002 in #25638
- fix: escape handling by @danieldietzler in #25627
- fix(mobile): set correct system-ui mode on asset viewer init by @goalie2002 in #25610
- fix(mobile): actually load original image by @mertalev in #25646
- fix: width and height migration issue by @alextran1502 in #25643
- fix: memory lane by @jrasm91 in #25652
- fix: memory generation by @jrasm91 in #25650
- fix(mobile): tall image scrolling by @ByteSizedMarius in #25649
Full Changelog: v2.5.0...v2.5.2
