v1.90.0
Important
Announcement (Breaking changes next release v1.91.0)
Continuing the effort of reducing Immich's footprint, we would like to announce another planned change. Starting from the next release (not this release), we will be removing the Typesense container and changing the database image. Below are the changes that must be made in your docker-compose.yml file.
immich-server:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
immich-microservices:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
- typesense:
- container_name: immich_typesense
- image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
- environment:
- - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
- - TYPESENSE_DATA_DIR=/data
- # remove this to get debug messages
- - GLOG_minloglevel=1
- volumes:
- - tsdata:/data
- restart: always
[...]
database:
container_name: immich_postgres
- image: postgres:14-alpine@sha256:6a0e35296341e676fe6bd8d236c72afffe2dfe3d7eb9c2405c0f3fc04500cd07
+ image: tensorchord/pgvecto-rs:pg14-v0.1.11
env_file:
- .env
environment:
volumes:
pgdata:
model-cache:
- tsdata:
Note
Note: If you are running your database with a non-superuser role for Immich, you must enable the pgvecto.rs extension manually. You can do this by connecting to the immich
database as a superuser and running:
CREATE EXTENSION vectors;
Search Background
It turns out that synchronizing data between Postgres and Typesense is quite complicated. It accounts for at least an additional 1000 lines of code and, while very feature-filled, has become a burden to maintain. Also, there have been some serious memory and performance issues with Typesense, especially with large photo collections. It is lightning fast, but at the expense of large indexes that must be read from disk into memory on each restart. There have been reports of this process taking up to 30 minutes!
We effectively remove an entire class of bugs and issues by removing the need to synchronize data. Furthermore, search queries can more easily be combined with the existing database schema, like libraries, partner sharing, albums, etc. After merging #3605, we hope to be able to make significant progress around the search implementation and feature set.
In short, some of the benefits of this change include the following:
- One less container to run, deploy, and manage
- Better memory/system resource usage
- Decreased memory usage
- Faster Encode CLIP and Recognize Faces jobs
- Faster startup time
- Significantly less code to maintain, test, debug
- Improved developer workflow when adding search-related functionality
- Ability to integrate smart search into end-to-end testing for improved testing coverage and stability
- Ability to integrate CLIP search with other (metadata) criteria in the future
- Ability to add customizable index settings for even lower memory usage and higher performance, such as on-disk indices and quantization
Highlights
Welcome to release v1.90.0
of Immich. In this release, we introduce the first implementation of asset metadata editing, which includes date, time, and location. This release also contains many improvements and bug fixes. I hope you enjoy this release. Please read the following highlights below:
- Edit metadata.
- Reassign person faces.
- Better handling of iCloud assets.
Edit metadata
This release introduces the first implementation of editing assets.
Web
chrome_R8eIwyUEBR.mp4
Mobile App
Bottom Sheet | Edit Date Time | Edit Location | Manual Location |
---|---|---|---|
Map Picker | Bottom sheet | Asset without location |
---|---|---|
Note
Metadata edits only apply to non-external/read-only assets.
You can now edit a photo or video's date, time, hours, timezone, and GPS information. The edited info is written to a companion sidecar file and saved in the exact library location as the original photo or video.
Please note that downloading an asset does not include the sidecar file or edited information yet.
Thanks, @YFrendo, and @jrasm91 for the valuable implementation of this feature. Thanks @shenlong-tanwen for a quick implementation on the mobile app for feature parity
Reassign person's faces
In this continuous enhancement, @martabal has implemented a mechanism to change facial data in a photo from one person to another. There is a bounding box around the person's face in the photo hovered on the face in the detail panel.
Re-assigning faces
2023-11-10.20-05-34.mp4
Hovering thumbnails
2023-11-13.11-42-12.mp4
Better handling of iCloud assets
This is the first attempt to improve the backup process for iCloud’s users. We also added a toggle to ignore backing up assets from iCloud; you can find the option in a new Backup Options page on the mobile app.
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
Mobile
- feat(mobile): edit date time & location by @shenlong-tanwen in #5461
- feat(mobile): unify asset grid multiselect actions by @fyfrey in #5407
- feat(mobile): handle backup iCloud asset by @alextran1502 in #5508
- fix(mobile): clear album provider on logout by @fyfrey in #5477
- fix(mobile): the new album icon has a different height from the existing album cover by @Skyquek in #5422
- fix(mobile): use zoomedpagetransition for galleryvieweroute by @shenlong-tanwen in #5495
- fix(mobile): notify mobile app when live photos are linked by @shenlong-tanwen in #5504
- fix(mobile): allow editing asset dates in the future by @shenlong-tanwen in #5522
Web
- feat(web): re-assign person faces (2) by @martabal in #4949
- feat(web): add clear failed jobs button by @8gb in #5423
- feat(web): Edit metadata by @YFrendo in #5066
- feat(web): allow showing hidden people in image asset details view by @brokeh in #5420
- feat(web): UI/UX improvement for date time edit form by @alextran1502 in #5505
- fix(web): whitespace in person name by @martabal in #5401
- fix(web): disable metadata edit if user is not owner by @martabal in #5415
- fix(web): status box rendering by @danielktaylor in #5410
- fix(web): new album title fix by @waclaw66 in #5467
- fix(web): keep url query parameters when swapping people by @martabal in #5468
- fix(web): stick action bar on search by @martabal in #5459
- fix(web): runtime issue by @jrasm91 in #5493
- fix(web): delete modal z-index by @danielktaylor in #5416
- fix(web): background when re-assigning faces by @martabal in #5512
- fix(web): align all edit buttons and not correctly rounded buttons on detail-panel by @martabal in #5524
- chore(web): toggle hide face in context menu by @alextran1502 in #5440
- chore(deps): update web by @renovate in #5502
- refactor(web): asset viewer actions by @jrasm91 in #5488
Server
- fix(server): immich command by @jrasm91 in #5408
- fix(server): video orientation by @martabal in #5455
- fix(server): send upload_success notification only for non hidden assets by @shenlong-tanwen in #5471
- fix(server): Return correct asset count in album by @mPyKen in #5465
- fix(server): not awaiting
sendFile
by @jameskeane in #5515 - chore(server): sql versioning by @jrasm91 in #5346
- chore(server): Check asset permissions in bulk by @adamantike in #5329
Documentations
- docs: correct wording and grammar in README_de_DE.md by @traktuner in #5447
- docs: update docs to use docker compose by @danieldietzler in #5446
Dependencies
- chore(deps): bump actions/setup-java from 3 to 4 by @dependabot in #5405
- chore(deps): update python:3.11-bookworm docker digest to c56b0c6 by @renovate in #5387
- chore(deps): update python:3.11-slim-bookworm docker digest to 23f5220 by @renovate in #5388
- chore(deps): update dependency @types/node to v20.10.1 by @renovate in #5427
- chore(deps): update postgres:14-alpine docker digest to 5491670 by @renovate in #5429
- chore(deps): update redis:6.2-alpine docker digest to 60e49e2 by @renovate in #5430
- chore(deps): update base-image to v20231130 (major) by @renovate in #5431
- chore(deps): base image min age by @jrasm91 in #5433
- chore(deps): update python:3.11-bookworm docker digest to 47c1829 by @renovate in #5434
- chore(deps): update python:3.11-slim-bookworm docker digest to 8f82989 by @renovate in #5435
- chore(deps): update python:3.11-bookworm docker digest to ba7a7ac by @renovate in #5438
- chore(deps): update base-image to v20231201 (major) by @renovate in #5452
- chore(deps): update postgres:14-alpine docker digest to 6a0e352 by @renovate in #5451
- chore(deps): update python:3.11-slim-bookworm docker digest to cc75851 by @renovate in #5462
- chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to e296d47 by @renovate in #5487
- chore(deps): update postgres docker digest to 6dfee32 by @renovate in #5492
- chore(deps): update dependency vite to v4.5.1 [security] by @renovate in #5513
- chore(deps): ignore openapi pubspec by @shenlong-tanwen in #5521
- chore(deps): bump actions/setup-python from 4 to 5 by @dependabot in #5528
- chore: make running local dev instance on Windows work regardless of git config by @brokeh in #5419
New Contributors
- @brokeh made their first contribution in #5419
- @danielktaylor made their first contribution in #5410
- @traktuner made their first contribution in #5447
- @Skyquek made their first contribution in #5422
- @8gb made their first contribution in #5423
- @jameskeane made their first contribution in #5515
Full Changelog: v1.89.0...v1.90.0