Immich v3.0.0-rc.0 — Release Candidate
Warning
Disclaimer
This is a release candidate, not a stable release. It is subject to change and may contain bugs or breaking changes. As always, make sure you have a backup of your database and library before upgrading to this version.
We're excited to share our first release candidate (RC) for Immich v3: v3.0.0-rc.0. For information about how to use and test the RC, see below.
Release notes
Work in progress release notes can be found here:
https://pr-558.dev.immich.app/blog/v3.0.0-release
Server
To use this RC version on the server update the IMMICH_VERSION in your .env file:
- IMMICH_VERSION=v2
+ IMMICH_VERSION=v3.0.0-rc.0Then pull and restart:
docker compose pull && docker compose up -dMobile
To use this RC version on the mobile app, follow the appropriate link for your platform:
Android
You can download the APK the in release note below, or tap on "Join the beta" from the Google Play Immich page
iOS
Use the TestFlight link or scan the QR Code https://testflight.apple.com/join/JTSTucBd
If you run into any issues, please report them on GitHub so we can address them before the final release. Thank you for helping us test!
What's Changed
🚨 Breaking Changes
- refactor!: migrate class-validator to zod by @timonrieger in #26597
- refactor!: remove replace asset by @jrasm91 in #27022
- refactor!: remove my shared link dto by @jrasm91 in #27023
- chore!: remove deprecated env variables by @jrasm91 in #27802
- chore!: remove getRandom api endpoint by @bwees in #27780
- chore!: remove unused token response param by @jrasm91 in #27805
- refactor: yeet old timeline by @shenlong-tanwen in #27666
- chore!: remove old timeline sync endpoints by @jrasm91 in #27804
- chore!: remove deviceId and deviceAssetId by @danieldietzler in #27818
- chore!: rename API key schemas by @jrasm91 in #27828
- chore!: remove without assets by @jrasm91 in #27835
- fix: oauth issuerUrl validation by @bo0tzz in #27848
- fix!: do not allow insecure oauth requests by default by @bo0tzz in #27844
- fix!: set duration to null when not present by @meesfrensel in #26982
- chore!: remove /api/server/theme endpoint by @jrasm91 in #27880
- chore!: migrate album owner to album_user by @danieldietzler in #27467
- refactor!: change number to integer types by @timonrieger in #27912
- refactor(server)!: move correlationId to X-Correlation-ID response header by @timonrieger in #28139
- refactor(server)!: remove redundant error and statusCode fields from error responses by @timonrieger in #28140
- chore(server)!: drop pgvecto.rs support by @mertalev in #28159
- chore!: duration in milliseconds by @mertalev in #28003
- refactor(server)!: sanitize error messages to avoid leaking resource details by @timonrieger in #28154
- refactor(server)!: structured validation error responses by @timonrieger in #28204
- feat(server)!: add isOwned filter to albums API by @timonrieger in #28213
- chore(ml)!: require numpy 2.4 by @mertalev in #28158
- fix(deps): update dependency nestjs-otel to v8 by @renovate[bot] in #27863
- chore(ml)!: remove deprecated envs by @mertalev in #28326
- chore(server)!: remove libopus enum by @mertalev in #28325
- refactor!: remove asset faces from AssetResponseDto by @bwees in #27779
- refactor(server)!: drop empty string to null conversion by @timonrieger in #28808
- refactor(server)!: remove changeExpiryTime by @timonrieger in #28816
- refactor!: disallow star rating < 1 by @meesfrensel in #27896
🫥 Deprecated Changes
- refactor(server): deprecate PUT routes in favor of PATCH by @timonrieger in #28859
🔒 Security
🚀 Features
- feat: mobile editing by @bwees in #25397
- feat: album map markers endpoint by @jrasm91 in #27830
- feat(server): added backchannel logout api endpoint by @santanoce in #26235
- feat(server): add OIDC logout URL override option by @LJspice in #27389
- feat: android periodic work manager task by @shenlong-tanwen in #23563
- feat(web): custom video player controls by @meesfrensel in #26183
- feat(web): add full-path search mode to UI by @mws-weekend-projects in #26758
- feat: recently added assets page by @benbeckford in #28272
- feat(mobile): slideshow view by @benbeckford in #28421
- feat(mobile): "Add Tags" asset multiselect option by @benjamonnguyen in #26269
- feat: workflows & plugins by @jrasm91 in #26727
- feat(server): hls with real-time transcoding by @mertalev in #28230
- feat(web): hls player by @mertalev in #28312
- feat(mobile): Android. Immich as a gallery / image viewer app by @PeterOmbodi in #26109
- feat: user upload heatmap by @bondeabhijeet in #28593
- feat(mobile): ocr support by @YarosMallorca in #26523
- feat: geolocation workflow filter by @benbeckford in #28961
- feat: image quality option in sharing by @alextran1502 in #28918
- feat: integrity check jobs (missing files, untracked files, checksums) by @insertish in #24205
🌟 Enhancements
- feat(web): persist state of file path information in details panel by @cratoo in #27770
- feat: commands by @jrasm91 in #27546
- feat: upgrade immich/ui by @jrasm91 in #27792
- feat: filter users on share by @OdinOxin in #27732
- fix(server): render storage template date/time tokens in UTC (#24350) by @migpovrap in #26917
- feat(web): lazy load library and server statistics by @etnoy in #26406
- feat: sort users alphabetically when adding to album by @OdinOxin in #27731
- feat: auth logout page by @jrasm91 in #27831
- chore: improve randomness of /search/random endpoint by @StevenMassaro in #27531
- feat: dynamic languages by @jrasm91 in #27869
- feat: cache shared link by @danieldietzler in #27889
- feat(server): add configurable OAuth prompt parameter by @sparsh985 in #26755
- feat(server): add MPO file type support by @git-akihakune in #27963
- feat(mobile): action bottom sheet on map timeline by @YarosMallorca in #27515
- feat(server): track video metadata by @mertalev in #28023
- feat(enhancement): Navigate stack with up and down arrow keys by @cratoo in #27854
- fix(web): migrate people management component to page, enabling tooltips by @SkyDev125 in #26971
- chore(mobile): add box shadow to asset details by @uhthomas in #27510
- feat: hide hidden person from memories by @sakshamchawla in #20877
- feat(mobile): increased tap area on video player overlay by @YarosMallorca in #27269
- feat(web): Add metadata overlay to slideshow by @timonrieger in #24627
- feat(web): add individual filter removal from search result chips by @timonrieger in #28166
- feat(mobile): trash/restore all by @YarosMallorca in #28116
- feat: display more info in asset viewer by @alextran1502 in #24630
- feat(server): allow subpaths for machine learning URL by @gnojus in #28427
- feat(ui): Shared URL input configuration by @Lauritz-Tieste in #27105
- refactor: enhance shared link UI and functionality by @Lauritz-Tieste in #26464
- feat: upload and add local asset directly to album by @alextran1502 in #28123
- feat: Selectable metadata in duplicates utility with diffing by @ollioddi in #26328
- fix: improve form control focus visibility by @Caltsic in #28512
- feat: command for user pages by @alextran1502 in #28554
- refactor: use ControlBar UI Library component by @bwees in #28567
- feat: workflow template by @alextran1502 in #28553
- feat(mobile): improve downloading algorithm for sharing by @YarosMallorca in #27312
- feat: search by album name and id by @jrasm91 in #28672
- feat: upload local assets to album from bottom sheet by @alextran1502 in #28531
- feat: places in context search by @timonrieger in #28768
- feat: minimum face count per user by @timjonez in #27452
- feat: show notification and battery optimization warning by @shenlong-tanwen in #26610
- feat: workflows drag and drop enhancements by @danieldietzler in #28764
- feat(mobile): min face count per-user by @YarosMallorca in #28805
- refactor(server): allow -1 rating again by @timonrieger in #28886
- feat(web): warn before overwriting existing locations in geolocation utility by @yoshovski in #28840
- feat: warn if microservices worker is missing by @bo0tzz in #28869
🐛 Bug fixes
- fix(web): center images in RTL layouts (#27678) by @Nicolas-micuda-becker in #27753
- fix(mobile): add keys for person tiles in search by @YarosMallorca in #27689
- fix(web): selection clearing on preview by @YarosMallorca in #27702
- fix: asset multi select download shortcut by @danieldietzler in #27784
- fix(web): add partner photo to album from multiselect by @YarosMallorca in #27767
- fix: redirect original by @danieldietzler in #27759
- fix: make web build stage deterministic by @bo0tzz in #27823
- fix(web): svelte regression - cancel video preview fetch when bind:this is cleared early by @midzelis in #27713
- fix(web): stale adaptive image when original overlays preview by @midzelis in #27621
- fix(mobile): readonly redirect when not logged in by @YarosMallorca in #27728
- fix(web): close edit faces panel on Escape key press by @midzelis in #27519
- fix(oauth): normalize email claim to lowercase and trim before account lookup and registration by @timdobras in #26841
- fix(web): use event for zooming out after opening face editor by @meesfrensel in #27789
- fix: sanitize filenames before adding to zip by @bo0tzz in #27893
- fix(server): require at least one field to be set when updating memory by @fredfloydd in #27842
- fix(web): compute hashes for uploads in chunks by @fredfloydd in #27878
- fix(web): fix stale album page load by @fredfloydd in #27825
- fix(web): prevent interaction with detail panel behind person side panel by @midzelis in #27309
- fix: show neon light by @alextran1502 in #27994
- fix(mobile): zero exposure by @YarosMallorca in #28017
- fix(mobile): clear local data on forced logout by @LeLunZ in #27957
- fix(mobile): enable autoplay for motion photos in video viewer by @LeLunZ in #27961
- fix(mobile): thumbnail transition to asset viewer by @LeLunZ in #27850
- fix: jump to timeline on new auto_router update by @alextran1502 in #28022
- fix(mobile): delete assets on trash empty, Android by @PeterOmbodi in #26070
- fix(ml): handle empty/corrupt images in face detection by @yosit in #27391
- fix(web): refresh memories hourly by @meesfrensel in #28114
- fix(web): large files: better handling of asset deletions by @meesfrensel in #28117
- fix(web): double video playback on map timeline by @YarosMallorca in #28090
- fix(mobile): suppress asset stack UI in trash timeline by @PeterOmbodi in #26536
- fix(web): timeline scroll when pressing back from stacked asset by @Snowknight26 in #28163
- fix(server): selectively apply metadata bitstream filter for video thumbnails by @pinhao in #28162
- fix(web): fix shared link /s/photos.* navigation after password login by @meesfrensel in #27788
- fix(ml): respect time zone for logs in cuda container by @AyaanMAG in #28155
- fix: librknnrt permissions in machine-learning by @DavidTheFighter in #28216
- fix(server): validate duplicate group ownership before dismissal by @timonrieger in #28221
- fix(web): correct timeline yesterday label across month boundaries by @michelheusschen in #28183
- fix(mobile): show lens info without lens name by @benbeckford in #28234
- fix: stale person name after merge by @danieldietzler in #28222
- fix(web): shared album avatars opening modal by @meesfrensel in #26719
- fix(mobile): prevent asset loading issues when changing page or when closing memories by @LeLunZ in #27596
- fix(mobile): correct filter default and UI desync in similar photos search by @TheBestX11 in #27516
- fix(server): hide isFavorite from partner asset sync stream by @timonrieger in #28035
- fix(mobile): restore notification plugin init by @santoshakil in #28284
- fix(mobile): mounted check before setState in album sync action by @santoshakil in #28300
- fix(mobile): avoid duplicate assets in album view by @stfn42 in #28152
- fix(mobile): Deduplicate assets in person view timeline by @thowdev in #26723
- fix(deployment): remove unneeded volume by @mmomjian in #28307
- fix: mobile upload duration type by @alextran1502 in #28362
- fix: deep link for assets when asset viewer already open by @bwees in #27971
- fix: kekab icon colors in light mode by @shenlong-tanwen in #28366
- fix: indexes on remote_asset_entity by @shenlong-tanwen in #28264
- fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle by @santoshakil in #28382
- fix: ignore icc profile make and model by @jrasm91 in #28412
- fix(mobile): don't block app open on slow validateAccessToken by @santoshakil in #28405
- fix(mobile): add restore option to trashed assets by @inesiscosta in #27442
- fix(mobile): use correct delete action by @ByteSizedMarius in #26575
- fix(server): dedupe database backup jobs by @rdeaton in #28341
- fix(mobile): cronet buffer overflow on compressed thumbnails by @santoshakil in #28439
- fix(mobile): cronet thumbnail buffer overflow regression from #28439 by @santoshakil in #28450
- fix(mobile): mounted check in ThumbnailTile hero flight listener by @santoshakil in #28451
- fix(mobile): don't force-unwrap nil localizedTitle in ios getAlbums by @santoshakil in #28452
- fix(web): work around Chrome HDR image seam lines during zoom by @midzelis in #27715
- fix(ios): respect status bar scroll to top in timeline views by @agg23 in #28469
- fix(mobile): asset viewer stuck on spinner after rotation by @LeLunZ in #28019
- fix(web): timeline stuttering with many assets in 1 day by @benbeckford in #28509
- fix(mobile): preserve zoom level during image loading and live photo playback by @LeLunZ in #27960
- fix(ml): stabilize MIGraphX inference by @fabianwimberger in #28444
- fix: await sync asset v2 by @bwees in #28569
- fix: strip metadata from timeline responses for shared links without exif sharing by @danieldietzler in #28644
- fix: Refresh local album overview page after asset deletion by @Lauritz-Tieste in #28586
- fix(server): prevent locked assets from leaking to partners by @timonrieger in #28652
- refactor(web): replace per-asset viewport proximity with day-tier active indices by @midzelis in #28597
- fix: timeline scroll flicker by @alextran1502 in #28653
- fix: api repositories using stale endpoint by @shenlong-tanwen in #28667
- fix: disallow cross origin/non http protocols for continueUrl on login by @bwees in #28706
- fix(web): skip thumbhash fade for offscreen thumbnails by @midzelis in #27335
- fix(web): prevent partner assets from being selected in geolocation utility by @okxint in #28737
- fix(mobile): invisible ink splashes in asset sheet by @timonrieger in #28756
- fix!: unauthorized face creation by @shenlong-tanwen in #28561
- fix(mobile): proper background task cleanup by @mertalev in #28694
- fix(cli): prevent out-of-memory on file upload due to undici storing the request body by @moversity in #28723
- fix: error log on aborted uploads by @jrasm91 in #28806
- fix(server): respect timezone in iso date string encoding by @timonrieger in #28810
- test: fix tests when OpenVINO provider is available by @nekowinston in #28802
- fix(mobile): run iOS bg task phases in parallel by @santoshakil in #28293
- fix: error handling by @jrasm91 in #28843
- fix: cross isolate drift watchers by @shenlong-tanwen in #28862
- fix: reload timeline on group by setting change by @shenlong-tanwen in #28864
- fix(web): use irot/imir tags for HEIF Orientation by @joojoooo in #27820
- fix: detail panel faces reactivity issues by @danieldietzler in #28910
- fix(server): hide isFavorite from album asset sync stream by @timonrieger in #28923
- fix(mobile): show memory and folder dates in local time by @santoshakil in #28941
- fix(mobile): show error when creating an album fails by @santoshakil in #28942
- fix(mobile): add album picker to archive bottom sheet by @santoshakil in #28953
- fix: normalize diacritics in person name search in Web & Mobile by @pedrovieira in #28887
- fix(web): Prevent face editor from closing when dismissing tag confirmation by @pedrovieira in #28900
- fix(mobile): map timeline layout crash by @YarosMallorca in #28878
- fix(mobile): deduplicate people in asset details panel by @santoshakil in #28972
- fix(mobile): keep timezone when editing asset date time by @santoshakil in #28978
- fix(mobile): stale details after editing asset date by @santoshakil in #28977
- fix(mobile): show albums whose assets are all trashed by @santoshakil in #28985
- fix(mobile): give android notification channels proper names by @santoshakil in #28986
- fix: Improving scroll behavior on image stacks that overflow the screen by @BlankCanvasStudio in #28885
- fix(web): focus on scrollable element on load by @timonrieger in #29004
📚 Documentation
- fix(docs): instructions on how to use local immich ui by @YarosMallorca in #27813
- fix(docs): helmet file affected containers by @mmomjian in #27939
- fix(docs): Update Tailscale free tier user and device limits by @Hakuin123 in #28151
- docs: update rocm installation instructions by @aigarius in #25434
- fix(docs): document
upgrade-insecure-requestsdefault by @meesfrensel in #28279 - fix(docs): missing colon in config file doc by @SuperSandro2000 in #28313
- fix: update server-commands subcommand list by @bo0tzz in #28402
- feat(docs): add fixed subnet guide for Synology to prevent firewall issues by @racehd in #26554
- chore(docs): update FAQ with profile picture change instructions by @tvangemert in #28634
- chore: update documentation to use mise commands by @timonrieger in #28515
- fix(docs): v3 bumps by @mmomjian in #29007
🌐 Translations
- feat: latest language requests by @danieldietzler in #28858
- chore: update translations by @weblate in #27764
New Contributors
- @OdinOxin made their first contribution in #27732
- @migpovrap made their first contribution in #26917
- @StevenMassaro made their first contribution in #27531
- @timdobras made their first contribution in #26841
- @santanoce made their first contribution in #26235
- @fredfloydd made their first contribution in #27842
- @sparsh985 made their first contribution in #26755
- @LJspice made their first contribution in #27389
- @git-akihakune made their first contribution in #27963
- @shaun0927 made their first contribution in #27900
- @yosit made their first contribution in #27391
- @Hakuin123 made their first contribution in #28151
- @pinhao made their first contribution in #28162
- @AyaanMAG made their first contribution in #28155
- @DavidTheFighter made their first contribution in #28216
- @benbeckford made their first contribution in #28234
- @bhugh made their first contribution in #27884
- @SkyDev125 made their first contribution in #26971
- @aigarius made their first contribution in #25434
- @mws-weekend-projects made their first contribution in #26758
- @TheBestX11 made their first contribution in #27516
- @sakshamchawla made their first contribution in #20877
- @santoshakil made their first contribution in #28284
- @stfn42 made their first contribution in #28152
- @thowdev made their first contribution in #26723
- @SuperSandro2000 made their first contribution in #28313
- @racehd made their first contribution in #26554
- @inesiscosta made their first contribution in #27442
- @gnojus made their first contribution in #28427
- @rdeaton made their first contribution in #28341
- @agg23 made their first contribution in #28469
- @ollioddi made their first contribution in #26328
- @Caltsic made their first contribution in #28512
- @fabianwimberger made their first contribution in #28444
- @tvangemert made their first contribution in #28634
- @BlankCanvasStudio made their first contribution in #28620
- @pneuly made their first contribution in #28610
- @timjonez made their first contribution in #27452
- @moversity made their first contribution in #28723
- @nekowinston made their first contribution in #28802
- @bondeabhijeet made their first contribution in #28593
- @joojoooo made their first contribution in #27820
- @pedrovieira made their first contribution in #28887
- @yoshovski made their first contribution in #28840
Full Changelog: v2.7.5...v3.0.0-rc.0