Repository navigation
fix(mobile): stop long images squishing on ios - #29367
Conversation
|
📱 Android release APK (universal) — Installs as a separate app (applicationId |
mertalev
left a comment
There was a problem hiding this comment.
Does just bounding the request dimensions to 16384 work?
|
@mertalev tested 16384 on my device and it works fine. exact and fast gave the same result here, but apple only guarantees exact matches the size while fast can come back slightly larger, so at a 16384 cap fast could land back over the texture limit and squish again, and exact cost nothing here so i kept it. the only reason i kept 8192 is memory, since a near square giant like a 16000 by 16000 import stays under 16384 on each side but still decodes to about 1gb and can crash the old 2gb phones we support, while 8192 holds it around 256mb. so maybe cap the long edge at 16384 but also cap total pixels around 67mp, so panoramas keep full detail and a square giant still stays safe, or just keep 16384 if that case feels too rare. happy either way, let me know what you prefer. |
|
I think fast is preferable since it can do more efficient resizing (like a one pass box filter vs a more expensive two pass algorithm). I also don't really like adding caps. We already disable loading the original by default. If someone wants to load the original, they want it at the highest possible resolution. |
makes sense, ill switch to fast and just bound at 16384 since going fully uncapped is what squishes. dropping the extra cap though, agreed load original should be full res. updating the pr. |
|
@mertalev pushed one more commit. the normal preview (load original off) had the same squish, it's a separate request so the first fix missed it. same idea and no cap, just hand photokit a target that already matches the image ratio so aspectfill cant stretch it. full res when load original is off since the preview is the final image, light otherwise. normal photos untouched, unit test added, tested on my 15 pro max both ways. |
agg23
left a comment
There was a problem hiding this comment.
I don't like that we don't have a path right now for full size viewing, but this is better than breaking things.
…-aspect-wt # Conflicts: # mobile/lib/presentation/widgets/images/image_provider.dart # mobile/lib/presentation/widgets/images/local_image_provider.dart # mobile/test/presentation/widgets/images/local_image_provider_test.dart
* fix(mobile): stop long images squishing on ios * fix(mobile): bound the original to 16384 with fast resize * refactor(mobile): reuse the shared request options for the original * fix(mobile): fix squished long image previews on ios * fix(mobile): retry with exact resize when fast resize overshoots the texture bound * fix(mobile): clamp preview targets to a minimum of one pixel * fix nullable cast flagged by the stricter lints
…2.0) (#2068) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [immich-app/immich](https://github.com/immich-app/immich) | minor | `v3.1.0` → `v3.2.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/567) for more information. --- ### Release Notes <details> <summary>immich-app/immich (immich-app/immich)</summary> ### [`v3.2.0`](https://github.com/immich-app/immich/releases/tag/v3.2.0) [Compare Source](immich-app/immich@v3.1.0...v3.2.0) ##### v3.2.0 Welcome to Immich `v3.2.0`! This release includes many new features as well as the usual collection of bug fixes and cleanups. Keep reading below for a list of highlights. ##### Highlights - Docker compose builder - Revamped search UI (web) - Search API v2 (server) - View own people in shared assets, cross-user clustering - Workflow tags trigger and actions - Dedicated memories page - Tag renaming (web) - View assets in map viewport (web) ##### Docker compose builder We recently released our new [docker compose builder](https://immich.app/docker-compose-builder), which lets you put together a custom compose file for Immich more easily. Please try it out and give us [your feedback](immich-app/immich#31232)! ##### Search API v2 (server) We have built an entirely new search API that, amongst other things, will support searching within albums and combining multiple search filters with both AND and OR operations. Some of these features will be exposed to the search UI interfaces in the future, others will be used to power other fancy features as well as give 3rd party tools more functionality. If you are interested in the particular changes and examples for how to use the new API, feel free to check out the PR [#​30179](immich-app/immich#30179) as well as our API documentation at <https://api.immich.app/endpoints/search/searchAssets>. ##### Revamped search UI (web) We have a new designer who helped us remodel the search modal, which has been pretty complex before and looks a lot more visually appealing in our opinion now. It still supports the same functionality, but with some quality of life additions as well as a significantly simpler look. In the future, we will extend this to also include some of the new features enabled by the new search API. Stay tuned and give us your feedback on the new design! <img alt="image" src="https://github.com/user-attachments/assets/aa1cf886-498d-4e9f-b7cf-96dcb8300818" /> *New search modal filtering by images with Jason in it, taken in the last 30 days in BC, Canada, tagged "Long Beach" with the context search term "Swimming"* <img alt="image" src="https://github.com/user-attachments/assets/d87e24db-d314-4462-a204-a9a3020c1ddd" /> *Advanced filters showing camera make, model, and lens model, as well as filers for favorite and archive status, and album membership* ##### View own people in shared assets We are very happy to ship the first step towards better sharing. You can now have people recognized across trusted users, which also allows you to view people you already have records of in any shared assets! In the [user sharing settings](https://my.immich.app/user-settings?isOpen=sharing) there is a new section; cluster group. <img alt="cluster group" src="https://github.com/user-attachments/assets/498d914b-40b2-427f-b0ba-04803706772a" /> *The user sharing settings showing a cluster group with Jane Doe and Mich in it* You can invite users on your instance that you trust to your own group, or join another group you have been invited to. These cluster groups make it possible to identify people in assets shared by users in the same group. They also likely improve accuracy, as the clustering will operate on a bigger pool of faces. People names and birth dates are still set on a per-user level and aren’t (yet) shared with users in the same group. As of now, this **requires** resetting facial recognition for all users in the group, in order for the changes to apply retroactively for all assets. This means, names and birth dates will be lost, and the results can vary slightly compared to before. Only faces recognized by machine learning will be affected by this. We may be able to do some non-destructive merging in the future, but for now this is a necessary step in order to fully benefit from the feature. That is why we put a button in the sharing settings for every user in the group (specifically also non-admins) to reset the facial recognition for that group. ##### Workflow tags trigger and actions Workflows have gotten a new trigger. You can now do automations when an asset has been tagged. <p align="center"> <img width="400" alt="trigger list" src="https://github.com/user-attachments/assets/8d949bce-8ec6-4be2-96a0-5fca1715ae2a" /> </p> In order to use this new trigger, there is also a new filter that allows you to match specific tags. It supports matching for all, any, or none in the provided list. <p align="center"> <img width="400" alt="tag trigger" src="https://github.com/user-attachments/assets/91435b14-6ca8-41da-b3d3-73c7704df695" /> </p> Lastly, a new workflow action to add tags to the current asset has also been added. It allows to add a list of tags at once. <p align="center"> <img width="400" alt="add tag step" src="https://github.com/user-attachments/assets/04910b74-04ee-4564-8b2f-48f3d5e76dbf" /> </p> ##### Dedicated memories page The new memories page allows you to view past memories. You can also favorite memories and they will show up here and never get deleted. The goal is for this to be a place you can come back to at any point and reminisce in old memories. <p > <img width="600" alt="image" src="https://github.com/user-attachments/assets/0f526915-b53a-484e-8d99-ce0caa9698fd" /> <img width="200" alt="Memory page on the mobile app" src="https://github.com/user-attachments/assets/b11b8534-22c9-417c-a57b-922bada486c5" /> </p> ##### Tag renaming (web) Finally, you can also rename existing tags. This is a small addition to the edit tag modal on web, but under the hood was more complicated than you might expect. <p align="center"> <img width="400" alt="tag renaming" src="https://github.com/user-attachments/assets/091acef9-1056-4264-9e89-c44d9ddfdbc7" /> </p> ##### View assets in map viewport (web) Similarly to showing a timeline all assets in a cluster on the map when clicking on it, you can now open a timeline for assets currently in the viewport. There is a new button among the map controls to show assets in the area. It will open a timeline that will update as you pan around the map. <img alt="map view port with timeline" src="https://github.com/user-attachments/assets/90b0aeb5-2e99-4dc5-a8cb-592c3ed71e8f" /> *The map page showing a timeline of assets currently in the viewport on the right* As always, please consider supporting the project. 🎉 Cheers! 🎉 ##### Support Immich <p align="center"> <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!"> </p> If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store> *** ##### What's Changed ##### 🚀 Features - feat: workflow logging by [@​benbeckford](https://github.com/benbeckford) in [#​29878](immich-app/immich#29878) - feat(web): new search ui by [@​benbeckford](https://github.com/benbeckford) in [#​30279](immich-app/immich#30279) - feat: new config endpoints by [@​jrasm91](https://github.com/jrasm91) in [#​30881](immich-app/immich#30881) - feat: cluster groups by [@​jrasm91](https://github.com/jrasm91) in [#​30739](immich-app/immich#30739) - feat: asset file apis by [@​jrasm91](https://github.com/jrasm91) in [#​25900](immich-app/immich#25900) - feat: memories view by [@​benbeckford](https://github.com/benbeckford) in [#​28675](immich-app/immich#28675) - feat(mobile): show asset owner in asset details by [@​Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#​29302](immich-app/immich#29302) - feat(server): new search API by [@​timonrieger](https://github.com/timonrieger) in [#​30179](immich-app/immich#30179) ##### 🌟 Enhancements - feat: store null instead of empty string for album.description by [@​gPinato](https://github.com/gPinato) in [#​30123](immich-app/immich#30123) - feat: log hint about downgrades when migration is missing by [@​bo0tzz](https://github.com/bo0tzz) in [#​30493](immich-app/immich#30493) - feat(web): search album description in add-to-album modal by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30462](immich-app/immich#30462) - feat: Display the number of selected items in AlbumPickerModal title by [@​statox](https://github.com/statox) in [#​30485](immich-app/immich#30485) - feat(widget): add toggle to match icon theme by [@​bwees](https://github.com/bwees) in [#​30428](immich-app/immich#30428) - feat: workflow asset tag trigger/filter/action by [@​benbeckford](https://github.com/benbeckford) in [#​29043](immich-app/immich#29043) - feat: iOS dynamic background ids by [@​mikes1991gh](https://github.com/mikes1991gh) in [#​30574](immich-app/immich#30574) - feat: actions undo handling by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30481](immich-app/immich#30481) - feat: rotate an API key by [@​bwees](https://github.com/bwees) in [#​30801](immich-app/immich#30801) - fix(cli): enforce node engine version on start by [@​bo0tzz](https://github.com/bo0tzz) in [#​30437](immich-app/immich#30437) - chore(server): migrate library e2e tests by [@​etnoy](https://github.com/etnoy) in [#​27277](immich-app/immich#27277) - feat: add oauth account management url by [@​sacha-c](https://github.com/sacha-c) in [#​30873](immich-app/immich#30873) - feat(web): tag renaming v2 by [@​jorbrock](https://github.com/jorbrock) in [#​27909](immich-app/immich#27909) - chore: search filter animation improvement and reactive search cue example by [@​alextran1502](https://github.com/alextran1502) in [#​30866](immich-app/immich#30866) - perf(web): use hash-wasm SHA-1 with pure-JS fallback for upload hashing by [@​mosh-dev](https://github.com/mosh-dev) in [#​30107](immich-app/immich#30107) - fix: don't swallow fetch errors by [@​bo0tzz](https://github.com/bo0tzz) in [#​30496](immich-app/immich#30496) - feat(mobile): map asset number by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​28911](immich-app/immich#28911) - feat: allow users to re-run facial recognition for their group by [@​danieldietzler](https://github.com/danieldietzler) in [#​30965](immich-app/immich#30965) - feat(web): view assets in map viewport by [@​rickytrevor](https://github.com/rickytrevor) in [#​27492](immich-app/immich#27492) ##### 🐛 Bug fixes - fix: make sure iOS memory widget render by [@​alextran1502](https://github.com/alextran1502) in [#​30172](immich-app/immich#30172) - fix: calendar heatmap permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30310](immich-app/immich#30310) - fix: calendar heatmap api key permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30314](immich-app/immich#30314) - fix(deployment): matplotlib in rootless deployments by [@​mmomjian](https://github.com/mmomjian) in [#​30328](immich-app/immich#30328) - fix(mobile): refresh person thumbnail when the featured photo changes by [@​santoshakil](https://github.com/santoshakil) in [#​29350](immich-app/immich#29350) - fix: assetFileFilter path matching by [@​benbeckford](https://github.com/benbeckford) in [#​30394](immich-app/immich#30394) - fix: shared check for server setup availability by [@​bo0tzz](https://github.com/bo0tzz) in [#​30311](immich-app/immich#30311) - fix(mobile): resolve owned assets when partner owns identical asset by [@​agg23](https://github.com/agg23) in [#​30137](immich-app/immich#30137) - fix(web): Fix face thumbnail when swapping merge direction by [@​lhvy](https://github.com/lhvy) in [#​30466](immich-app/immich#30466) - fix(server): reject invalid or deleted user when creating a partner by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30431](immich-app/immich#30431) - fix(server): remove the asset row when an upload fails after creating it by [@​santoshakil](https://github.com/santoshakil) in [#​30349](immich-app/immich#30349) - fix(mobile): correct mislabeled Bengali locale entry by [@​DrHaque](https://github.com/DrHaque) in [#​30519](immich-app/immich#30519) - fix(mobile): sync stack changes from the websocket by [@​santoshakil](https://github.com/santoshakil) in [#​30479](immich-app/immich#30479) - fix: metadata extraction as LensModel can be a float by [@​danieldietzler](https://github.com/danieldietzler) in [#​30512](immich-app/immich#30512) - fix(mobile): run one more sync round when a request arrives mid sync by [@​santoshakil](https://github.com/santoshakil) in [#​30478](immich-app/immich#30478) - fix: use setRequireOriginal on SDK 29 and above by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​29072](immich-app/immich#29072) - fix(mobile): stale local renders after editing a photo on device by [@​santoshakil](https://github.com/santoshakil) in [#​30415](immich-app/immich#30415) - fix(mobile): stop websocket reconnect loop draining battery when server is unreachable by [@​santoshakil](https://github.com/santoshakil) in [#​29901](immich-app/immich#29901) - fix(mobile): stop long images squishing on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29367](immich-app/immich#29367) - fix(mobile): keep backup remainder from going negative by [@​santoshakil](https://github.com/santoshakil) in [#​29011](immich-app/immich#29011) - fix(mobile): handle asset websocket events by [@​santoshakil](https://github.com/santoshakil) in [#​30499](immich-app/immich#30499) - fix(mobile): stop disabling androidx.startup initializers by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30559](immich-app/immich#30559) - fix: map not updating after viewing an asset by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30601](immich-app/immich#30601) - fix(deployment): Add huggingface cache directory to Dockerfile by [@​mmomjian](https://github.com/mmomjian) in [#​30357](immich-app/immich#30357) - fix(mobile): video playback controls dead for backed up videos opened from search by [@​santoshakil](https://github.com/santoshakil) in [#​30587](immich-app/immich#30587) - fix(mobile): decode remote thumbnails at displayed size by [@​santoshakil](https://github.com/santoshakil) in [#​29965](immich-app/immich#29965) - fix(mobile): don't let a frozen sync block syncing on resume by [@​santoshakil](https://github.com/santoshakil) in [#​29870](immich-app/immich#29870) - fix: face label clipping by [@​danieldietzler](https://github.com/danieldietzler) in [#​30712](immich-app/immich#30712) - fix: owner cascade delete album by [@​danieldietzler](https://github.com/danieldietzler) in [#​30692](immich-app/immich#30692) - fix(mobile): prevent iOS status bar scroll to top during transitions by [@​agg23](https://github.com/agg23) in [#​30717](immich-app/immich#30717) - fix(mobile): disable iOS smart quotes/dashes in email/password inputs by [@​agg23](https://github.com/agg23) in [#​30767](immich-app/immich#30767) - fix(mobile): prevent snapping to center on pinch-to-zoom release ([#​29207](immich-app/immich#29207)) by [@​cmdPromptCritical](https://github.com/cmdPromptCritical) in [#​29343](immich-app/immich#29343) - fix: shared link create validation by [@​danieldietzler](https://github.com/danieldietzler) in [#​30762](immich-app/immich#30762) - fix(mobile): mark finished downloads complete instead of leaving them stuck by [@​santoshakil](https://github.com/santoshakil) in [#​29023](immich-app/immich#29023) - fix: freeze on navigating back album description by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30781](immich-app/immich#30781) - fix(server): guard createAll against empty values list by [@​tech00exploere](https://github.com/tech00exploere) in [#​30837](immich-app/immich#30837) - fix(server): respect backpressure in the sync stream by [@​enol5423](https://github.com/enol5423) in [#​30764](immich-app/immich#30764) - fix(server): update ocr & faces after asset edit by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29303](immich-app/immich#29303) - fix(mobile): resend an upload once when the connection dies before a response by [@​santoshakil](https://github.com/santoshakil) in [#​30843](immich-app/immich#30843) - fix(mobile): cannot deep link to memory lane ([#​30634](immich-app/immich#30634)) by [@​nikhilpodila](https://github.com/nikhilpodila) in [#​30787](immich-app/immich#30787) - fix: redis cli ping command by [@​mmomjian](https://github.com/mmomjian) in [#​30329](immich-app/immich#30329) - fix(server): do not throw on unparsable DB\_URL when building backup arguments by [@​NoiceHax](https://github.com/NoiceHax) in [#​30759](immich-app/immich#30759) - fix(server): Sort stacked assets by creation date by [@​timonrieger](https://github.com/timonrieger) in [#​24033](immich-app/immich#24033) - fix(web): gracefully handle map errors when WebGL is disabled by [@​meesfrensel](https://github.com/meesfrensel) in [#​26538](immich-app/immich#26538) - fix(server): unicode email validation by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30871](immich-app/immich#30871) - fix(mobile): order album/place/person timelines by local date by [@​santoshakil](https://github.com/santoshakil) in [#​29338](immich-app/immich#29338) - chore(mobile): update flutter-maplibre-gl to 0.27.0 by [@​agg23](https://github.com/agg23) in [#​30892](immich-app/immich#30892) - fix(web): download archives via html POST forms by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​30021](immich-app/immich#30021) - fix(server): library exclusion patterns can soft-delete assets outside their directory by [@​PAtreju](https://github.com/PAtreju) in [#​30850](immich-app/immich#30850) - fix(mobile): dedupe stale remote\_asset rows on sync by [@​santoshakil](https://github.com/santoshakil) in [#​28445](immich-app/immich#28445) - fix(server): correct asset dimensions from exif metadata by [@​fuergaosi233](https://github.com/fuergaosi233) in [#​29244](immich-app/immich#29244) - fix: quote database owner in restore by [@​danieldietzler](https://github.com/danieldietzler) in [#​30905](immich-app/immich#30905) - fix(mobile): permanently delete local copies when moving to the locked folder by [@​santoshakil](https://github.com/santoshakil) in [#​29730](immich-app/immich#29730) - fix(server): let a second metadata extraction replace stored AV metadata by [@​RxChi1d](https://github.com/RxChi1d) in [#​30900](immich-app/immich#30900) - fix: do not exit search screen on back during multiselect by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30689](immich-app/immich#30689) - fix(mobile): respect 24h system setting by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30792](immich-app/immich#30792) - fix: maintentance return URL sanitization by [@​bwees](https://github.com/bwees) in [#​30948](immich-app/immich#30948) - fix: remove partner assets from existing memories by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​28950](immich-app/immich#28950) - fix(server): correct tag create operations by [@​jorbrock](https://github.com/jorbrock) in [#​30877](immich-app/immich#30877) - fix: thumbnail generation for specific SVGs by [@​danieldietzler](https://github.com/danieldietzler) in [#​30908](immich-app/immich#30908) - fix(mobile): aspect ratio change by [@​ferraridamiano](https://github.com/ferraridamiano) in [#​30939](immich-app/immich#30939) - fix: throw a typed error on malformed api responses by [@​bo0tzz](https://github.com/bo0tzz) in [#​31006](immich-app/immich#31006) - fix(web): restore timeline scroll when the asset id cannot be resolved by [@​thejeff77](https://github.com/thejeff77) in [#​30916](immich-app/immich#30916) - fix(web): do not play memory video if the `MemoryVideoViewer` element is not visible by [@​Zlendy](https://github.com/Zlendy) in [#​30947](immich-app/immich#30947) - fix(web): preserve slideshow pause state when viewing video slides by [@​tech00exploere](https://github.com/tech00exploere) in [#​30278](immich-app/immich#30278) - fix: draggable Immich logo by [@​danieldietzler](https://github.com/danieldietzler) in [#​31055](immich-app/immich#31055) - fix(server): kill pg\_dump when a backup fails so it stops holding table locks by [@​justadityaraj](https://github.com/justadityaraj) in [#​30851](immich-app/immich#30851) - fix(web): misleading toast notification by [@​brn-lin](https://github.com/brn-lin) in [#​30976](immich-app/immich#30976) - fix(web): map by [@​jrasm91](https://github.com/jrasm91) in [#​31056](immich-app/immich#31056) - fix: external library statistics for excluded assets by [@​stevenjoezhang](https://github.com/stevenjoezhang) in [#​28462](immich-app/immich#28462) - feat: same-second photos now sub-sort by filename by [@​andydotmp3](https://github.com/andydotmp3) in [#​29528](immich-app/immich#29528) - fix(web): face editor coordinates on a not-yet-loaded video by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31085](immich-app/immich#31085) - fix: do not move faces of users other than the current owner by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31149](immich-app/immich#31149) - fix(server): allow an empty assetIds array when creating an album shared link by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31151](immich-app/immich#31151) - fix(mobile): keep the original filename when sharing downloaded assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31154](immich-app/immich#31154) - fix(mobile): handle transient loading states for map timelines by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31153](immich-app/immich#31153) - fix(web): interaction with some filter elements closes the search panel by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31160](immich-app/immich#31160) - fix(ml): read CLIP model configs as UTF-8 by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31152](immich-app/immich#31152) - fix(mobile): refresh server info when the websocket connects by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31155](immich-app/immich#31155) - fix(server): never unlink an untracked-file path that an asset now references by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31194](immich-app/immich#31194) - fix: incorrect edit's openapi type by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31233](immich-app/immich#31233) - fix(web): album date range formatting by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31238](immich-app/immich#31238) - fix: face detection of edited assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31243](immich-app/immich#31243) - fix(mobile): prevent inner mutability on Freezed classes by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31251](immich-app/immich#31251) - fix(web): partner sharing timeline by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31252](immich-app/immich#31252) - fix(mobile): refresh the memory lane after resume by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31260](immich-app/immich#31260) - fix: memory page navigation by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31368](immich-app/immich#31368) - fix(server): live photo transcode visibility by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31374](immich-app/immich#31374) - fix(web): use RTL-friendly layout for people panel buttons by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31378](immich-app/immich#31378) - fix(web): word-wrap long album names by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31379](immich-app/immich#31379) - fix(mobile): hide negative age by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31381](immich-app/immich#31381) - fix(mobile): make shared link download toggle depend on metadata toggle by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31382](immich-app/immich#31382) ##### 📚 Documentation - fix(docs): remove listing unraid as an "official" deployment by [@​mmomjian](https://github.com/mmomjian) in [#​30323](immich-app/immich#30323) - fix(docs): Revise config file instructions and notes by [@​mmomjian](https://github.com/mmomjian) in [#​30418](immich-app/immich#30418) - docs: fix identity provider examples in oauth guide by [@​fredrikekre](https://github.com/fredrikekre) in [#​30828](immich-app/immich#30828) - docs: Update backup script to match manual/automatic backups by [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) in [#​26810](immich-app/immich#26810) - docs: update remote-machine-learning.md by [@​Aviatorpaal](https://github.com/Aviatorpaal) in [#​28728](immich-app/immich#28728) ##### 🌐 Translations - feat: add cantonese for mobile by [@​danieldietzler](https://github.com/danieldietzler) in [#​30318](immich-app/immich#30318) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​30296](immich-app/immich#30296) ##### New Contributors - [@​jaegeral](https://github.com/jaegeral) made their first contribution in [#​30385](immich-app/immich#30385) - [@​deveshkolte](https://github.com/deveshkolte) made their first contribution in [#​30223](immich-app/immich#30223) - [@​gPinato](https://github.com/gPinato) made their first contribution in [#​30123](immich-app/immich#30123) - [@​lhvy](https://github.com/lhvy) made their first contribution in [#​30466](immich-app/immich#30466) - [@​djadji-gueye](https://github.com/djadji-gueye) made their first contribution in [#​30462](immich-app/immich#30462) - [@​DrHaque](https://github.com/DrHaque) made their first contribution in [#​30519](immich-app/immich#30519) - [@​statox](https://github.com/statox) made their first contribution in [#​30485](immich-app/immich#30485) - [@​ihmcsm](https://github.com/ihmcsm) made their first contribution in [#​30742](immich-app/immich#30742) - [@​baseballyama](https://github.com/baseballyama) made their first contribution in [#​30782](immich-app/immich#30782) - [@​enol5423](https://github.com/enol5423) made their first contribution in [#​30764](immich-app/immich#30764) - [@​mikes1991gh](https://github.com/mikes1991gh) made their first contribution in [#​30574](immich-app/immich#30574) - [@​nikhilpodila](https://github.com/nikhilpodila) made their first contribution in [#​30787](immich-app/immich#30787) - [@​fredrikekre](https://github.com/fredrikekre) made their first contribution in [#​30828](immich-app/immich#30828) - [@​NoiceHax](https://github.com/NoiceHax) made their first contribution in [#​30759](immich-app/immich#30759) - [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) made their first contribution in [#​26810](immich-app/immich#26810) - [@​sacha-c](https://github.com/sacha-c) made their first contribution in [#​30873](immich-app/immich#30873) - [@​PAtreju](https://github.com/PAtreju) made their first contribution in [#​30850](immich-app/immich#30850) - [@​fuergaosi233](https://github.com/fuergaosi233) made their first contribution in [#​29244](immich-app/immich#29244) - [@​jorbrock](https://github.com/jorbrock) made their first contribution in [#​27909](immich-app/immich#27909) - [@​RxChi1d](https://github.com/RxChi1d) made their first contribution in [#​30900](immich-app/immich#30900) - [@​mosh-dev](https://github.com/mosh-dev) made their first contribution in [#​30107](immich-app/immich#30107) - [@​thejeff77](https://github.com/thejeff77) made their first contribution in [#​30916](immich-app/immich#30916) - [@​brn-lin](https://github.com/brn-lin) made their first contribution in [#​30976](immich-app/immich#30976) - [@​Aviatorpaal](https://github.com/Aviatorpaal) made their first contribution in [#​28728](immich-app/immich#28728) - [@​stevenjoezhang](https://github.com/stevenjoezhang) made their first contribution in [#​28462](immich-app/immich#28462) - [@​andydotmp3](https://github.com/andydotmp3) made their first contribution in [#​29528](immich-app/immich#29528) - [@​rickytrevor](https://github.com/rickytrevor) made their first contribution in [#​27492](immich-app/immich#27492) - [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] made their first contribution in [#​31066](immich-app/immich#31066) **Full Changelog**: <immich-app/immich@v3.1.0...v3.2.0> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Paris) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC42NS41IiwidXBkYXRlZEluVmVyIjoiNDQuNjUuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvZ2l0aHViLXJlbGVhc2UiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/2068
….0) (#561) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [immich-app/immich](https://github.com/immich-app/immich) | minor | `v3.1.0` → `v3.2.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/141) for more information. --- ### Release Notes <details> <summary>immich-app/immich (immich-app/immich)</summary> ### [`v3.2.0`](https://github.com/immich-app/immich/releases/tag/v3.2.0) [Compare Source](immich-app/immich@v3.1.0...v3.2.0) ### v3.2.0 Welcome to Immich `v3.2.0`! This release includes many new features as well as the usual collection of bug fixes and cleanups. Keep reading below for a list of highlights. #### Highlights - Docker compose builder - Revamped search UI (web) - Search API v2 (server) - View own people in shared assets, cross-user clustering - Workflow tags trigger and actions - Dedicated memories page - Tag renaming (web) - View assets in map viewport (web) ##### Docker compose builder We recently released our new [docker compose builder](https://immich.app/docker-compose-builder), which lets you put together a custom compose file for Immich more easily. Please try it out and give us [your feedback](immich-app/immich#31232)! ##### Search API v2 (server) We have built an entirely new search API that, amongst other things, will support searching within albums and combining multiple search filters with both AND and OR operations. Some of these features will be exposed to the search UI interfaces in the future, others will be used to power other fancy features as well as give 3rd party tools more functionality. If you are interested in the particular changes and examples for how to use the new API, feel free to check out the PR [#​30179](immich-app/immich#30179) as well as our API documentation at <https://api.immich.app/endpoints/search/searchAssets>. ##### Revamped search UI (web) We have a new designer who helped us remodel the search modal, which has been pretty complex before and looks a lot more visually appealing in our opinion now. It still supports the same functionality, but with some quality of life additions as well as a significantly simpler look. In the future, we will extend this to also include some of the new features enabled by the new search API. Stay tuned and give us your feedback on the new design! <img alt="image" src="https://github.com/user-attachments/assets/aa1cf886-498d-4e9f-b7cf-96dcb8300818" /> *New search modal filtering by images with Jason in it, taken in the last 30 days in BC, Canada, tagged "Long Beach" with the context search term "Swimming"* <img alt="image" src="https://github.com/user-attachments/assets/d87e24db-d314-4462-a204-a9a3020c1ddd" /> *Advanced filters showing camera make, model, and lens model, as well as filers for favorite and archive status, and album membership* ##### View own people in shared assets We are very happy to ship the first step towards better sharing. You can now have people recognized across trusted users, which also allows you to view people you already have records of in any shared assets! In the [user sharing settings](https://my.immich.app/user-settings?isOpen=sharing) there is a new section; cluster group. <img alt="cluster group" src="https://github.com/user-attachments/assets/498d914b-40b2-427f-b0ba-04803706772a" /> *The user sharing settings showing a cluster group with Jane Doe and Mich in it* You can invite users on your instance that you trust to your own group, or join another group you have been invited to. These cluster groups make it possible to identify people in assets shared by users in the same group. They also likely improve accuracy, as the clustering will operate on a bigger pool of faces. People names and birth dates are still set on a per-user level and aren’t (yet) shared with users in the same group. As of now, this **requires** resetting facial recognition for all users in the group, in order for the changes to apply retroactively for all assets. This means, names and birth dates will be lost, and the results can vary slightly compared to before. Only faces recognized by machine learning will be affected by this. We may be able to do some non-destructive merging in the future, but for now this is a necessary step in order to fully benefit from the feature. That is why we put a button in the sharing settings for every user in the group (specifically also non-admins) to reset the facial recognition for that group. ##### Workflow tags trigger and actions Workflows have gotten a new trigger. You can now do automations when an asset has been tagged. <p align="center"> <img width="400" alt="trigger list" src="https://github.com/user-attachments/assets/8d949bce-8ec6-4be2-96a0-5fca1715ae2a" /> </p> In order to use this new trigger, there is also a new filter that allows you to match specific tags. It supports matching for all, any, or none in the provided list. <p align="center"> <img width="400" alt="tag trigger" src="https://github.com/user-attachments/assets/91435b14-6ca8-41da-b3d3-73c7704df695" /> </p> Lastly, a new workflow action to add tags to the current asset has also been added. It allows to add a list of tags at once. <p align="center"> <img width="400" alt="add tag step" src="https://github.com/user-attachments/assets/04910b74-04ee-4564-8b2f-48f3d5e76dbf" /> </p> ##### Dedicated memories page The new memories page allows you to view past memories. You can also favorite memories and they will show up here and never get deleted. The goal is for this to be a place you can come back to at any point and reminisce in old memories. <p > <img width="600" alt="image" src="https://github.com/user-attachments/assets/0f526915-b53a-484e-8d99-ce0caa9698fd" /> <img width="200" alt="Memory page on the mobile app" src="https://github.com/user-attachments/assets/b11b8534-22c9-417c-a57b-922bada486c5" /> </p> ##### Tag renaming (web) Finally, you can also rename existing tags. This is a small addition to the edit tag modal on web, but under the hood was more complicated than you might expect. <p align="center"> <img width="400" alt="tag renaming" src="https://github.com/user-attachments/assets/091acef9-1056-4264-9e89-c44d9ddfdbc7" /> </p> ##### View assets in map viewport (web) Similarly to showing a timeline all assets in a cluster on the map when clicking on it, you can now open a timeline for assets currently in the viewport. There is a new button among the map controls to show assets in the area. It will open a timeline that will update as you pan around the map. <img alt="map view port with timeline" src="https://github.com/user-attachments/assets/90b0aeb5-2e99-4dc5-a8cb-592c3ed71e8f" /> *The map page showing a timeline of assets currently in the viewport on the right* As always, please consider supporting the project. 🎉 Cheers! 🎉 #### Support Immich <p align="center"> <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!"> </p> If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store> *** #### What's Changed ##### 🚀 Features - feat: workflow logging by [@​benbeckford](https://github.com/benbeckford) in [#​29878](immich-app/immich#29878) - feat(web): new search ui by [@​benbeckford](https://github.com/benbeckford) in [#​30279](immich-app/immich#30279) - feat: new config endpoints by [@​jrasm91](https://github.com/jrasm91) in [#​30881](immich-app/immich#30881) - feat: cluster groups by [@​jrasm91](https://github.com/jrasm91) in [#​30739](immich-app/immich#30739) - feat: asset file apis by [@​jrasm91](https://github.com/jrasm91) in [#​25900](immich-app/immich#25900) - feat: memories view by [@​benbeckford](https://github.com/benbeckford) in [#​28675](immich-app/immich#28675) - feat(mobile): show asset owner in asset details by [@​Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#​29302](immich-app/immich#29302) - feat(server): new search API by [@​timonrieger](https://github.com/timonrieger) in [#​30179](immich-app/immich#30179) ##### 🌟 Enhancements - feat: store null instead of empty string for album.description by [@​gPinato](https://github.com/gPinato) in [#​30123](immich-app/immich#30123) - feat: log hint about downgrades when migration is missing by [@​bo0tzz](https://github.com/bo0tzz) in [#​30493](immich-app/immich#30493) - feat(web): search album description in add-to-album modal by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30462](immich-app/immich#30462) - feat: Display the number of selected items in AlbumPickerModal title by [@​statox](https://github.com/statox) in [#​30485](immich-app/immich#30485) - feat(widget): add toggle to match icon theme by [@​bwees](https://github.com/bwees) in [#​30428](immich-app/immich#30428) - feat: workflow asset tag trigger/filter/action by [@​benbeckford](https://github.com/benbeckford) in [#​29043](immich-app/immich#29043) - feat: iOS dynamic background ids by [@​mikes1991gh](https://github.com/mikes1991gh) in [#​30574](immich-app/immich#30574) - feat: actions undo handling by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30481](immich-app/immich#30481) - feat: rotate an API key by [@​bwees](https://github.com/bwees) in [#​30801](immich-app/immich#30801) - fix(cli): enforce node engine version on start by [@​bo0tzz](https://github.com/bo0tzz) in [#​30437](immich-app/immich#30437) - chore(server): migrate library e2e tests by [@​etnoy](https://github.com/etnoy) in [#​27277](immich-app/immich#27277) - feat: add oauth account management url by [@​sacha-c](https://github.com/sacha-c) in [#​30873](immich-app/immich#30873) - feat(web): tag renaming v2 by [@​jorbrock](https://github.com/jorbrock) in [#​27909](immich-app/immich#27909) - chore: search filter animation improvement and reactive search cue example by [@​alextran1502](https://github.com/alextran1502) in [#​30866](immich-app/immich#30866) - perf(web): use hash-wasm SHA-1 with pure-JS fallback for upload hashing by [@​mosh-dev](https://github.com/mosh-dev) in [#​30107](immich-app/immich#30107) - fix: don't swallow fetch errors by [@​bo0tzz](https://github.com/bo0tzz) in [#​30496](immich-app/immich#30496) - feat(mobile): map asset number by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​28911](immich-app/immich#28911) - feat: allow users to re-run facial recognition for their group by [@​danieldietzler](https://github.com/danieldietzler) in [#​30965](immich-app/immich#30965) - feat(web): view assets in map viewport by [@​rickytrevor](https://github.com/rickytrevor) in [#​27492](immich-app/immich#27492) ##### 🐛 Bug fixes - fix: make sure iOS memory widget render by [@​alextran1502](https://github.com/alextran1502) in [#​30172](immich-app/immich#30172) - fix: calendar heatmap permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30310](immich-app/immich#30310) - fix: calendar heatmap api key permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30314](immich-app/immich#30314) - fix(deployment): matplotlib in rootless deployments by [@​mmomjian](https://github.com/mmomjian) in [#​30328](immich-app/immich#30328) - fix(mobile): refresh person thumbnail when the featured photo changes by [@​santoshakil](https://github.com/santoshakil) in [#​29350](immich-app/immich#29350) - fix: assetFileFilter path matching by [@​benbeckford](https://github.com/benbeckford) in [#​30394](immich-app/immich#30394) - fix: shared check for server setup availability by [@​bo0tzz](https://github.com/bo0tzz) in [#​30311](immich-app/immich#30311) - fix(mobile): resolve owned assets when partner owns identical asset by [@​agg23](https://github.com/agg23) in [#​30137](immich-app/immich#30137) - fix(web): Fix face thumbnail when swapping merge direction by [@​lhvy](https://github.com/lhvy) in [#​30466](immich-app/immich#30466) - fix(server): reject invalid or deleted user when creating a partner by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30431](immich-app/immich#30431) - fix(server): remove the asset row when an upload fails after creating it by [@​santoshakil](https://github.com/santoshakil) in [#​30349](immich-app/immich#30349) - fix(mobile): correct mislabeled Bengali locale entry by [@​DrHaque](https://github.com/DrHaque) in [#​30519](immich-app/immich#30519) - fix(mobile): sync stack changes from the websocket by [@​santoshakil](https://github.com/santoshakil) in [#​30479](immich-app/immich#30479) - fix: metadata extraction as LensModel can be a float by [@​danieldietzler](https://github.com/danieldietzler) in [#​30512](immich-app/immich#30512) - fix(mobile): run one more sync round when a request arrives mid sync by [@​santoshakil](https://github.com/santoshakil) in [#​30478](immich-app/immich#30478) - fix: use setRequireOriginal on SDK 29 and above by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​29072](immich-app/immich#29072) - fix(mobile): stale local renders after editing a photo on device by [@​santoshakil](https://github.com/santoshakil) in [#​30415](immich-app/immich#30415) - fix(mobile): stop websocket reconnect loop draining battery when server is unreachable by [@​santoshakil](https://github.com/santoshakil) in [#​29901](immich-app/immich#29901) - fix(mobile): stop long images squishing on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29367](immich-app/immich#29367) - fix(mobile): keep backup remainder from going negative by [@​santoshakil](https://github.com/santoshakil) in [#​29011](immich-app/immich#29011) - fix(mobile): handle asset websocket events by [@​santoshakil](https://github.com/santoshakil) in [#​30499](immich-app/immich#30499) - fix(mobile): stop disabling androidx.startup initializers by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30559](immich-app/immich#30559) - fix: map not updating after viewing an asset by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30601](immich-app/immich#30601) - fix(deployment): Add huggingface cache directory to Dockerfile by [@​mmomjian](https://github.com/mmomjian) in [#​30357](immich-app/immich#30357) - fix(mobile): video playback controls dead for backed up videos opened from search by [@​santoshakil](https://github.com/santoshakil) in [#​30587](immich-app/immich#30587) - fix(mobile): decode remote thumbnails at displayed size by [@​santoshakil](https://github.com/santoshakil) in [#​29965](immich-app/immich#29965) - fix(mobile): don't let a frozen sync block syncing on resume by [@​santoshakil](https://github.com/santoshakil) in [#​29870](immich-app/immich#29870) - fix: face label clipping by [@​danieldietzler](https://github.com/danieldietzler) in [#​30712](immich-app/immich#30712) - fix: owner cascade delete album by [@​danieldietzler](https://github.com/danieldietzler) in [#​30692](immich-app/immich#30692) - fix(mobile): prevent iOS status bar scroll to top during transitions by [@​agg23](https://github.com/agg23) in [#​30717](immich-app/immich#30717) - fix(mobile): disable iOS smart quotes/dashes in email/password inputs by [@​agg23](https://github.com/agg23) in [#​30767](immich-app/immich#30767) - fix(mobile): prevent snapping to center on pinch-to-zoom release ([#​29207](immich-app/immich#29207)) by [@​cmdPromptCritical](https://github.com/cmdPromptCritical) in [#​29343](immich-app/immich#29343) - fix: shared link create validation by [@​danieldietzler](https://github.com/danieldietzler) in [#​30762](immich-app/immich#30762) - fix(mobile): mark finished downloads complete instead of leaving them stuck by [@​santoshakil](https://github.com/santoshakil) in [#​29023](immich-app/immich#29023) - fix: freeze on navigating back album description by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30781](immich-app/immich#30781) - fix(server): guard createAll against empty values list by [@​tech00exploere](https://github.com/tech00exploere) in [#​30837](immich-app/immich#30837) - fix(server): respect backpressure in the sync stream by [@​enol5423](https://github.com/enol5423) in [#​30764](immich-app/immich#30764) - fix(server): update ocr & faces after asset edit by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29303](immich-app/immich#29303) - fix(mobile): resend an upload once when the connection dies before a response by [@​santoshakil](https://github.com/santoshakil) in [#​30843](immich-app/immich#30843) - fix(mobile): cannot deep link to memory lane ([#​30634](immich-app/immich#30634)) by [@​nikhilpodila](https://github.com/nikhilpodila) in [#​30787](immich-app/immich#30787) - fix: redis cli ping command by [@​mmomjian](https://github.com/mmomjian) in [#​30329](immich-app/immich#30329) - fix(server): do not throw on unparsable DB\_URL when building backup arguments by [@​NoiceHax](https://github.com/NoiceHax) in [#​30759](immich-app/immich#30759) - fix(server): Sort stacked assets by creation date by [@​timonrieger](https://github.com/timonrieger) in [#​24033](immich-app/immich#24033) - fix(web): gracefully handle map errors when WebGL is disabled by [@​meesfrensel](https://github.com/meesfrensel) in [#​26538](immich-app/immich#26538) - fix(server): unicode email validation by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30871](immich-app/immich#30871) - fix(mobile): order album/place/person timelines by local date by [@​santoshakil](https://github.com/santoshakil) in [#​29338](immich-app/immich#29338) - chore(mobile): update flutter-maplibre-gl to 0.27.0 by [@​agg23](https://github.com/agg23) in [#​30892](immich-app/immich#30892) - fix(web): download archives via html POST forms by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​30021](immich-app/immich#30021) - fix(server): library exclusion patterns can soft-delete assets outside their directory by [@​PAtreju](https://github.com/PAtreju) in [#​30850](immich-app/immich#30850) - fix(mobile): dedupe stale remote\_asset rows on sync by [@​santoshakil](https://github.com/santoshakil) in [#​28445](immich-app/immich#28445) - fix(server): correct asset dimensions from exif metadata by [@​fuergaosi233](https://github.com/fuergaosi233) in [#​29244](immich-app/immich#29244) - fix: quote database owner in restore by [@​danieldietzler](https://github.com/danieldietzler) in [#​30905](immich-app/immich#30905) - fix(mobile): permanently delete local copies when moving to the locked folder by [@​santoshakil](https://github.com/santoshakil) in [#​29730](immich-app/immich#29730) - fix(server): let a second metadata extraction replace stored AV metadata by [@​RxChi1d](https://github.com/RxChi1d) in [#​30900](immich-app/immich#30900) - fix: do not exit search screen on back during multiselect by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30689](immich-app/immich#30689) - fix(mobile): respect 24h system setting by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30792](immich-app/immich#30792) - fix: maintentance return URL sanitization by [@​bwees](https://github.com/bwees) in [#​30948](immich-app/immich#30948) - fix: remove partner assets from existing memories by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​28950](immich-app/immich#28950) - fix(server): correct tag create operations by [@​jorbrock](https://github.com/jorbrock) in [#​30877](immich-app/immich#30877) - fix: thumbnail generation for specific SVGs by [@​danieldietzler](https://github.com/danieldietzler) in [#​30908](immich-app/immich#30908) - fix(mobile): aspect ratio change by [@​ferraridamiano](https://github.com/ferraridamiano) in [#​30939](immich-app/immich#30939) - fix: throw a typed error on malformed api responses by [@​bo0tzz](https://github.com/bo0tzz) in [#​31006](immich-app/immich#31006) - fix(web): restore timeline scroll when the asset id cannot be resolved by [@​thejeff77](https://github.com/thejeff77) in [#​30916](immich-app/immich#30916) - fix(web): do not play memory video if the `MemoryVideoViewer` element is not visible by [@​Zlendy](https://github.com/Zlendy) in [#​30947](immich-app/immich#30947) - fix(web): preserve slideshow pause state when viewing video slides by [@​tech00exploere](https://github.com/tech00exploere) in [#​30278](immich-app/immich#30278) - fix: draggable Immich logo by [@​danieldietzler](https://github.com/danieldietzler) in [#​31055](immich-app/immich#31055) - fix(server): kill pg\_dump when a backup fails so it stops holding table locks by [@​justadityaraj](https://github.com/justadityaraj) in [#​30851](immich-app/immich#30851) - fix(web): misleading toast notification by [@​brn-lin](https://github.com/brn-lin) in [#​30976](immich-app/immich#30976) - fix(web): map by [@​jrasm91](https://github.com/jrasm91) in [#​31056](immich-app/immich#31056) - fix: external library statistics for excluded assets by [@​stevenjoezhang](https://github.com/stevenjoezhang) in [#​28462](immich-app/immich#28462) - feat: same-second photos now sub-sort by filename by [@​andydotmp3](https://github.com/andydotmp3) in [#​29528](immich-app/immich#29528) - fix(web): face editor coordinates on a not-yet-loaded video by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31085](immich-app/immich#31085) - fix: do not move faces of users other than the current owner by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31149](immich-app/immich#31149) - fix(server): allow an empty assetIds array when creating an album shared link by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31151](immich-app/immich#31151) - fix(mobile): keep the original filename when sharing downloaded assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31154](immich-app/immich#31154) - fix(mobile): handle transient loading states for map timelines by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31153](immich-app/immich#31153) - fix(web): interaction with some filter elements closes the search panel by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31160](immich-app/immich#31160) - fix(ml): read CLIP model configs as UTF-8 by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31152](immich-app/immich#31152) - fix(mobile): refresh server info when the websocket connects by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31155](immich-app/immich#31155) - fix(server): never unlink an untracked-file path that an asset now references by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31194](immich-app/immich#31194) - fix: incorrect edit's openapi type by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31233](immich-app/immich#31233) - fix(web): album date range formatting by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31238](immich-app/immich#31238) - fix: face detection of edited assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31243](immich-app/immich#31243) - fix(mobile): prevent inner mutability on Freezed classes by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31251](immich-app/immich#31251) - fix(web): partner sharing timeline by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31252](immich-app/immich#31252) - fix(mobile): refresh the memory lane after resume by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31260](immich-app/immich#31260) - fix: memory page navigation by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31368](immich-app/immich#31368) - fix(server): live photo transcode visibility by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31374](immich-app/immich#31374) - fix(web): use RTL-friendly layout for people panel buttons by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31378](immich-app/immich#31378) - fix(web): word-wrap long album names by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31379](immich-app/immich#31379) - fix(mobile): hide negative age by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31381](immich-app/immich#31381) - fix(mobile): make shared link download toggle depend on metadata toggle by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31382](immich-app/immich#31382) ##### 📚 Documentation - fix(docs): remove listing unraid as an "official" deployment by [@​mmomjian](https://github.com/mmomjian) in [#​30323](immich-app/immich#30323) - fix(docs): Revise config file instructions and notes by [@​mmomjian](https://github.com/mmomjian) in [#​30418](immich-app/immich#30418) - docs: fix identity provider examples in oauth guide by [@​fredrikekre](https://github.com/fredrikekre) in [#​30828](immich-app/immich#30828) - docs: Update backup script to match manual/automatic backups by [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) in [#​26810](immich-app/immich#26810) - docs: update remote-machine-learning.md by [@​Aviatorpaal](https://github.com/Aviatorpaal) in [#​28728](immich-app/immich#28728) ##### 🌐 Translations - feat: add cantonese for mobile by [@​danieldietzler](https://github.com/danieldietzler) in [#​30318](immich-app/immich#30318) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​30296](immich-app/immich#30296) #### New Contributors - [@​jaegeral](https://github.com/jaegeral) made their first contribution in [#​30385](immich-app/immich#30385) - [@​deveshkolte](https://github.com/deveshkolte) made their first contribution in [#​30223](immich-app/immich#30223) - [@​gPinato](https://github.com/gPinato) made their first contribution in [#​30123](immich-app/immich#30123) - [@​lhvy](https://github.com/lhvy) made their first contribution in [#​30466](immich-app/immich#30466) - [@​djadji-gueye](https://github.com/djadji-gueye) made their first contribution in [#​30462](immich-app/immich#30462) - [@​DrHaque](https://github.com/DrHaque) made their first contribution in [#​30519](immich-app/immich#30519) - [@​statox](https://github.com/statox) made their first contribution in [#​30485](immich-app/immich#30485) - [@​ihmcsm](https://github.com/ihmcsm) made their first contribution in [#​30742](immich-app/immich#30742) - [@​baseballyama](https://github.com/baseballyama) made their first contribution in [#​30782](immich-app/immich#30782) - [@​enol5423](https://github.com/enol5423) made their first contribution in [#​30764](immich-app/immich#30764) - [@​mikes1991gh](https://github.com/mikes1991gh) made their first contribution in [#​30574](immich-app/immich#30574) - [@​nikhilpodila](https://github.com/nikhilpodila) made their first contribution in [#​30787](immich-app/immich#30787) - [@​fredrikekre](https://github.com/fredrikekre) made their first contribution in [#​30828](immich-app/immich#30828) - [@​NoiceHax](https://github.com/NoiceHax) made their first contribution in [#​30759](immich-app/immich#30759) - [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) made their first contribution in [#​26810](immich-app/immich#26810) - [@​sacha-c](https://github.com/sacha-c) made their first contribution in [#​30873](immich-app/immich#30873) - [@​PAtreju](https://github.com/PAtreju) made their first contribution in [#​30850](immich-app/immich#30850) - [@​fuergaosi233](https://github.com/fuergaosi233) made their first contribution in [#​29244](immich-app/immich#29244) - [@​jorbrock](https://github.com/jorbrock) made their first contribution in [#​27909](immich-app/immich#27909) - [@​RxChi1d](https://github.com/RxChi1d) made their first contribution in [#​30900](immich-app/immich#30900) - [@​mosh-dev](https://github.com/mosh-dev) made their first contribution in [#​30107](immich-app/immich#30107) - [@​thejeff77](https://github.com/thejeff77) made their first contribution in [#​30916](immich-app/immich#30916) - [@​brn-lin](https://github.com/brn-lin) made their first contribution in [#​30976](immich-app/immich#30976) - [@​Aviatorpaal](https://github.com/Aviatorpaal) made their first contribution in [#​28728](immich-app/immich#28728) - [@​stevenjoezhang](https://github.com/stevenjoezhang) made their first contribution in [#​28462](immich-app/immich#28462) - [@​andydotmp3](https://github.com/andydotmp3) made their first contribution in [#​29528](immich-app/immich#29528) - [@​rickytrevor](https://github.com/rickytrevor) made their first contribution in [#​27492](immich-app/immich#27492) - [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] made their first contribution in [#​31066](immich-app/immich#31066) **Full Changelog**: <immich-app/immich@v3.1.0...v3.2.0> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/London) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43OS4yIiwidXBkYXRlZEluVmVyIjoiNDQuNzkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvZ2l0aHViLXJlbGVhc2UiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.hayden.moe/hayden/phoebe/pulls/561
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v3.1.0` → `v3.2.0` | | [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v3.1.0` → `v3.2.0` | --- ### Release Notes <details> <summary>immich-app/immich (ghcr.io/immich-app/immich-machine-learning)</summary> ### [`v3.2.0`](https://github.com/immich-app/immich/releases/tag/v3.2.0) [Compare Source](immich-app/immich@v3.1.0...v3.2.0) ##### v3.2.0 Welcome to Immich `v3.2.0`! This release includes many new features as well as the usual collection of bug fixes and cleanups. Keep reading below for a list of highlights. ##### Highlights - Docker compose builder - Revamped search UI (web) - Search API v2 (server) - View own people in shared assets, cross-user clustering - Workflow tags trigger and actions - Dedicated memories page - Tag renaming (web) - View assets in map viewport (web) ##### Docker compose builder We recently released our new [docker compose builder](https://immich.app/docker-compose-builder), which lets you put together a custom compose file for Immich more easily. Please try it out and give us [your feedback](immich-app/immich#31232)! ##### Search API v2 (server) We have built an entirely new search API that, amongst other things, will support searching within albums and combining multiple search filters with both AND and OR operations. Some of these features will be exposed to the search UI interfaces in the future, others will be used to power other fancy features as well as give 3rd party tools more functionality. If you are interested in the particular changes and examples for how to use the new API, feel free to check out the PR [#​30179](immich-app/immich#30179) as well as our API documentation at <https://api.immich.app/endpoints/search/searchAssets>. ##### Revamped search UI (web) We have a new designer who helped us remodel the search modal, which has been pretty complex before and looks a lot more visually appealing in our opinion now. It still supports the same functionality, but with some quality of life additions as well as a significantly simpler look. In the future, we will extend this to also include some of the new features enabled by the new search API. Stay tuned and give us your feedback on the new design! <img alt="image" src="https://github.com/user-attachments/assets/aa1cf886-498d-4e9f-b7cf-96dcb8300818" /> *New search modal filtering by images with Jason in it, taken in the last 30 days in BC, Canada, tagged "Long Beach" with the context search term "Swimming"* <img alt="image" src="https://github.com/user-attachments/assets/d87e24db-d314-4462-a204-a9a3020c1ddd" /> *Advanced filters showing camera make, model, and lens model, as well as filers for favorite and archive status, and album membership* ##### View own people in shared assets We are very happy to ship the first step towards better sharing. You can now have people recognized across trusted users, which also allows you to view people you already have records of in any shared assets! In the [user sharing settings](https://my.immich.app/user-settings?isOpen=sharing) there is a new section; cluster group. <img alt="cluster group" src="https://github.com/user-attachments/assets/498d914b-40b2-427f-b0ba-04803706772a" /> *The user sharing settings showing a cluster group with Jane Doe and Mich in it* You can invite users on your instance that you trust to your own group, or join another group you have been invited to. These cluster groups make it possible to identify people in assets shared by users in the same group. They also likely improve accuracy, as the clustering will operate on a bigger pool of faces. People names and birth dates are still set on a per-user level and aren’t (yet) shared with users in the same group. As of now, this **requires** resetting facial recognition for all users in the group, in order for the changes to apply retroactively for all assets. This means, names and birth dates will be lost, and the results can vary slightly compared to before. Only faces recognized by machine learning will be affected by this. We may be able to do some non-destructive merging in the future, but for now this is a necessary step in order to fully benefit from the feature. That is why we put a button in the sharing settings for every user in the group (specifically also non-admins) to reset the facial recognition for that group. ##### Workflow tags trigger and actions Workflows have gotten a new trigger. You can now do automations when an asset has been tagged. <p align="center"> <img width="400" alt="trigger list" src="https://github.com/user-attachments/assets/8d949bce-8ec6-4be2-96a0-5fca1715ae2a" /> </p> In order to use this new trigger, there is also a new filter that allows you to match specific tags. It supports matching for all, any, or none in the provided list. <p align="center"> <img width="400" alt="tag trigger" src="https://github.com/user-attachments/assets/91435b14-6ca8-41da-b3d3-73c7704df695" /> </p> Lastly, a new workflow action to add tags to the current asset has also been added. It allows to add a list of tags at once. <p align="center"> <img width="400" alt="add tag step" src="https://github.com/user-attachments/assets/04910b74-04ee-4564-8b2f-48f3d5e76dbf" /> </p> ##### Dedicated memories page The new memories page allows you to view past memories. You can also favorite memories and they will show up here and never get deleted. The goal is for this to be a place you can come back to at any point and reminisce in old memories. <p > <img width="600" alt="image" src="https://github.com/user-attachments/assets/0f526915-b53a-484e-8d99-ce0caa9698fd" /> <img width="200" alt="Memory page on the mobile app" src="https://github.com/user-attachments/assets/b11b8534-22c9-417c-a57b-922bada486c5" /> </p> ##### Tag renaming (web) Finally, you can also rename existing tags. This is a small addition to the edit tag modal on web, but under the hood was more complicated than you might expect. <p align="center"> <img width="400" alt="tag renaming" src="https://github.com/user-attachments/assets/091acef9-1056-4264-9e89-c44d9ddfdbc7" /> </p> ##### View assets in map viewport (web) Similarly to showing a timeline all assets in a cluster on the map when clicking on it, you can now open a timeline for assets currently in the viewport. There is a new button among the map controls to show assets in the area. It will open a timeline that will update as you pan around the map. <img alt="map view port with timeline" src="https://github.com/user-attachments/assets/90b0aeb5-2e99-4dc5-a8cb-592c3ed71e8f" /> *The map page showing a timeline of assets currently in the viewport on the right* As always, please consider supporting the project. 🎉 Cheers! 🎉 ##### Support Immich <p align="center"> <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif" width="450" title="SUPPORT THE PROJECT!"> </p> If you find the project helpful, you can support Immich by purchasing a product key at <https://buy.immich.app> or our merchandise at <https://immich.store> *** ##### What's Changed ##### 🚀 Features - feat: workflow logging by [@​benbeckford](https://github.com/benbeckford) in [#​29878](immich-app/immich#29878) - feat(web): new search ui by [@​benbeckford](https://github.com/benbeckford) in [#​30279](immich-app/immich#30279) - feat: new config endpoints by [@​jrasm91](https://github.com/jrasm91) in [#​30881](immich-app/immich#30881) - feat: cluster groups by [@​jrasm91](https://github.com/jrasm91) in [#​30739](immich-app/immich#30739) - feat: asset file apis by [@​jrasm91](https://github.com/jrasm91) in [#​25900](immich-app/immich#25900) - feat: memories view by [@​benbeckford](https://github.com/benbeckford) in [#​28675](immich-app/immich#28675) - feat(mobile): show asset owner in asset details by [@​Lauritz-Tieste](https://github.com/Lauritz-Tieste) in [#​29302](immich-app/immich#29302) - feat(server): new search API by [@​timonrieger](https://github.com/timonrieger) in [#​30179](immich-app/immich#30179) ##### 🌟 Enhancements - feat: store null instead of empty string for album.description by [@​gPinato](https://github.com/gPinato) in [#​30123](immich-app/immich#30123) - feat: log hint about downgrades when migration is missing by [@​bo0tzz](https://github.com/bo0tzz) in [#​30493](immich-app/immich#30493) - feat(web): search album description in add-to-album modal by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30462](immich-app/immich#30462) - feat: Display the number of selected items in AlbumPickerModal title by [@​statox](https://github.com/statox) in [#​30485](immich-app/immich#30485) - feat(widget): add toggle to match icon theme by [@​bwees](https://github.com/bwees) in [#​30428](immich-app/immich#30428) - feat: workflow asset tag trigger/filter/action by [@​benbeckford](https://github.com/benbeckford) in [#​29043](immich-app/immich#29043) - feat: iOS dynamic background ids by [@​mikes1991gh](https://github.com/mikes1991gh) in [#​30574](immich-app/immich#30574) - feat: actions undo handling by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30481](immich-app/immich#30481) - feat: rotate an API key by [@​bwees](https://github.com/bwees) in [#​30801](immich-app/immich#30801) - fix(cli): enforce node engine version on start by [@​bo0tzz](https://github.com/bo0tzz) in [#​30437](immich-app/immich#30437) - chore(server): migrate library e2e tests by [@​etnoy](https://github.com/etnoy) in [#​27277](immich-app/immich#27277) - feat: add oauth account management url by [@​sacha-c](https://github.com/sacha-c) in [#​30873](immich-app/immich#30873) - feat(web): tag renaming v2 by [@​jorbrock](https://github.com/jorbrock) in [#​27909](immich-app/immich#27909) - chore: search filter animation improvement and reactive search cue example by [@​alextran1502](https://github.com/alextran1502) in [#​30866](immich-app/immich#30866) - perf(web): use hash-wasm SHA-1 with pure-JS fallback for upload hashing by [@​mosh-dev](https://github.com/mosh-dev) in [#​30107](immich-app/immich#30107) - fix: don't swallow fetch errors by [@​bo0tzz](https://github.com/bo0tzz) in [#​30496](immich-app/immich#30496) - feat(mobile): map asset number by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​28911](immich-app/immich#28911) - feat: allow users to re-run facial recognition for their group by [@​danieldietzler](https://github.com/danieldietzler) in [#​30965](immich-app/immich#30965) - feat(web): view assets in map viewport by [@​rickytrevor](https://github.com/rickytrevor) in [#​27492](immich-app/immich#27492) ##### 🐛 Bug fixes - fix: make sure iOS memory widget render by [@​alextran1502](https://github.com/alextran1502) in [#​30172](immich-app/immich#30172) - fix: calendar heatmap permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30310](immich-app/immich#30310) - fix: calendar heatmap api key permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30314](immich-app/immich#30314) - fix(deployment): matplotlib in rootless deployments by [@​mmomjian](https://github.com/mmomjian) in [#​30328](immich-app/immich#30328) - fix(mobile): refresh person thumbnail when the featured photo changes by [@​santoshakil](https://github.com/santoshakil) in [#​29350](immich-app/immich#29350) - fix: assetFileFilter path matching by [@​benbeckford](https://github.com/benbeckford) in [#​30394](immich-app/immich#30394) - fix: shared check for server setup availability by [@​bo0tzz](https://github.com/bo0tzz) in [#​30311](immich-app/immich#30311) - fix(mobile): resolve owned assets when partner owns identical asset by [@​agg23](https://github.com/agg23) in [#​30137](immich-app/immich#30137) - fix(web): Fix face thumbnail when swapping merge direction by [@​lhvy](https://github.com/lhvy) in [#​30466](immich-app/immich#30466) - fix(server): reject invalid or deleted user when creating a partner by [@​djadji-gueye](https://github.com/djadji-gueye) in [#​30431](immich-app/immich#30431) - fix(server): remove the asset row when an upload fails after creating it by [@​santoshakil](https://github.com/santoshakil) in [#​30349](immich-app/immich#30349) - fix(mobile): correct mislabeled Bengali locale entry by [@​DrHaque](https://github.com/DrHaque) in [#​30519](immich-app/immich#30519) - fix(mobile): sync stack changes from the websocket by [@​santoshakil](https://github.com/santoshakil) in [#​30479](immich-app/immich#30479) - fix: metadata extraction as LensModel can be a float by [@​danieldietzler](https://github.com/danieldietzler) in [#​30512](immich-app/immich#30512) - fix(mobile): run one more sync round when a request arrives mid sync by [@​santoshakil](https://github.com/santoshakil) in [#​30478](immich-app/immich#30478) - fix: use setRequireOriginal on SDK 29 and above by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​29072](immich-app/immich#29072) - fix(mobile): stale local renders after editing a photo on device by [@​santoshakil](https://github.com/santoshakil) in [#​30415](immich-app/immich#30415) - fix(mobile): stop websocket reconnect loop draining battery when server is unreachable by [@​santoshakil](https://github.com/santoshakil) in [#​29901](immich-app/immich#29901) - fix(mobile): stop long images squishing on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29367](immich-app/immich#29367) - fix(mobile): keep backup remainder from going negative by [@​santoshakil](https://github.com/santoshakil) in [#​29011](immich-app/immich#29011) - fix(mobile): handle asset websocket events by [@​santoshakil](https://github.com/santoshakil) in [#​30499](immich-app/immich#30499) - fix(mobile): stop disabling androidx.startup initializers by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30559](immich-app/immich#30559) - fix: map not updating after viewing an asset by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30601](immich-app/immich#30601) - fix(deployment): Add huggingface cache directory to Dockerfile by [@​mmomjian](https://github.com/mmomjian) in [#​30357](immich-app/immich#30357) - fix(mobile): video playback controls dead for backed up videos opened from search by [@​santoshakil](https://github.com/santoshakil) in [#​30587](immich-app/immich#30587) - fix(mobile): decode remote thumbnails at displayed size by [@​santoshakil](https://github.com/santoshakil) in [#​29965](immich-app/immich#29965) - fix(mobile): don't let a frozen sync block syncing on resume by [@​santoshakil](https://github.com/santoshakil) in [#​29870](immich-app/immich#29870) - fix: face label clipping by [@​danieldietzler](https://github.com/danieldietzler) in [#​30712](immich-app/immich#30712) - fix: owner cascade delete album by [@​danieldietzler](https://github.com/danieldietzler) in [#​30692](immich-app/immich#30692) - fix(mobile): prevent iOS status bar scroll to top during transitions by [@​agg23](https://github.com/agg23) in [#​30717](immich-app/immich#30717) - fix(mobile): disable iOS smart quotes/dashes in email/password inputs by [@​agg23](https://github.com/agg23) in [#​30767](immich-app/immich#30767) - fix(mobile): prevent snapping to center on pinch-to-zoom release ([#​29207](immich-app/immich#29207)) by [@​cmdPromptCritical](https://github.com/cmdPromptCritical) in [#​29343](immich-app/immich#29343) - fix: shared link create validation by [@​danieldietzler](https://github.com/danieldietzler) in [#​30762](immich-app/immich#30762) - fix(mobile): mark finished downloads complete instead of leaving them stuck by [@​santoshakil](https://github.com/santoshakil) in [#​29023](immich-app/immich#29023) - fix: freeze on navigating back album description by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30781](immich-app/immich#30781) - fix(server): guard createAll against empty values list by [@​tech00exploere](https://github.com/tech00exploere) in [#​30837](immich-app/immich#30837) - fix(server): respect backpressure in the sync stream by [@​enol5423](https://github.com/enol5423) in [#​30764](immich-app/immich#30764) - fix(server): update ocr & faces after asset edit by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29303](immich-app/immich#29303) - fix(mobile): resend an upload once when the connection dies before a response by [@​santoshakil](https://github.com/santoshakil) in [#​30843](immich-app/immich#30843) - fix(mobile): cannot deep link to memory lane ([#​30634](immich-app/immich#30634)) by [@​nikhilpodila](https://github.com/nikhilpodila) in [#​30787](immich-app/immich#30787) - fix: redis cli ping command by [@​mmomjian](https://github.com/mmomjian) in [#​30329](immich-app/immich#30329) - fix(server): do not throw on unparsable DB\_URL when building backup arguments by [@​NoiceHax](https://github.com/NoiceHax) in [#​30759](immich-app/immich#30759) - fix(server): Sort stacked assets by creation date by [@​timonrieger](https://github.com/timonrieger) in [#​24033](immich-app/immich#24033) - fix(web): gracefully handle map errors when WebGL is disabled by [@​meesfrensel](https://github.com/meesfrensel) in [#​26538](immich-app/immich#26538) - fix(server): unicode email validation by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30871](immich-app/immich#30871) - fix(mobile): order album/place/person timelines by local date by [@​santoshakil](https://github.com/santoshakil) in [#​29338](immich-app/immich#29338) - chore(mobile): update flutter-maplibre-gl to 0.27.0 by [@​agg23](https://github.com/agg23) in [#​30892](immich-app/immich#30892) - fix(web): download archives via html POST forms by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​30021](immich-app/immich#30021) - fix(server): library exclusion patterns can soft-delete assets outside their directory by [@​PAtreju](https://github.com/PAtreju) in [#​30850](immich-app/immich#30850) - fix(mobile): dedupe stale remote\_asset rows on sync by [@​santoshakil](https://github.com/santoshakil) in [#​28445](immich-app/immich#28445) - fix(server): correct asset dimensions from exif metadata by [@​fuergaosi233](https://github.com/fuergaosi233) in [#​29244](immich-app/immich#29244) - fix: quote database owner in restore by [@​danieldietzler](https://github.com/danieldietzler) in [#​30905](immich-app/immich#30905) - fix(mobile): permanently delete local copies when moving to the locked folder by [@​santoshakil](https://github.com/santoshakil) in [#​29730](immich-app/immich#29730) - fix(server): let a second metadata extraction replace stored AV metadata by [@​RxChi1d](https://github.com/RxChi1d) in [#​30900](immich-app/immich#30900) - fix: do not exit search screen on back during multiselect by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30689](immich-app/immich#30689) - fix(mobile): respect 24h system setting by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30792](immich-app/immich#30792) - fix: maintentance return URL sanitization by [@​bwees](https://github.com/bwees) in [#​30948](immich-app/immich#30948) - fix: remove partner assets from existing memories by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​28950](immich-app/immich#28950) - fix(server): correct tag create operations by [@​jorbrock](https://github.com/jorbrock) in [#​30877](immich-app/immich#30877) - fix: thumbnail generation for specific SVGs by [@​danieldietzler](https://github.com/danieldietzler) in [#​30908](immich-app/immich#30908) - fix(mobile): aspect ratio change by [@​ferraridamiano](https://github.com/ferraridamiano) in [#​30939](immich-app/immich#30939) - fix: throw a typed error on malformed api responses by [@​bo0tzz](https://github.com/bo0tzz) in [#​31006](immich-app/immich#31006) - fix(web): restore timeline scroll when the asset id cannot be resolved by [@​thejeff77](https://github.com/thejeff77) in [#​30916](immich-app/immich#30916) - fix(web): do not play memory video if the `MemoryVideoViewer` element is not visible by [@​Zlendy](https://github.com/Zlendy) in [#​30947](immich-app/immich#30947) - fix(web): preserve slideshow pause state when viewing video slides by [@​tech00exploere](https://github.com/tech00exploere) in [#​30278](immich-app/immich#30278) - fix: draggable Immich logo by [@​danieldietzler](https://github.com/danieldietzler) in [#​31055](immich-app/immich#31055) - fix(server): kill pg\_dump when a backup fails so it stops holding table locks by [@​justadityaraj](https://github.com/justadityaraj) in [#​30851](immich-app/immich#30851) - fix(web): misleading toast notification by [@​brn-lin](https://github.com/brn-lin) in [#​30976](immich-app/immich#30976) - fix(web): map by [@​jrasm91](https://github.com/jrasm91) in [#​31056](immich-app/immich#31056) - fix: external library statistics for excluded assets by [@​stevenjoezhang](https://github.com/stevenjoezhang) in [#​28462](immich-app/immich#28462) - feat: same-second photos now sub-sort by filename by [@​andydotmp3](https://github.com/andydotmp3) in [#​29528](immich-app/immich#29528) - fix(web): face editor coordinates on a not-yet-loaded video by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31085](immich-app/immich#31085) - fix: do not move faces of users other than the current owner by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31149](immich-app/immich#31149) - fix(server): allow an empty assetIds array when creating an album shared link by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31151](immich-app/immich#31151) - fix(mobile): keep the original filename when sharing downloaded assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31154](immich-app/immich#31154) - fix(mobile): handle transient loading states for map timelines by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31153](immich-app/immich#31153) - fix(web): interaction with some filter elements closes the search panel by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31160](immich-app/immich#31160) - fix(ml): read CLIP model configs as UTF-8 by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31152](immich-app/immich#31152) - fix(mobile): refresh server info when the websocket connects by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31155](immich-app/immich#31155) - fix(server): never unlink an untracked-file path that an asset now references by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31194](immich-app/immich#31194) - fix: incorrect edit's openapi type by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31233](immich-app/immich#31233) - fix(web): album date range formatting by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31238](immich-app/immich#31238) - fix: face detection of edited assets by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31243](immich-app/immich#31243) - fix(mobile): prevent inner mutability on Freezed classes by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31251](immich-app/immich#31251) - fix(web): partner sharing timeline by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31252](immich-app/immich#31252) - fix(mobile): refresh the memory lane after resume by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31260](immich-app/immich#31260) - fix: memory page navigation by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31368](immich-app/immich#31368) - fix(server): live photo transcode visibility by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31374](immich-app/immich#31374) - fix(web): use RTL-friendly layout for people panel buttons by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31378](immich-app/immich#31378) - fix(web): word-wrap long album names by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31379](immich-app/immich#31379) - fix(mobile): hide negative age by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31381](immich-app/immich#31381) - fix(mobile): make shared link download toggle depend on metadata toggle by [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] in [#​31382](immich-app/immich#31382) ##### 📚 Documentation - fix(docs): remove listing unraid as an "official" deployment by [@​mmomjian](https://github.com/mmomjian) in [#​30323](immich-app/immich#30323) - fix(docs): Revise config file instructions and notes by [@​mmomjian](https://github.com/mmomjian) in [#​30418](immich-app/immich#30418) - docs: fix identity provider examples in oauth guide by [@​fredrikekre](https://github.com/fredrikekre) in [#​30828](immich-app/immich#30828) - docs: Update backup script to match manual/automatic backups by [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) in [#​26810](immich-app/immich#26810) - docs: update remote-machine-learning.md by [@​Aviatorpaal](https://github.com/Aviatorpaal) in [#​28728](immich-app/immich#28728) ##### 🌐 Translations - feat: add cantonese for mobile by [@​danieldietzler](https://github.com/danieldietzler) in [#​30318](immich-app/immich#30318) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​30296](immich-app/immich#30296) ##### New Contributors - [@​jaegeral](https://github.com/jaegeral) made their first contribution in [#​30385](immich-app/immich#30385) - [@​deveshkolte](https://github.com/deveshkolte) made their first contribution in [#​30223](immich-app/immich#30223) - [@​gPinato](https://github.com/gPinato) made their first contribution in [#​30123](immich-app/immich#30123) - [@​lhvy](https://github.com/lhvy) made their first contribution in [#​30466](immich-app/immich#30466) - [@​djadji-gueye](https://github.com/djadji-gueye) made their first contribution in [#​30462](immich-app/immich#30462) - [@​DrHaque](https://github.com/DrHaque) made their first contribution in [#​30519](immich-app/immich#30519) - [@​statox](https://github.com/statox) made their first contribution in [#​30485](immich-app/immich#30485) - [@​ihmcsm](https://github.com/ihmcsm) made their first contribution in [#​30742](immich-app/immich#30742) - [@​baseballyama](https://github.com/baseballyama) made their first contribution in [#​30782](immich-app/immich#30782) - [@​enol5423](https://github.com/enol5423) made their first contribution in [#​30764](immich-app/immich#30764) - [@​mikes1991gh](https://github.com/mikes1991gh) made their first contribution in [#​30574](immich-app/immich#30574) - [@​nikhilpodila](https://github.com/nikhilpodila) made their first contribution in [#​30787](immich-app/immich#30787) - [@​fredrikekre](https://github.com/fredrikekre) made their first contribution in [#​30828](immich-app/immich#30828) - [@​NoiceHax](https://github.com/NoiceHax) made their first contribution in [#​30759](immich-app/immich#30759) - [@​Quantum-Cucumber](https://github.com/Quantum-Cucumber) made their first contribution in [#​26810](immich-app/immich#26810) - [@​sacha-c](https://github.com/sacha-c) made their first contribution in [#​30873](immich-app/immich#30873) - [@​PAtreju](https://github.com/PAtreju) made their first contribution in [#​30850](immich-app/immich#30850) - [@​fuergaosi233](https://github.com/fuergaosi233) made their first contribution in [#​29244](immich-app/immich#29244) - [@​jorbrock](https://github.com/jorbrock) made their first contribution in [#​27909](immich-app/immich#27909) - [@​RxChi1d](https://github.com/RxChi1d) made their first contribution in [#​30900](immich-app/immich#30900) - [@​mosh-dev](https://github.com/mosh-dev) made their first contribution in [#​30107](immich-app/immich#30107) - [@​thejeff77](https://github.com/thejeff77) made their first contribution in [#​30916](immich-app/immich#30916) - [@​brn-lin](https://github.com/brn-lin) made their first contribution in [#​30976](immich-app/immich#30976) - [@​Aviatorpaal](https://github.com/Aviatorpaal) made their first contribution in [#​28728](immich-app/immich#28728) - [@​stevenjoezhang](https://github.com/stevenjoezhang) made their first contribution in [#​28462](immich-app/immich#28462) - [@​andydotmp3](https://github.com/andydotmp3) made their first contribution in [#​29528](immich-app/immich#29528) - [@​rickytrevor](https://github.com/rickytrevor) made their first contribution in [#​27492](immich-app/immich#27492) - [@​immich-push-o-matic](https://github.com/immich-push-o-matic)\[bot] made their first contribution in [#​31066](immich-app/immich#31066) **Full Changelog**: <immich-app/immich@v3.1.0...v3.2.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43NS4xIiwidXBkYXRlZEluVmVyIjoiNDQuNzUuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
…ture size (flutter#194010) Impeller clamps each side of a decoded image to the max texture size on its own, so an image bigger than the limit on one side gets squished. A 1000x50000 image on a device with a 16384 limit comes out 1000x16384. This shrinks both sides by the same factor instead, so it comes out 328x16384 and keeps its shape. The image attached to flutter#177239 (6984x32975) comes out 6984x16384 today and 3470x16384 with this change. We hit this in immich when the original of a long image loads (immich-app/immich#11987, immich-app/immich#31690). For now we cap the decode size in the app (immich-app/immich#29367), but every app that shows big images needs the same workaround. The existing `VerifySimpleDecoding` case expected the squish (a 60x20 target with a 10x10 limit came back 10x10), so it now expects 10x3, and a tall case (20x60, expects 3x10) is added. Before and after on a Pixel 7 (Vulkan, 32768 limit) with a 1000x50000 image of circles: <img width="1128" height="2254" alt="case1-A-vs-B" src="https://github.com/user-attachments/assets/4eabb7ee-7dc2-4a65-a50f-fc1b5a597be4" /> Fixes flutter#177239 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant in-code documentation (doc comments with `///`). - [x] If this PR introduces a new feature or capability, I created and linked a website documentation issue or PR in [flutter/website] (or verified none is needed). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [flutter/website]: https://github.com/flutter/website [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…ture size (flutter#194010) Impeller clamps each side of a decoded image to the max texture size on its own, so an image bigger than the limit on one side gets squished. A 1000x50000 image on a device with a 16384 limit comes out 1000x16384. This shrinks both sides by the same factor instead, so it comes out 328x16384 and keeps its shape. The image attached to flutter#177239 (6984x32975) comes out 6984x16384 today and 3470x16384 with this change. We hit this in immich when the original of a long image loads (immich-app/immich#11987, immich-app/immich#31690). For now we cap the decode size in the app (immich-app/immich#29367), but every app that shows big images needs the same workaround. The existing `VerifySimpleDecoding` case expected the squish (a 60x20 target with a 10x10 limit came back 10x10), so it now expects 10x3, and a tall case (20x60, expects 3x10) is added. Before and after on a Pixel 7 (Vulkan, 32768 limit) with a 1000x50000 image of circles: <img width="1128" height="2254" alt="case1-A-vs-B" src="https://github.com/user-attachments/assets/4eabb7ee-7dc2-4a65-a50f-fc1b5a597be4" /> Fixes flutter#177239 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant in-code documentation (doc comments with `///`). - [x] If this PR introduces a new feature or capability, I created and linked a website documentation issue or PR in [flutter/website] (or verified none is needed). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [flutter/website]: https://github.com/flutter/website [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Description
long images (big panoramas, long screenshots) showed up squished on ios, circles turned into ovals.
it's photokit. when we ask it for an image it scales the photo to fill the size we request, and for a very long image that pushes one edge past the gpu texture limit (16384), so ios hands back a squished bitmap. android is fine since it downsamples keeping the ratio.
the first commits fixed the original (load original on) by bounding the request to 16384 so it stays renderable and keeps the true shape.
then i hit the same squish in the normal preview (load original off), which goes through a separate request. so the preview now asks for a size that already matches the image ratio, which kills the squish at the source. normal photos are untouched. when load original is off the preview is the final image so it gets full detail up to the texture limit, otherwise it stays light since the full original loads right after.
two small followups from more testing: fast resize can overshoot the requested size a little, so there is now an exact retry just for that case, the slow path stays rare. and preview targets for extremely thin images are clamped to at least one pixel so a request cant collapse to zero.
tested on my iphone 15 pro max and iphone xs with load original both on and off, and on android. added unit tests for the preview sizing.
closes #11987