Repository navigation
fix(server): kill pg_dump when a backup fails so it stops holding table locks - #30851
Merged
jrasm91 merged 2 commits intoAug 27, 2026
Merged
Conversation
justadityaraj
force-pushed
the
fix/backup-kill-pgdump-on-failure
branch
from
August 18, 2026 14:46
a927d4e to
0531cab
Compare
jrasm91
approved these changes
Aug 18, 2026
jrasm91
left a comment
Member
There was a problem hiding this comment.
Please remove all the comments, otherwise this looks good to me
Contributor
Author
sure, on it |
Contributor
Author
Done! |
…estroyed A failed database backup left pg_dump running. The stream was destroyed but the child was not, so the dump sat idle in transaction holding AccessShareLock on every table until someone terminated it by hand. One report had it survive five days and block DDL from another application on the same Postgres. Destroying the duplex now kills the child, which also covers pipeline() tearing every stream down when one of them fails. The backup service additionally holds references to the streams it spawns so the error path can destroy them. createWriteStream can throw before pipeline() takes ownership, which is how the reported ENOENT on an unmounted backup volume left nothing referencing the running pg_dump.
… fix Requested in review. The reasoning lives in the commit message and the PR body, which is where it belongs.
justadityaraj
force-pushed
the
fix/backup-kill-pgdump-on-failure
branch
from
August 20, 2026 16:55
2c8552c to
d782e41
Compare
danieldietzler
approved these changes
Aug 27, 2026
nemerytamimi
added a commit
to nemerytamimi/immich
that referenced
this pull request
Sep 1, 2026
* fix: don't swallow fetch errors (immich-app#30496) * fix: thumbnail generation for specific SVGs (immich-app#30908) * chore(deps): update ghcr.io/jdx/mise docker tag to v2026.8.12 (immich-app#30985) * fix(deps): update typescript-projects (immich-app#30990) Co-authored-by: Daniel Dietzler <[email protected]> * chore(deps): update docker.io/valkey/valkey:9 docker digest to 70739f8 (immich-app#30980) * fix(mobile): aspect ratio change (immich-app#30939) * fix(mobile): aspect ratio change * chore: explain the change * feat(mobile): show asset owner in asset details (immich-app#29302) * feat(mobile): show asset owner in asset details * refactor(mobile): fetch asset owner from local DB instead of API * cleanup * review changes --------- Co-authored-by: shenlong-tanwen <[email protected]> * fix: throw a typed error on malformed api responses (immich-app#31006) * fix: throw a typed error on malformed api responses * fix: drop response body parse check * fix(web): keep json response validation when overriding fetch (immich-app#31008) * fix(cli): report malformed api responses (immich-app#31007) * refactor(ml): direct ocr processing (immich-app#31016) * feat(mobile): map asset number (immich-app#28911) * feat(mobile): map asset number * chore: use totalAssets from service * refactor: separate widget * fix: async dispose * chore: i18n * chore: add back old i18n key * bring back reactivity --------- Co-authored-by: shenlong-tanwen <[email protected]> * chore: bump sql-tools (immich-app#31000) * fix(server): point the migrations mise task at sql-tools (immich-app#30996) * feat(server): document and guard migration ORDER maintenance (immich-app#30997) feat(server): add a migrations ORDER manifest * feat: verify migration ORDER on every PR (immich-app#30998) * chore(deps): update dependency pillow to v12.3.0 [security] (immich-app#30084) * chore(deps): update dependency pydantic-settings to v2.14.2 [security] (immich-app#29252) * chore(mobile): remove Drift* prefixes from classes and variables (immich-app#31038) * chore(mobile): remove Drift* prefixes from classes and variables * Remove *Drift* from related mocks * feat: only move floating docker tags for the newest release (immich-app#31030) * chore(deps): update dependency github:extism/js-pdk to v1.7.0 (immich-app#30987) * chore(deps): update grafana/grafana docker tag to v12.4.9-ubuntu (immich-app#30986) * chore(deps): update prom/prometheus docker digest to 5ce7540 (immich-app#30981) * chore(deps): update dependency opentofu to v1.12.6 (immich-app#30984) * fix(web): restore timeline scroll when the asset id cannot be resolved (immich-app#30916) Co-authored-by: Daniel Dietzler <[email protected]> Co-authored-by: Daniel Dietzler <[email protected]> * chore: bump openapi-generator version to v7.25 (immich-app#30995) * feat: split release preparation from drafting (immich-app#31024) * feat: gate release publishing behind an approval (immich-app#31025) * feat: cut releases from release branches (immich-app#31033) * feat: backport pull requests to release branches (immich-app#31035) * fix(web): do not play memory video if the `MemoryVideoViewer` element is not visible (immich-app#30947) * feat: allow users to re-run facial recognition for their group (immich-app#30965) * fix: only run backport for labelled pull requests (immich-app#31052) * fix(web): preserve slideshow pause state when viewing video slides (immich-app#30278) Co-authored-by: priyanshuANDcoad <[email protected]> * chore(deps): update ghcr.io/immich-app/base-server-dev docker tag to v202608251107 (immich-app#31054) * fix: draggable Immich logo (immich-app#31055) * fix(server): kill pg_dump when a backup fails so it stops holding table locks (immich-app#30851) * fix(server): kill the child process when a spawned duplex stream is destroyed A failed database backup left pg_dump running. The stream was destroyed but the child was not, so the dump sat idle in transaction holding AccessShareLock on every table until someone terminated it by hand. One report had it survive five days and block DDL from another application on the same Postgres. Destroying the duplex now kills the child, which also covers pipeline() tearing every stream down when one of them fails. The backup service additionally holds references to the streams it spawns so the error path can destroy them. createWriteStream can throw before pipeline() takes ownership, which is how the reported ENOENT on an unmounted backup volume left nothing referencing the running pg_dump. * chore(server): drop the explanatory comments from the backup teardown fix Requested in review. The reasoning lives in the commit message and the PR body, which is where it belongs. * fix(web): misleading toast notification (immich-app#30976) * Added the proper toast for each scenario in the if/else statement instead of only having toastManager.primary() for all scenarios. * Created a test file for album.service.ts. * chore: cleanup --------- Co-authored-by: Daniel Dietzler <[email protected]> * fix(web): map (immich-app#31056) * fix(web): map without set start/end dates * fix(web): invalid timeline map options * docs: update remote-machine-learning.md (immich-app#28728) Update remote-machine-learning.md To include the default URL, should someone need it (as the default entry is not easily recreated otherwise). * fix: external library statistics for excluded assets (immich-app#28462) Fix external library statistics for excluded assets * feat: same-second photos now sub-sort by filename (immich-app#29528) * Update sorting Updates the sorting to sort 1. First by timeCreatedAt, but then 2. By filename. * Push tsts * Sync SQL * Formatting fixes --------- Co-authored-by: Daniel Dietzler <[email protected]> * feat(web): view assets in map viewport (immich-app#27492) * feat(server): new search API (immich-app#30179) * fix: ios map settings sheet (immich-app#31060) fix: ios map settings Co-authored-by: shenlong-tanwen <[email protected]> * chore(web): update translations (immich-app#30296) Translate-URL: https://hosted.weblate.org/projects/immich/immich/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/be/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/bn/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/de_CH/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_GB/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/eo/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/eu/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/fa/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ga/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/km/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/kn/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ml/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/mn/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ne/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sq/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/tl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/yue_Hant/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/ Translation: Immich/immich Co-authored-by: 4liceD <[email protected]> Co-authored-by: 4liceD <[email protected]> Co-authored-by: Adam Havránek <[email protected]> Co-authored-by: Aindriú Mac Giolla Eoin <[email protected]> Co-authored-by: Akhil Raj <[email protected]> Co-authored-by: Arco <[email protected]> Co-authored-by: Ardev Prisec <[email protected]> Co-authored-by: Arif Budiman <[email protected]> Co-authored-by: Arkaitz Ortega <[email protected]> Co-authored-by: Arnie97 <[email protected]> Co-authored-by: Arseniy <[email protected]> Co-authored-by: Azharul Haque <[email protected]> Co-authored-by: Bat-Uyanga Batdelger <[email protected]> Co-authored-by: Brady87 <[email protected]> Co-authored-by: Brian <[email protected]> Co-authored-by: Bruno Silva <[email protected]> Co-authored-by: Colin <[email protected]> Co-authored-by: CoolAEW <[email protected]> Co-authored-by: Denis Pacquier <[email protected]> Co-authored-by: DevServs <[email protected]> Co-authored-by: Eduard Ereza Martínez <[email protected]> Co-authored-by: Emil Warelius <[email protected]> Co-authored-by: Fjuro <[email protected]> Co-authored-by: Frank Paul Silye <[email protected]> Co-authored-by: HackingAll <[email protected]> Co-authored-by: Hans Cats <[email protected]> Co-authored-by: Happy <[email protected]> Co-authored-by: Henry Wong <[email protected]> Co-authored-by: Hurricane_32 <[email protected]> Co-authored-by: Håkon Antonsen <[email protected]> Co-authored-by: Hồ Nhất Duy <[email protected]> Co-authored-by: Indrek Haav <[email protected]> Co-authored-by: Ivan Dimitrov <[email protected]> Co-authored-by: Izoret <[email protected]> Co-authored-by: Jonatan Nyberg <[email protected]> Co-authored-by: Jozef Gaal <[email protected]> Co-authored-by: Kanchnak Khorn <[email protected]> Co-authored-by: Klenner Martins Barros <[email protected]> Co-authored-by: Leo Bottaro <[email protected]> Co-authored-by: Li-Sheng Chou <[email protected]> Co-authored-by: Linas Samuchovas <[email protected]> Co-authored-by: Liviu Roman <[email protected]> Co-authored-by: Lucas Pinto <[email protected]> Co-authored-by: Luis Fernando Illapa <[email protected]> Co-authored-by: Marco C. <[email protected]> Co-authored-by: Matjaž T. <[email protected]> Co-authored-by: Michal Šmahel <[email protected]> Co-authored-by: Mārtiņš Bruņenieks <[email protected]> Co-authored-by: Nagy Krisztián <[email protected]> Co-authored-by: Natale Daniele Musumeci <[email protected]> Co-authored-by: Nicola Bortoletto <[email protected]> Co-authored-by: Olaf Nielsen <[email protected]> Co-authored-by: Oğuz Ersen <[email protected]> Co-authored-by: PIRANY <[email protected]> Co-authored-by: PPNplus <[email protected]> Co-authored-by: PalmyreB <[email protected]> Co-authored-by: Pavel Borecki <[email protected]> Co-authored-by: Pavel Miniutka <[email protected]> Co-authored-by: Radoslav <[email protected]> Co-authored-by: Shawn <[email protected]> Co-authored-by: Shayan <[email protected]> Co-authored-by: Simone Ognibene <[email protected]> Co-authored-by: Skanda <[email protected]> Co-authored-by: Syahmi Azhar <[email protected]> Co-authored-by: Sylvain Pichon <[email protected]> Co-authored-by: Tacyd <[email protected]> Co-authored-by: Thiago S. Marcelino <[email protected]> Co-authored-by: Tim Morley <[email protected]> Co-authored-by: Timon Fiedler <[email protected]> Co-authored-by: Tom Haelbich <[email protected]> Co-authored-by: Tomislav Renić <[email protected]> Co-authored-by: User 123456789 <[email protected]> Co-authored-by: Usinouv <[email protected]> Co-authored-by: Yoshi <[email protected]> Co-authored-by: Yusaku Mizobuchi <[email protected]> Co-authored-by: Zadkiel AHARONIAN <[email protected]> Co-authored-by: bittin1ddc447d824349b2 <[email protected]> Co-authored-by: deva <[email protected]> Co-authored-by: hunnguye <[email protected]> Co-authored-by: lanew <[email protected]> Co-authored-by: muziqaz <[email protected]> Co-authored-by: noob translator <[email protected]> Co-authored-by: reducedradius <[email protected]> Co-authored-by: rubes <[email protected]> Co-authored-by: santhosh kumar <[email protected]> Co-authored-by: tikg <[email protected]> Co-authored-by: tulioveneno <[email protected]> Co-authored-by: waclaw66 <[email protected]> Co-authored-by: zurachu <[email protected]> Co-authored-by: 정동걸 <[email protected]> * fix: check out the branch tip when preparing a release (immich-app#31061) * chore: version v3.2.0-rc.0 * fix: build release branch images instead of re-tagging main (immich-app#31063) * fix: run codeql and weblate checks on release branches (immich-app#31065) * fix: avoid a concurrency deadlock when drafting a release (immich-app#31069) * chore: drop backport label description (immich-app#31062) * chore: drop backport description header (immich-app#31067) * fix(ml): read CLIP model configs as UTF-8 (immich-app#31075) * fix(web): face editor coordinates on a not-yet-loaded video (immich-app#31083) * fix(e2e): wait out the duplicate #asset-grid during navigation (immich-app#31088) * fix(mobile): handle transient loading states for map timelines (immich-app#29735) * fix(mobile): handle transient loading states for map timelines * fix(mobile): handle transient loading states for map timelines * Add support for new method * Rewrote map options notifier to be more Riverpody * fix: generate release notes from the previous release on the line (immich-app#31080) * chore(deps): update base-image to v202608300913 (immich-app#31128) * chore: tune map icon size (immich-app#31108) * fix(mobile): keep the original filename when sharing downloaded assets (immich-app#30267) * fix(mobile): keep the original filename when sharing downloaded assets * use ordinal suffixes for duplicate share filenames * rename display name maps to totals and duplicates seen * drop the display name totals map and keep the first copy name clean * fold the ordinal suffix into the share display name derivation * resolve share names after download and test through the public flow * use the renamed store repository in the share tests * add docstrings to the share file helpers * simplify the share name resolver to a single set * note the share_plus cache folder behavior on the resolver * drop the version pin from the resolver comment * pin the share_plus version in the resolver comment * undo the accidental reformat, keep the version pin * explain the test harness and cut the teardown and wait noise * say why the storage is stubbed, drop the platform override and busy wait for the share cleanup * spy on the cleanup in the share tests instead of waiting for it * fix(mobile): refresh server info when the websocket connects (immich-app#31144) refresh the server features and config when the websocket connects * fix: do not move faces of users other than the current owner (immich-app#31145) * fix(server): allow an empty assetIds array when creating an album shared link (immich-app#31098) * fix: Build SDK in dev container (immich-app#31096) * fix(web): interaction with some filter elements closes the search panel (immich-app#31107) * fix: open an announcement discussion for each release line (immich-app#31101) --------- Co-authored-by: bo0tzz <[email protected]> Co-authored-by: Daniel Dietzler <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler <[email protected]> Co-authored-by: Damiano Ferrari <[email protected]> Co-authored-by: Lauritz Tieste <[email protected]> Co-authored-by: shenlong-tanwen <[email protected]> Co-authored-by: Mert <[email protected]> Co-authored-by: Yaros <[email protected]> Co-authored-by: Jason Rasmussen <[email protected]> Co-authored-by: Adam Gastineau <[email protected]> Co-authored-by: thejeff77 <[email protected]> Co-authored-by: Timon <[email protected]> Co-authored-by: Zlendy <[email protected]> Co-authored-by: Priyanshu <[email protected]> Co-authored-by: priyanshuANDcoad <[email protected]> Co-authored-by: Aditya Raj Singh <[email protected]> Co-authored-by: brn-lin <[email protected]> Co-authored-by: Aviatorpaal <[email protected]> Co-authored-by: Mimi <[email protected]> Co-authored-by: andy.mp3 <[email protected]> Co-authored-by: rickytrevor <[email protected]> Co-authored-by: shenlong <[email protected]> Co-authored-by: Weblate (bot) <[email protected]> Co-authored-by: 4liceD <[email protected]> Co-authored-by: 4liceD <[email protected]> Co-authored-by: Adam Havránek <[email protected]> Co-authored-by: Aindriú Mac Giolla Eoin <[email protected]> Co-authored-by: Akhil Raj <[email protected]> Co-authored-by: Arco <[email protected]> Co-authored-by: Ardev Prisec <[email protected]> Co-authored-by: Arif Budiman <[email protected]> Co-authored-by: Arkaitz Ortega <[email protected]> Co-authored-by: Arnie97 <[email protected]> Co-authored-by: Arseniy <[email protected]> Co-authored-by: Azharul Haque <[email protected]> Co-authored-by: Bat-Uyanga Batdelger <[email protected]> Co-authored-by: Brady87 <[email protected]> Co-authored-by: Brian <[email protected]> Co-authored-by: Bruno Silva <[email protected]> Co-authored-by: Colin <[email protected]> Co-authored-by: CoolAEW <[email protected]> Co-authored-by: Denis Pacquier <[email protected]> Co-authored-by: DevServs <[email protected]> Co-authored-by: Eduard Ereza Martínez <[email protected]> Co-authored-by: Emil Warelius <[email protected]> Co-authored-by: Fjuro <[email protected]> Co-authored-by: Frank Paul Silye <[email protected]> Co-authored-by: HackingAll <[email protected]> Co-authored-by: Hans Cats <[email protected]> Co-authored-by: Happy <[email protected]> Co-authored-by: Henry Wong <[email protected]> Co-authored-by: Hurricane_32 <[email protected]> Co-authored-by: Håkon Antonsen <[email protected]> Co-authored-by: Hồ Nhất Duy <[email protected]> Co-authored-by: Indrek Haav <[email protected]> Co-authored-by: Ivan Dimitrov <[email protected]> Co-authored-by: Izoret <[email protected]> Co-authored-by: Jonatan Nyberg <[email protected]> Co-authored-by: Jozef Gaal <[email protected]> Co-authored-by: Kanchnak Khorn <[email protected]> Co-authored-by: Klenner Martins Barros <[email protected]> Co-authored-by: Leo Bottaro <[email protected]> Co-authored-by: Li-Sheng Chou <[email protected]> Co-authored-by: Linas Samuchovas <[email protected]> Co-authored-by: Liviu Roman <[email protected]> Co-authored-by: Lucas Pinto <[email protected]> Co-authored-by: Luis Fernando Illapa <[email protected]> Co-authored-by: Marco C. <[email protected]> Co-authored-by: Matjaž T. <[email protected]> Co-authored-by: Michal Šmahel <[email protected]> Co-authored-by: Mārtiņš Bruņenieks <[email protected]> Co-authored-by: Nagy Krisztián <[email protected]> Co-authored-by: Natale Daniele Musumeci <[email protected]> Co-authored-by: Nicola Bortoletto <[email protected]> Co-authored-by: Olaf Nielsen <[email protected]> Co-authored-by: Oğuz Ersen <[email protected]> Co-authored-by: PIRANY <[email protected]> Co-authored-by: PPNplus <[email protected]> Co-authored-by: PalmyreB <[email protected]> Co-authored-by: Pavel Borecki <[email protected]> Co-authored-by: Pavel Miniutka <[email protected]> Co-authored-by: Radoslav <[email protected]> Co-authored-by: Shawn <[email protected]> Co-authored-by: Shayan <[email protected]> Co-authored-by: Simone Ognibene <[email protected]> Co-authored-by: Skanda <[email protected]> Co-authored-by: Syahmi Azhar <[email protected]> Co-authored-by: Sylvain Pichon <[email protected]> Co-authored-by: Tacyd <[email protected]> Co-authored-by: Thiago S. Marcelino <[email protected]> Co-authored-by: Tim Morley <[email protected]> Co-authored-by: Timon Fiedler <[email protected]> Co-authored-by: Tom Haelbich <[email protected]> Co-authored-by: Tomislav Renić <[email protected]> Co-authored-by: User 123456789 <[email protected]> Co-authored-by: Usinouv <[email protected]> Co-authored-by: Yoshi <[email protected]> Co-authored-by: Yusaku Mizobuchi <[email protected]> Co-authored-by: Zadkiel AHARONIAN <[email protected]> Co-authored-by: bittin1ddc447d824349b2 <[email protected]> Co-authored-by: deva <[email protected]> Co-authored-by: hunnguye <[email protected]> Co-authored-by: lanew <[email protected]> Co-authored-by: muziqaz <[email protected]> Co-authored-by: noob translator <[email protected]> Co-authored-by: reducedradius <[email protected]> Co-authored-by: rubes <[email protected]> Co-authored-by: santhosh kumar <[email protected]> Co-authored-by: tikg <[email protected]> Co-authored-by: tulioveneno <[email protected]> Co-authored-by: waclaw66 <[email protected]> Co-authored-by: zurachu <[email protected]> Co-authored-by: 정동걸 <[email protected]> Co-authored-by: immich-push-o-matic[bot] <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Co-authored-by: Alex <[email protected]> Co-authored-by: Santo Shakil <[email protected]> Co-authored-by: Ufuk <[email protected]> Co-authored-by: Ray <[email protected]> Co-authored-by: Nemer Tamimi <[email protected]> Co-authored-by: Claude Opus 5 <[email protected]>
eleboucher
pushed a commit
to eleboucher/homelab
that referenced
this pull request
Sep 10, 2026
…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
hbjydev
pushed a commit
to hbjydev/phoebe
that referenced
this pull request
Sep 10, 2026
….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
dadezzz
pushed a commit
to dadezzz/kubernetes
that referenced
this pull request
Sep 11, 2026
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==-->
1 task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes #30824
A failed backup left
pg_dumprunning.DatabaseBackupServicespawns it, then opens the output stream, and if that open throws the error path never terminates the child. The orphaned connection sitsidle in transactionholdingAccessShareLockon every table until someone kills it by hand. In the report it survived five days and blocked DDL from another application sharing the same Postgres.Two things were wrong.
spawnDuplexStreamnever killed the child when the returned stream was destroyed._destroywas not overridden, so destroying the duplex left the process running. That is broader than the reported case:pipeline()destroys every stream when one of them fails, so any mid-pipeline failure leaked too. Destroying the duplex now kills the child, guarded onexitCode/signalCodeso an already-exited process is left alone.createDatabaseBackupdeclaredpgdumpandgzipinside thetry, so thecatchcould not reach them. That is exactly the reported path:createWriteStreamthrowsENOENTwhen the backup volume is unmounted, which happens after both children are spawned but beforepipeline()takes ownership, leaving nothing holding a reference to them. They are now declared outside thetryand destroyed on failure.How Has This Been Tested?
should kill the child process when the stream is destroyed: spawns a long-running child, destroys the stream, waits for exitshould kill the child when pipeline tears the stream down after a failure: a sink that errors mid-pipeline, asserting the child still exitsshould destroy the spawned processes if the write stream fails: the reported case,createWriteStreamthrowing after the children are spawnedAll three fail on
main(the first two time out waiting for an exit that never comes) and pass with the change.Full server suite goes from 2173 to 2176 passing, 94 files, no failures before or after.
prettier --check,eslint --max-warnings 0andtsc --noEmitare all clean. Run on Node 24.15.0 to match.nvmrc.Screenshots (if appropriate)
Server-side only, no UI changes.
Checklist:
src/services/uses repositories implementations for database calls, filesystem operations, etc.src/repositories/is pretty basic/simple and does not have any immich specific logic (that belongs insrc/services/)Please describe to which degree, if any, an LLM was used in creating this pull request.
The change and its tests were drafted with Claude Code. I reviewed the diff, and ran the tests, the full server suite, lint, format and typecheck locally before opening this.