ImageGenius Changes:
rebase to alpine edge
immich Changes:
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 immich-app/immich#6818
- feat(server)!: pgvecto.rs 0.2 and pgvector compatibility by @mertalev in immich-app/immich#6785
🗄️ Server
- fix(server): extract duration from video as ISO time by @alextran1502 in immich-app/immich#6863
- chore(server): Use ChunkedSet in Access repository by @adamantike in immich-app/immich#6943
- feat(server): optimize face re-queueing by @mertalev in immich-app/immich#6961
- fix(server): check if sidecarPath exists by @JW-CH in immich-app/immich#6293
- fix(server): use luxon for deleted date calculation by @manasadepu in immich-app/immich#6958
- feat(server): server-side checking of duplicate import paths and exclusion patterns by @etnoy in immich-app/immich#6993
- feat(server): restore modified at timestamp after upload, preserve when copying by @jextrevor in immich-app/immich#7010
- feat(server, web): smart search filtering and pagination by @mertalev in immich-app/immich#6525
- refactor: library watching by @jrasm91 in immich-app/immich#7071
- feat: Search filtering logic by @alextran1502 in immich-app/immich#6968
- feat(server, web): Include partner's photos on map by @ttyridal in immich-app/immich#7065
- feat(server): only transcode streams that require it by @mertalev in immich-app/immich#7106
- fix(server): recognize faces when min. faces is set to 1 by @michelheusschen in immich-app/immich#7144
- feat: enhance search by @alextran1502 in immich-app/immich#7127
- fix(server): empty/restore trash by @michelheusschen in immich-app/immich#7161
- fix(server): not in album filter show motion part of LivePhotos by @alextran1502 in immich-app/immich#7175
- feat(server): optimize get asset query by @mertalev in immich-app/immich#7176
- fix(server): on_asset_update event sends varying data types by @michelheusschen in immich-app/immich#7179
- fix(server):
getAllAssets
endpoint includes motion part of LivePhotos by @alextran1502 in immich-app/immich#7194
📱 Mobile
- fix(mobile): video player shows black screen by @alextran1502 in immich-app/immich#6819
- feat(mobile): Add support for Basic Authentication by @rovo89 in immich-app/immich#6840
- feat(mobile): Add haptic feedback to asset grid by @l0nax in immich-app/immich#5344
- fix(mobile): debounce map layer update by @shenlong-tanwen in immich-app/immich#6861
- feat(mobile): Adds show password field to login by @martyfuhry in immich-app/immich#6918
- feat(mobile): Memories activity is now full screen, better image fit, adds progress indicator by @martyfuhry in immich-app/immich#6793
- refactor(mobile): map heatmap color and location picker by @shenlong-tanwen in immich-app/immich#6553
- feat(mobile): Adds WiFi only backup option to iOS by @martyfuhry in immich-app/immich#6724
- feat(mobile): Videos play in memories now by @martyfuhry in immich-app/immich#6940
- fix(mobile): Stop advancing to next memory on video ended by @martyfuhry in immich-app/immich#7007
- fix(mobile): stack entity handling by @shenlong-tanwen in immich-app/immich#6980
- refactor(mobile): Immich image provider by @martyfuhry in immich-app/immich#7016
- chore(mobile): Put the real delete button before other delete variants by @lukaszwawrzyk in immich-app/immich#6895
- fix(mobile): Fixed exclude analyzer options by @martyfuhry in immich-app/immich#7125
- fix(mobile): bottom app bar icons by @waclaw66 in immich-app/immich#7147
- refactor(mobile): Use widgets in Immich asset grid by @martyfuhry in immich-app/immich#7140
- fix(mobile): Fixes bottom exif info sheet modal drag controls by @martyfuhry in immich-app/immich#7165
- chore(mobile): Adds dart format to static analysis by @martyfuhry in immich-app/immich#7193
- fix(mobile): Fixes memory lane progress indicator color in dark mode by @martyfuhry in immich-app/immich#7199
- fix(mobile): Prefer sharing local assets to remote by @martyfuhry in immich-app/immich#7245
🖥️ Web
- fix(web): Admin Settings banner/scrolling issue by @azroberts8 in immich-app/immich#6839
- feat(web): improved album view UI & album card UI by @azroberts8 in immich-app/immich#6822
- feat(web): search filter form by @alextran1502 in immich-app/immich#6651
- fix: set default thumbnail aspect ratio to square by @lukashass in immich-app/immich#6970
- fix(web): Handle duplicate library settings gracefully by @etnoy in immich-app/immich#6950
- fix (web): panorama / 360 view - partial panorama: use photo-sphere-viewer by @dmitry-brazhenko in immich-app/immich#6992
- feat(web): store accordion state in search params by @danieldietzler in immich-app/immich#6435
- fix(web): update profile picture by @martabal in immich-app/immich#7034
- refactor: authentication on public routes by @martabal in immich-app/immich#6765
- feat(web): add a setting to load the original file by @martabal in immich-app/immich#6753
- feat(web): navigate with keyboard on person page by @martabal in immich-app/immich#5486
- chore(web,mobile): Fix reoccurring typo by @ItsJustRuby in immich-app/immich#7111
- fix(web): always show asset owner when viewing an asset from a shared album by @martabal in immich-app/immich#7104
- chore: suppress abort errors by @jrasm91 in immich-app/immich#7120
- fix(web): search params by @alextran1502 in immich-app/immich#7123
- fix(web): update unauthorized share link handling by @benmccann in immich-app/immich#7126
- chore(web): upgrade to maplibre 4 by @danieldietzler in immich-app/immich#7132
- refactor(web): websocket events by @michelheusschen in immich-app/immich#7152
- fix(web) display wrong apikey-name on edit by @JW-CH in immich-app/immich#7131
- chore: remove svelte-preprocess by @benmccann in immich-app/immich#7159
- fix(web): validation when editing asset date & time by @michelheusschen in immich-app/immich#7160
- feat(web): add skip link to top navigation by @ben-basten in immich-app/immich#7091
- chore(web): remove createEventDispatcher from LoginForm by @benmccann in immich-app/immich#7177
- perf(web): optimize images and modules by @martabal in immich-app/immich#7088
- fix: only show scrollbars if needed by @uhthomas in immich-app/immich#7191
- fix(web): memory view broken by enhanced:img import by @michelheusschen in immich-app/immich#7206
- fix(web): broken links to places search by @michelheusschen in immich-app/immich#7208
- fix(web): don't show motion part in search result by @alextran1502 in immich-app/immich#7210
- chore(web): show people list on a single line in filter form when not expanded by @alextran1502 in immich-app/immich#7216
- fix(web): download from shared album link by @jrasm91 in immich-app/immich#7227
- fix(web): websocket reconnect by @michelheusschen in immich-app/immich#7234
- feat(web): improve feedback for favorite and archive actions by @michelheusschen in immich-app/immich#7232
🧠 Machine Learning
- fix(ml): openvino not working with dynamic axes by @mertalev in immich-app/immich#6871
- chore(ml): make execution provider log info-level by @mertalev in immich-app/immich#7024
- feat(ml): improve test coverage by @mertalev in immich-app/immich#7041
- fix(ml): re-enable ARMNN integration by @fyfrey in immich-app/immich#7053
⚡ CLI
- fix(cli): auth file should be chmod 600 by @etnoy in immich-app/immich#6925
- chore(cli): use upload api and update documentation by @etnoy in immich-app/immich#6927
- feat(cli): dockerize by @etnoy in immich-app/immich#6858
- chore(cli): publish docker image on ghcr by @etnoy in immich-app/immich#6964
- fix(cli): broken fetch client by @jrasm91 in immich-app/immich#7020
- feat(cli): concurrent upload by @mertalev in immich-app/immich#7192
📓 Documentation
- docs(ml): hardware acceleration by @mertalev in immich-app/immich#6821
- Documentation: provide details on storage engine album naming by @mmomjian in immich-app/immich#6812
- docs(ml,server): updated hwaccel docs by @mertalev in immich-app/immich#6878
- chore(docs): Small FAQ tweaks and nits by @bo0tzz in immich-app/immich#6880
- Update command-line-interface.md by @jsixface in immich-app/immich#6944
- fix(docs): add cuda tag to ml hwaccel example by @mertalev in immich-app/immich#6972
- docs: fix web development setup instructions by @lukashass in immich-app/immich#6969
- chore: add repo activity to readme by @alextran1502 in immich-app/immich#6982
- fix: remove dead link from docs by @melvinsh in immich-app/immich#7027
- Change license to AGPLv3 by @alextran1502 in immich-app/immich#7046
- fix(docs): document vector extension env variable by @mertalev in immich-app/immich#7220
🔨 Maintenance
- chore: simplify API build by @benmccann in immich-app/immich#6841
- chore(server,cli,web): housekeeping and stricter code style by @etnoy in immich-app/immich#6751
- fix(deps): update server by @renovate in immich-app/immich#6769
- chore(deps): update redis:6.2-alpine docker digest to 51d6c56 by @renovate in immich-app/immich#6782
- chore: remove
form-data
dependency by @benmccann in immich-app/immich#6876 - fix: bundle CLI with Vite by @benmccann in immich-app/immich#6893
- chore: remove axios dependency from CLI by @benmccann in immich-app/immich#6888
- chore(deps): update @immich/cli by @renovate in immich-app/immich#6928
- fix(deps): update dependency fastapi to v0.109.1 [security] by @renovate in immich-app/immich#6923
- chore(deps): update dependency @types/node to v20.11.15 by @renovate in immich-app/immich#6929
- chore: build API with esnext target by @benmccann in immich-app/immich#6926
- chore(deps): update dependency @types/node to v20.11.16 by @renovate in immich-app/immich#6946
- chore(deps): update dependency @types/node to v20.11.16 by @renovate in immich-app/immich#6947
- chore(web): remove maplibre dependency by @danieldietzler in immich-app/immich#6948
- chore(deps): update base-image to v20240206 (major) by @renovate in immich-app/immich#6942
- chore(deps): update web by @renovate in immich-app/immich#6933
- chore(deps): update server by @renovate in immich-app/immich#6930
- chore(deps): update dependency eslint-plugin-unicorn to v51 by @renovate in immich-app/immich#6952
- chore(deps): update @immich/cli by @renovate in immich-app/immich#6951
- chore(deps): pin tensorchord/pgvecto-rs docker tag to 9072418 by @renovate in immich-app/immich#6960
- chore(deps): bump stumpylog/image-cleaner-action from 0.4.0 to 0.5.0 by @dependabot in immich-app/immich#6965
- chore(dep): add intl to ignoreDeps and remove unused packages by @shenlong-tanwen in immich-app/immich#6967
- chore: setup
rollup-plugin-visualizer
and removelodash
by @benmccann in immich-app/immich#6974 - refactor(server): asset core by @jrasm91 in immich-app/immich#6985
- chore(server): remove deprecated endpoints by @jrasm91 in immich-app/immich#6984
- fix: update lodash calls by @benmccann in immich-app/immich#6996
- chore: cleanup layout setup by @benmccann in immich-app/immich#6995
- chore: tree shake unused API methods from CLI by @benmccann in immich-app/immich#6973
- fix: unnecessary .env file usage by @jrasm91 in immich-app/immich#7005
- chore: remove unneccessary async/awaits by @benmccann in immich-app/immich#7009
- refactor(web): removed panorama-viewer.css by @dmitry-brazhenko in immich-app/immich#7012
- feat(server): replace axios dependency by fetch by @martabal in immich-app/immich#7018
- chore: upgrade to Vite 5.1.1 by @benmccann in immich-app/immich#7040
- fix(cli): Run npm ci in sdk folder before deploying to npm by @etnoy in immich-app/immich#6986
- fix(deps): update dependency python-multipart to v0.0.7 [security] by @renovate in immich-app/immich#7054
- feat(web): lazy load photo sphere viewer by @benmccann in immich-app/immich#7057
- chore: update lockfiles by @benmccann in immich-app/immich#7062
- fix(web): remove warnings during the build by @martabal in immich-app/immich#7035
- chore(deps): pin tensorchord/pgvecto-rs docker tag to 9072418 by @renovate in immich-app/immich#7066
- chore(deps): update web by @renovate in immich-app/immich#7067
- chore(deps): update machine-learning by @renovate in immich-app/immich#6931
- chore(deps): update machine-learning (major) by @renovate in immich-app/immich#6934
- fix(deps): update dependency picomatch to v4 by @renovate in immich-app/immich#7073
- chore: suppress diff for generated clients by @jrasm91 in immich-app/immich#7072
- chore(deps): update dependency vite to v5.1.0 by @renovate in immich-app/immich#7080
- chore(deps): update dependency oazapfts to v5.1.5 by @renovate in immich-app/immich#7079
- chore(deps): update base-image to v20240213 (major) by @renovate in immich-app/immich#7081
- chore(deps): update machine-learning by @renovate in immich-app/immich#7074
- fix(deps): update server by @renovate in immich-app/immich#7069
- fix(deps): update docs by @renovate in immich-app/immich#7068
- chore(deps): update machine-learning by @renovate in immich-app/immich#7084
- chore(deps): update web by @renovate in immich-app/immich#7086
- web: e2e by @jrasm91 in immich-app/immich#7063
- fix(deps): bump oazapfts to v6 by @jrasm91 in immich-app/immich#7093
- refactor(web): use new open api client by @jrasm91 in immich-app/immich#7097
- chore(deps): update dependency @types/node to v20.11.17 by @renovate in immich-app/immich#7098
- chore(deps): update dependency @types/node to v20.11.17 by @renovate in immich-app/immich#7099
- chore(deps): update dependency @types/node to v20.11.17 by @renovate in immich-app/immich#7102
- refactor(web) open api client by @jrasm91 in immich-app/immich#7103
- chore: enum support for new API by @benmccann in immich-app/immich#7110
- chore(cli): auto-sort imports by @jrasm91 in immich-app/immich#7116
- chore: web shutdown signal by @jrasm91 in immich-app/immich#7114
- fix: update error handling to match new API by @benmccann in immich-app/immich#7117
- chore(web): auto sort imports by @jrasm91 in immich-app/immich#7118
- chore(deps): upgrade tj-actions/verify-changed-files to v18 by @benmccann in immich-app/immich#7121
- chore: web e2e improvements by @jrasm91 in immich-app/immich#7155
- chore(deps): update typescript-eslint monorepo to v7 (major) by @renovate in immich-app/immich#7171
- fix: shell scripts by @martabal in immich-app/immich#7186
- fix: shell scripts by @martabal in immich-app/immich#7189
- chore: cleanup old jest references by @jrasm91 in immich-app/immich#7198
- refactor: server auth e2e by @jrasm91 in immich-app/immich#7203
- chore: remove unused file by @jrasm91 in immich-app/immich#7205
- refactor: cli e2e by @jrasm91 in immich-app/immich#7211
- chore(deps): update dependency vite to v5.1.2 by @renovate in immich-app/immich#7218
- chore(deps): pin dependencies by @renovate in immich-app/immich#7217
- chore(deps): update web by @renovate in immich-app/immich#7221
- fix(deps): update dependency @mdx-js/react to v3.0.1 by @renovate in immich-app/immich#7222
- refactor(server): e2e by @jrasm91 in immich-app/immich#7223
- fix(deps): update server by @renovate in immich-app/immich#7224
Other changes
- feat(server,web) Semantic import path validation by @etnoy in immich-app/immich#7076
New Contributors
- @azroberts8 made their first contribution in immich-app/immich#6839
- @rovo89 made their first contribution in immich-app/immich#6840
- @jsixface made their first contribution in immich-app/immich#6944
- @lukashass made their first contribution in immich-app/immich#6969
- @manasadepu made their first contribution in immich-app/immich#6958
- @melvinsh made their first contribution in immich-app/immich#7027
- @jextrevor made their first contribution in immich-app/immich#7010
- @ItsJustRuby made their first contribution in immich-app/immich#7111
- @ttyridal made their first contribution in immich-app/immich#7065
- @ben-basten made their first contribution in immich-app/immich#7091
Full Changelog: immich-app/immich@v1.94.1...v1.95.0