Commit Graph
10872 Commits
Author SHA1 Message Date
renovate[bot]andGitHub c9be4c4bd3 chore(deps): update dependency github:extism/js-pdk to v1.7.0 (#30987) 2026-08-27 12:45:18 +02:00
bo0tzzandGitHub 2c0f415a56 feat: only move floating docker tags for the newest release (#31030) 2026-08-27 12:30:39 +02:00
Adam GastineauandGitHub c04c81a979 chore(mobile): remove Drift* prefixes from classes and variables (#31038)
* chore(mobile): remove Drift* prefixes from classes and variables

* Remove *Drift* from related mocks
2026-08-26 19:11:12 +00:00
renovate[bot]andGitHub 093f5c070a chore(deps): update dependency pydantic-settings to v2.14.2 [security] (#29252) 2026-08-26 10:33:23 -04:00
renovate[bot]andGitHub ef72f1ec5b chore(deps): update dependency pillow to v12.3.0 [security] (#30084) 2026-08-26 10:32:47 -04:00
bo0tzzandGitHub 291ccdae95 feat: verify migration ORDER on every PR (#30998) 2026-08-26 15:25:00 +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
0f821a7338 feat(mobile): map asset number (#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 <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-26 05:59:27 +00:00
MertandGitHub dc688edb6f refactor(ml): direct ocr processing (#31016) 2026-08-25 23:13:47 -04:00
bo0tzzandGitHub 6221e29c70 fix: throw a typed error on malformed api responses (#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 (#31008)

* fix(cli): report malformed api responses (#31007)
2026-08-26 00:38:39 +00:00
4ff7148f85 feat(mobile): show asset owner in asset details (#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 <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-25 20:40:05 +00:00
Damiano FerrariandGitHub 290861e347 fix(mobile): aspect ratio change (#30939)
* fix(mobile): aspect ratio change

* chore: explain the change
2026-08-25 13:52:05 -05:00
renovate[bot]andGitHub caa96dda4f chore(deps): update docker.io/valkey/valkey:9 docker digest to 70739f8 (#30980) 2026-08-25 20:27:15 +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
renovate[bot]andGitHub 3d71c0c8dc chore(deps): update github-actions (#30989) 2026-08-25 10:57:54 +02:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6acd870371 chore(deps): lock file maintenance (mise) (#30464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-25 01:50:02 -04: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
Adam GastineauandGitHub 8dcfd36fa5 chore(mobile): move Drift into mobile/data (#30966)
* chore(mobile): move Drift into mobile/data

* Move into more structured subdirectories

* Fix changed merge paths
2026-08-25 00:51:02 +05:30
b3daf49234 chore(mobile): pump dcm (#30963)
chore: pump-dcm

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-25 00:45:50 +05:30
2ea17db70c chore: pump flutter to 3.47.1 (#30962)
* chore: pump flutter to 3.47.1

* analysis fixes

* changes from iOS build

* flutter get ui lib

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-25 00:45:50 +05:30
0b75b20267 perf(web): use hash-wasm SHA-1 with pure-JS fallback for upload hashing (#30107)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-08-24 20:24:04 +02: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
Brandon WeesandGitHub 6f6f2362d7 chore: lint for unguarded redirect URL reading (#30950)
* chore: lint for unguarded redirect URL reading

* fix: double continue wrapper
2026-08-24 10:07:45 -04: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
Brandon WeesandGitHub cbf5d83a69 fix: maintentance return URL sanitization (#30948) 2026-08-23 17:49:11 +00:00
c98c20e963 fix(mobile): respect 24h system setting (#30792)
* fix(mobile): respect 24h system setting

* refactor: extract into utils

* chore: remove comment

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>

* refactor: resolveAssetDateTime

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>

* refactor: alwaysUse24HourFormat

* chore: impl suggestions

* refactor: less comments & resolveDateTimeLocale

---------

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
2026-08-23 17:51:03 +05:30
44a9384758 fix: do not exit search screen on back during multiselect (#30689)
* fix: do not exit screen on back multiselect search

* chore: apply suggestion

Co-authored-by: Alex <alex.tran1502@gmail.com>

* refactor: fix in timeline widget

* chore(server): AssetOcrSyncReset.ts

* Revert "chore(server): AssetOcrSyncReset.ts"

This reverts commit c0647382cd63d046fee893ea0ee69503484d19f6.

* fix: test crash

* refactor: fix test instead of code workaround

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-08-23 12:19:52 +00: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
Santo ShakilandGitHub 2237b28813 fix(mobile): permanently delete local copies when moving to the locked folder (#29730)
* permanently delete local copies when moving to the locked folder

* simplify the delete path and move the stubs into the mock defaults

* drop the kept count from the partial message and log the mismatch instead
2026-08-22 07:42:11 +05:30
Adam GastineauandGitHub 11cdfa9c5e chore(mobile): remove commited db.repository.steps.dart (#30910) 2026-08-22 07:37:47 +05:30
AlexandGitHub 7412079f88 chore: search filter animation improvement and reactive search cue example (#30866)
* chore: better animation for search form and search cue

* better search cue example

* chore: revert mise.lock changes
2026-08-21 15:11:23 -05:00
a36fb67736 chore: align icon and font size of bottom bar actions (#30890)
* chore: align icon and font size of bottom bar actions

* align base action font weight to immich ui weights

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-21 14:06:42 -05:00
79c4c00f70 feat(web): tag renaming v2 (#27909)
* implement updated rename tag feature

* Fix tag update handler

* Ensure toast displays updated tag name

* Ensure toast displays updated tag name

* Handle updates to tag closure table, prevent slash in API filename, test case updates

* delete child tags on parent delete

* Update frontend for better handling of nested tags

* pr checklist fixes

* fix unit test for tag controller

* Hide path for top-level tags

* regenerate SQL files

* name updates optional for tag update operations

* e2e tests for new tag api changes

* changes from code review, additional test coverage

* test fixes, web component refactor

* test assets

* test asset updates

* open-api rebuild

* update unit tests

* fix tag dto tests

* Update web/src/lib/modals/TagEditModal.svelte

Fix missing color bug

Co-authored-by: Ray <3608878+Pecacheu@users.noreply.github.com>

* fix tag e2e test

* remove closure table bug fixes

* remove nullish from tag name update schema

* regenerate openapi and sql

* fix test and e2e test

* simplify tag repository update process

* minor fix and sql regenerate

* fix tests, regen open-api, update dto

* Remove unused function

* Remove accidental test asset ref

* re-add test assets

* pin submodule to main branch commit

* Update test cases based on feedback

* Server fixes based on feedback

* regenerate sql

---------

Co-authored-by: Ray <3608878+Pecacheu@users.noreply.github.com>
2026-08-21 14:55:11 -04:00
Adam GastineauandGitHub 37e033a09d chore(mobile): migrate remaining simple classes to Freezed (#30907) 2026-08-21 22:37:03 +05:30
Jason RasmussenandGitHub 2f48a8aab4 refactor: memory e2e (#30906) 2026-08-21 12:15:17 -04:00
caea849fee feat: asset file apis (#25900)
* feat: asset file endpoints

* Update server/src/controllers/asset-file.controller.ts

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* Update server/src/controllers/asset-file.controller.ts

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-08-21 13:55:25 +00:00
Daniel DietzlerandGitHub 8ae98f2a04 fix: quote database owner in restore (#30905) 2026-08-21 15:11:20 +02:00
renovate[bot]andGitHub 47c0dea07f chore(deps): update grafana/grafana docker tag to v12.4.8-ubuntu (#30835) 2026-08-21 14:50:10 +02:00
57ce9b2221 fix(server): correct asset dimensions from exif metadata (#29244)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-08-21 13:32:17 +02:00
Santo ShakilandGitHub a490cea1c4 fix(mobile): dedupe stale remote_asset rows on sync (#28445)
* fix(mobile): dedupe stale remote_asset rows on sync

queue a pre-delete on the matching partial-index tuple before each
upsert in updateAssetsV1/V2 so the second insert does not crash on
SqliteException(2067) when the server re-issues a new id for the
same (ownerId, checksum). closes #22522 #27186.

* run the dedupe deletes before the inserts and keep only the last duplicate per payload

* switch the asset upsert to insert or replace

* trim the dedupe tests to the essentials
2026-08-21 11:13:48 +00:00
Jason RasmussenandGitHub 4c26a7ca76 refactor: activity e2e (#30896) 2026-08-21 12:57:50 +02:00
8ce6b18563 fix(server): library exclusion patterns can soft-delete assets outside their directory (#30850)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-08-21 12:28:12 +02:00
Diogo CorreiaandGitHub c9776fb990 fix(web): download archives via html POST forms (#30021)
* fix: download archives via html POST forms

* refactor: fix css of download panel, add translations and toasts

* style: run lint, formatter, check

* chore: generate open-api specs

* refactor(web): simplify download manager, use SvelteMap

* refactor(server): parse fields from x-www-form-urlencoded request

* refactor: move content-disposition to ImmichReadStream

* Pass asset ids as a comma-separated string

This fixes a bug where the 1000 parameter limit is being hit when
downloading 1000+ assets.

* Add download controller test

* Fix lint warnings
2026-08-20 20:58:41 -04:00
Jason RasmussenandGitHub c7531a36f9 refactor: partner e2e (#30895) 2026-08-20 17:32:51 -04:00