Releases: immich-app/immich
v1.97.0
v1.97.0
Highlights
Welcome to release v1.97.0
of Immich. This release contains bug fixes and minor improvements in asset rendering on the mobile app.
- Remove the polling option for library watcher due to the number of issues it brings outweighing the advantages
- Fix the issue with the toggle button on the web app that doesn't conform to state change.
- Fix the wrong aspect ratio of the preview image in the memory view
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
- feat(server): rkmpp hardware decoding scaling by @fyfrey in #7472
- chore: remove watcher polling option by @etnoy in #7480
📱 Mobile
- fix(mobile): Fixes thumbnail size with blur and alignment in video player by @martyfuhry in #7483
- fix(mobile): Fixes prefer remote assets in thumbnail provider by @martyfuhry in #7485
- feat(mobile): Adds better precaching for assets in gallery view and memory lane by @martyfuhry in #7486
🖥️ Web
- fix(web): keep notifications in view when scrolling by @michelheusschen in #7493
- fix(web): re-render albums by @martabal in #7403
- fix(web): settings accordion open state by @michelheusschen in #7504
📓 Documentation
🔨 Maintenance
- chore(deps): update dependency @types/node to v20.11.20 by @renovate in #7474
- refactor(server): format and metadata e2e by @jrasm91 in #7477
- add explicit registry to docker image names by @saimonn in #7496
New Contributors
Full Changelog: v1.96.0...v1.97.0
v1.96.0
v1.96.0
Highlights
Welcome to release v1.96.0
of Immich. This release adds more enhancements for search, optimizes the mobile app and includes a handful of bug fixes. Some of the key highlights include:
- Search filter form improvement
- Search by location when editing the place for the asset.
- Optimization of asset rendering on the mobile app.
- Slideshow options (web)
- Notable fix (mobile app): Stop sending users to the login page for unrelated authentication errors.
- Notable fix: Smart Search when using OpenVINO.
Improved Search Form
After receiving users' feedback, we make the search filter a little more compact with minor UI/UX changes to make the process of selecting/deselecting the filter's content more intuitive.
Search location when editing place for the asset.
We have implemented the lookup-on-type mechanism to quicky search for a location on the map when adding or edding location of the asset. This process happens entirely on your server
chrome_DoSJwS1Dlr.mp4
[Web] Slideshow options
We added additional options for the slideshow feature on the web, so you can make it fit your needs when showing of your gallery
Optimized asset rendering on the mobile app
We add a blur thumbnail loading step to help the transition from black/white placeholder to the image a more pleasant experience and fix a bug that sometimes the HTTP client would timeout and show the broken icon on the thumbnail.
blurloading.mov
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
- chore(server): change transcode default to accept all supported audio codecs by @mertalev in #7283
- fix(server): search with same face multiple times by @michelheusschen in #7306
- fix(server, web): people page by @martabal in #7319
- fix(server): fix log for setting other vector extension by @mertalev in #7325
- perf(server): optimize mapAsset by @michelheusschen in #7331
- fix(server): out of memory when unstacking assets by @michelheusschen in #7332
- fix(server): exclude archived assets from orphaned files by @michelheusschen in #7334
- feat(server, web): search location by @martabal in #7139
- fix(server): storage template migration not working by @mertalev in #7414
- fix(server): truncate embedding tables by @mertalev in #7449
- feat(server): easy RKMPP video encoding by @fyfrey in #7460
📱 Mobile
- refactor(mobile): Use hooks to manage Chewie controller for video by @martyfuhry in #7008
- fix(deps): update dependency geolocator to v11 by @renovate in #7249
- fix(deps): update dependency flutter_udid to v3 by @renovate in #7248
- fix(mobile): don't crop memories in landscape mode by @hrdl-github in #6907
- refactor(mobile): move error details to separate DB column by @rovo89 in #6898
- fix(mobile): remove log message counter by @rovo89 in #6865
- fix(mobile): Stop sending app to login page for unrelated auth errors by @martyfuhry in #7383
- refactor(mobile): Use ImmichThumbnail and local thumbnail image provider by @martyfuhry in #7279
- refactor(mobile): Uses blurhash for memory card instead of blurred thumbnail by @martyfuhry in #7469
🖥️ Web
- fix(web): search filter form events by @michelheusschen in #7285
- fix(web): back button for gallery viewer by @michelheusschen in #7250
- fix(web): small issues everywhere by @martabal in #7207
- Localize the output of the library count to make it more readable by @MarcelEeken in #7305
- feat(web): search improvements and refactor by @michelheusschen in #7291
- feat(web): rework combobox and add clear button by @michelheusschen in #7317
- feat(web): search albums by @martabal in #7322
- feat(web): add an option to change the date formats by @martabal in #7174
- Enhancement: Revamp onboarding message for Storage Template Engine - Web by @RavidYael in #7339
- refactor(web): sidebar settings by @jrasm91 in #7344
- fix: upgrade SvelteKit to 2.5.1 by @benmccann in #7351
- fix(web): consistent combobox style + improve color contrast by @michelheusschen in #7353
- feat(web): configure slideshow by @martabal in #7219
- fix(web): dark mode uploading font color by @sebbi08 in #7372
- Web: Revamp message for Storage Template Engine in admin pannel by @AndyPro720 in #7359
- feat(web): improve search filter design by @michelheusschen in #7367
- fix(web): timezone handling in search filter by @michelheusschen in #7384
- fix(web): prevent scroll reset on search page by @michelheusschen in #7385
- feat(web): Added password field visibility toggle by @Jan108 in #7368
- refactor(web): search box by @danieldietzler in #7397
- fix(web): count hidden people by @martabal in #7417
- fix(web): fetch error reporting by @michelheusschen in #7391
- fix(web): alignment of people in search box by @michelheusschen in #7430
- fix(web): prevent resetting date input when entering 0 by @michelheusschen in #7415
- fix(web): shared links page broken by enhanced:img by @michelheusschen in #7453
- fix(web): don't ask password for invalid shared link by @michelheusschen in #7456
- chore(web): cleanup promise handling by @benmccann in #7382
- chore(web): remove album's action notification by @alextran1502 in #7467
- chore(web): upgrade dependencies by @benmccann in #7471
🧠 Machine Learning
- Fix Smart Search when using OpenVINO by @agrawalsourav98 in #7389
- fix(ml): only use openvino if a gpu is available by @mertalev in #7450
📓 Documentation
- docs: add star history for README by @wangrongding in #7328
- Update reverse-proxy.md - Apache by @sigulete in #7386
🔨 Maintenance
- chore(deps): update machine-learning by @renovate in #7225
- chore(deps): update dependency vite to v5.1.3 by @renovate in #7247
- chore(deps): update dependency @types/node to v20.11.19 by @renovate in #7239
- chore(deps): update dependency @types/node to v20.11.19 by @renovate in #7238
- chore(deps): update dependency @types/node to v20.11.19 by @renovate in #7236
- chore(deps): update @immich/cli by @renovate in #7235
- fix(deps): update exiftool by @renovate in #7230
- refactor(server): e2e by @jrasm91 in #7265
- refactor: album e2e by @jrasm91 in https://github.com/immich-app/im...
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/...