v1.107.0
v1.107.0
Highlights
Welcome to version v1.107.0
of Immich. This release includes many bug fixes, new translations from many new languages, and enhancements to the recent new features in the last release, as well as a change in the default timeline display on the mobile app. Check out some of the highlights below:
- Enhancement to deduplication UI - bulk resolve duplicates, view duplicates in fullscreen.
- Display all local assets on the mobile timeline by default.
- Custom request headers for the mobile app.
- Facial recognition now recognizes more faces.
Deduplication UI Enhancement
Thank you all for your feedback! The deduplication UI now has two bulk actions that apply to all duplicate groups: deduplicating assets automatically and keeping all duplicates. This makes managing thousands of duplication groups much more efficient.
Additionally, you can now view the duplicates in fullscreen mode, making it easier to decide which asset to keep. We also added the status for favorite photos to the card as well.
Display all local assets on the mobile app timeline
Starting from this release, all local assets will be displayed on the main timeline. This is the first step in refactoring the upload mechanism, simplifying the logic, and introducing similar behaviors to a default gallery app on your phone.
With this change, you can now view, manage, and select a certain group of photos you want to upload to Immich directly from the timeline without the need to select them first on the backup page. The album selection for backup can be used for mass backup selection like before.
Custom request headers for the mobile app

