v1.91.0
Welcome to the release v1.91.0
of Immich! This release is packed with changes. Some of the highlights include:
- A list of breaking changes/action required steps
- More details about the removal of the Typesense container and switch to pgvecto.rs, including some FAQs
- Notable fix: Backing up assets from iCloud no longer hangs the process
Important
Action Required
docker-compose.yml
updates related to dropping Typesense- Reupload certain iOS Live Photos
- Changes to the
LOG_LEVEL
environment variable
1. docker-compose.yml
updates
We are 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;
Note
See below for more details about this change, including frequently asked questions.
2. Reupload certain iOS Live Photos
iOS Live Photos uploaded after v1.89.0 that are not linked need to be deleted and re-uploaded from the mobile app.
This is a one-time action, and future live photos uploaded from the mobile app will be properly linked together.
3. Changes to the LOG_LEVEL
environment variable
The LOG_LEVEL
value of simple
has been removed. The equivalent value is log
. If you were using the value simple
, the server container will not start until this is updated.
FAQ
I kept Typesense disabled because my CPU doesn’t support AVX. Does this change mean I can’t use Immich anymore?
The new vector search extension we’re using, pgvecto.rs, does not require AVX to function as it does a runtime check on the SIMD instructions your CPU supports.
Does it work with Raspberry Pi?
It is tested to work with Raspberry Pi 5, and should work with Raspberry Pi 4 as well.
Do I need to do a backup and restore for my Postgres database?
While it is recommended to regularly backup your database, this change can be done in-place just by changing the image. You do not need to do a backup and restore unless you run into a specific issue that requires it.
I have a common Postgres instance that I share with other services. What do I need to do with this change?
The Postgres image we use is regular Postgres, just with the pgvecto.rs extension. If your Postgres instance is a regular instance without any third-party extensions, then you can simply switch out the image for that instance with the tensorchord/pgvecto-rs:pg14-v0.1.11
image (changing pg14
to the major version you use - 14, 15 or 16). This is a drop-in replacement that will work without a backup and restore.
If your instance has third-party extensions, then you will need to make a docker image that installs the pgvecto.rs extension in addition to the other extensions based on their installation instructions. An example of this for the CloudNativePG Kubernetes operator can be found here.
If you use a bare-metal instance and have a Debian-based server, then you may instead follow their installation instructions and install the pgvecto.rs Debian package directly.
While trying to backup and restore my Postgres instance, I got the error type “earth” does not exist
. What do I do?
This is a bug with Postgres’ earthdistance extension. You can fix the issue by following the instructions here.
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
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 🛠
- feat(web,server)!: runtime log level by @jrasm91 in #5672
- feat(server): use pgvecto.rs by @jrasm91 in #3605
Server
- feat(server): use postgres-adapter for websockets by @jrasm91 in #5569
- feat(server,ml): add new models by @mertalev in #5710
- feat(server): server-side events by @jrasm91 in #5669
- fix(server): disable classification by default by @mertalev in #5708
- fix(server): select asset face columns explicitly by @mertalev in #5564
- fix(server): connection aborted logging by @jrasm91 in #5595
- fix(server): don't associate assets with Null Island by @sushain97 in #5623
- fix(server): in dev mode by @jrasm91 in #5670
- chore(server): simplify search face query and better clustering by @alextran1502 in #5573
- chore(server): faster shutdown by @jrasm91 in #5577
- chore(server): fix ssr in dev by @jrasm91 in #5637
- refactor(server): auth dto by @jrasm91 in #5593
- refactor(server): immich file responses by @jrasm91 in #5641
Mobile
- fix(mobile): handle livePhotos using originFileWithSubType by @shenlong-tanwen in #5602
- fix(mobile): mobile album sort not persisting by @shenlong-tanwen in #5584
- fix(mobile): memory lane not displayed in mobile app by @shenlong-tanwen in #5587
- fix(mobile): live / motion photo download by @shenlong-tanwen in #5607
- fix(mobile): Revert - upload motion and live part of LivePhotos together by @alextran1502 in #5601
- fix(mobile): better error message by @alextran1502 in #5653
- fix(mobile): Fix upload hang on iOS when deleting stale files by @alextran1502 in #5658
- fix(mobile): simplify state management in backup selection page by @alextran1502 in #5655
- chore(mobile): move mocktail to dev dep by @shenlong-tanwen in #5666
- chore(mobile): Put delete button before metadata editing by @lukaszwawrzyk in #5633
Web
- feat(web): use
<a>
tag for albums in list view by @martabal in #5645 - feat(web): increase map max zoom by @waclaw66 in #5693
- feat(web): lazy loading on album/sharing/search by @flyotlin in #5696
- feat(web): add types to dispatcher by @martabal in #5700
- feat(web): re-add open graph tags for public share links by @jrasm91 in #5635
- feat(web): automatically update user info by @martabal in #5647
- fix(web): user management responsive design by @martabal in #5698
- fix(web): log out by @martabal in #5706
- fix(web): remove always on delay badge by @alextran1502 in #5574
- fix(web): no icon with firefox by @martabal in #5679
- fix(web): warning when building web by @martabal in #5680
- fix(web): prevent loop on search by @martabal in #5664
- chore(web): shared page redirect to host by @JW-CH in #5678
Machine Learning
Documentation
- docs: clean-up old references by @jrasm91 in #5697
- docs: update arch diagram by @jrasm91 in #5662
- docs: Add tip showing common error messages by @jonhnet in #5592
- docs: add sponsor link by @jrasm91 in #5597
- docs: remove typesense from faq by @mertalev in #5600
- docs: update backup-and-restore.md by @pjsxw in #5616
- docs: FAQ for thumbnail jobs by @bo0tzz in #5661
- docs: recap 2023 by @alextran1502 in #5665
- docs: remove citiesFileOverride from config-file.md; fixes #5682 by @SlavikCA in #5683
Dependency updates
- fix(deps): update server by @renovate in #5506
- chore(deps): update base-image to v20231214 (major) by @renovate in #5705
- chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to 5ea70d2 by @renovate in #5707
- chore(deps): update dependency sql-formatter to v15 by @renovate in #5709
- fix(deps): bump sharp by @jrasm91 in #5509
- chore(deps): remove unused cron types by @jrasm91 in #5563
- chore(deps): pin dependencies by @renovate in #5567
- chore(deps): pin tensorchord/pgvecto-rs docker tag to 0335a1a by @renovate in #5570
- chore(deps): update python:3.11-slim-bookworm docker digest to cfd7ed5 by @renovate in #5572
- chore(deps): update redis:6.2-alpine docker digest to b6124ab by @renovate in #5599
- chore(deps): pin tensorchord/pgvecto-rs docker tag to 0335a1a by @renovate in #5632
- chore(deps): bump github/codeql-action from 2 to 3 by @dependabot in #5694
Other changes
- ci: Automatic categories in generated release notes by @bo0tzz in #5684
- ci: Catchall category for release notes by @bo0tzz in #5701
New Contributors
- @jonhnet made their first contribution in #5592
- @pjsxw made their first contribution in #5616
- @lukaszwawrzyk made their first contribution in #5633
- @JW-CH made their first contribution in #5678
- @SlavikCA made their first contribution in #5683
Full Changelog: v1.90.2...v1.91.0