Commit Graph
3538 Commits
Author SHA1 Message Date
Daniel DietzlerandGitHub ab5a9ae48c chore: drop tsc-alias (#31583) 2026-09-15 18:10:07 +02:00
Daniel DietzlerandGitHub e35aa718d9 fix: skip faces of other users when reassigning faces (#31580) 2026-09-15 17:27:46 +02:00
renovate[bot]andGitHub 9e0362dca0 chore(deps): update base-image to v202609151314 (#31585) 2026-09-15 13:42:38 +00:00
Jason RasmussenandGitHub 99fd561144 chore: transition to nullable user.oauthId (#31560) 2026-09-15 09:33:15 -04:00
renovate[bot]andGitHub b6e9ae9ac6 chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.9 (#31562) 2026-09-15 12:31:43 +02:00
e55ac299a4 chore(deps): update node (#31329)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-14 21:48:02 +02:00
Daniel DietzlerandGitHub 7b51c50a96 feat: people merge improvements (#31456) 2026-09-14 19:10:25 +02:00
Daniel DietzlerandGitHub a84de0188e fix: metadata extraction of faces (#31551) 2026-09-14 19:10:21 +02:00
db6a5b0d56 chore: reset shouldChangePassword on password change (#31276)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-09-14 21:04:42 +05:30
Daniel DietzlerandGitHub ef9718e93d fix: feature face update ignores soft-deleted faces (#31533) 2026-09-14 09:47:02 -04:00
Daniel DietzlerandGitHub 221ddd31c4 feat: server imports linting (#31537) 2026-09-14 14:51:31 +02:00
Alan GraingerandGitHub 7abd625af3 docs(server): document the UTC timestamp format for timeBucket (#31421)
* docs(server): document the UTC timestamp format for timeBucket

* docs(server): wrap timeBucket description to satisfy prettier
2026-09-11 14:50:08 -04:00
Jason RasmussenandGitHub 9abb605b62 fix: sync client disconnect (#31461) 2026-09-11 14:48:55 -04:00
Jason RasmussenandGitHub f346fe1f94 refactor: error handling (#31455) 2026-09-11 14:11:06 -04:00
Jason RasmussenandGitHub c0eed4902a chore: version v3.2.0 (#31441)
chore: v3.2.0
2026-09-11 11:02:34 -04:00
Jason RasmussenandGitHub f6501d2f5b fix: immich-dev (#31447) 2026-09-11 10:40:40 -04:00
MertandGitHub e039168e4a fix(server): vacuum after migrations, concurrent reindex (#31424) 2026-09-11 10:27:04 -04:00
bo0tzzandGitHub 72f1034c58 fix: only run version check in production env (#31443) 2026-09-11 10:19:45 -04:00
Daniel DietzlerandGitHub 2a62622041 feat: NestJS 12 and ESM (#31237) 2026-09-10 13:22:29 +02:00
4f503c4b6b fix(deps): update typescript-projects (#30842)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-08 12:39:26 +02:00
renovate[bot]andGitHub 3d3345fc18 chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.2 (#31327) 2026-09-08 11:33:18 +02:00
Jake BybeeandGitHub 58fb1ed4a9 fix(server): live photo transcode visibility (#31319)
* allow live photos to be transcoded on queue trigger

* new gen sql

* add test to check hidden assets are returned
2026-09-07 15:32:42 -04:00
Daniel DietzlerandGitHub 399217bf5f fix: face detection of edited assets (#31240) 2026-09-03 15:40:30 +02:00
Mees FrenselandGitHub da8131d5c2 fix(web): album date range formatting (#28564) 2026-09-03 10:31:15 +02:00
Jason RasmussenandGitHub 2c53b76400 chore: require number format (#31222) 2026-09-02 12:33:22 -04:00
Aditya Raj SinghandGitHub c1f2756f62 fix(server): never unlink an untracked-file path that an asset now references (#31074) 2026-09-01 15:50:07 +02:00
renovate[bot]andGitHub d441795a0e chore(deps): update ghcr.io/jdx/mise docker tag to v2026.8.16 (#31177) 2026-09-01 12:31:31 +02:00
RayandGitHub 06f6104e1a fix: Build SDK in dev container (#31096) 2026-08-31 18:28:58 +02:00
UfukandGitHub 9e5dcc598f fix(server): allow an empty assetIds array when creating an album shared link (#31098) 2026-08-31 17:31:47 +02:00
Daniel DietzlerandGitHub 0628f8b966 fix: do not move faces of users other than the current owner (#31145) 2026-08-31 16:11:04 +02:00
renovate[bot]andGitHub 1fd3d87492 chore(deps): update base-image to v202608300913 (#31128) 2026-08-30 11:35:21 +02:00
immich-push-o-matic[bot] e61312084b chore: version v3.2.0-rc.0 2026-08-27 19:43:45 +00:00
TimonandGitHub 8b3d6b320b feat(server): new search API (#30179) 2026-08-27 20:39:55 +02:00
1db4677cf8 feat: same-second photos now sub-sort by filename (#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 <36593685+danieldietzler@users.noreply.github.com>
2026-08-27 13:46:10 -04:00
MimiandGitHub 91d362eb9f fix: external library statistics for excluded assets (#28462)
Fix external library statistics for excluded assets
2026-08-27 17:34:10 +00:00
Aditya Raj SinghandGitHub dc3d6eeec4 fix(server): kill pg_dump when a backup fails so it stops holding table locks (#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.
2026-08-27 12:15:45 -04:00
renovate[bot]andGitHub 8178a01522 chore(deps): update ghcr.io/immich-app/base-server-dev docker tag to v202608251107 (#31054) 2026-08-27 15:29:36 +00:00
Daniel DietzlerandGitHub c7d24321bf feat: allow users to re-run facial recognition for their group (#30965) 2026-08-27 16:38:07 +02:00
bo0tzzandGitHub a8c79469e5 feat(server): document and guard migration ORDER maintenance (#30997)
feat(server): add a migrations ORDER manifest
2026-08-26 15:24:59 +02:00
bo0tzzandGitHub f264573847 fix(server): point the migrations mise task at sql-tools (#30996) 2026-08-26 15:24:59 +02:00
Jason RasmussenandGitHub 13562d80a4 chore: bump sql-tools (#31000) 2026-08-26 14:59:47 +02:00
aa6e4d9173 fix(deps): update typescript-projects (#30990)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-08-25 20:17:24 +02:00
renovate[bot]andGitHub 5d84e16bc1 chore(deps): update ghcr.io/jdx/mise docker tag to v2026.8.12 (#30985) 2026-08-25 20:11:24 +02:00
Daniel DietzlerandGitHub 9e3d9a7770 fix: thumbnail generation for specific SVGs (#30908) 2026-08-25 19:57:48 +02:00
bo0tzzandGitHub fbd5dc2c61 fix: don't swallow fetch errors (#30496) 2026-08-25 17:47:25 +02:00
351be95769 feat: memories view (#28675)
* wip web memories view

* paginate searchMemories

* improve memories ui

* feat(mobile): memories view

* improve memories web ui

* fix(web): avoid unnecessary memory refreshes

* refactor(web): move timline memory manager filter

* fix(web): memories infinitely loading on 0 results

* fix(web): memories resetting

* feat(web): animated memory previews

* feat(web): memory page dark styling

* chore(mobile): fix failing memory lane tests

* chore(mobile): remove old import

* chore(e2e): fix failing memory lane tests

* chore(server): revert searchMemories changes

* chore(server): lint

* chore(mobile): fix bad merge

* chore(e2e): fix memory ui tests

* chore(web): rename /memory to /memories

* chore(mobile): linting

* chore(web): linting

* fix(web): prevent duplicate memory page loading

* fix(web): lint

* fix(web): memories page improvements

* chore(mobile): lint

* fix(mobile): fix translations

* fix(mobile): build errors

* fix(web): prevent memories from infinitely loading

* chore(e2e)): fix failng memory viewer test

* chore(web): clean up types in memory manager

* chore(web): lint

* feat: update list and detail memory page layouts

* onlyFavorites through drift

* rename to get all

* mobile: use widgetWhen in memory list page

* remove redundant check

* fix: e2e

---------

Co-authored-by: Timon <mail@timonrieger.de>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-24 19:16:33 -05:00
Jordan BrockandGitHub 1b3aa9cd51 fix(server): correct tag create operations (#30877) 2026-08-24 17:57:32 +02:00
6b7b0fe3a6 fix: remove partner assets from existing memories (#28950)
* fix: remove partner assets from existing memories

* move tests to be medium tests

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-24 14:55:47 +00:00
TimonandGitHub 2feb889b9c chore(server): update zod to 4.4.3 and nestjs-zod to 5.5.0 (#30532) 2026-08-24 10:59:22 +02:00
Lin, Chiang-YuandGitHub b26b0cc806 fix(server): let a second metadata extraction replace stored AV metadata (#30900)
`upsertExif` writes derived audio, video and keyframe metadata with an
`ON CONFLICT DO UPDATE`, but every column in those three update lists
assigns the stored row back to itself:

    bitrate: ref('asset_audio.bitrate')

`SET bitrate = asset_audio.bitrate` is a self-assignment, so once a row
exists nothing can change it. Re-running metadata extraction re-reads the
file, builds a fresh snapshot, and then quietly discards it. The rest of the
file already uses `excluded` for this, as does `plugin.repository.ts`.

`asset_video.frameCount` had a second problem: it is supplied on insert but
was missing from the update list, so it would have stayed stale even after
the reference was corrected.

Extraction is meant to be repeatable. Probing improves between releases, a
file can be repaired or replaced, and a fix to how a stream is chosen is
worthless if it cannot reach the assets that were already imported. An
`upsert` that silently degrades to insert-only defeats all of that.

Metadata extraction is the only caller that passes these three objects, and
it passes a complete snapshot or nothing: each object is built from a single
probe behind a guard, and `upsertExif` skips the branch entirely when the
object is absent. So taking the incoming row cannot write partial values
over good ones. The other three callers pass `exif` only, and every other
reference to these tables is a read.
2026-08-22 17:58:05 +00:00