Thanks to @matejkramny, you can now add custom headers to all the requests from the mobile app. This mechanism will help many users who use Cloudflare's Zero Trust Service
You can access this setting from the app Settings > Advanced > Custom proxy headers
Facial recognition enhancement
Due to a change in how recognition data is indexed, facial recognition is now more likely to recognize a face as a particular person. This means more assets will have complete facial recognition and the initial clustering will produce fewer duplicate people. Facial recognition is also faster as part of this change.
Clicking the Missing button for Facial Recognition from the job panel will make this change apply to existing assets. (This is also run periodically, so it will soon take effect even without explicitly running facial recognition.)
What's Changed
🗄️ Server
- fix(server): oauth linking error message by @jrasm91 in #10287
- fix(server): headers already send by @jrasm91 in #10289
- fix(deps): update typescript-projects by @renovate in #10105
- feat: user preferences for archive download size by @danieldietzler in #10296
- fix(deps): update dependency exiftool-vendored to v26.2.0 by @renovate in #10102
- refactor(server): partner ids by @jrasm91 in #10321
- fix(server): include trashed assets in forced thumbnail generation by @michelheusschen in #10389
- fix(server): orientation handling for person thumbnails by @mertalev in #10382
- feat(server): separate face search relation by @mertalev in #10371
- fix(server): include archived assets in forced thumbnail generation by @michelheusschen in #10409
- chore(server): update exiftool and migrate off deprecated method signatures by @stephen304 in #10367
- fix(server): consider all I-frames for video thumbnails by @mertalev in #10471
- fix(server): let thumbnail generation fail on error by @mertalev in #10479
- fix(server): video thumbnail generation failing with single i-frame by @mertalev in #10477
- chore(deps): bump braces from 3.0.2 to 3.0.3 in /server by @dependabot in #10487
- chore(deps): update base-image to v20240618 (major) by @renovate in #10457
- fix(server): library refresh not checking trashed assets by @mertalev in #10495
- fix(server): reindex after changing to a model with a different dimension size by @mertalev in #10496
- fix(server): allow library id to be null in metadata search by @danieldietzler in #10512
- fix(server):
/places
entries sometimes not ordered alphabetically by @mertalev in #10514 - fix(deps): update typescript-projects by @renovate in #10611
- fix(deps): update typescript-projects by @renovate in #10616
- chore(deps): use full semver docker tag for node images by @jrasm91 in #10613
- chore(deps): pin dependencies by @renovate in #10618
- chore(deps): update dependency @types/node to ^20.14.6 by @renovate in #10627
- chore: update docker node alpine versions to 3.20 by @zackpollard in #10621
- chore(deps): update base-image to v20240625 (major) by @renovate in #10620
- chore: bump node docker versions by @zackpollard in #10629
- chore(deps): pin node.js to 0ccc08f by @renovate in #10628
- chore(deps): update dependency typescript to v5.5.2 by @renovate in #10633
- chore: build metadata by @jrasm91 in #10612
- fix(server): user delete with stacked assets by @jrasm91 in #10642
- fix(server): about info version by @michelheusschen in #10659
- fix(server): live photo relation by @jrasm91 in #10637
- refactor(server): event emits by @jrasm91 in #10648
- fix(web): new feature photo by @martabal in #9443
- refactor: move /server-info endpoints to /server by @zackpollard in #10677
- fix: album remove asset bug by @jrasm91 in #10687
- fix(server): show partners assets on timeline without permission by @alextran1502 in #10705
- chore: Lower default duplicate detection distance by @bo0tzz in #10703
- feat(server): user and server license endpoints by @zackpollard in #10682
📱 Mobile
- chore(deps): update dependency flutter to v3.22.2 by @renovate in #10158
- fix(app-bar): remove safe area of the app bar in photos page by @RanKKI in #10340
- fix(mobile): translation for memory title by @RanKKI in #10324
- fix(mobile): search page by @RanKKI in #10385
- fix(mobile): my location button on maps not visible due to bottom padding by @RanKKI in #10384
- fix(mobile): asset description is not shown on the sheet when opened for the first time by @RanKKI in #10377
- fix(mobile): upgrade maplibre_gl package to fix issue with crash in ios7.4 above simulator by @Mujhtech in #10182
- feat(mobile): render assets on device by default by @alextran1502 in #10470
- chore(mobile): remove exclude album mechanism for backup by @alextran1502 in #10552
- fix(mobile): inconsistent thumbnail's label by @RanKKI in #10589
- feat(mobile): add additional request headers by @matejkramny in #10588
- fix(mobile): asset state remain in gallery view after being deleted by @alextran1502 in #10603
- chore(trans): add zh-CN translations for custom proxy headers by @Triple-Z in #10660
- chore(mobile): Revert "remove exclude album mechanism for backup (#10552)" by @alextran1502 in #10686
🖥️ Web
- chore(web): update translations by @weblate in #10285
- chore(web): standardize settings labels by @ben-basten in #10303
- refactor(web): byte unit utils by @danieldietzler in #10332
- feat(web): add cover images to individual shares by @Snowknight26 in #9988
- fix(web): prevent new uploads from temporarily showing in trash by @michelheusschen in #10348
- fix(web): allow sending test email when using config file by @michelheusschen in #10351
- feat(web): full screen view for duplicates by @michelheusschen in #10346
- fix(web): play video muted when blocked by browser by @michelheusschen in #10383
- fix(web): update avatar color immediately by @michelheusschen in #10393
- fix(web): selecting shared link expiration by @michelheusschen in #10437
- fix(web): confirm button is disabled if two dialogs are shown subsequently by @alextran1502 in #10440
- fix(web): Update prompt by @aviv926 in #10237
- feat(web): keyboard accessible context menus by @ben-basten in #10017
- fix(web): comment send button by @waclaw66 in #10453
- feat(web): display original heif images for safari by @mertalev in #10478
- feat(web): bulk deduplicate by @mertalev in #10448
- feat(web): duplicate ui tweaks by @michelheusschen in #10506
- chore(web): context menu improvements by @ben-basten in #10475
- feat(web): Adds sort order from album to shared album. by @erathmus in #10528
- fix(web): six digit year input by @michelheusschen in #10517
- feat(web): translations containing html by @michelheusschen in #10491
- fix(web): missing translations by @michelheusschen in #10504
- fix(web): FormatMessage development keys by @michelheusschen in #10536
- chore(web): update translations by @weblate in #10304
- chore(web): another missing translations by @waclaw66 in #10274
- feat: more languages by @jrasm91 in #10595
- chore(web): update translations by @weblate in #10593
- chore(web): translation finetuning by @waclaw66 in #10601
- chore: merge weblate by @jrasm91 in #10604
- feat(web): link router by @jrasm91 in #10644
- fix(web): match storage_template_migration_job with storage_template_migration by @MiguelDomingues in #10662
- feat(web): show favorite icon in duplicate asset by @Pascal-So in #10688
- feat(web): use websocket to update the feature photo by @martabal in #10683
- fix(web): i18n race condition in load function by @michelheusschen in #10693
- feat(web): add more translations by @michelheusschen in #10700
- fix(web): shared link card by @michelheusschen in #10702
- fix(web): Sort timezones in assets settings by offset by @WazWazTheDeveloper in #10697
- chore(web): update translations by @weblate in #10605
- fix(web): remove black bezels + better integrate ActivityStatus by @pyorot in #10667
- feat(web): html tags inside plural and select messages by @michelheusschen in #10696
- fix(web): suppress album upload notification by @alextran1502 in #10717
- fix(web): activity status padding regression by @alextran1502 in #10734
- chore(web): update translations by @weblate in #10729
- chore(web): update translations by @weblate in #10742
- feat(web): add keyboard shortcuts to duplicates utility by @tastelessjolt in #10736
- fix(web): scroll jank on memories page by @michelheusschen in #10752
🧠 Machine Learning
- chore(deps): update machine-learning by @renovate in #10446
- chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to b17c9b1 by @renovate in #10465
- chore(ml): support python 3.12 by @mertalev in #10481
- fix(ml): limit load retries by @mertalev in #10494
- refactor(ml): model sessions by @mertalev in #10559
- fix(deps): update machine-learning by @renovate in #10610
- chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to 333f759 by @renovate in #10631
⚡ CLI
- chore(deps): update node.js to eb17a08 - autoclosed by @renovate in #10098
- fix(cli): handle patterns correctly on Windows by @fky2015 in #10430
- fix(cli): fix broken --album on Windows. by @fky2015 in #10626
📓 Documentation
- chore: fix typo in jobs-workers.md by @YodaDaCoda in #10302
- chore: update discord links by @danieldietzler in #10301
- fix(doc): literal translation & missing parts by @Rooyca in #10295
- docs: brief instructions to recover from corruption by @mmomjian in #10319
- chore: update Unraid Docker-Compose documentation to reflect missing healthcheck start_interval parameter from Docker Engine v24.0.9. by @flemesre in #10406
- docs: add info about translations and weblate by @jrasm91 in #10591
- docs: add private photos to roadmap by @jrasm91 in #10599
- docs: Add new community guide to access Immich with a custom domain by @ppr88 in #10638
- fix(docs): restart DB backup container by @mmomjian in #10671
- chore(doc): small punctuation fix backup-and-restore.md by @TheDidek in #10704
- docs: blog post July 2024 update by @alextran1502 in #10737
🔨 Maintenance
- chore(deps): bump docker/build-push-action from 5.4.0 to 6.0.0 by @dependabot in #10433
- chore(deps): update dependency exiftool-vendored to v27 by @renovate in #10447
- chore(deps): update typescript-projects by @renovate in #10445
- chore(deps): update prom/prometheus docker digest to 075b1ba by @renovate in #10484
- chore(deps): bump ws and engine.io-client in /e2e by @dependabot in #10488
- chore(deps): bump docker/build-push-action from 6.0.0 to 6.0.1 by @dependabot in #10483
- chore(deps): update dependency eslint-plugin-unicorn to v54 by @renovate in #10486
- fix(deployment): Postgres healthcheck, add username to pg_isready by @mmomjian in #10221
- chore(deps): update redis:6.2-alpine docker digest to 328fe6a by @renovate in #10516
- chore(deps): update docker.io/redis:6.2-alpine docker digest to 328fe6a by @renovate in #10515
- chore(deps): bump docker/build-push-action from 6.0.1 to 6.1.0 by @dependabot in #10522
- chore: use immich.app email for security reports by @jrasm91 in #10594
- chore(deps): update dependency prettier-plugin-svelte to v3.2.5 by @renovate in #10623
- chore(deps): update terraform cloudflare to v4.35.0 by @renovate in #10420
- chore: add renovate makefile command for testing renovate changes by @zackpollard in #10630
- chore: better auto labels by @jrasm91 in #10632
- chore(deps): update dependency @types/node to ^20.14.7 by @renovate in #10635
- chore(deps): update grafana/grafana docker tag to v11.1.0 by @renovate in #10679
- chore(deps): update terraform cloudflare to v4.36.0 by @renovate in #10718
- chore(deps): bump docker/build-push-action from 6.1.0 to 6.2.0 by @dependabot in #10655
- chore(deps): update node by @renovate in #10741
- fix(deps): update typescript-projects by @renovate in #10744
- chore(deps): update docker/build-push-action action to v6.2.0 by @renovate in #10745
Other changes
- chore(docs): update Korean README by @bunubbv in #10462
- ci: use .nvmrc for node-setup node-version in github actions by @zackpollard in #10619
- ci: group docker node and npm node updates together by @zackpollard in #10625
- chore(deps): upgrade @testing-library/svelte by @benmccann in #10690
- docs: sync Chinese README with the official English version by @indam in #10724
- docs: Translations update by @alextran1502 in #10730
New Contributors
- @YodaDaCoda made their first contribution in #10302
- @Rooyca made their first contribution in #10295
- @RanKKI made their first contribution in #10340
- @flemesre made their first contribution in #10406
- @Mujhtech made their first contribution in #10182
- @erathmus made their first contribution in #10528
- @fky2015 made their first contribution in #10430
- @ppr88 made their first contribution in #10638
- @matejkramny made their first contribution in #10588
- @Triple-Z made their first contribution in #10660
- @MiguelDomingues made their first contribution in #10662
- @Pascal-So made their first contribution in #10688
- @TheDidek made their first contribution in #10704
- @WazWazTheDeveloper made their first contribution in #10697
- @pyorot made their first contribution in #10667
- @tastelessjolt made their first contribution in #10736
Full Changelog: v1.106.4...v1.107.0