Commit graph

10854 commits

Author SHA1 Message Date
bo0tzz
fbd5dc2c61
fix: don't swallow fetch errors (#30496) 2026-08-25 17:47:25 +02:00
renovate[bot]
3d71c0c8dc
chore(deps): update github-actions (#30989) 2026-08-25 10:57:54 +02:00
renovate[bot]
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
Ben Beckford
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 Gastineau
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
shenlong
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
shenlong
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
Moshiour Rahman
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 Brock
1b3aa9cd51
fix(server): correct tag create operations (#30877) 2026-08-24 17:57:32 +02:00
shenlong
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 Wees
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
Timon
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 Wees
cbf5d83a69
fix: maintentance return URL sanitization (#30948) 2026-08-23 17:49:11 +00:00
Yaros
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
Yaros
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 c0647382cd.

* 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-Yu
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 Shakil
2237b28813
fix(mobile): permanently delete local copies when moving to the locked folder (#29730)
Some checks failed
Docker / Build and Push ML-5 (push) Has been cancelled
Docker / Build and Push Server (push) Has been cancelled
Docker / Mirror to Docker Hub (push) Has been cancelled
Docker / Mirror to Docker Hub-1 (push) Has been cancelled
Docker / Mirror to Docker Hub-2 (push) Has been cancelled
Docker / Mirror to Docker Hub-3 (push) Has been cancelled
Docker / Mirror to Docker Hub-4 (push) Has been cancelled
Docker / Mirror to Docker Hub-5 (push) Has been cancelled
Docker / Mirror to Docker Hub-6 (push) Has been cancelled
Docker / Docker Build & Push Server Success (push) Has been cancelled
Docker / Docker Build & Push ML Success (push) Has been cancelled
Docs build / Docs Build (push) Has been cancelled
Static Code Analysis / Run Dart Code Analysis (push) Has been cancelled
Test / Scripts unit tests (push) Has been cancelled
Test / Test & Lint Server (push) Has been cancelled
Test / Unit Test CLI (push) Has been cancelled
Test / Unit Test CLI (Windows) (push) Has been cancelled
Test / Lint Web (push) Has been cancelled
Test / Test Web (push) Has been cancelled
Test / Test i18n (push) Has been cancelled
Test / End-to-End Lint (push) Has been cancelled
Test / Medium Tests (Server) (push) Has been cancelled
Test / End-to-End Tests (Server & CLI) (push) Has been cancelled
Test / End-to-End Tests (Server & CLI)-1 (push) Has been cancelled
Test / End-to-End Tests (Web) (push) Has been cancelled
Test / End-to-End Tests (Web)-1 (push) Has been cancelled
Test / End-to-End Tests Success (push) Has been cancelled
Test / Unit Test Mobile (push) Has been cancelled
Test / Unit Test ML (push) Has been cancelled
Test / .github Files Formatting (push) Has been cancelled
* 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 Gastineau
11cdfa9c5e
chore(mobile): remove commited db.repository.steps.dart (#30910) 2026-08-22 07:37:47 +05:30
Alex
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
shenlong
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
Jordan Brock
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 Gastineau
37e033a09d
chore(mobile): migrate remaining simple classes to Freezed (#30907) 2026-08-21 22:37:03 +05:30
Jason Rasmussen
2f48a8aab4
refactor: memory e2e (#30906) 2026-08-21 12:15:17 -04:00
Jason Rasmussen
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 Dietzler
8ae98f2a04
fix: quote database owner in restore (#30905) 2026-08-21 15:11:20 +02:00
renovate[bot]
47c0dea07f
chore(deps): update grafana/grafana docker tag to v12.4.8-ubuntu (#30835) 2026-08-21 14:50:10 +02:00
Holegots
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 Shakil
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 Rasmussen
4c26a7ca76
refactor: activity e2e (#30896) 2026-08-21 12:57:50 +02:00
Patryk Gęborys
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 Correia
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 Rasmussen
c7531a36f9
refactor: partner e2e (#30895) 2026-08-20 17:32:51 -04:00
Sacha Brouté
c7f6197e75
feat: add oauth account management url (#30873) 2026-08-20 21:31:34 +00:00
Jason Rasmussen
24532c4d82
fix(ci): docker caching (#30894) 2026-08-20 16:37:43 -04:00
Adam Gastineau
c8199ef32f
chore(mobile): update flutter-maplibre-gl to 0.27.0 (#30892) 2026-08-20 23:47:05 +05:30
Jason Rasmussen
11b1aa5ecf
feat: cluster groups (#30739)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-08-20 20:03:00 +02:00
Adam Gastineau
f88fb628ff
chore(mobile): patch Flutter to allow building against iOS simulator (#30821)
* chore(mobile): patch Flutter to allow building against iOS simulator

* Fixed mise script path
2026-08-20 16:53:44 +00:00
Jason Rasmussen
f9f7311418
refactor: use public config (#30891) 2026-08-20 12:44:39 -04:00
Jason Rasmussen
e529557160
feat: new config endpoints (#30881)
* refactor: config endpoints

* chore: pr feedback
2026-08-20 11:46:17 -04:00
Jason Rasmussen
47c5a3dbf6
refactor: api key response dto (#30887) 2026-08-20 11:23:12 -04:00
Santo Shakil
a066b5f301
fix(mobile): order album/place/person timelines by local date (#29338)
* fix(mobile): order album/place/person timelines by local date

* fold the timeline date ordering into one helper and tighten the tests

* drop the redundant none guard from the place asset query

* format
2026-08-20 13:52:33 +06:00
Jason Rasmussen
47dccf7283
refactor: dockerfile caching (#30874) 2026-08-19 16:52:50 -04:00
Yaros
7165eb61eb
fix(server): unicode email validation (#30871) 2026-08-19 16:40:10 -04:00
renovate[bot]
bd2cbb751b
fix(deps): update sharp to ^0.35.3 (#29132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-19 15:49:10 -04:00
Jason Rasmussen
7cd0a7d30c
refactor: e2e tests (#30870) 2026-08-19 14:31:57 -04:00
Jason Rasmussen
c63824bcea
refactor: library e2e (#30867) 2026-08-19 11:49:41 -04:00
Jason Rasmussen
d2759ec41e
refactor: library e2e (#30865) 2026-08-19 10:36:35 -04:00
Jason Rasmussen
db3b31709d
refactor: library controller tests (#30863) 2026-08-19 09:54:08 -04:00
Jonathan Jogenfors
2018e4f8c4
chore(server): migrate library e2e tests (#27277)
* migrate library e2e tests

* fix: real storage repo

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-08-19 13:14:40 +00:00
Ben Beckford
394996eb59
feat(web): new search ui (#30279) 2026-08-19 14:32:32 +02:00