Releases: immich-app/immich
v1.95.1
v1.95.1
Hotfixes
- fixed search result not return correctly with the combination of not in album filter and context search
- fixed search results return archived assets by default
- fixed flashing issue in memory view on the mobile app
- fixed presenting add to album modal removes the browser's scroll ability
Include the release note from v1.95.0
below for your convenience.
v1.95.0
Warning
⚠️ Breaking Changes ⚠️
1. Upgrade pgvecto.rs
to stable version 0.2.0
for enhanced search
Step 1: Change the docker-compose.yml
database image from 0.1.11
to 0.2.0
[...]
database:
container_name: immich_postgres
- image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
+ image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
[...]
Step 2: Perform docker compose pull
Step 3:
a) If Immich is a Postgres superuser (default)
Bring the stack up with docker compose up
When the server starts up, it will log a message like this:
WARN [DatabaseService] Could not run vector reindexing checks. If the extension was updated, please restart the Postgres instance.
This is normal. Continue to Step 4.
b) If Immich is not a Postgres superuser
If Immich doesn't have superuser permissions, you'll need to bring up the database and run a few commands manually:
BEGIN;
CREATE SCHEMA IF NOT EXISTS vectors;
ALTER DATABASE immich SET search_path TO "$user", public, vectors;
SET search_path TO "$user", public, vectors;
UPDATE pg_catalog.pg_extension SET extversion = '0.1.11' WHERE extname = 'vectors';
UPDATE pg_catalog.pg_extension SET extrelocatable = true WHERE extname = 'vectors';
ALTER EXTENSION vectors SET SCHEMA vectors;
UPDATE pg_catalog.pg_extension SET extrelocatable = false WHERE extname = 'vectors';
ALTER EXTENSION vectors UPDATE TO '0.2.0';
SELECT pgvectors_upgrade();
COMMIT;
Step 4: Terminate and restart the stack
Bring the stack down (or terminate with ctrl + c
) with:
docker compose down
Then bring it back up:
docker compose up
You'll run into a message saying:
[DatabaseRepository] Could not reindex index face_index. Attempting to auto-fix.
This is normal. The server will do some magic and start to work.
Step 5: Enjoy the new ✨search enhancements✨
2. OAuth encryption algorithm setting changes
OAuth setups using HS256
(mainly Authentik) will need to either (1) update the signing algorithm in Immich or (2) specify a signing key in the provider settings (so that it uses RS256
instead).
Specify a signing key in Authentik:
Screencast.from.02-02-2024.12.05.04.AM.webm
New Immich OAuth Setting
Background
RS256
is generally better than HS256
. RS256
is pretty much the most commonly used algorithm. The client library we use for open-id defaults to RS256
. It's very easy to setup Authentik without specifying a signing key, which will default to use HS256
. The original implementation added a hack/fallback to HS256
in some conditions to try to handle that situation. The current code removes the fallback, and adds a specific Signing Algortithm
setting which can be explicitly set. Alternatively, the issue could be fixed by specifying a signing key in Authentik.
References:
Highlights
Welcome to version v1.95.0
of Immich. This is one of the longest stretches since the last release of Immich for the past year, we only had 150+ PRs merged since the last release. There are many new improvements and features in this release that we are very excited to introduce to you.
- (Web) Search enhancement - Introduced filter to incorporate advanced search.
- (Web) Improve user experience in search view - Infinite scrolling and justified layout in search result view.
- (Web) Show partner's photos and videos on the map - Option to show shared partners assets on the map
- (Mobile) Playing video in Memory view - Videos now auto play while viewing memories on the mobile app.
- (Mobile) Gradient placeholder - A much more pleasant placeholder while scrolling through your timeline.
- (Mobile) iOS background backup on WIFI option - The iOS mobile app can restrict your backups to only work while on WIFI.
- Notable fix: Issue with unresponsive swiping in gallery view fixed on iOS.
Enhanced search feature
This feature is available on the Web only as of this release
This release adds a highly anticipated feature - advanced search with filters by date, location and more. What's more is that these filters are also compatible with smart search, so you can add text to sort by relevance at the same time.
Results are also no longer capped at 100 - scrolling down will fetch more and more assets.
pgvector
compatibility
As part of the upgrade to pgvecto.rs 0.2, we've also added pgvector support for environments where pgvecto.rs can't be used. Adding DB_VECTOR_EXTENSION=pgvector
to the .env
file will use pgvector instead (assuming your Postgres instance has pgvector installed). We'd like to give a special shoutout to the pgvecto.rs team for adding a compatibility mode that makes it easier for us to support both extensions.
Please note that the extension cannot be changed after a successful startup (i.e., migrations have run). This means you can't switch to pgvector from an existing instance with pgvecto.rs. It must be a new instance or an instance coming from 1.90.2 or older. Additionally, some features may not work quite as well with pgvector.
If you're upgrading from an old version of Immich, the migrations will take some time - don't worry if the server doesn't start up immediately.
Show partner's photos and videos on the map
This feature is available on the Web only as of this release
You can now toggle the option to include partners' assets on the map view.
Gradient placeholder on the mobile app
iOS background backup on WIFI option
You can now toggle this option only to allow background backup while the device is connected to the WIFI network.
External library import path validation
Several users struggle with getting import paths correct with external libraries. This version adds several checks and validations so that the user gets feedback on what went wrong.
CLI release
New CLI version 2.0.8. This version supports running inside Docker without needing Node.js installed, which helps on some platforms. Under the hood, it has been migrated to the new API version, uses vitest
instead of jest
, and has seen several improvements and bug fixes.
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🗄️ Server
- fix(server): quote database name in migration by @mertalev in #7277
- fix(server): not in album filter with context search by @alextran1502 in #7275
- fix(server): don't return archived assets by default by @mertalev in #7278
📱 Mobile
- fix(mobile): Uses immich thumbnail for background of memory picture by @martyfuhry in #7254
🖥️ Web
- fix(web): presenting modal removes the browser's scroll ability by @alextran1502 in #7257
Full Changelog: https://github.com/immich-app/immich/compare/v1.95.0...
v1.95.0
v1.95.0
Warning
⚠️ Breaking Changes ⚠️
1. Upgrade pgvecto.rs
to stable version 0.2.0
for enhanced search
Step 1: Change the docker-compose.yml
database image from 0.1.11
to 0.2.0
[...]
database:
container_name: immich_postgres
- image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
+ image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
[...]
Step 2: Perform docker compose pull
Step 3:
a) If Immich is a Postgres superuser (default)
Bring the stack up with docker compose up
When the server starts up, it will log a message like this:
WARN [DatabaseService] Could not run vector reindexing checks. If the extension was updated, please restart the Postgres instance.
This is normal. Continue to Step 4.
b) If Immich is not a Postgres superuser
If Immich doesn't have superuser permissions, you'll need to bring up the database and run a few commands manually:
BEGIN;
CREATE SCHEMA IF NOT EXISTS vectors;
ALTER DATABASE immich SET search_path TO "$user", public, vectors;
SET search_path TO "$user", public, vectors;
UPDATE pg_catalog.pg_extension SET extversion = '0.1.11' WHERE extname = 'vectors';
UPDATE pg_catalog.pg_extension SET extrelocatable = true WHERE extname = 'vectors';
ALTER EXTENSION vectors SET SCHEMA vectors;
UPDATE pg_catalog.pg_extension SET extrelocatable = false WHERE extname = 'vectors';
ALTER EXTENSION vectors UPDATE TO '0.2.0';
SELECT pgvectors_upgrade();
COMMIT;
Step 4: Terminate and restart the stack
Bring the stack down (or terminate with ctrl + c
) with:
docker compose down
Then bring it back up:
docker compose up
You'll run into a message saying:
[DatabaseRepository] Could not reindex index face_index. Attempting to auto-fix.
This is normal. The server will do some magic and start to work.
Step 5: Enjoy the new ✨search enhancements✨
2. OAuth encryption algorithm setting changes
OAuth setups using HS256
(mainly Authentik) will need to either (1) update the signing algorithm in Immich or (2) specify a signing key in the provider settings (so that it uses RS256
instead).
Specify a signing key in Authentik:
Screencast.from.02-02-2024.12.05.04.AM.webm
New Immich OAuth Setting
Background
RS256
is generally better than HS256
. RS256
is pretty much the most commonly used algorithm. The client library we use for open-id defaults to RS256
. It's very easy to setup Authentik without specifying a signing key, which will default to use HS256
. The original implementation added a hack/fallback to HS256
in some conditions to try to handle that situation. The current code removes the fallback, and adds a specific Signing Algortithm
setting which can be explicitly set. Alternatively, the issue could be fixed by specifying a signing key in Authentik.
References:
Highlights
Welcome to version v1.95.0
of Immich. This is one of the longest stretches since the last release of Immich for the past year, we only had 150+ PRs merged since the last release. There are many new improvements and features in this release that we are very excited to introduce to you.
- (Web) Search enhancement - Introduced filter to incorporate advanced search.
- (Web) Improve user experience in search view - Infinite scrolling and justified layout in search result view.
- (Web) Show partner's photos and videos on the map - Option to show shared partners assets on the map
- (Mobile) Playing video in Memory view - Videos now auto play while viewing memories on the mobile app.
- (Mobile) Gradient placeholder - A much more pleasant placeholder while scrolling through your timeline.
- (Mobile) iOS background backup on WIFI option - The iOS mobile app can restrict your backups to only work while on WIFI.
- Notable fix: Issue with unresponsive swiping in gallery view fixed on iOS.
Enhanced search feature
This feature is available on the Web only as of this release
This release adds a highly anticipated feature - advanced search with filters by date, location and more. What's more is that these filters are also compatible with smart search, so you can add text to sort by relevance at the same time.
Results are also no longer capped at 100 - scrolling down will fetch more and more assets.
pgvector
compatibility
As part of the upgrade to pgvecto.rs 0.2, we've also added pgvector support for environments where pgvecto.rs can't be used. Adding DB_VECTOR_EXTENSION=pgvector
to the .env
file will use pgvector instead (assuming your Postgres instance has pgvector installed). We'd like to give a special shoutout to the pgvecto.rs team for adding a compatibility mode that makes it easier for us to support both extensions.
Please note that the extension cannot be changed after a successful startup (i.e., migrations have run). This means you can't switch to pgvector from an existing instance with pgvecto.rs. It must be a new instance or an instance coming from 1.90.2 or older. Additionally, some features may not work quite as well with pgvector.
If you're upgrading from an old version of Immich, the migrations will take some time - don't worry if the server doesn't start up immediately.
Show partner's photos and videos on the map
This feature is available on the Web only as of this release
You can now toggle the option to include partners' assets on the map view.
Gradient placeholder on the mobile app
iOS background backup on WIFI option
You can now toggle this option only to allow background backup while the device is connected to the WIFI network.
External library import path validation
Several users struggle with getting import paths correct with external libraries. This version adds several checks and validations so that the user gets feedback on what went wrong.
CLI release
New CLI version 2.0.8. This version supports running inside Docker without needing Node.js installed, which helps on some platforms. Under the hood, it has been migrated to the new API version, uses vitest
instead of jest
, and has seen several improvements and bug fixes.
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
⚠️ Breaking Changes
- feat(server)!: oauth encryption algorithm setting by @danieldietzler in #6818
- feat(server)!: pgvecto.rs 0.2 and pgvector compatibility by @mertalev in #6785
🗄️ Server
- fix(server): extract duration from video as ISO time by @alextran1502 in #6863
- chore(server): Use ChunkedSet in Access repository by @adamantike in #6943
- feat(server): optimize face re-queueing by @mertalev in #6961
- fix(server): check if sidecarPath exists by @JW-CH in #6293
- fix(server): use luxon for deleted date calculation by @manasadepu in #6958
- feat(server): server-side checking of duplicate import paths and exclusion patterns by @etnoy in #6993
- feat(server): restore modified at timestamp after upload, preserve when copying by @jextrevor in #7010
- feat(server, web): smart search filtering and pagination by @mertalev in #6525
- refa...
v1.94.1
v1.94.1
Hotfixes
- Fixed the issue that cannot log in with the OAuth button on the web
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🖥️ Web
🔨 Maintenance
Full Changelog: https://github.com/immich-app/immich/compare/v1.94.0...
v1.94.0
1.94.0
Breaking Changes ⚠️
- The mobile app will no be longer compatible with server version <
v1.92
starting from this version. Please make sure to have your server and mobile app on the same version to work correctly. docker-compose.yml
content change for hardware acceleration to incorporate hardware acceleration for machine learning- The following asset endpoints have been deprecated and will be removed in a future release
GET /asset/assetById/:id
POST /asset/download/info
POST /asset/download/archive
POST /asset/download/:id
POST /asset/restore
POST /asset/trash/empty
POST /asset/trash/restore
- WebSocket connections no longer use "polling". If you see a disconnected status in the web, make sure your reverse proxy allows websockets.
Highlights
Welcome to release v1.94.0
of Immich. This release is packed with bug fixes, quality-of-life improvements, and preparation for migrating to a new search experience. Please find some of the highlights of this release below, and we hope you like it!
- Automatically update the external libraries when the filesystem changes (experimental)
- Hardware acceleration for machine learning is now supported for ARM NN, CUDA, and OpenVINO.
- Search for people on the people page.
- Additional video transcoding options for audio and video codecs.
- New combobox component for selecting asset’s timezone on the web.
- Notable fix: Motion Photo on Samsung is now fixed. Re-run metadata extraction to detect and automatically fix affected files.
- Notable fix: The blurry memory photo on the mobile app is now fixed.
Automatic library watching (experimental)
External libraries can now automatically import changed files without a full rescan. It will import the file whenever the operating system reports a file change. If your photos are mounted over the network, this does not work, but there is an option to enable polling. Beware, however, that polling can cause high CPU consumption.
You can enable this feature in the Administration page > Settings > Library
Library watching is considered experimental at this stage and is disabled by default. Please report how this feature works for you, especially if you have large external libraries.
Sneak peak
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
⚠️ Breaking Changes
- chore(server): remove old device id endpoint by @jrasm91 in #6578
- feat(ml)!: cuda and openvino acceleration by @mertalev in #5619
🗄️ Server
- fix(server): use crf-based two pass for vp9 if max bitrate is disabled by @mertalev in #6535
- fix(server): disable sharp file caching by @mertalev in #6542
- fix(server): only calculate quota usage for internal assets by @danieldietzler in #6556
- chore(server): sort open api params by @jrasm91 in #6484
- fix(server): extraction of Samsung Motionphoto videos by @kaysond in #6337
- chore(server): remove unused dependency by @jrasm91 in #6606
- refactor(server): e2e by @jrasm91 in #6632
- feat(server): optimize partial facial recognition by @mertalev in #6634
- feat(server): sql access checks by @jrasm91 in #6635
- refactor(server): move asset detail endpoint to new controller by @jrasm91 in #6636
- chore: fix typo in
generate-open-api.sh
by @benmccann in #6648 - chore: remove no-op patch by @benmccann in #6649
- refactor(server): download endpoints by @jrasm91 in #6653
- refactor(server): trash endpoints by @jrasm91 in #6652
- feat(server, web): accepted codecs by @Hely0n in #6460
- chore: remove unused test util methods by @benmccann in #6689
- refactor: move asset stacks to their own entity by @zackpollard in #6353
- chore(server): use fs readsync instead of js import for reading package.json by @danieldietzler in #6692
- feat(web,server): search people by @martabal in #5703
- fix(server): fix person pagination when deleting by @mertalev in #6707
- fix(server): do not process faces of deleted assets by @mertalev in #6710
- fix(server): HEVC videos not playing on Apple devices by @mertalev in #6712
- refactor: rename clip -> smart search by @mertalev in #6713
- refactor: no experimental vm modules by @jrasm91 in #6719
- added a configuration option to select the dri node in transcoding by @t4keda in #6376
- fix(server): avoid leaking people data on shared links by @martabal in #6779
- feat(server, web): Added TranscodePolicy "Bitrate higher than max bitrate or not in accepted format" by @Hely0n in #6479
- feat(server): Automatic watching of library folders by @etnoy in #6192
- fix: library watching by @jrasm91 in #6802
📱 Mobile
- feat(mobile): Add Slovenian by @alextran1502 in #6558
- fix(mobile): es-US pluralization by @shenlong-tanwen in #6612
- fix(mobile): skip tests using mock http client to make actual network request by @alextran1502 in #6642
- deps(mobile): flutter 3.16 by @shenlong-tanwen in #6677
- Update fr-FR.json by @axgdcode in #6633
- fix(mobile): Fix single element archiving by @l0nax in #6668
- fix(mobile): blurry memory photos by @alextran1502 in #6734
- fix(mobile): FR translation by @alextran1502 in #6771
- chore(mobile): Corrects FVM gitignore and sets Flutter version to 3.16.9 by @martyfuhry in #6775
- Localizely: Translations update by @alextran1502 in #6772
- feat(mobile): Add end page to the end to memories by @martyfuhry in #6780
🖥️ Web
- chore: svelte-kit-2 by @jrasm91 in #6103
- feat(web) dismiss user management modals on escape by @Funk66 in #6530
- refactor(web): descriptions by @martabal in #6517
- fix(web): auto generate open api build by @jrasm91 in #6561
- fix(web): always use websocket transport by @jrasm91 in #6564
- fix(web): revert descriptions by @martabal in #6582
- fix(web): statusbox re-rendering and nav bar when trashing assets by @martabal in #6581
- fix(web): merging people when renaming by @martabal in #6608
- feat(web): include timestamp in download filename by @MohamedFBoussaid in #5878
- fix(web): feature photo not changing in the edit name component by @martabal in #6663
- feat(web): Add places exploration page by @l0nax in #6669
- feat(wip): add Combobox component for timezone picker by @m1yon in #6154
- feat(web): add warning when setting a quota superior to the disk size by @martabal in #6737
🧠 Machine Learning
- fix(ml): error logging by @mertalev in #6646
- fix(ml): handle missing
context_length
field by @mertalev in https://github.com/immich-app/imm...
v1.93.3
Hotfixes
- Small fixes for the web
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🖥️ Web
- fix(web): delete user by @martabal in #6514
- fix(web): album description by @martabal in #6512
- fix(web): better button placement within the user management table by @Funk66 in #6520
- fix(web): Use correct unit for user quota by @Mortein in #6518
Full Changelog: v1.93.2...v1.93.3
v1.93.2
v1.93.2
Hotfixes
- Fixed toggle button doesn't work in some settings forms
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🗄️ Server
📱 Mobile
- fix(mobile): stack button not in bottom app bar by @shenlong-tanwen in #6497
🖥️ Web
- revert smart merge by @alextran1502 in #6504
- fix(web): user list when sharing an album by @martabal in #6500
- fix(web): better invite shared user to album layout by @alextran1502 in #6511
🔨 Build
Full Changelog: https://github.com/immich-app/immich/compare/v1.93.1...
v1.93.1
v1.93.1
There is no mobile release for this version
Hot fixes
- Fixed an issue with the toggle slider doesn't have any information/label on the web
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🖥️ Web
- fix(web): prevent layout change from scrollbar in admin settings by @mertalev in #6482
- fix(web): slider by @jrasm91 in #6485
Full Changelog: https://github.com/immich-app/immich/compare/v1.93.0...
v1.93.0
v1.93.0
Announcement 📢
We are running a logo design contest for Immich; please visit the discussion thread and express your ideas if you have any. The contest will close on March 4th
Highlights
Welcome to release v1.93.0
of Immich. There are many updates in this version that we hope you'll like. Some of the key highlights include:
- Improved face grouping for facial detection - switch to DBSCAN clustering algorithm.
- New usage quota mechanism for users - specify the maximum storage each user can use on the server.
- Improve the deletion actions on the mobile app - Present explicit options to clear up confusion about each action.
- Faster map rendering on the mobile app
- Force deletion with
Shift + Del
on the web app - Notable fix: The web can now show assets with a date in the future.
New face clustering algorithm
To improve the accuracy of grouping faces, Immich is now using a more advanced clustering algorithm for facial recognition called DBSCAN. This algorithm introduces a concept of density, making facial recognition more precise. To better understand DBSCAN's work, please watch this video for a step-by-step visualization.
In addition to better facial recognition, a feature of this change is the ability to re-run facial recognition without re-processing each asset. This is because the Recognize Faces job has been split into two jobs: Face Detection and Facial Recognition, with only Face Detection processing images with machine learning models. Re-running Facial Recognition (say, after changing facial recognition settings) is much quicker as a result.
Usage quota
You can now specify the storage quota for the user as the instance’s admin; once the limit is reached, the user won’t be able to upload to the instance anymore.
Deletion actions on the mobile app
To increase the wife-approval-factor aspect of Immich, we always try to improve the UI/UX, and make the application simpler for non-tech-savvy users. To make the delete action easier to understand, we now have three separate buttons to handle different scenarios that can happen, which are presented in the table below.
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
🗄️ Server
- refactor(server): domain and infra modules by @jrasm91 in #6301
- refactor(server): split api and jobs into separate e2e suites by @jrasm91 in #6307
- fix(server): exif gps decoding by @waclaw66 in #6138
- refactor: open api by @jrasm91 in #6334
- feat(server): track metadata extracted at by @jrasm91 in #6352
- feat(server, web): quotas by @cfitzw in #4471
- fix(server): extract image description by @tlvince in #6344
- fix(server): add filename search by @sushain97 in #6394
- fix: enable/disable password login on truenas by @jrasm91 in #6433
- fix(server): handle 5 digit years by @jrasm91 in #6457
- fix(server): set log level of immich-admin process in boostrap function by @alextran1502 in #6458
- feat(server, web): smart merge by @martabal in #5796
- feat(server): provide the ability to search archived photos by @stevenwcarter in #6332
- fix(server): scale transcoded videos if dimensions are odd by @mertalev in #6461
- feat(format): hif format by @haossu in #6477
📱 Mobile
- fix(mobile): ensure notifier is mounted before updating state by @shenlong-tanwen in #6308
- fix(mobile): copy shared link by @shenlong-tanwen in #6310
- feat(mobile): Adds GPS locator to map prompt for easy geolocation by @sirebellum in #6282
- chore(dep): remove unused badges dep by @shenlong-tanwen in #6384
- feat(mobile): Focus search on doubletap nav button by @justinvdk in #6048
- refactor(mobile): maplibre by @shenlong-tanwen in #6087
- chore(dep): update auto_route by @shenlong-tanwen in #6390
- fix(mobile): null check on null value on top app bar by @alextran1502 in #6406
- feat(mobile): quota by @alextran1502 in #6409
- feat(mobile): separate delete buttons by @shenlong-tanwen in #4505
- fix(mobile): add to album - list thumbnails by @waclaw66 in #6444
- fix(mobile): asset state when delete from trash by @shenlong-tanwen in #6476
- feat(mobile): long-press delete button to permanently delete asset by @shenlong-tanwen in #6240
🖥️ Web
- fix(web): grid on people page by @martabal in #5640
- fix(web): handle trailing slash in external domain by @danieldietzler in #6253
- fix(web): logout and clear user store when using back button on the change password form by @alextran1502 in #6288
- fix(web): auto-expand multi-line asset descriptions by @martabal in #6305
- fix(web): copy shared link by @jrasm91 in #6309
- refactor(web): admin settings by @danieldietzler in #6177
- fix(web): OAuth settings nits by @bo0tzz in #6330
- fix(web): Uses asset exif info for desc in asset viewer by @sellnat77 in #4249
- fix(web): wrap long word in description by @alextran1502 in #6351
- fix(web): quota usage view by @danieldietzler in #6358
- chore(web): quota enhancement by @alextran1502 in #6371
- Move 'Add' button on album user invite to the same row as 'To' List by @A-wels in #6447
- feat(web): force delete with shift key by @martabal in #6239
- fix(web): trash or delete by @martabal in #6475
🧠 Machine Learning
- feat(ml): ARMNN acceleration by @fyfrey in #5667
- fix(ml): remove unused import by @mertalev in #6356
- feat(server): separate face clustering job by @mertalev in #5598
⚡ CLI
- fix(cli): uploadCounters increase only when files are uploaded by @AngelPone in #6357
📓 Documentation
- docs: update Chinese README by @indam in #6245
- fix(docs): Use absolute path for external library guide by @bo0tzz in #6290
- Clarify offline asset deletion process by @gtsteffaniak in #6333
- Edit and update of FAQ+new database GUI guide by @aviv926 in #5958
- fix(docs) Fix relative paths leading to broken links by @thariq-shanavas in #6354
- fix(docs) Fix command name by @Funk66 in #6368
- docs: fix pgAdmin links by @jrasm91 in https://github.com/immich-app/immich/pull/...
v1.92.1
v1.92.1
There is no mobile release for this version
Hotfixes
- Not showing onboarding if the instance uses the config file
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
Server
- feat(server): disable onboarding when config file is set by @danieldietzler in #6256
Full Changelog: https://github.com/immich-app/immich/compare/v1.92.0...
v1.92.0
v1.92.0
Highlights
Welcome to the first Immich release of 2024, v1.92.0
. This release is packed with features, bug fixes, and improvements. Let’s dive into some of the highlights of this release.
- [BREAKING CHANGE] The welcome message for your instance is now moved to the Server Setting in the Settings section in the Administration page on the web
- Hardening storage template move operation: verify files are copied correctly when operating across filesystem boundaries
- External domain setting: allow the usage of a different domain for shared links
- Native hash calculation on iOS: significantly speeds up the initial hash calculation
- Introduce Onboarding flow for new instances: Show the admin common settings of the instance for a better user experience.
- CLI version 2.0.6 was released on npm: https://www.npmjs.com/package/@immich/cli
- Search is now working across the partner’s assets.
Hardening storage template
We have further hardened the storage template move mechanism to not leave any files in the upload
folder behind. Making the job concurrency a fixed number and performing database lock between the move jobs will resolve some outstanding issues and stabilize this core feature.
For new instances, the storage template mechanism is now disabled by default (existing instances won’t be affected). This means files uploaded to the server will be stored in the upload
folder and not moved to the library
folder. To provide a nice user experience, we added the onboarding feature, as seen below, to inform users that the storage template is disabled by default, and they can enable it before uploading any photos or videos to the instance to avoid confusion.
onboarding.mov
This is also the continued effort to add support for other storage backends, such as Amazon S3 or Backblaze B2, in the future.
External domain setting
Add the option to set the instance's "external domain" when constructing the shared link URL to copy to the clipboard.
Admin Settings
Shared Links
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
Changelogs
Breaking Changes 🛠
Server
- fix(server, web): Prevent the user from setting a future date of birth by @MohamedFBoussaid in #5803
- fix(server): remove shared link with removed asset by @martabal in #5845
- feat(server,ml): remove image tagging by @mertalev in #5903
- chore(dev): move envs to image by @mertalev in #5906
- fix(server): run migrations after database checks by @mertalev in #5832
- fix(server): access system config before database migration complete by @alextran1502 in #5912
- fix(server): library scanning by @danieldietzler in #5951
- fix(server): strip metadata from thumbnails by @uhthomas in #4438
- chore(server): refactor locks by @mertalev in #5953
- feat(server): delete unnecessary encoded videos by @mertalev in #6027
- fix(server): Reduce the number of bound parameters in Access queries by @adamantike in #6015
- feat: storage template file move hardening by @zackpollard in #5917
- feat: storage template locking + fix for database locks by @zackpollard in #6054
- fix(server): remove archived people from explore by @martabal in #6091
- chore(server): refactor config init process by @jrasm91 in #5702
- sanitize storagelabel when creating a user #3346 by @JW-CH in #5717
- feat(server): Enqueue jobs in bulk by @adamantike in #5974
- feat(server): search across own+partner assets by @fyfrey in #5966
- feat(web,server): external domain setting by @jrasm91 in #6146
- chore(server): time bucket sql by @jrasm91 in #6156
- feat(server): add env for reverse geocoding path by @martabal in #6163
- chore(server): Clearer error message for machine learning failed request by @alextran1502 in #5914
- feat(server): in upload folder, split the files into folders based on the first four of the files uuid by @zackpollard in #6175
- fix(server): Fix incorrect sorting with search by @l0nax in #6031
- fix(server): Execute query in AlbumRepository.removeAsset method by @adamantike in #6216
- chore(server): set onboarding for existing instances by @alextran1502 in #6229
- feat(server): add rw2 support by @mertalev in #6231
- feat(server): add postgres major version check by @maxer137 in #6213
- fix(server): Split database queries based on PostgreSQL bound params limit by @adamantike in #6034
- test: small improvements to database init tests by @zackpollard in #6232
Mobile
- Localizely: Translations update by @alextran1502 in #5867
- Revert "chore(mobile): translation update (#5867)" by @alextran1502 in #5871
- fix(mobile): Fix pt-PT locale. Add missing pt-PT localizely entry by @andredasilvapinto in #5892
- fix(mobile): use proper id for gallery_viewer hero attribute by @shenlong-tanwen in #5894
- Localizely: Translations update by @alextran1502 in #5902
- Localizely: Translations update by @alextran1502 in #5960
- feat(mobile): load server result assets from local DB by @fyfrey in #5971
- fix(mobile): Fix "Live Images" and "Recently added" page by @l0nax in #6030
- chore(mobile): update en-US.json - spelling changes by @opbod in #5868
- feat(mobile): use new asset device endpoint by @jrasm91 in #6108
- refactor(mobile): use startOAuth and server features flags by @shenlong-tanwen in #6155
- refactor(mobile): Activities by @shenlong-tanwen in #5990
- (mobile): ios - calculate hash using CryptoKit by @shenlong-tanwen in #5976
- feat(mobile): multiselect for search & person page by @fyfrey in #6016
- fix(mobile): handle readonly and offline assets by @shenlong-tanwen in #5565
Web
- feat(web): bigger dialog box of location change by @waclaw66 in #5862
- fix(web): open image in new tab with memories on firefox by @martabal in #5847
- fix(web): multiple small issues on the web app by @martabal in #5875
- chore(web): redirect share page redirect to base path #5519 by @JW-CH in #5889
- fix(web): location pin by @waclaw66 in #5909
- fix(web): cannot open detail panel in public shared link by @alextran1502 in #5946
- chore(web): Use percentage sign for uploads by @adamantike in #5952
- feat(web): display age in months when age is 0 by @jpsak09 in #5961
- fix(web): "undefined" in error message when error at uploading by @RenautMestdagh in #5973
- fix(web): cancel select all by @martabal in #6047
- chore(web): migrate to vitest by @jorge-dev in #5754
- fix(web): use submit event instead of button cl...