v1.102.0 - 30,000 Stars Release 🌟
v1.102.0
⚠️ Breaking Changes (OPT-IN ONLY)
Caution
For people always pulling the latest compose file, this is a breaking change!
Disregarding the notes will result in (temporary) data loss!
Background
In the past, we've seen many cases where people accidentally deleted their Postgres data by (unintentionally) deleting the docker volume (e.g., docker compose down -v
).
This is unfortunate as there is no way to recover that data (if you don't have a backup, MAKE BACKUPS!).
We have been thinking about mounting the Postgres data to a local folder for a while but always hesitated, as this would break existing instances due to people not reading the change logs carefully. However, there have been too many issues, and we ultimately decided to make that change.
What do I have to do?
Nothing. You should only copy the compose file with every new release if we tell you to do so in the release notes. Generally, we don't recommend making changes to existing instances. If you have never had issues, attempting to migrate the data will put it at (an unnecessary) risk.
I want to migrate my docker volume to a local folder
Unfortunately there isn't a "proper" way to export a docker volume.
The recommended method is to mount the volume and the directory (you want to copy your data to) to an arbitrary container, get a shell inside that container and copy the folder manually.
Caution
Take backups before attempting this. Especially make sure you have a current database dump (pg_dump
)
Warning
Do not use a directory under /mnt
for the postgres location if you are using WSL.
Generally (on all operating systems) we recommend against using a network share for your database location. This is bound to break and cause all sorts of weird issues.
If you would like to opt-in to this change, there is an additional environment variable in the .env
file as well as a modification in your existing docker-compose.yml
file.
docker-compose.yml
file
database:
container_name: immich_postgres
image: registry.hub.docker.com/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
+ - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
- pgdata:
model-cache:
.env
file
[...]
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
+DB_DATA_LOCATION=./postgres
Highlights
Welcome to release version v1.102.0
of Immich. We reached 30,000 stars!!! Thank you so much for your continuous support. We are proud to bring you this release with a focus on QoL improvements and bug fixes across the web, mobile, and server. We hope you enjoy it. Some of the highlighted changes can be found below.
- In-app language settings
- Haptic feedback control
- Enhanced UI/UX on the album list page
- AV1 transcoding
- Choose between WebP and JPEG for thumbnails and previews
- Option to use embedded preview in RAW images
- Option to fill the screen with slideshows view
In-app language settings
You can now keep your phone interface in a different language and have Immich's app in a different language with the new in-app language setting. It can be found in Settings > Languages
. After making the change, the new language will propagate across the app.
Haptic feedback control
We added an option in the mobile app to disable haptic feedback. It can be found under Settings > Preferences > Haptic Feedback
Web album page's UI/UX enhancement
Album Grouping
With this new feature, albums can now be grouped by year or owner (or not grouped at all). This can be very useful to not get lost when having a lot of albums, that even are sometimes similar.
- This works both on "Covers" and "List" views.
- Albums are first grouped, then sorted inside of those groups.
- Group sorting can be either ascending or descending.
Group by
drop-down is located next to theSort by
one. The two buttons on the right areExpand all
andCollapse all
. They are not displayed whenNo grouping
is selected.
- Groups can be collapsed (saved in the local storage).
Collapse.mp4
Other UI Changes
- Album cards now display the month and year of the photos.
- Same month and year:
Jan 2024
- Different months, same year:
Jan - Mar 2024
- Different year:
Sep 2023 - Feb 2024
- Same month and year:
- Album cards now display the title over up to 2 lines. If the title is longer, it is cropped with an ellipsis (no change).
- "Edit Album" modal design has been slightly changed.
Quality of Life
Album List
- The context menu now has 4 options:
Download
,Edit
,Share
andDelete
.
- The context menu can now be displayed by right-clicking on an album card.
- The context menu is now available on the list view (both
Edit
andRemove
buttons have been removed). - The context menu is now available on the "Sharing" page, with only 1 option:
Download
. - The search feature now ignores accents.
Album View
- When one and only one photo is selected, the context menu now displays the option
Set as album cover
.
AV1 transcoding
This release adds support for the next-gen AV1 format using the SVT-AV1 encoder. AV1 promises smaller files at the same quality as the other codecs we support, especially for high resolution videos. Note that client support for AV1 is more limited, so we recommend trying it on one (server-only) video and confirming it plays before transcoding your full library with it.
New image settings
Before this release, all preview images were JPEG, and all thumbnails were WebP. This is now customizable, so you can set them as you like. This also paves the way for adding other formats with minimal change.
There's also a new option to use the embedded preview in RAW images instead of converting the RAW image itself. This is particularly useful if the converted images from a camera don't look quite right or if you have custom-developed previews you'd like to use instead.
Option to fill the screen with slideshows view
We added a new option in the slideshow settings to fill the screen with the slideshow view, this will give you a more immersive viewing experience.
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
- mount postgres folder to local directory by default by @danieldietzler in #8443
🗄️ Server
- fix(server): image config not being updated by @mertalev in #8579
- chore(server): better typing for system config key by @mertalev in #8580
- fix(server): x264/x265 params not being set correctly by @mertalev in #8587
- fix(server): hevc tag being set when copying a non-hevc stream by @mertalev in #8582
- feat(server,web): configure image format by @mertalev in #8581
- fix:
npm i
on Windows … by @jellemdekker in #8619 - fix(server): delete thumbnail for readonly asset by @Ynng in #8593
- fix(server): remove isWatched from DTO by @danieldietzler in #8598
- chore(server): remove unused method by @jrasm91 in #8639
- fix(server): require asset permission when creating an album with them by @danieldietzler in #8686
- Add AV1 transcoding support by @n00mkrad in #8491
- fix(server): prevent cross-library motion photo linking, made getByChecksum library specific by @Ynng in #8719
- fix(server): link motion photo with existing video asset by @Ynng in #8724
- fix(server): external library motion photo video asset handling by @Ynng in #8721
- (server) Allow setting the host address for the server & microservices by @yparitcher in #8800
- feat(server): correlation id via injected logger by @jrasm91 in #8823
- chore: cleanup library watching by @jrasm91 in #8835
- feat(server): efficient full app sync by @fyfrey in #8755
- chore: migrate to vitest by @jrasm91 in #7156
- chore(server): delete swap file by @jrasm91 in #8856
- Migrate ImmichLogger over to injected ILoggerRepository by @iamamansharma in #8855
- fix(server): correlationId by @jrasm91 in #8858
- feat(server): logging interceptor by @jrasm91 in #8859
- fix(server): storage usage calculation for motion photos by @Ynng in #8722
- refactor(server): immich-admin list-users by @jrasm91 in #8862
- fix(server): include archived images in face detection by @mertalev in #8892
- fix(server): skip invisible assets for thumbnail generation and ml by @mertalev in #8891
- refactor(server): sessions by @jrasm91 in #8915
- refactor(server): cookies by @jrasm91 in #8920
- feat(server): use embedded preview from raw images by @mertalev in #8773
📱 Mobile
- feat(mobile): add missing translations by @michelheusschen in #8537
- feat(mobile): include partner's photos on map by @BlackBadPinguin in #8553
- feat(mobile): in app language selector by @alextran1502 in #8574
- Localizely: Translations update by @alextran1502 in #8584
- feat(mobile/web): add longer expirity for share link by @akoscomp in #8617
- chore(mobile): move language setting to another file by @alextran1502 in #8726
- fix(mobile): show error details in the log when available by @shenlong-tanwen in #8729
- fix(mobile): random logout by @alextran1502 in #8739
- feat(mobile): haptic feedback setting by @alextran1502 in #8723
- chore(mobile): update TODO comment by @benmccann in #8826
- chore(mobile): full width language change dropdown by @alextran1502 in #8806
- fix:(mobile): Updates old IMMICH text from the mobile settings modal by @martyfuhry in #8906
🖥️ Web
- feat(web): enhance ux/ui of the album list page by @Ethan13310 in #8499
- fix(web): bypass the onStackAssets shortcut when only one is selected by @Funk66 in #8559
- feat(web,a11y): slider accessibility improvements by @ben-basten in #8479
- fix(web): concurrency link on jobs page by @danieldietzler in #8572
- fix(web): some settings not disabled when using config file by @mertalev in #8576
- fix(web): reset to default button always being shown by @mertalev in #8577
- feat(web): paste photo from clipboard by @TomixUG in #8475
- feat(web): add search bar shortcuts by @danieldietzler in #8630
- chore(web): specify that HDR videos will always be transcoded by @patrontheo in #8634
- feat(web,a11y): standardize the FullScreenModal UI by @ben-basten in #8566
- chore(web): fixed typo expect instead of except by @patrontheo in #8638
- feat(web): loop video thumbnails by @lukashass in #8662
- Allow moving in photo spheres using one touch input instead of two. by @hrdl-github in #8620
- chore(web): move BaseModal to callback pattern by @ben-basten in #8696
- fix(web): ui tweaks by @mgabor3141 in #8757
- fix(web): focus escaping from modals by @ben-basten in #8730
- fix(web): fix scrollbar not allowing the user to go fully top or bottom by @Ethan13310 in #8637
- fix(web): remove query parameter when clearing search by @martabal in #8817
- fix(web): delete trashed item by @martabal in #8821
- fix(web): album description height by @martabal in #8818
- feat(web,a11y): consolidate BaseModal into FullScreenModal by @ben-basten in #8787
- fix(web,a11y): remove autofocus from input fields by @ben-basten in #8857
- feat(web): un-stack from the photos page ; fix stack count by @Ethan13310 in #8419
- feat(web): add page up and page down shortcuts by @martabal in #8910
- fix(web): notification number of people when editing faces by @martabal in #7352
- feat(web): add an option to fill the screen with the slideshow view by @martabal in #8909
⚡ CLI
📓 Documentation
- Make language gender neutral by @iamwillbar in #8535
- feat(docs): Add information about breaking changes by @aviv926 in #8524
- docs: pre-existing postgres by @mmomjian in #8549
- docs: pg_dumpall refinements by @mmomjian in #8546
- feat(docs): update Unraid installation guide by @mgabor3141 in #8540
- Fix typos: immcih -> immich by @vozhyk- in #8568
- Up-to-date information on the Smart Search feature by @aviv926 in #8625
- feat(docs):New information for sharing partners by @aviv926 in #8308
- Fix: Rename docker name in unraid setup docs by @Poolitzer in #8476
- docs: community projects by @jrasm91 in #8641
- docs: Pin to Postgres v14 in postgres-backup-local by @mmomjian in #8665
- docs: add Immich Folder Album Creator by @mmomjian in #8666
- adding podman quadlets documentation community project by @tbelway in #8684
- docs: fix earthdistance restore by @mmomjian in #8692
- docs: fix typo by @benmccann in #8698
- docs(ml): update hardware acceleration doc by @mertalev in #8700
- docs: clarify details of connecting to backend for development by @benmccann in #8727
- Add lightroom plugin to community projects by @midzelis in #8736
- docs: document type of checksum stored in DB by @mmomjian in #8737
- docs: DB queries cleanups by @mmomjian in #8740
- docs: Add community project by @mmomjian in #8759
- docs: note that uploads are disabled on demo app by @benmccann in #8786
- docs: files custom locations by @aviv926 in #8627
- docs: community guides by @aviv926 in #8812
- Docs: minor changes by @aviv926 in #8814
- docs: update community Guide/Projects, small PG query updates by @mmomjian in #8844
- add community project PSImmich by @hanpq in #8851
- docs: bunch of small changes by @mmomjian in #8854
- docs: fix vectors grant... again by @mmomjian in #8860
- Update oauth.md by @alvitali in #8794
- docs: link to storage label docs from storage template docs by @benmccann in #8911
🔨 Maintenance
- chore(deps): bump docker/setup-buildx-action from 3.2.0 to 3.3.0 by @dependabot in #8621
- chore(deps): update dependency eslint-plugin-unicorn to v52 by @renovate in #8629
- feat(gh-templates): Require non-duplicate confirmation on FR by @bo0tzz in #8618
- fix(gh-templates): Add required label attribute by @bo0tzz in #8632
- feat(github): Create CODEOWNERS file by @bo0tzz in #8636
- chore: add to codeowners by @danieldietzler in #8640
- feat: Improve error handling for Install Script by @mmomjian in #8422
- chore(deps): update node.js to 3fb85a6 by @renovate in #8643
- chore(deps): update node.js to 7e22729 by @renovate in #8644
- fix(deps): update typescript-projects by @renovate in #8647
- Revert "fix(deps): update typescript-projects (#8647)" by @alextran1502 in #8650
- fix(deps): update typescript-projects by @renovate in #8651
- chore(deps): update dependency @playwright/test to v1.43.0 by @renovate in #8671
- chore(deps): update prom/prometheus docker digest to 4f6c47e by @renovate in #8687
- fix(deps): update machine-learning by @renovate in #8646
- fix(deps): update dependency pillow to v10.3.0 [security] by @renovate in #8493
- chore: add code owner by @mertalev in #8701
- refactor: library e2e by @jrasm91 in #8693
- chore(deps): update grafana/grafana docker tag to v10.4.2 by @renovate in #8731
- fix(deps): update dependency reflect-metadata to ^0.2.0 by @renovate in #8784
- chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to 4de6145 by @renovate in #8828
- chore(deps): bump stumpylog/image-cleaner-action from 0.5.0 to 0.6.0 by @dependabot in #8841
- chore(deps): update dependency ruff to v0.3.6 by @renovate in #8850
- fix(deps): update typescript-projects by @renovate in #8834
- chore(deps): update base-image to v20240416 (major) by @renovate in #8660
- chore(deps): update node.js to d328c7b by @renovate in #8829
- chore(deps): update node.js to ec0c413 by @renovate in #8833
- fix(deps): update dependency gunicorn to v22 [security] by @renovate in #8863
- chore(deps): update registry.hub.docker.com/library/redis:6.2-alpine docker digest to 84882e8 by @renovate in #8913
- chore(deps): update redis:6.2-alpine docker digest to 84882e8 by @renovate in #8912
Other changes
- chore: added 'logs' field to bug template by @SandiyosDev in #8771
New Contributors
- @iamwillbar made their first contribution in #8535
- @BlackBadPinguin made their first contribution in #8553
- @mgabor3141 made their first contribution in #8540
- @vozhyk- made their first contribution in #8568
- @jellemdekker made their first contribution in #8619
- @pedrxd made their first contribution in #8561
- @TomixUG made their first contribution in #8475
- @Ynng made their first contribution in #8593
- @Poolitzer made their first contribution in #8476
- @patrontheo made their first contribution in #8634
- @akoscomp made their first contribution in #8617
- @tbelway made their first contribution in #8684
- @n00mkrad made their first contribution in #8491
- @midzelis made their first contribution in #8736
- @SandiyosDev made their first contribution in #8771
- @yparitcher made their first contribution in #8800
- @hanpq made their first contribution in #8851
- @iamamansharma made their first contribution in #8855
- @alvitali made their first contribution in #8794
Full Changelog: https://github.com/immich-app/immich/compare/v1.101.0...