Compare commits

...

1973 Commits

Author SHA1 Message Date
github-actions
a04c6ed80d chore: version v1.135.2 2025-06-20 14:52:47 +00:00
Brandon Wees
1c50e19894 fix: use icons instead of toggles for admin user features view (#19369)
* fix: use icons instead of toggles for admin user features view

* fix: use red for X icon
2025-06-20 14:48:18 +00:00
Alex
e61d7f2616 refactor(mobile): album_media.interface.dart (#19355)
* refactor(mobile): album_media.interface.dart

* refactor: album_media repo

* make dcm happy

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-20 14:23:43 +00:00
Alex
a6b0869714 refactor(mobile): secure_storage.interface.dart (#19335)
* refactor(mobile): secure_storage.interface.dart

* fix: lint
2025-06-20 09:12:07 -05:00
Alex
9c25b8ba7d refactor(mobile): download.interface.dart (#19345) 2025-06-20 09:11:52 -05:00
Alex
3c72f489d8 refactor(mobile): sessions_api.interface.dart (#19334)
refactor(mobile): sessions_api.repository.dart
2025-06-20 09:11:33 -05:00
Alex
1f2c779b36 refactor(mobile): shared_handler.interface.dart (#19333)
refactor(mobile): shared_handler.repository.dart
2025-06-20 09:11:21 -05:00
Alex
5c74f634b7 refactor(mobile): network.interface.dart (#19341)
* refactor(mobile): network.interface.dart

* refactor(mobile): network.interface.dart
2025-06-20 09:11:03 -05:00
Alex
ecc99bfd16 refactor(mobile): biometric.interface.dart (#19347) 2025-06-20 09:10:53 -05:00
Alex
ff4d70e351 refactor(mobile): album_api.interface.dart (#19356) 2025-06-20 09:08:23 -05:00
Alex
42c2389eb5 refactor(mobile): activity_api.interface.dart (#19357) 2025-06-20 09:08:12 -05:00
Jason Rasmussen
33c9f88ba4 fix: time bucket grouping (#19329) 2025-06-20 09:46:30 -04:00
Mert
11c469907f fix(server): migration failing on pg15+ (#19363)
* reset params

* unused parameter
2025-06-20 08:36:07 -05:00
Mert
7c43e6c3c8 fix: bump vchord default to 0.4.3 (#19365)
bump default to 0.4.3
2025-06-20 08:35:32 -05:00
Zack Pollard
00aa385972 fix: people ordering by asset count (#19366) 2025-06-20 07:34:04 -05:00
Min Idzelis
a5ed453929 chore: unused deps (#19256)
remove joi
2025-06-20 00:30:23 -04:00
Jason Rasmussen
dd8969cb7d fix: container padding (#19316) 2025-06-19 21:33:12 -05:00
Alex
bce4f93c90 refactor(mobile): (1) user.interface.dart (#19322)
* refactor(mobile): user.interface.dart

* generate files

* refactor(mobile): (2) user_api.interface.dart (#19323)

* refactor(mobile): (2) user_api.interface.dart

* generate files

* refactor(mobile): (3) sync_stream.interface.dart (#19325)
2025-06-19 23:25:18 +00:00
Alex
a4c0dc5007 chore: post release tasks (#19311) 2025-06-19 15:35:25 -04:00
Matthew Momjian
d233a7d97a fix(server): remove excessive inactivity log (#19306) 2025-06-19 19:13:13 +00:00
Jason Rasmussen
5cdbb65d28 feat: better contrast for checkmark indicator (#19312)
feat: better constrast
2025-06-19 13:20:57 -05:00
github-actions
3434544864 chore: version v1.135.1 2025-06-19 17:37:39 +00:00
Brandon Wees
269bf4b344 fix: iOS 17.0 target version for widget (#19308) 2025-06-19 17:00:54 +00:00
Zack Pollard
f9435a538b revert: fix(web): wrap long names with textarea (#19305)
Revert "fix(web): wrap long names with textarea (#19301)"

This reverts commit 747a72120e.
2025-06-19 16:28:10 +00:00
Alex
10e2ec2841 chore: skip truncating table in this release (#19300) 2025-06-19 16:11:18 +00:00
Zack Pollard
fe91b44ab9 fix: people ordering incorrect (#19298) 2025-06-19 16:05:03 +00:00
Jin Xuan
747a72120e fix(web): wrap long names with textarea (#19301) 2025-06-19 15:57:54 +00:00
Jason Rasmussen
910661e75c chore: remove unused mocks (#19299) 2025-06-19 10:35:09 -05:00
Alex
c8a135a7ae fix: .find() iterator api combat (#19293)
* fix: .find() iterator api combar

* Update web/src/lib/managers/timeline-manager/month-group.svelte.ts

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

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-06-19 14:59:14 +00:00
xCJPECKOVERx
08d1cf5bde fix(web): Stack assets in asset-viewer cut off on the left (#19253)
* - move overflow and scrollbar to stack-slideshow inner div

* - format
2025-06-19 09:20:25 -05:00
Alex
3e62497fd0 fix: local network permission (#19285) 2025-06-19 14:18:51 +00:00
Alex
a1bc862a32 chore: post release tasks (#19249) 2025-06-19 09:11:24 -05:00
Alex
75bf3aa1be chore: correct vchord version in docker-compose.yml (#19251) 2025-06-19 09:11:15 -05:00
Dag Stuan
38e68d16f9 fix(web): exit slideshow when exiting fullscreen. (#19247)
Exit slideshow when exiting fullscreen.

Browsers do not send a keyboard event when exiting fullscreen, so if
the user exits fullscreen with the escape key, the slideshow
remains open, requiring another escape key press to close it. Fix this
by listening for the fullscreenchange event and closing the slideshow
when exiting fullscreen.
2025-06-19 14:10:10 +00:00
Daniel Dietzler
caf11fbb96 fix: album asset viewer (#19252) 2025-06-19 09:09:23 -05:00
Mert
f99c6feac5 fix(server): unset prewarm dim parameter (#19271)
unset prewarm dim
2025-06-19 09:04:52 -05:00
Matthew Momjian
5122512f19 fix(docs): REINDEX vchord on upgrade (#19282)
* reindex

* lint

* collapse migrations

* remove title

* reformat
2025-06-19 09:04:18 -05:00
Mert
49ed212af8 fix(server): drop vector indices before updating extension (#19283)
drop indices before updating
2025-06-19 09:03:40 -05:00
Paul Larsen
e29103b69f fix album list CSS margins (#19262) 2025-06-19 14:03:14 +00:00
Min Idzelis
14b771d7c7 fix: devcontainer in codespaces (#19259)
* fix: devcontainer perms

* Fix host based auth

* use path tricks to get to volume mount, but remain compat with current meaning of variables

* eureka, i think

* bit of cleanup
2025-06-19 08:29:22 -05:00
Daniel Dietzler
07aa51638c fix: panning interrupted while moving around the map (#19276) 2025-06-19 11:28:53 +00:00
SGT
0a9a520ed2 feat(server): sql-tools support for class level composite fk (#19242)
* feat: support for class level composite fk

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-18 14:30:39 -04:00
Daniel Dietzler
de81006367 fix: album share modal navigation (#19245) 2025-06-18 16:10:35 +00:00
Jason Rasmussen
e0144b4ece feat: backfill album users (#19234) 2025-06-18 10:48:11 -04:00
github-actions
65e8d75e82 chore: version v1.135.0 2025-06-18 13:45:07 +00:00
Jason Rasmussen
023bcffdb8 chore: no test coverage in ci (#19235) 2025-06-17 21:16:52 -04:00
Alex
06f1d0dc4d fix(mobile): correct share option for local asset (#19233) 2025-06-17 20:56:42 +00:00
Min Idzelis
c6641d4859 fix: devcontainer paths/logs (#19236) 2025-06-17 15:52:57 -05:00
Jason Rasmussen
91cbd56c1c revert: service worker changes (#19227) 2025-06-17 17:07:54 +00:00
Jason Rasmussen
35280b94cc refactor: sync service (#19225) 2025-06-17 16:06:40 +00:00
Zack Pollard
4c69511225 revert: "feat(web): wasm justified layout" (#19226) 2025-06-17 16:01:40 +00:00
Weblate (bot)
0684a3ada4 chore(web): update translations (#19127)
Co-authored-by: Antonio Vazquez <antoniovavazquez@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Celeste Cossard <hugococa2004@gmail.com>
Co-authored-by: Dag Stuan <D.Stuan@gmail.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Felipe Garcia <garcia.o.felipe@gmail.com>
Co-authored-by: Felipe Simões <felipebouabci@gmail.com>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Happy <happygamernintendoswitch@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Ivan Dimitrov <idimitrov08@gmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: MSDNicrosoft <wang3311835119@hotmail.com>
Co-authored-by: Malhelo <weblate@malhelo.de>
Co-authored-by: Mateusz779 <kmateusz809@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Matteo De Carli <matteo.de.carli01@gmail.com>
Co-authored-by: MattiaPell <mattiapellegrini16@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nick Huang <nick80322@gmail.com>
Co-authored-by: Niko Savola <nikodagreat37@gmail.com>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Ponas <le.slab124@aleeas.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Theodoor van Donge <theodoorvd@gmail.com>
Co-authored-by: Tijs-B <tijs.bergmans@telenet.be>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: albanobattistella <albano_battistella@hotmail.com>
Co-authored-by: drshounak <contact@drshounak.com>
Co-authored-by: manosrh <manosrh@gmail.com>
Co-authored-by: naroou <hdbdjndnr@gmail.com>
Co-authored-by: oopzzozzo <oopzzozzo@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Àlex Bravo <alexbravobosch@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-06-17 16:07:20 +01:00
Brandon Wees
a0f44f147b feat(mobile): ios widgets (#19148)
* feat: working widgets

* chore/feat: cleaned up API, added album picker to random widget

* album filtering for requests

* check album and throw if not found

* fix app IDs and project configuration

* switch to repository/service model for updating widgets

* fix: remove home widget import

* revert info.plist formatting changes

* ran swift-format on widget code

* more formatting changes (this time run from xcode)

* show memory on widget picker snapshot

* fix: dart changes from code review

* fix: swift code review changes (not including task groups)

* fix: use task groups to run image retrievals concurrently, get rid of do catch in favor of if let

* chore: cleanup widget service in dart app

* chore: format swift

* fix: remove comma

why does xcode not freak out over this >:(

* switch to preview size for thumbnail

* chore: cropped large image

* fix: properly resize widgets so we dont OOM

* fix: set app group on logout

happens on first install

* fix: stupid app ids

* fix: revert back to thumbnail

we are hitting OOM exceptions due to resizing, once we have on-the-fly resizing on server this can be upgraded

* fix: more memory efficient resizing method, remove extraneous resize commands from API call

* fix: random widget use 12 entries instead of 24 to save memory

* fix: modify duration of entries to 20 minutes and only generate 10 at a time to avoid OOM

* feat: toggle to show album name on random widget

* Podfile lock

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-17 14:43:09 +00:00
xCJPECKOVERx
15c488ccd9 fix(web): MemoryStore does not initialize on direct navigation (#18947)
* - no longer return early when navigating directly to memory-viewer

* Update memory-viewer.svelte

- remove early return from afterNavigate

* lint
2025-06-17 09:21:30 -05:00
Mert
bc062da11b feat(web): wasm justified layout (#19150)
* wasm justified layout

* fix tests

* redundant layout generation

* raw position
2025-06-17 09:20:14 -05:00
xCJPECKOVERx
8038ae1e7a fix(web): Asset viewer stack thumbnails overflow on top of asset (#19088)
* - create constants for thet asset-viewer stack thumbnail sizes
- use 2x selected thumbnail size to set the max-height of the stack-slideshow container.

* - increase the stack-slideshow max-height as it's scrolled

* Revert "- increase the stack-slideshow max-height as it's scrolled"

This reverts commit da4614547a.

* change asset stack veritcal scroll to horizontal scroll
2025-06-17 09:19:30 -05:00
Gleb Khmyznikov
f28c0d912c chore: update truenas repo link (#19195)
Update truenas repo link
2025-06-17 09:10:25 -05:00
Dag Stuan
bd70824961 fix(web): more refactoring and tweaking of the memory viewer. (#19214)
* Fix fade in for video-native-viewer.

The previous implementation never actually faded in the video element.
Fix this by ensuring the video element is only added to the DOM after
mounting, so Svelte can handle the fade-in transition correctly.

* Refactor asset viewing in memory page.

Split photo and video viewing into separate components to ensure they
work similarly to the assets viewer. The previous implementation faded
out the assets, while the assets-viewer only fades assets in. For
images, add a spinner while waiting for the image to load, before adding
the image to the DOM. For videos, add the video to the DOM after
mounting the component. In both cases, the assets fade in smoothly, like
the regular assets viewer.

* fix: styling

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-17 14:09:34 +00:00
Zack Pollard
749f63e4a0 fix: partner asset and exif sync backfill (#19224)
* fix: partner asset sync backfill

* fix: add partner asset exif backfill

* ci: output content of files that have changed
2025-06-17 09:56:54 -04:00
shenlong
db68d1af9b feat(server): add duration to SyncAssetV1 (#19196)
add duration to SyncAssetV1

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-17 08:09:50 -04:00
Zack Pollard
864fe3d0d6 fix: disable map fly animation when switching between assets (#19223) 2025-06-17 12:45:48 +01:00
renovate[bot]
00536bf074 chore(deps): update docker.io/valkey/valkey:8-bookworm docker digest to fec42f3 (#19218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-17 11:57:42 +01:00
renovate[bot]
0d3efe229d chore(deps): update dependency @types/node to ^22.15.31 (#19220)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-17 11:57:29 +02:00
shenlong
3b0a803089 fix: translation util rename (#19213)
fix: translation util refactor

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-16 11:43:53 -05:00
shenlong
bcda2c6e22 feat(mobile): sqlite timeline (#19197)
* wip: timeline

* more segment extensions

* added scrubber

* refactor: timeline state

* more refactors

* fix scrubber segments

* added remote thumb & thumbhash provider

* feat: merged view

* scrub / merged asset fixes

* rename stuff & add tile indicators

* fix local album timeline query

* ignore hidden assets during sync

* ignore recovered assets during sync

* old scrubber

* add video indicator

* handle groupBy

* handle partner inTimeline

* show duration

* reduce widget nesting in thumb tile

* merge main

* chore: extend cacheExtent

* ignore touch events on scrub label when not visible

* scrub label ignore events and hide immediately

* auto reload on sync

* refactor image providers

* throttle db updates

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-16 20:37:45 +05:30
Mert
7347f64958 feat(server): lru cache for query embeddings (#19181) 2025-06-16 11:03:49 -04:00
Zack Pollard
176d53c1b3 chore: bump browserlists version and load tscompat browserlist from file (#19212)
* chore: bump browserlists version to include latest edge browsers

* chore: load tscompat browser list from the .browserslistrc file
2025-06-16 10:03:46 -05:00
Mert
5fc448bc97 chore(web): passive events (#19179) 2025-06-16 11:03:23 -04:00
Thien Dang
3d0c851636 fix(mobile): add translate extension (#18942)
* re-write localization service and add translation extension

* Revert "re-write localization service and add translation extension"

This reverts commit fdd7386020.

* fix can't use context for easy_localization

* fix lint

* update new translate context

* handle context null

* revert main file

* Revert "revert main file"

This reverts commit 16faca46d0.

* remove fix nested MaterialApp

* change use t extenstion and remove translation utils

* update function call similar for consistently

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-06-16 10:01:16 -05:00
jump
16fcb657b7 docs: update the picture showing administration link (#19203) 2025-06-16 12:59:47 +01:00
Brandon Wees
32b57bcbfc chore: remove warning on storage template onboarding (#19200)
chore: remove warning on storage template
2025-06-15 16:43:34 -05:00
shenlong
7f56443b24 fix(mobile): asset type mismatch from android sync (#19201)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-15 20:54:30 +00:00
Dag Stuan
189442e9c4 fix(web): small issues with the memory viewer. (#19184)
* Match fade transition timing between photo-viewer and memory-viewer.

* Fix blank page after refreshing memory page.

If the user refreshed in the browser while on the memory page, the page
would show a blank page. This was caused by skipping initialization in
afterNavigate. Fix by always initializing the memory page in
afterNavigate.
2025-06-15 10:04:33 -05:00
Daniel Dietzler
523fe5bef7 refactor: album options modal (#19177) 2025-06-14 18:10:33 -04:00
SGT
77a362f0c0 chore(server): replace usage of deprecated orderBy and remove unnecessary instruction (#19072)
* replace usage of deprecated orderBy instruction
remove unnecesarry extra order instruction
update e2e test

* rename symbols
2025-06-13 15:18:44 -04:00
Alex
5f5308631e chore: Revert "feat(mobile): remote album sync" (#19159)
Revert "feat(mobile): remote album sync (#18876)"

This reverts commit 242817c49a.
2025-06-13 16:15:39 +00:00
Daimolean
004c2f2496 fix(web): OAuth quota size (#18526)
fix(server): oauth quota size
2025-06-13 10:57:29 -04:00
Zack Pollard
e2dfbd66c3 ci: browser compatibility linting (#19132) 2025-06-13 10:54:59 -04:00
Michael Anderson
de756d9497 fix: skip locked photos during duplicate scan. (#19105)
Skip locked photos during duplicate scan.
2025-06-13 10:50:56 -04:00
Min Idzelis
103b83d2d6 feat: devcontainers (#18007)
* feat: devcontainers

* Update link

* Update docs

* Extend existing dockerfiles/composes

* Add jre for make open-api

* Add jre for make open-api

* shellcheck

* git doesn't like bind mount within git repo

* group tasks

* Missing sudo

* Review comments

* tweak for codespaces

* typo

* Lots of docs

* close <br>

* Specify ENV vars for database

* doc errors

* fix broken doc link

* Simplify devcontainers scripts/startup

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-13 14:49:21 +00:00
Andreas Tollkötter
f54cfa7a5a feat: improve mobile screen reader accessibility (#17876)
* WIP: adding screen reader support to mobile

* implemented getAltText

* implemented alt text solution that stores the alt text in the DB, which isn't really great

* moved alt text computation to immich_thumbnail.dart

* added unit tests

* revert unintended changes

* Added text to remaining buttons in Photo page

* fixed import

* Fixed issue of easy_localization not parsing select blocks

* Transferred the new screen reader help to web frontend

* remove unused property

* npm run format:fix

* code review

* revert unwanted change

* dart fmt

* revert web changes

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-13 10:39:59 -04:00
Min Idzelis
ed5b260eeb feat: service worker cache static app resources, and all entry points (#18043)
* feat: service worker cache static app resources, and all entry points

* review comments

* review

* lint

* minor tweaks

* review comments

* optimize disabled cache

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-12 19:33:29 -04:00
Jason Rasmussen
8923d5b0a3 refactor: css variables (#19146) 2025-06-12 23:06:38 +00:00
Jason Rasmussen
2f3d4e15d2 refactor: duplicate button controls (#19143) 2025-06-12 17:48:53 -04:00
Jason Rasmussen
c9bcae813b feat: duplicate delete groups api (#19142) 2025-06-12 17:48:43 -04:00
Daniel Dietzler
bddb43e1d4 fix: cli upload deletes files that failed uploading (#19140) 2025-06-12 17:32:35 -04:00
Alex
176656b5f4 feat: pass filename in body on asset upload (#19138)
* chore: get upload filename from request body

* use info from request body
2025-06-12 17:31:00 -04:00
Jason Rasmussen
5cd186d3d4 refactor: duplicate queries (#19136) 2025-06-12 14:23:02 -04:00
Alex
144cc8ab6d chore: custom impl for set.difference api (#19135) 2025-06-12 11:41:19 -05:00
Robin Brisa
0322a8b1d9 fix(web): properly update activityManager when browsing assets (#18909) 2025-06-12 12:13:35 +01:00
Jason Rasmussen
94e9adf625 chore: callback quotes (#19126) 2025-06-11 23:15:11 -04:00
Weblate (bot)
24edf23bc8 chore(web): update translations (#18530)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
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/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
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/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fil/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
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/kk/
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/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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
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/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Alejandro Moya <alejandro_moya_moya@hotmail.com>
Co-authored-by: Alex <alex@guldager.one>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Anton <antonholmstedt@gmail.com>
Co-authored-by: Antonio Vazquez <antoniovavazquez@gmail.com>
Co-authored-by: Arnyminer Z <arnyminer.z@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bradley Lansink <aceraspirev3brad@gmail.com>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Chriss Martin <thechrissmartin@gmail.com>
Co-authored-by: Claudio De Marzo <claudiodemarzo.62@gmail.com>
Co-authored-by: Clemens <clemensstouten@gmail.com>
Co-authored-by: Daniel Correa Lobato <daniel@lobato.org>
Co-authored-by: David S <weblate.arjy8@flexi.name>
Co-authored-by: Davide Vegliante <davidevegliante@gmail.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: FVOCI <karl@hwan.dev>
Co-authored-by: Felipe Garcia <garcia.o.felipe@gmail.com>
Co-authored-by: Finn Drünert <finndruenert@gmail.com>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Gerardo Doro <gerrydoro97@gmail.com>
Co-authored-by: Gil Shahar <gilshahardex99@gmail.com>
Co-authored-by: Haqiqi Jamaludin <qiqidh@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Ivan Dimitrov <idimitrov08@gmail.com>
Co-authored-by: Jak97 <mneamtu74@gmail.com>
Co-authored-by: Jesús Jiménez <jesjimenez@gmail.com>
Co-authored-by: John Molkavitch <jblum66@gmail.com>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: K.Yoshikawa <marimoky1110@gmail.com>
Co-authored-by: Kristoffer Braa <kristoffer@lolandbraa.no>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonardo <coachleonardo@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Majid <abtin.php@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Matteo Crocetti <matteocrocetti@proton.me>
Co-authored-by: Matteo Morari <matteo.morari04@gmail.com>
Co-authored-by: Melih Ozkan <malihozkan156@gmail.com>
Co-authored-by: Micash <micash_545@protonmail.com>
Co-authored-by: Michael Iseard <michael@iseard.media>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mário Victor Ribeiro Silva <mariovictorrs@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nick Huang <nick80322@gmail.com>
Co-authored-by: Niko Savola <nikodagreat37@gmail.com>
Co-authored-by: Nikolaj J-K <kagenogmig@gmail.com>
Co-authored-by: OLD&SPAM-ACCOUNT <nielsvdk666@gmail.com>
Co-authored-by: Olaf Nielsen <solluh@mail.de>
Co-authored-by: OmegaDL2 <atomo.co02@gmail.com>
Co-authored-by: OskarSidor <oskar.sidor@gmail.com>
Co-authored-by: PANICBUTTON <kaileepark04@gmail.com>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Pikim pikim <Pikim@tlen.pl>
Co-authored-by: Ponas <le.slab124@aleeas.com>
Co-authored-by: PontusÖsterlindh <pontus@osterlindh.com>
Co-authored-by: Punisher01 <ciprian420@gmail.com>
Co-authored-by: Qianxing Li <l7899616@gmail.com>
Co-authored-by: Ricardo Berlim Fonseca <eblues@disroot.org>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: RustamUzb <uzbekr@gmail.com>
Co-authored-by: Santiago <santiwever@hotmail.com>
Co-authored-by: Sergi Font <sfont@tuta.io>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stefan <nothingkix@gmail.com>
Co-authored-by: Stryp0 <stryp94@hotmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Tanishq <weblate.impure434@passinbox.com>
Co-authored-by: Tatsuhiko Kono <kono@takenoko.io>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: Tijs-B <tijs.bergmans@telenet.be>
Co-authored-by: Tomek <tjomek@gmail.com>
Co-authored-by: Tomi Pöyskö <tomi.poysko@gmail.com>
Co-authored-by: Torin Wu <xuan329269@gmail.com>
Co-authored-by: Tre Sim <tsm.tre2018@gmail.com>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Veerasak Kritsanapraphan <veerasak.kritsanapraphan@gmail.com>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Yago Raña Gayoso <yago.rana.gayoso@gmail.com>
Co-authored-by: Yi Kuo <kuokuoyiyi@gmail.com>
Co-authored-by: Zvonimir <zzrakic@protonmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: dicaeffe <dicaeffe@users.noreply.hosted.weblate.org>
Co-authored-by: dvbthien <dvbthien@users.noreply.hosted.weblate.org>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: fmis13 <fmis13@disroot.org>
Co-authored-by: iamnotafatso <ee.chuajr@live.com>
Co-authored-by: icerocker <icerocker@users.noreply.hosted.weblate.org>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: sevtdy <sevtdy@gmail.com>
Co-authored-by: shimmyx <shimmygodx@gmail.com>
Co-authored-by: shiuh67 <shiuh.cheng@gmail.com>
Co-authored-by: st7105 <st7105@gmail.com>
Co-authored-by: theGitMichel <meinkonto+github@mailbox.org>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: tsloms <t.slomski@outlook.de>
Co-authored-by: ume <bungoume@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: yousaf465 <yousaf465@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Оргил Пүрэвдорж <orgyldinio@proton.me>
2025-06-11 22:35:33 -04:00
Yishai Elyada
d784c7737a chore(docs): add rename note to synology.md (#17425)
* Update synology.md

Make sure to change example.env to .env, this is not trivial for non-Docker experts.

* Update synology.md

Wrapped file names in code tags

* chore: linting

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-11 22:15:45 -04:00
Elliot
fdc7a154c0 fix(server): add basic auth support (#16740)
* "add basic auth support"

* "fix format"

* fix: lint

---------

Co-authored-by: Elliot <elliot@elliotbrandwein.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-12 02:14:03 +00:00
nosajthenitram
e5219f1f31 feat(web): Added admin user config to user settings (#15380)
* feat(web): Added admin user config to user settings

* feat (web) - cleaned up the files and added tests

* feat (web) - added missing files

* feat (web) - updated per review comments

* feat (web) - e2e admin command test failures
2025-06-12 02:11:13 +00:00
Daniel Dietzler
22eef5f3c5 chore: more flexible modal manager types (#19123)
* fix: required argument in onClose modal function

* chore: more flexible modal manager types
2025-06-11 22:32:49 +00:00
Daniel Dietzler
5179c5badf fix: required argument in onClose modal function (#19122) 2025-06-11 18:25:36 -04:00
Daniel Dietzler
4c5cd14270 refactor: map modal (#19120) 2025-06-11 15:08:36 -04:00
Jason Rasmussen
38ad15af4c refactor: user avatar (#19121) 2025-06-11 15:08:11 -04:00
Daniel Dietzler
7a001d27a5 refactor: email template preview modal (#19119) 2025-06-11 18:18:46 +00:00
Zack Pollard
08e2b22db8 fix: album comment count including trashed assets (#19117) 2025-06-11 11:50:26 -04:00
Zack Pollard
5dd3a6e13f fix: don't show comments or likes for trashed assets (#19113) 2025-06-11 14:36:00 +00:00
Zack Pollard
bedcf50196 fix: count album comments and likes correctly (#19114) 2025-06-11 13:49:13 +00:00
JobiJoba
c03e72c1da feat(mobile): Add Scrollbar for vertical scrolling on the actions button multi-select (#18940)
* feat(mobile): Add Scrollbar for vertical scrolling on the actions button of a selected asset.

* fixed error scroll position and add more space for the scrollbar

* revert scrollbar change and display always 5.5 icons button

* minWidth set to 5.5 and used

* fix: logic and fine tuning

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-10 10:22:42 -05:00
Alex
b50d9fa448 chore: catch migration error (#19096) 2025-06-10 15:21:36 +00:00
Min Idzelis
4b4ee5abf3 refactor: timeline manager renames (#19007)
* refactor: timeline manager renames

* refactor(web): improve timeline manager naming consistency

- Rename AddContext → GroupInsertionCache for clearer purpose
- Rename TimelineDay → DayGroup for better clarity
- Rename TimelineMonth → MonthGroup for better clarity
- Replace all "bucket" references with "monthGroup" terminology
- Update all component props, method names, and variable references
- Maintain consistent naming patterns across TypeScript and Svelte files

* refactor(web): rename buckets to months in timeline manager

- Rename TimelineManager.buckets property to months
- Update all store.buckets references to store.months
- Use 'month' shorthand for monthGroup arguments (not method names)
- Update component templates and test files for consistency
- Maintain API-related 'bucket' terminology (bucketHeight, getTimeBucket)

* refactor(web): rename assetStore to timelineManager and update types

- Rename assetStore variables to timelineManager in all .svelte files
- Update parameter names in actions.ts and asset-utils.ts functions
- Rename AssetStoreLayoutOptions to TimelineManagerLayoutOptions
- Rename AssetStoreOptions to TimelineManagerOptions
- Move assets-store.spec.ts to timeline-manager.spec.ts

* refactor(web): rename intersectingAssets to viewerAssets and fix property references

- Rename intersectingAssets to viewerAssets in DayGroup and MonthGroup classes
- Update arrow function parameters to use viewerAsset/viewAsset shorthand
- Rename topIntersectingBucket to topIntersectingMonthGroup
- Fix dateGroups references to dayGroups in asset-utils.ts and album page
- Update template loops and variable names in Svelte components

* refactor(web): rename #initializeTimeBuckets to #initializeMonthGroups and bucketDateFormatted to monthGroupTitle

* refactor(web): rename monthGroupHeight to height

* refactor(web): rename bucketCount to assetsCount, bucketsIterator to monthGroupIterator, and related properties

* refactor(web): rename count to assetCount in TimelineManager

* refactor(web): rename LiteBucket to ScrubberMonth and update scrubber variables

- Rename LiteBucket type to ScrubberMonth
- Rename bucketDateFormattted to title in ScrubberMonth type
- Rename bucketPercentY to monthGroupPercentY in scrubber component
- Rename scrubBucket to scrubberMonth and scrubBucketPercent to scrubberMonthPercent

* fix remaining refs to bucket

* reset submodule to correct commit

* reset submodule to correct commit

* refactor(web): extract TimelineManager internals into separate modules

- Move search-related functions to internal/search-support.svelte.ts
- Extract websocket event handling into WebsocketSupport class
- Move utility functions (updateObject, isMismatched) to internal/utils.svelte.ts
- Update imports in tests to use new module structure

* refactor(web): extract intersection logic from TimelineManager

- Create intersection-support.svelte.ts with updateIntersection and calculateIntersecting functions
- Remove private intersection methods from TimelineManager
- Export findMonthGroupForAsset from search-support for reuse
- Update TimelineManager to use the extracted intersection functions

* refactor(web): rename a few methods in intersecting

* refactor(web): rename a few methods in intersecting

* refactor(web): extract layout logic from TimelineManager

- Create layout-support.svelte.ts with updateGeometry and layoutMonthGroup functions
- Remove private layout methods from TimelineManager
- Update TimelineManager to use the extracted layout functions
- Remove unused UpdateGeometryOptions import

* refactor(web): extract asset operations from TimelineManager

- Create operations-support.svelte.ts with addAssetsToMonthGroups and runAssetOperation functions
- Remove private asset operation methods from TimelineManager
- Update TimelineManager to use extracted operation functions with proper AssetOrder handling
- Rename getMonthGroupIndexByAssetId to getMonthGroupByAssetId for consistency
- Move utility functions from utils.svelte.ts to internal/utils.svelte.ts
- Fix method name references in asset-grid.svelte and tests

* refactor(web): extract loading logic from TimelineManager

- Create load-support.svelte.ts with loadFromTimeBuckets function
- Extract time bucket loading, album asset handling, and error logging
- Simplify TimelineManager's loadMonthGroup method to use extracted function

* refresh timeline after archive keyboard shortcut

* remove debugger

* rename

* Review comments - remove shadowed var

* reduce indents - early return

* review comment

* refactor: simplify asset filtering in addAssets method

Replace for loop with filter operation for better readability

* fix: bad merge

* refactor(web): simplify timeline layout algorithm

- Replace rowSpaceRemaining array with direct cumulative width tracking
- Invert logic from tracking remaining space to tracking used space
- Fix spelling: cummulative to cumulative
- Rename lastRowHeight to currentRowHeight for clarity
- Remove confusing lastRow variable and simplify final height calculation
- Add explanatory comments for clarity
- Rename loop variable assetGroup to dayGroup for consistency

* simplify assetsIterator usage

* merge/lint

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-10 09:30:13 -05:00
Hugo
6499057b4c docs: update instructions for external libraries (#19080)
The first step was missing—it's probably obvious for those already
familiar with Immich.

After I added the external library, no photos showed up anywhere and
all interfaces indicated that I had no photos

Eventually I found this "Scan" button, and after clicking it photos
started to appear. This is a necessary step before photos from the
library actually show up anywhere, so point it out explicitly.
2025-06-10 09:28:49 -05:00
Jonathan Gilbert
e88bd74fd2 feat(server): add memories statistics resource (#19035) 2025-06-10 09:47:46 -04:00
xCJPECKOVERx
16745e77d4 fix(web): Remove tag buttons in search and modal missing tooltip translations (#19087)
* - use translations for "remove tag" text on the search-tags-section and the AssetTagModal

* include new translations

* - fix i18n
2025-06-10 04:49:34 +00:00
renovate[bot]
c0ed2210b4 fix(deps): update dependency nodemailer to v7 (#19063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 16:29:04 +00:00
renovate[bot]
f9ed314b37 fix(deps): update machine-learning (major) (#19067)
fix(deps): update machine-learning

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 12:26:36 -04:00
renovate[bot]
160ca28253 fix(deps): update dependency bcrypt to v6 (#19058)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:20:49 +01:00
renovate[bot]
9380625762 chore(deps): update dependency rollup-plugin-visualizer to v6 (#19051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:19:50 +01:00
renovate[bot]
ade7cd258d chore(deps): update grafana/grafana docker tag to v12 (#19054)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:19:38 +01:00
renovate[bot]
63996f4dd3 chore(deps): update dependency oidc-provider to v9 (#19050)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:19:29 +01:00
renovate[bot]
360f68b86b chore(deps): update testcontainers-node monorepo to v11 (major) (#19056)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:19:20 +01:00
renovate[bot]
bf212bf235 fix(deps): update dependency react-email to v4 (#19065)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 16:19:05 +00:00
Andreas Tollkötter
b890440f6b feat(mobile): enabled DCM (#17957)
* enable DCM in CI

* chore: up version

* chore: up version

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-09 11:09:02 -05:00
renovate[bot]
16f83c0aa9 chore(deps): update dependency eslint-plugin-unicorn to v59 (#19048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 17:26:32 +02:00
Thien Dang
2572413b2b fix(mobile): fix nested MaterialApp (#18998)
* fix nested MaterialApp

* chore

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-09 15:15:31 +00:00
xCJPECKOVERx
14d785cec9 feat(server): Add album filter to search (#18985)
* - updated dtos
- added inAlbums to search builder
- only check isNotInAlbum if albumIds is blank/empty

* - consider inAlbums as OR

* - make open-api-dart

* - lint & format

* - remove inAlbums groupBy clause

* - merge main open-api

* - make open-api

* - inAlbums filter AND instead of OR
2025-06-09 11:11:43 -04:00
Daimolean
242817c49a feat(mobile): remote album sync (#18876)
* feat(mobile): remote album sync

* fix: lint

* missing createdAt field

* lint
2025-06-09 10:09:14 -05:00
Mert
74f79cae69 refactor(web): tree data structure for folder and tag views (#18980)
* refactor folder view

inline link

* improved tree collapsing

* handle tags

* linting

* formatting

* simplify

* .from is faster

* simplify

* add key
2025-06-09 10:02:16 -05:00
renovate[bot]
ac0e94c003 chore(deps): update machine-learning (#19046)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 11:00:20 -04:00
Savely Krasovsky
047c7821a3 feat(mobile): update maplibre to support PMTiles in the mobile app (#19016)
* feat(mobile): update maplibre to support PMTiles in the mobile app

* feat(mobile): update Podfile.lock
2025-06-09 09:40:12 -05:00
renovate[bot]
ccb0e711f0 chore(deps): update dependency lints to v6 (#19049)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 14:17:05 +00:00
renovate[bot]
3fb2c3a7bf chore(deps): update dependency @types/node to ^22.15.29 (#19043)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 14:02:59 +00:00
renovate[bot]
197a1886c3 chore(deps): update grafana/grafana docker tag to v11.6.2 (#19044)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 13:53:26 +00:00
renovate[bot]
adac30c9a1 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 7c2e711 (#19041)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 13:51:44 +00:00
renovate[bot]
ae04a62030 chore(deps): update prom/prometheus docker digest to 9abc6cf (#19042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 14:51:28 +01:00
shenlong
02246cdd1f chore: re-genenrate intl_keys.g.dart (#19031)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-09 12:01:04 +01:00
shenlong
2d05a5482f refactor: logger service and remove dynamic (#17733)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-08 22:01:31 -05:00
SGT
7b2237b86b fix(web): handling historical timezones in web client (#18905)
* fix handling historical timezones in web client

* honor dst when calculating the timezone offset

* fix variable used to construct timezones list to honor dst

* remove unused variable. fix lint
2025-06-08 21:58:52 -05:00
shenlong
84024f6cdc refactor(mobile): simplify local sync and hash service (#18970)
* Hash service review changes

* local album repo test

* simplify local album repo method names

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-08 21:56:44 -05:00
Brandon Wees
5574b2dd39 feat(mobile): add cast support (#18341)
* initial cast framework complete and mocked cast dialog working

* wip casting

* casting works!

just need to add session key check and remote video controls

* cleanup of classes

* add session expiration checks

* cast dialog now shows connected device at top of list with a list header. Discovered devices are also cached for app session.

* cast video player finalized

* show fullsize assets on casting

* translation already happens on the text element

* remove prints

* fix lintings

* code review changes from @shenlong-tanwen

* fix connect method override

* fix alphabetization

* remove important

* filter chromecast audio devices

* fix some disconnect command ordering issues and unawaited futures

* remove prints

* only disconnect if we are connected

* don't try to reconnect if its the current device

* add cast button to top bar

* format sessions api

* more formatting issues fixed

* add snack bar to tell user that we cannot cast an asset that is not uploaded to server

* make casting icon change to primary color when casting is active

* only show casting snackbar if we are casting

* dont show cast button if asset is remote and we are not casting

* stop playing media if we seek to an asset that is not remote

* remove https check since it works with local http IP addresses

* remove unneeded imports

* fix recasting when socket closes

* fix info plist formatting

* only show cast button if there is an active websocket connection (ie the server is accessible)

* add device capability bitmask checks

* small comment about bitmask
2025-06-08 21:55:23 -05:00
JobiJoba
e88eb44aba fix(mobile): After editing people name, back button close the app (#18992)
* fix: update dialog to not use root navigator in multiple pages so back button won't close the app

* Remove unrelated changes to PR
2025-06-08 21:53:03 -05:00
shenlong
75c24f0023 feat(mobile): sync local asset width & height from platform (#18994)
* add width and height to sqlite entities

* sync width & height from platform

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-08 21:50:54 -05:00
JobiJoba
e376366b7b fix(mobile): people collection page layout broken in landscape (#19004)
fix(mobile): people collection page layout broken on landscape
2025-06-08 21:49:13 -05:00
JobiJoba
48e16f0a5a feat(mobile): Capitalize first letter when add / edit name (#19005) 2025-06-08 21:48:52 -05:00
bo0tzz
e8ba9dd208 chore: add note to sender email address field description (#19017)
People put the wildest things in there 📦
2025-06-09 02:48:40 +00:00
shenlong
a932cbae38 feat(mobile): typed translation keys (#18946)
* feat(mobile): typed translation keys

* ignore lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-08 21:38:45 -05:00
xCJPECKOVERx
526206b2a5 feat(web): Focus on combo box input when opening add tag modal (#18923)
- Add forceFocus prop to ComboBox (optional, false)
- Set forceFocus on AssetTagModal combobox
2025-06-08 21:36:34 -05:00
xCJPECKOVERx
de2115d11e feat(web): Change the primary asset of a stack (#18913)
* - Add set primary primary asset button to asset viewer

* - Cleanup
- change AssetAction to contain a StackResponseDto
- Properly update displayed stack at bottom of the asset viewer

* - update the assetStore with the changed stack

* - Cleanup
2025-06-08 21:35:41 -05:00
JobiJoba
e0ac588ca8 fix(mobile): share asset back button exit application (#18919)
* fix(mobile): remove dialog wrapper around share asset

* removed from multiple share and delete share dialog class

* Revert change to ShareDialog and useRootNavigator: false for showDialog
2025-06-08 21:35:19 -05:00
xCJPECKOVERx
0c965ae2ea fix(web): add tag button tooltip not using translation (#18921)
* - Fix add tag button to use proper translation

* - formatting

* Update button tooltip to also use translations
2025-06-09 02:35:04 +00:00
Jin Xuan
28e05537bd fix(web): improve asset name readability in dark mode (#19012) 2025-06-08 10:43:05 -07:00
Daimolean
acca040524 fix: delete useless file (#18989) 2025-06-07 19:27:31 -07:00
bo0tzz
b0a0ae6cd3 feat: use shared success-check action (#18975) 2025-06-07 10:54:39 +02:00
Jonathan Gilbert
fb4be6e231 feat(server): add /search/statistics resource (#18885) 2025-06-06 21:12:53 -04:00
renovate[bot]
ecb16d9907 fix(deps): update machine-learning (#18880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 01:06:32 +00:00
xCJPECKOVERx
737fedd527 fix(web): Update add to album notification to better announce errors (#18955)
* Update add to album notification to better announce errors

* fix i18n

---------

Co-authored-by: wuzihao051119 <wuzihao051119@outlook.com>
2025-06-06 08:36:28 -05:00
Daimolean
b557f3b7f2 fix(web): play motion photo color (#18959)
fix: play motion photo color
2025-06-06 08:34:59 -05:00
shenlong
ce6631f7e0 feat(mobile): hash assets in isolate (#18924) 2025-06-06 11:23:05 +05:30
Dag Stuan
b46e066cc2 feat(web): add a user setting for default album sort order. (#18950)
* Add a user setting for default album sort order.

Add a user setting under "Features" to control the initial sort order
when creating an album. Default to the existing behavior of
"newest first".

* chore: patch openapi

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-05 23:31:34 -05:00
Min Idzelis
55f4e93456 fix: regression: sort day by fileCreatedAt again (#18732)
* fix: regression: sort day by fileCreatedAt again

* lint

* e2e test

* inline function

* e2e

* Address comments. Drop dayGroup and timezone in favor of localOffsetMinutes

* lint and some api-doc

* lint, more api-doc

* format

* Move minutes to fractional hours

* make sql

* merge/conflict

* merge fallout, review comments

* spelling

* drop offset from returned date

* move description into decorator where possible, regen api
2025-06-05 20:56:32 -05:00
shenlong
81423420c8 chore(mobile): patch isOnboarded (#18949)
fix: patch isOnboarded

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-05 17:23:45 +00:00
renovate[bot]
a9bd651692 chore(deps): update docker.io/valkey/valkey:8-bookworm docker digest to a19bebe (#18879)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 10:49:30 +01:00
renovate[bot]
afda7b9525 chore(deps): update ghcr.io/immich-app/postgres:14-vectorchord0.3.0 docker digest to 9c704fb (#18883)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 10:48:14 +01:00
Brandon Wees
86f64fd0bf fix(server): default current users to an onboarded state migration (#18929)
* on database migration, assume every user is onboarded

* dont overwrite key if conflict in migration
2025-06-04 21:33:23 -05:00
Min Idzelis
19013af58f fix: wait for db to start before server for e2e test (#18936)
* fix: wait for db to start before server for e2e test

* empty - trigger checks
2025-06-04 21:32:29 -05:00
Daniel Dietzler
e746d27f5e chore: more cursed knowledge (#18932) 2025-06-04 21:31:53 -05:00
Min Idzelis
90c8fdba96 fix: thumbnail fade in (#18935) 2025-06-04 21:29:58 -05:00
Min Idzelis
e2ffc9d5a1 refactor: asset-store (#18938)
* refactor: asset-store

* Potential fix for code scanning alert no. 152: Prototype-polluting function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-06-05 02:27:54 +00:00
Alex
f64a3003af chore: album's header styling (#18930) 2025-06-04 21:09:53 -05:00
Robin Brisa
a26d703335 feat(web): display number of likes in asset viewer (#18911)
* feat: display number of likes

* fix: properly decrement like count on unlike

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

* chore: pr feedback

* chore: updated related test

* chore: formatter run

* chore: force numberOfLikes to null in album context to pass lint

* chore: open-api updated

* fix: use undefined, not null

* styling tweaks

* chore: updated sql

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-04 12:41:50 -05:00
JobiJoba
5d0ad853f4 feat(mobile): add album description functionality (#18886)
* feat(mobile): add album description functionality

- Introduced a new optional `description` field in the `Album` entity.
- Updated `AlbumViewerPageState` to manage `editDescriptionText`.
- Created `AlbumDescription` and `AlbumViewerEditableDescription` widgets for displaying and editing album descriptions.
- Enhanced `CreateAlbumPage` to include a description input field.
- Implemented backend support for updating album descriptions in `AlbumApiRepository` and `AlbumService`.
- Updated sync logic to handle album descriptions during data synchronization.
- Adjusted UI components to accommodate the new description feature.

* fix dart analysis error

* remove comment that shouldn't be there

* Album header styling

* fix: disable edit after album creation

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-04 17:41:28 +00:00
xCJPECKOVERx
19ff39c2b9 feat(web): undo delete (#18729)
* feat(web): Undo asset delete

* - lints and checks
- Update English translation

* Update delete-assets.svelte

Make onUndoDelete optional in Props interface

* - Ensure undo button not available on permanent delete, or trash disabled.
- Enforce lint requirement for no-negated-condition

* Fix formatting

* fix: lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-04 15:46:07 +00:00
JobiJoba
8733d1e554 feat(mobile): add bulk download functionality (#18878)
* feat(mobile): add bulk download functionality and update UI messages

- Added `downloadAll` method to `IDownloadRepository` and its implementation in `DownloadRepository` to handle multiple asset downloads.
- Implemented `downloadAllAsset` in `DownloadStateNotifier` to trigger bulk downloads.
- Updated `DownloadService` to create download tasks for all selected assets.
- Enhanced UI with new download success and failure messages in `en.json`.
- Added download button to `ControlBottomAppBar` and integrated download functionality in `MultiselectGrid`.

* translations use i18n method t()

* Update mobile/lib/services/download.service.dart

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

* fix(mobile): update download logic in DownloadService

- Changed the download method to utilize downloadAll for handling multiple tasks.
- Simplified remoteId check by removing unnecessary condition.

* sort i18n keys

* remove the download signature from interface and logic as we use the downloadAll now

---------

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
2025-06-04 09:49:43 -05:00
JobiJoba
1fb8861e35 fix(mobile): prevent upload intent replacement in splash screen and reset upload button when minimize app (#18914)
fix(mobile): prevent upload intent replacement in splash screen

- Added a check in the SplashScreenPage to ensure that the route is only replaced when it's not a share intent
- Added lifecycle event to reset the isUpload.value when minimize the app
2025-06-04 08:30:23 -05:00
shenlong
70b9a4c8f1 chore: add missing api properties on sync enums (#18916)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-04 08:21:34 -05:00
xCJPECKOVERx
2da94439c7 fix(web): add tag button not using translation (#18910) 2025-06-04 09:52:07 +02:00
Jin Xuan
3d3e5dc547 chore(server): cleanup unused query parameters in time bucket (#18893)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-03 19:29:11 +00:00
Daimolean
daf1bee7ac fix(web): persisted store (#18385)
* fix(web): persisted store

* fix: translation

* fix: test

* fix: test

* revert i18n changes

* fix blank locale
2025-06-03 19:27:23 +00:00
xCJPECKOVERx
6b4d5e3beb fix(web): asset-viewer error when selecting a stacked asset (#18881)
* Clear out the previewStackedAsset when selecting.

* undo package-lock update
2025-06-03 14:24:20 -05:00
Alex
6b9233c71a fix(deps): revert update typescript-projects (#18908) 2025-06-03 21:13:56 +02:00
shenlong
b4a798c39f feat(mobile): remote asset & exif sync (#18756)
* feat(mobile): remote asset & exif sync

* add visibility and update constraints

* chore: generate drifts

* update ids to be strings

* clear remote entities on logout

* reset sqlite button

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-03 11:01:50 -05:00
waclaw66
edae9c2d3d fix(mobile): t function localization (#18768)
* fix(mobile): items translation

* Intl.defaultLocale null coalescence
2025-06-03 09:52:29 -05:00
JobiJoba
246d593c9d fix(mobile): reset current asset if we try to go on a activity list page (#18895) 2025-06-03 14:36:14 +00:00
Thien Dang
e4322ae0a2 feat(mobile): Add new language to mobile (#18891)
add pt_BR, bg, ta, te locates

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-06-03 14:33:13 +00:00
Thien Dang
e506c7fb19 feat(mobile): Improve language setting UI (#18854)
* improve language ui

* fix lint

* add search language, add safe area, fix button in dark

* hide apply button when search not found

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-06-03 09:30:39 -05:00
renovate[bot]
393e8d50b2 fix(deps): update typescript-projects (#18889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-03 11:39:55 +00:00
Brandon Wees
74438f5bd8 feat(web): improved user onboarding (#18782)
* wip

* added user metadata key

* wip

* restructure onboarding system and add initial locale

* update language card and fix translation updating

* remove prints

* new card formattings

* fix cursed unmount effect

* add OAuth route onboarding

* remove required admin auth for onboarding

* delete the hotwire button

* update open-api files

* delete import

* fix failing oauth onboarding fields

* fix e2e test

* fix web e2e test

* add onboarding to user registration e2e test

* remove todo

this was a holdover during dev and didn't get deleted

* fix server small tests

* use onDestroy to save settings rather than a bind:this

* change to false for isOnboarded

* fix other auth small test

* provide type annotation in user factory metadata field

* remove onboardingCompelted from UserDto

* move translations to onboarding steps array and mark as derived so they update

* break language selector out into its own component as per @danieldietzler suggestion

* remove hello header on card

* fix flixkering on server privacy card

* label/id fixes

* openapi

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-02 21:09:13 +00:00
Daniel Dietzler
e7d7886f44 chore: move slideshow settings modal to modals folder (#18869) 2025-06-02 14:22:22 -04:00
Daniel Dietzler
97e86e409a refactor: asset tag modal (#18867) 2025-06-02 12:41:28 -04:00
Leonardo
72401aa6b1 fix: translation in the tag people window (#18777) 2025-06-02 16:08:31 +00:00
bo0tzz
fb94fd3132 chore: cleanup unused actions (#18865) 2025-06-02 16:13:50 +01:00
Brandon Wees
a02e1f5e7c chore(web): migrate CircleIconButton to @immich/ui IconButton (#18486)
* remove import and referenced file

* first pass at replacing all CircleIconButtons

* fix linting issues

* fix combobox formatting issues

* fix button context menu coloring

* remove circle icon button from search history box

* use theme switcher from UI lib

* dark mode force the asset viewer icons

* fix forced dark mode icons

* dark mode memory viewer icons

* fix: back button in memory viewer

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-02 14:47:23 +00:00
Dag Stuan
d544053c67 feat(web): improve slideshow quality of life (#18778)
* Add a new setting to toggle autoplay when showing the slideshow.
* Fix an issue where the slideshow would restart automatically when
navigating after it was paused.
* Add a keyboard shortcut 's' to start the slideshow from the asset
viewer.
* Add a keyboard shortcut ' ' to toggle the slideshow play/paused.
* Change the timeout for hiding the slideshow controls from 10 to 2.5
seconds.
* Add English translation for the 'autoplay_slideshow' setting.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-02 14:45:39 +00:00
shenlong
df927dd3ce fix(mobile): photo_manager ignore filters (#18742)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-02 09:43:59 -05:00
JobiJoba
d48702f943 fix(mobile): Showing videos of partner in search page quick links (#18855)
Add userId to the contact of the timeline interface method watchAllVideosTimeline and modify the query in the repository
2025-06-02 09:35:18 -05:00
Mert
fa22e865a4 fix(server): tighten asset visibility (#18699)
* tighten visibility

* update sql

* elevated access util function

* fix potential sync issue

* include in user stats

* include hidden assets in size usage

* filter visibility in search duplicates query

* stack visibility
2025-06-02 09:33:08 -05:00
Arno
b5c3a675b2 feat: upload assets to locked folder (#18806)
* feat: upload assets to locked folder

* chore: refactor params
2025-06-01 21:45:39 -05:00
Dag Stuan
5589616921 fix(web): Improve zoom behavior in photo-viewer. (#18803)
* Fix an issue where clicking the zoom-button after having zoomed in
would not zoom completely out, but leave the image in the zoomed-in
state. The new behavior properly zoomes the image completely out after
clicking the zoom-button.
* Revert to the default setting for `wheelZoomRatio` as the previous
setting of 0.2 was borderline unusable on a trackpad. This could
probably be moved to a user setting if needed.
* Add a keyboard shortcut 'z' to toggle image zoom.
2025-06-01 21:06:48 -05:00
Thien Dang
a53d033622 fix(mobile): notification, dialog that don't translate properly (#18827)
* Fix notification, dialog that don't translate properly

* use localeProvider to re-build

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-06-01 21:03:22 -05:00
JobiJoba
36506250c4 fix(mobile): Set the currentAsset to the asset clicked when opening an asset from folders (#18825)
Set the currentAsset to the asset clicked when opening an asset from the folder view ; fix issue #17691
2025-06-01 21:03:03 -05:00
Bence Ferdinandy
31af44dd2a feat: add --json-output option to upload command (#18845)
* fix(docs): update the cli upload usage

The cli upload usage is missing some options compared to what is the current
output of `immich upload --help`. Update the docs accordingly.

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>

* feat(cli): add --json-output option to upload command

Add an option that allows retrieving per-file information about the
upload process. The output includes the newFiles, duplicates and
newAssets lists, but could accommodate more information later if needed.

One use case this allows for is using --dry-run to get a list of all the
files that would be uploaded, and checking them manually before an
upload. This can be particularly useful when a curated subset of images
have already been uploaded to immich and we want to double check for
some stragglers without uploading everything to immich.

The upload command has a few lines of logging, so to get an actually
parsable json one needs to strip those lines:

  immich upload --dry-run * | tail -n +4 | jq .newFiles[]

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>

---------

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
2025-06-02 01:58:58 +00:00
Daimolean
c89ac5b5e5 fix(server): cannot share album to owner (#18802)
* fix(server): create shared album

* add test

* trigger ci

* resolve conversation
2025-06-01 20:58:07 -05:00
aviv926
daf1a48b54 fix: update en.json (#18835)
Update en.json
2025-06-01 20:54:10 -05:00
shenlong
091a101f39 fix(mobile): group settings not respected without restart (#18823)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-01 20:53:45 -05:00
Daniel Dietzler
d118b46c3f chore: remove postcss (#18831) 2025-06-01 20:52:17 -05:00
bo0tzz
ad3f58bcda chore: document backup ordering (#18807)
* chore: document backup ordering

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-31 15:10:14 -05:00
renovate[bot]
0711a9006f chore(deps): update dependency @types/express to v5 (#18818)
* chore(deps): update dependency @types/express to v5

* fix: properly handle promise

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-05-31 15:31:36 -04:00
Arno
9c18fef9b2 chore: Refactor external library modals (#18655) 2025-05-31 15:30:08 +02:00
bo0tzz
d00c872dc1 fix: cursed knowledge date index (#18801) 2025-05-31 14:37:43 +02:00
Nicholas
3a5fed99e1 fix(server): rename android-links api endpoint to apk-links (#18790)
* remove auth from endpoint and change android to apk

* add auth back to `apk-links`
2025-05-31 00:27:55 -04:00
Frank de Lange
e2defbc49a feat: start oauth with autoLaunch=1 (#18763)
* Add automatic OpenID Connect login by using parameter `autoLaunch=1`

By launching Immich with `/auth/login?autoLaunch=1` an OpenID Connect login attempt is directly initated on installations where OAuth Auto Launch is not enabled. The intended use for this parameter is to enable Immich to be launched from e.g. Nextcloud using the _External sites_ app and the _oids_ OpenID Connect provider app so as to enable the user to directly interact with Immich without the need to press the `Login with ...` button.

* Add documentation for autolaunch by navigating to `/auth/login?autoLaunch=1`

* Look ma, no braces!

_This could be a single line_

And now it is, as is its predecessor.

* Change formatting to satisfy _prettier_

* if (condition) return true -> return condition

* More _prettier_ reformatting

* Look ma, braces!
2025-05-30 22:12:53 +00:00
Yaros
f4e4e6628e fix(mobile): center loading spinner in people page (#18781)
fix: center loading spinner in people page
2025-05-30 16:45:29 -05:00
Daniel Dietzler
9d04853b34 fix: oauth (#18725) 2025-05-30 22:04:52 +02:00
Yaros
97503d11c5 fix(web): datetime in storage template example (#18784)
fix: datetime in storage template example
2025-05-30 14:18:22 -04:00
Brandon Wees
cbf68b006e chore: add google cast feature switch to user admin pane (#18783)
add gogole cast feature switch to user admin pane
2025-05-30 14:17:32 -04:00
Yaros
4b9a7b2ce0 fix(mobile): android status bar overlays icon in map (#18780) 2025-05-30 16:04:20 +00:00
shenlong
b854a3dd47 feat(server): add originalFileName to SyncAssetV1 (#18767)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-30 09:56:35 -05:00
Nicholas
aebd68e24e fix: change URL to Url in the Obtainium apk links api endpoint (#18764)
change `URL` to `Url`
2025-05-30 00:50:09 -04:00
Thien Dang
0f42babb6b fix: Update locked folder text and improve translations (#18622)
* Update locked folder text and remove unused translations

* uppercase Locked folder in Menu

* convert some translates to icu and improve

* add iOS debug info translations for background processes

* fix lint

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-05-29 15:06:08 -05:00
shenlong
dbdb64f6c5 feat: delta sync (#18428)
* feat: delta sync

* fix: ignore iCloud assets

* feat: dev logs

* add full sync button

* remove photo_manager dep for sync

* misc logs and fix

* add time taken to DLog

* fix: build release iOS

* ios sync go brrr

* rename local sync service

* update isar fork

* rename to platform assets / albums

* fix ci check

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-29 10:42:00 -05:00
Arno
2b1b20ab0b refactor: library-exclusion-pattern-form modal (#18654)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-29 16:50:11 +02:00
shenlong
44d49b9671 fix(mobile): double swipe (#18749)
debug: double swipe issue

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-05-29 14:35:36 +00:00
toamz
0e81c20cbb fix: pinch zoom in mobile app (#18744)
* Change photo zoom logic

To properly zoom to current position and pan at the correct speed

TODO: zoom to current pinch position

* zoom to current pinch position

* Clean unused variable

* Formatting

* fix: lint

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-29 14:19:26 +00:00
Daimolean
1f18a09061 fix(web): hide map button when disable (#18743) 2025-05-29 09:13:44 -05:00
Brandon Wees
0257f1a743 chore(mobile): add default cast user pref to openapi patching (#18747)
add default cast user pref to mobile patching
2025-05-29 09:06:13 -05:00
Daimolean
6f39a706b2 fix: missing permissions and optional update (#18735)
* fix: missing permissions

* fix: test
2025-05-29 08:48:44 -05:00
Arno
10181defb1 chore: Refactor Edit Album Modal (#18653) 2025-05-29 12:30:25 +02:00
Nicholas
8ea40973a7 feat(server): apk links API endpoint for Obtainium Android mobile-server version sync (#18700) 2025-05-28 23:45:49 +02:00
Mert
be247395db fix(server): deadlock when fetching vector count (#18728)
move row count query
2025-05-28 17:23:49 -04:00
Brandon Wees
78224961d1 feat(web): make google cast opt in (#18514)
* add setting switch

this isnt bound to anything yet

* make google casting opt-in

* doc updates

* lint docs

* remove unneeded translation items

* update mobile openai defs

* fix failing test

we need to mock user prefs since CastButton uses it
2025-05-28 15:57:36 -05:00
Daimolean
b054e9dc2c feat(web): granular api access controls (#18179)
* feat: api access control

* feat(web): granular api access controls

* fix test

* fix e2e test

* fix: lint

* pr feedback

* merge main + new design

* finalize styling

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-28 13:16:43 -05:00
renovate[bot]
f0d881b4f8 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to fb211a0 (#18247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-28 12:17:25 -05:00
Sergey Katsubo
9677eb37e1 feat(server): log failed healthchecks to server container stderr in verbose mode (#18709)
* Log failed healthchecks to server container stderr in verbose mode

* Formatting: indentation, semicolons

* Readability: less escaping
2025-05-28 12:13:04 -05:00
bo0tzz
dc23bc4d55 chore: pin multi-runner-build workflow (#18693) 2025-05-28 16:50:59 +01:00
Daimolean
e9f8d68f62 feat(web): tag shortcut (#18711)
* feat(web): tag shortcut

* fix: lint
2025-05-28 09:42:04 -05:00
Mert
3f08768854 chore: vchord 0.4.1 (#18588)
* vchord 0.4.x

* oops

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-28 14:38:52 +00:00
Min Idzelis
f029910dc7 feat: keyboard navigation to timeline (#17798)
* feat: improve focus

* feat: keyboard nav

* feat: improve focus

* typo

* test

* fix test

* lint

* bad merge

* lint

* inadvertent

* lint

* fix: flappy e2e test

* bad merge and fix tests

* use modulus in loop

* tests

* react to modal dialog refactor

* regression due to deferLayout

* Review comments

* Re-use change-date instead of new component

* bad merge

* Review comments

* rework moveFocus

* lint

* Fix outline

* use Date

* Finish up removing/reducing date parsing

* lint

* title

* strings

* Rework dates, rework earlier/later algorithm

* bad merge

* fix tests

* Fix race in scroll comp

* consolidate scroll methods

* Review comments

* console.log

* Edge cases in scroll compensation

* edge case, optimizations

* review comments

* lint

* lint

* More edge cases

* lint

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-28 08:55:14 -05:00
Ben McCann
b5593823a2 chore(web): bump eslint-plugin-svelte in the package.json (#18695) 2025-05-28 15:40:43 +02:00
renovate[bot]
a40d35555f chore(deps): update typescript-projects (#18697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-28 13:09:44 +02:00
renovate[bot]
0205e89e34 fix(deps): update machine-learning (#18382) 2025-05-27 22:08:33 -04:00
Brandon Wees
a231d7be64 chore: allow overriding dark mode to light mode with the .light class (#18687)
* allow overriding dark mode to light mode with the .light class

* light and dark are in the same block, dont use .light here
2025-05-27 14:42:22 -05:00
Alex
219f5b25a4 chore: post release tasks (#18692) 2025-05-27 17:56:12 +00:00
waclaw66
486bb47ddb fix(mobile): local albums translation (#18637)
* fix(mobile): local albums translation

* ICU usage
2025-05-27 12:02:00 -05:00
github-actions
58ae77ec92 chore: version v1.134.0 2025-05-27 16:47:49 +00:00
Mert
4794a1a092 fix(server): handle startup reindexing after failed model change (#18688)
drop constraint
2025-05-27 11:36:30 -05:00
Daimolean
6abcfaef99 docs: update link (#18689) 2025-05-27 16:22:57 +00:00
Alex
f6903696cb fix: revert accidental docker-compose dev change (#18686) 2025-05-27 17:15:45 +01:00
renovate[bot]
724a081bb5 fix(deps): update typescript-projects (#18681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 18:00:45 +02:00
Daimolean
4e332db2fb fix(web): update after delete (#18684) 2025-05-27 15:42:08 +00:00
Zack Pollard
0712183a18 fix: replace edit user button with view button for user details screen (#18683) 2025-05-27 15:38:16 +00:00
Alex
d004c03990 fix: z-index search bar (#18685) 2025-05-27 15:36:03 +00:00
Alex
fff651f8a5 fix(web): handle nullable assets duration (#18679)
* fix(web): handle nullable assets duration

* Update web/src/lib/components/assets/thumbnail/thumbnail.svelte

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>

* fix: format

---------

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2025-05-27 10:24:17 -05:00
Mert
e2720e85bb fix(server): handle period in database name (#18590) 2025-05-27 16:05:13 +01:00
Nicholas
5fdc8c9481 feat: add vscode extensions as recommendations (#18641)
* add vscode extensions as recommendations

* forgot to add DCM because it's not available for VSCodium afaict

* update docs

* fix formatting
2025-05-27 10:02:36 -05:00
renovate[bot]
a3404cf420 fix(deps): update typescript-projects (#18671)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-05-27 17:00:29 +02:00
Daniel Dietzler
5268dc4ee2 feat: version check endpoint (#18572) 2025-05-27 09:33:23 -05:00
renovate[bot]
ef060e97b6 chore(deps): update github-actions (#18660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 15:32:47 +01:00
Brandon Wees
a9851df8d1 fix(web): move support & feedback button to user modal (#18651)
* move support & feedback button to user modal

* cleanup styling of link

* update sign out button to use immich/ui

* revise sign out button to match design from @alextran1502

* more margin on support/feedback
2025-05-27 09:26:40 -05:00
Indrek Haav
099a1e4210 feat(mobile): add Estonian (#18666) 2025-05-27 14:25:44 +00:00
Daimolean
79d760ccd7 fix(server): reverse isTrash field (#18665) 2025-05-27 16:22:09 +02:00
bo0tzz
369d3dfa38 fix: use single bulkTagAssets call instead of loop (#18672) 2025-05-27 10:35:22 +00:00
renovate[bot]
93e53f6d74 chore(deps): update node.js to v22.16.0 (#18662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 12:13:30 +02:00
renovate[bot]
d8f0a69dc8 chore(deps): update node (#18661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 12:12:37 +02:00
renovate[bot]
09d9fa9755 chore(deps): pin dependencies (#18659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 12:10:30 +02:00
Alex
118dc8cf5a fix: meta+click on thumbnail (#18648) 2025-05-26 14:58:46 -05:00
bo0tzz
9557395991 chore: remove checkbox requirement from dupe search question (#18647)
* Update bug_report.yaml

* Update feature-request.yaml
2025-05-26 10:47:58 -05:00
Alex
a5d63d6953 fix(web): modal anchor (#18621)
fix: modal anchor
2025-05-25 20:38:46 +00:00
arnonm
5ee4a43e74 fix: use correct flutter version in devcontainer (#18285)
Fixed issue 18284

Co-authored-by: Arnon Meshoulam <arnonm@gmail.com>
2025-05-25 19:43:14 +00:00
Arno
c3aeb6c497 chore: refactor slide-show-settings modal (#18570)
* chore: refactor slide-show-settings modal

* fix: dropdown getting clipped in modals

* Revert "fix: dropdown getting clipped in modals"

This reverts commit 0120932a49.

* fix: changed to show method
2025-05-25 14:38:13 -05:00
Xuan Binh
d22fb2d5db fix(web): enhance face tagging confirmation and fix #18605 (#18610)
* Fix: enhance face tagging confirmation and fix double label in checkboxes

* fix code formatting

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
2025-05-25 14:34:12 -05:00
Lukas
c4df96bd72 fix(web): center memory lane buttons (#18613)
* fix(web): center memory lane buttons

* format
2025-05-25 19:33:25 +00:00
toamz
40e7b58ba4 fix(mobile): pinch to zoom + move acceleration (#18569)
Fix pinch to zoom + move acceleration
2025-05-25 14:32:04 -05:00
Alex
4743a085f1 fix: more z-index issue (#18598)
* fix: search suggestion

* fix: play icon lay on top of the search bar
2025-05-25 14:31:24 -05:00
Alex
911c877e72 feat: clean up memory with locked assets (#18532) 2025-05-24 07:31:25 -05:00
Alex
806000e671 chore: post release tasks (#18549) 2025-05-24 00:44:25 +05:30
github-actions
54bafccbf9 chore: version v1.133.1 2025-05-23 17:37:44 +00:00
Daniel Dietzler
e61c575b01 fix: tailwind issues (#18528)
fix: tailwind issues (maybe)
2025-05-23 12:34:24 -05:00
Alex
e12c67742c fix(mobile): don't show locked asset in local album view (#18536) 2025-05-23 10:20:49 -05:00
Alex
4878c500a5 fix: hard link navigation (#18489) 2025-05-23 08:21:37 -05:00
Alex
2fa7a40996 fix(mobile): chinese translation (#18491)
* fix: Chinese translation

* using Locale.fromsubtags
2025-05-23 08:01:29 -05:00
shenlong
963dd3210a fix: translation vibes (#18490)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-05-23 12:17:01 +01:00
Weblate (bot)
4fdf75311c chore(web): update translations (#18391)
Co-authored-by: Christos Gkantidis <cgkantid@proton.me>
Co-authored-by: Clemens <clemensstouten@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Dushyant Ahuja <dusht.ahuja@gmail.com>
Co-authored-by: FarSniper <ozmatlik@gmail.com>
Co-authored-by: Filip B P <bpfilip@gmail.com>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Haerudin Pramudya Ananta <haerudinahmad67@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Loïck ESTIENNEY <loick.estienney@gmail.com>
Co-authored-by: Mark Vezjak <mark.vezjak@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michał Gątkowski <gatkowski.michal@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nikolina Babok <nikolinababok83@gmail.com>
Co-authored-by: Philipp Sandhaus <philipp@sandhaus-ol.de>
Co-authored-by: Ptsa Daniel <ptsa1987@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Satria Manggala Jati <satriamanggalajati@ymail.com>
Co-authored-by: Sybren Gjaltema <lolmewn@gmail.com>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Thomas R. Koll <tomk32@tomk32.de>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Yago Raña Gayoso <yago.rana.gayoso@gmail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Zihao Diao <diao.zihao@icloud.com>
Co-authored-by: asmaticoferoz <aitorggonzalez@protonmail.com>
Co-authored-by: catelixor <catelixor+weblate@proton.me>
Co-authored-by: idubnori <i.dub.nori@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: tsloms <t.slomski@outlook.de>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: whoami <2468469645hgm@gmail.com>
Co-authored-by: whoami <46884440+Jimmo-o@users.noreply.github.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-05-23 11:45:26 +01:00
Alex
529359de2d fix: add Swedish (#18506) 2025-05-23 10:48:30 +01:00
Mert
2d7377a5e9 fix(docs): mention DB_VECTOR_EXTENSION env in pgvector->vchord migration guide (#18508)
mention `DB_VECTOR_EXTENSION` env in pgvector->vchord migration guide
2025-05-22 21:43:28 -05:00
Alex
8fcf47e5cb chore: more padding (#18507) 2025-05-23 00:52:45 +02:00
Daimolean
c7dc31151d fix(web): multi-select (#18485) 2025-05-22 15:17:34 -05:00
Alex
065f7c7d5d fix: more z-index issue (#18493) 2025-05-22 15:17:14 -05:00
shenlong
15877ddf1f fix: translations from background service (#18473)
* fix: translations from background service

* test: generate translation before running tests

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-05-22 15:13:16 -05:00
Aamir Azad
1b8fa51315 chore: change stable release estimate on roadmap (#18497)
Change stable release estimate
2025-05-22 14:40:53 -05:00
Matthew Momjian
1f84cbe7e5 fix(web): Locked folder (#18438)
locked/Locked consistency
2025-05-22 11:45:57 -05:00
Daimolean
b194aee754 fix(web): pin code input (#18456) 2025-05-22 11:34:03 -05:00
Daimolean
91b961642a feat(web): add to locked folder in album and search (#18488)
* feat(web): add to locked folder in album and search

* feat(web): add to locked folder in favorite and archive

* fix: lint

* feat: add to person page

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-22 16:26:19 +00:00
Zack Pollard
c61ea483ba fix: mobile user agent set to immich_platform_version (#18478)
* fix: mobile user agent

* refactor: typo in MapService
2025-05-22 10:35:24 -05:00
Daniel Dietzler
c278bb0e5b fix: avatar selection z-index issues (#18425) 2025-05-22 14:48:07 +02:00
Mert
bc8e08f5e8 feat: lower disk usage during migration (#18440)
feat: less disk usage during migration
2025-05-22 08:41:10 +01:00
Matthew Momjian
0b8fc7b493 fix(docs): more vchord details (#18435)
* more details

* typo
2025-05-21 19:19:04 -04:00
Christos Gkantidis
7bb25a5c8d fix: typo in english translation (#18434) 2025-05-21 21:38:48 +00:00
Mert
58c1b92816 fix(server): missing button for duplicate detection not working (#18433)
qualify column
2025-05-21 21:27:28 +00:00
github-actions
55adc136c8 chore: version v1.133.0 2025-05-21 19:47:42 +00:00
Jason Rasmussen
cd288533a1 feat: sync albums and album users (#18377) 2025-05-21 14:35:32 -05:00
Daniel Dietzler
58af574241 chore: update milestones (#18426) 2025-05-21 14:00:10 -05:00
bo0tzz
6954b11be1 chore: remove duplicate finder from community projects (#18424) 2025-05-21 18:21:01 +00:00
Mert
bc906f7343 chore: specify vchord version in ci (#18423) 2025-05-21 13:41:14 -04:00
Mert
760b08506a chore: tighten vchord version range (#18420)
guard minor version
2025-05-21 13:03:53 -04:00
Matthew Momjian
6b31e333bb fix(docs): vchord migration (#18418)
* vector

* add up top

* fix vector

* pg version
2025-05-21 12:48:11 -04:00
Mert
493b9b7a54 fix(server): use preview path for person thumbnails from videos (#18419)
use preview path for person thumbnails from videos
2025-05-21 11:15:30 -05:00
Arno
188188a844 fix: Change shortcut listeners from window to document (#18416)
* fix: Change shortcut listeners to document

* fix: split into window and document

* chore: upgrade ui package
2025-05-21 11:12:00 -05:00
Alex
b2ef8ea7dd fix: onboarding styling (#18417) 2025-05-21 15:59:28 +00:00
Zack Pollard
a6c4bd1555 chore: update docker-compose to add storage type configuration (#18415) 2025-05-21 10:46:55 -05:00
Mert
a02fe89ec9 fix(server): drop old extension (#18400) 2025-05-21 09:53:40 -04:00
renovate[bot]
98e998e814 fix(deps): update typescript-projects (#18402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-21 11:42:41 +02:00
renovate[bot]
b83b28cd73 fix(deps): update typescript-projects (#18390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-05-20 22:40:30 +00:00
shenlong
9771e48049 fix(mobile): do not continue on remote stream parse error (#18344)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-05-20 16:09:49 -05:00
Brandon Wees
86db0aafe5 feat(web): add support for casting (#18231)
* recreate #13966

* gcast button works

* rewrote gcast-player to be GCastDestination and CastManager manages the interface between UI and casting destinations

* remove unneeded imports

* add "Connected to" translation

* Remove css for cast launcher

* fix tests

* fix doc tests

* fix the receiver application ID

* remove casting app ID

* remove cast button from nav bar

It is now present at the following locations:

- shared link album and single asset views
- asset viewer (normal user)
- album view (normal user)

* part 1 of fixes from @danieldietzler code review

* part 2 of code review changes from @danieldietzler and @jsram91

* cleanup documentation

* onVideoStarted missing callback

* add token expiry validation

* cleanup logic and logging

* small cleanup

* rename to ICastDestination

* cast button changes
2025-05-20 16:08:23 -05:00
Daniel Dietzler
12b7a079c1 fix: map (#18399) 2025-05-20 12:52:23 -05:00
Alex
53420b7c02 chore: notification panel style tweak (#18398) 2025-05-20 16:30:27 +00:00
Alex
c05aa445d8 fix: location search result z-index (#18379) 2025-05-20 11:22:30 -05:00
Alex
bdf19ce331 fix: TimelineAsset visibility (#18395)
* fix: TimelineAsset visibility

* fix enum values
2025-05-20 15:53:34 +00:00
Alex
895e0eacfe refactor: slide-show settings (#18394) 2025-05-20 10:37:10 -05:00
renovate[bot]
e7b60a9278 chore(deps): update github-actions (#18246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 16:12:17 +01:00
Alex
4e2fc9f017 chore: remove PIN code from secure storage on logged out (#18393) 2025-05-20 14:39:05 +00:00
renovate[bot]
d1e6682df0 chore(deps): update dependency @types/node to ^22.15.18 (#18387)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 15:15:10 +01:00
renovate[bot]
965498d19b chore(deps): update node.js to v22.15.1 (#18388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 15:14:59 +01:00
renovate[bot]
62f24a79f4 chore(deps): update prom/prometheus docker digest to 78ed1f9 (#18381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 15:14:47 +01:00
Daimolean
495a959879 fix(web): slide show in blurred background (#18384)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-20 09:00:20 -05:00
Mert
a6a4dfcfd3 fix(server): queueing for duplicate detection (#18380)
* fix queueing

* update tests
2025-05-20 08:44:39 -05:00
Mert
0d773af6c3 feat: vectorchord (#18042)
* wip

auto-detect available extensions

auto-recovery, fix reindexing check

use original image for ml

* set probes

* update image for sql checker

update images for gha

* cascade

* fix new instance

* accurate dummy vector

* simplify dummy

* preexisiting pg docs

* handle different db name

* maybe fix sql generation

* revert refreshfaces sql change

* redundant switch

* outdated message

* update docker compose files

* Update docs/docs/administration/postgres-standalone.md

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

* tighten range

* avoid always printing "vector reindexing complete"

* remove nesting

* use new images

* add vchord to unit tests

* debug e2e image

* mention 1.107.2 in startup error

* support new vchord versions

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-20 08:36:43 -05:00
Alex
fe71894308 feat: locked view mobile (#18316)
* feat: locked/private view

* feat: locked/private view

* feat: mobile lock/private view

* feat: mobile lock/private view

* merge main

* pr feedback

* pr feedback

* bottom sheet sizing

* always lock when navigating away
2025-05-20 13:35:22 +00:00
Zack Pollard
397808dd1a fix: weblate conflicts (#18389) 2025-05-20 13:15:10 +01:00
Min Idzelis
e7edbcdf04 feat(server): lighter buckets (#17831)
* feat(web): lighter timeline buckets

* GalleryViewer

* weird ssr

* Remove generics from AssetInteraction

* ensure keys on getAssetInfo, alt-text

* empty - trigger ci

* re-add alt-text

* test fix

* update tests

* tests

* missing import

* feat(server): lighter buckets

* fix: flappy e2e test

* lint

* revert settings

* unneeded cast

* fix after merge

* Adapt web client to consume new server response format

* test

* missing import

* lint

* Use nulls, make-sql

* openapi battle

* date->string

* tests

* tests

* lint/tests

* lint

* test

* push aggregation to query

* openapi

* stack as tuple

* openapi

* update references to description

* update alt text tests

* update sql

* update sql

* update timeline tests

* linting, fix expected response

* string tuple

* fix spec

* fix

* silly generator

* rename patch

* minimize sorting

* review

* lint

* lint

* sql

* test

* avoid abbreviations

* review comment - type safety in test

* merge conflicts

* lint

* lint/abbreviations

* remove unncessary code

* review comments

* sql

* re-add package-lock

* use booleans, fix visibility in openapi spec, less cursed controller

* update sql

* no need to use sql template

* array access actually doesn't seem to matter

* remove redundant code

* re-add sql decorator

* unused type

* remove null assertions

* bad merge

* Fix test

* shave

* extra clean shave

* use decorator for content type

* redundant types

* redundant comment

* update comment

* unnecessary res

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-19 16:40:48 -05:00
Alex
59f666b115 chore: back button in pin verification form (#18378) 2025-05-19 21:33:42 +00:00
Daimolean
dc8962f2bc fix(server): select main stream according to bitrate (#18375)
* fix main stream

* update unit tests

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-05-19 17:33:28 -04:00
Geoffrey Frogeye
00a77c2d6a feat(server): sort images in duplicate groups by date (#18347)
This restores behaviour introduced in
562fec6e2b and lost in
2e12c46980.
2025-05-19 17:27:30 -04:00
Alex
c8641d24f6 chore: tailwindcss v4 and z-war clean up (#18358)
* chore: styling tweak

* replace full-screen-modal, update docs

* scrubber

* fix: control app bar in memory viewer

* face lift

* pr feedback

* clean up
2025-05-19 14:32:23 +00:00
Alex
2431e04a09 fix(mobile): stale thumbnail cache (#18351)
* fix(mobile): stale thumbnail cache

* Revert height/width usage
2025-05-19 09:25:27 -05:00
Saschl
9e47093501 fix(mobile): reduce stutter/jank on search pages (#18363)
fix: reduce stutter/jank on search pages
2025-05-19 09:24:58 -05:00
Zack Pollard
230c286b97 chore: cleanup extraneous memories job item definition (#18372) 2025-05-19 14:02:44 +00:00
Thomas R. Koll
14970c5539 chore: reverting to multiline commands in docker-compose.yml files (#17309) 2025-05-19 08:52:35 -05:00
Daniel Dietzler
adb17c4d58 fix: supporter badge (#18357) 2025-05-18 18:26:24 +00:00
Daniel Dietzler
56156b97e7 chore: upgrade to tailwind v4 (#18353) 2025-05-18 13:51:33 +00:00
Weblate (bot)
c411c1472a chore(web): update translations (#18083)
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Adam Tahri <gotakk@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Antonio Vazquez <antoniovavazquez@gmail.com>
Co-authored-by: Ash Mad <ash729@users.noreply.hosted.weblate.org>
Co-authored-by: Asier Zunzunegui <asier.zunzu@gmail.com>
Co-authored-by: Badri Isiani <badri.isiani@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Dunya Cengiz <dunyacengiz@gmail.com>
Co-authored-by: Edi Hamiti <edihamiti@gmail.com>
Co-authored-by: FarSniper <ozmatlik@gmail.com>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Imjustjokingwithya <jokesontb@gmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: JB <weblate.6nn2b@slmail.me>
Co-authored-by: Jan Hepaslimin <introvert69@protonmail.com>
Co-authored-by: Javier Villanueva García <jvg2203@gmail.com>
Co-authored-by: Jaymi Lai <a0921047237@gmail.com>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: JuanLu323 <juanluismcc@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: M <mihalisaggg@gmail.com>
Co-authored-by: Marc Casillas <mcasillassu@gmail.com>
Co-authored-by: MarcusKLY <62999998a@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Matthew Momjian <mmomjian@users.noreply.hosted.weblate.org>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Radovan Draskovic <radovandk@gmail.com>
Co-authored-by: Remco <rpander93@gmail.com>
Co-authored-by: Sebastian Schneider <sese.tailor@gmx.net>
Co-authored-by: Serhii <seryojeg@proton.me>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Simone Pagano <mail@paganosimone.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: Stefan Taiguara <stefantleal14@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Tomi Pöyskö <tomi.poysko@gmail.com>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Vytautas Krivickas <vytautas.krivickas@gmail.com>
Co-authored-by: Väino Daum <vainodaum@gmail.com>
Co-authored-by: Waqas Ali <xx.waqas.xx@gmail.com>
Co-authored-by: Yago Raña Gayoso <yago.rana.gayoso@gmail.com>
Co-authored-by: Z T <ztamuri@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: cherbib mehdi <mehdi.cherbib@live.fr>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: mehrdad <meh1376@hotmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: protonchang <protonmo@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: taninme <taninme@hotmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: theminer3746 <papon190841@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: tsengyuchen <tzeng.yu.chen@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-18 13:05:16 +02:00
Min Idzelis
0bbe70e6a3 feat(web): lighter timeline buckets (#17719)
* feat(web): lighter timeline buckets

* GalleryViewer

* weird ssr

* Remove generics from AssetInteraction

* ensure keys on getAssetInfo, alt-text

* empty - trigger ci

* re-add alt-text

* test fix

* update tests

* tests

* missing import

* fix: flappy e2e test

* lint

* revert settings

* unneeded cast

* fix after merge

* missing import

* lint

* review

* lint

* avoid abbreviations

* review comment - type safety in test

* merge conflicts

* lint

* lint/abbreviations

* fix: left-over migration

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-18 02:57:08 +00:00
Dhaval Javia
a65c905621 fix: delay settings apply for slideshow popup (#18028)
* fix: fixed slideshow values to apply on done.

* chore: linting error fixes

* feat: added cancel button and changed text from done to confirm
2025-05-17 21:09:15 +00:00
Snowknight26
61d784f4e7 fix(web): Make QR code colors solid (#18340) 2025-05-17 09:05:23 -04:00
koostamas
b63d6cdcd6 feat: bulk change description (#18288)
Co-authored-by: Tamas Koos <ext_tamas.koos@btrl.ro>
2025-05-17 12:17:00 +02:00
Jason Rasmussen
fa45a26cff refactor: checkbox (#18337)
refactor: checkboxes
2025-05-16 18:13:39 +00:00
bo0tzz
8f045bc602 feat: let renovate pick up on ML driver deps (#18319) 2025-05-16 14:10:21 -04:00
Jason Rasmussen
5353658114 refactor: convert slider to switch (#18334) 2025-05-16 13:59:47 -04:00
Daniel Dietzler
21880aec14 fix: z-index issues on search page (#18336) 2025-05-16 17:54:37 +00:00
Mert
48d746d9d5 refactor(server): "on this day" memory creation (#18333)
* refactor memory creation

* always update system metadata

* maybe fix medium tests
2025-05-16 13:16:27 -04:00
Jason Rasmussen
8ab5040351 fix(web): modal colors (#18332)
* feat(web): clear person birthdate

* fix(web): modal colors
2025-05-16 12:58:17 -04:00
Sebastian Schneider
1219fd82a0 fix(web): format dates with the locale preference (#18259)
fix: Format dates in settings according to user setting
2025-05-16 12:03:54 -04:00
Jason Rasmussen
28d8357cc5 feat(web): clear person birthdate (#18330) 2025-05-16 11:56:25 -04:00
Daniel Dietzler
a9e7d0388b fix: people edit ui (#18320) 2025-05-15 18:32:01 -04:00
Jason Rasmussen
86d64f3483 refactor: buttons (#18317)
* refactor: buttons

* fix: woopsie

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-15 18:31:33 -04:00
Jason Rasmussen
c1150fe7e3 feat: lock auth session (#18322) 2025-05-15 18:08:31 -04:00
Jason Rasmussen
ecb66fdb2c fix: check i18n are sorted (#18324) 2025-05-15 17:55:16 -04:00
Jason Rasmussen
c046651f23 feat(web): continue after login (#18302) 2025-05-15 14:45:23 -04:00
Brandon Wees
6117329057 feat: add session creation endpoint (#18295) 2025-05-15 13:34:33 -05:00
Daniel Dietzler
585997d46f fix: person edit sidebar cursedness (#18318) 2025-05-15 18:28:20 +00:00
Jason Rasmussen
7146ec99b1 chore: use default theme config (#18314) 2025-05-15 10:44:10 -05:00
Alex
b7b0b9b6d8 feat: locked/private view (#18268)
* feat: locked/private view

* feat: locked/private view

* pr feedback

* fix: redirect loop

* pr feedback
2025-05-15 15:35:21 +00:00
Ruslan
4935f3e0bb fix(docs): Update old jellyfin docs links (#18311)
Update old jellyfin docs links

Updated old links to jellyfin docs
2025-05-15 15:32:31 +00:00
Mert
709a7b70aa chore: no sql generation for queries with side effects (#18301)
no sql generation for queries with side effects
2025-05-15 03:34:22 +00:00
Mert
6a4d21205f fix(server): do not filter out assets without preview path for person thumbnail generation (#18300)
* allow assets without preview path

* update sql

* Update person.repository.ts

Co-authored-by: Jason Rasmussen <jason@rasm.me>

* update sql, e2e

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-05-15 03:23:34 +00:00
Mert
3a0ddfb92d fix(server): vacuum after deleting people (#18299)
* vacuum after deleting people

* update sql
2025-05-14 23:13:13 -04:00
Daniel Dietzler
cd03d0c0f2 refactor: person merge suggestion modal (#18287) 2025-05-14 20:30:24 -04:00
Jason Rasmussen
117b263887 refactor: sidebar (#18293) 2025-05-14 15:11:31 -04:00
Jason Rasmussen
f357f3324f refactor: default border color (#18292) 2025-05-14 13:12:57 -05:00
Jason Rasmussen
7d95bad5cb refactor: user settings container (#18291) 2025-05-14 12:30:55 -04:00
Jason Rasmussen
77b0505006 refactor: layout components (#18290) 2025-05-14 12:30:47 -04:00
Jason Rasmussen
fac1beb7d8 refactor: buy immich (#18289)
* refactor: buy container

* refactor: buy immich
2025-05-14 12:09:10 -04:00
Daniel Dietzler
3944f5d73b fix: mobile sidebar (#18286) 2025-05-14 12:02:25 -04:00
Jason Rasmussen
4445288758 refactor: admin sidebar (#18276) 2025-05-14 11:23:57 -04:00
Daniel Dietzler
4efc41d5d9 refactor: date of birth modal (#18283) 2025-05-14 08:20:22 -04:00
Daniel Dietzler
c9d45eee86 refactor: duplicates information modal (#18282) 2025-05-14 07:52:04 -04:00
Daniel Dietzler
b3b774cfe5 fix: memory lane memory title (#18277) 2025-05-13 21:52:56 +00:00
Daniel Dietzler
15e894b9b5 fix: z-index issues (#18275) 2025-05-13 22:25:57 +02:00
renovate[bot]
ca06d0aa83 chore(deps): update base-image (major) (#18256)
chore(deps): update base-image

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 13:54:49 -04:00
Daniel Dietzler
0cd51ae9c5 fix: detail panel background (#18269) 2025-05-13 17:32:34 +00:00
bo0tzz
68f6111b77 chore: use full action versions in comment (#18260)
* Update pr-label-validation.yml

* Update pr-labeler.yml

* Update prepare-release.yml

* Update preview-label.yaml

* Update sdk.yml

* Update static_analysis.yml

* Update test.yml

* Update weblate-lock.yml

* Update build-mobile.yml

* Update cache-cleanup.yml

* Update cli.yml

* Update codeql-analysis.yml

* Update docker.yml

* Update docs-build.yml

* Update docs-deploy.yml

* Update docs-destroy.yml

* Update fix-format.yml
2025-05-13 13:29:55 -04:00
Daniel Dietzler
668288ca20 refactor: album users modal (#18266) 2025-05-13 13:20:44 -04:00
Jason Rasmussen
3fdc1df89c fix(web): handle deleted user on details page (#18264) 2025-05-13 09:40:50 -05:00
Daniel Dietzler
989d9dbe51 fix: z-index overuse (#18192) 2025-05-13 16:10:05 +02:00
Daniel Dietzler
48112d84a3 refactor: confirm modal in album users modal (#18241) 2025-05-13 15:39:21 +02:00
renovate[bot]
80dfe7a5e9 fix(deps): update machine-learning (#18248) 2025-05-13 09:18:42 -04:00
Jason Rasmussen
ce90a2ec1a refactor(web): disable login confirm modal (#18261) 2025-05-13 09:16:05 -04:00
Daimolean
dccbe0b3ed fix(web): user details (#18253)
fix(server, web): user details
2025-05-13 07:55:58 -04:00
renovate[bot]
c0ad12f279 fix(deps): update typescript-projects (#18251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-05-13 13:31:33 +02:00
renovate[bot]
9c484b23a9 chore(deps): update dependency @types/picomatch to v4 (#18257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 12:33:15 +02:00
renovate[bot]
eed014482d chore(deps): update dependency @types/node to ^22.15.16 (#18249)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 12:32:48 +02:00
renovate[bot]
d271e6a3ae chore(deps): update node.js to v22.15.0 (#18250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 12:09:41 +02:00
renovate[bot]
60c43081ed chore(deps): update docker.io/valkey/valkey:8-bookworm docker digest to ff21bc0 (#18245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-12 22:25:56 -04:00
Jason Rasmussen
81d959a27e refactor: remove unused props (#18240) 2025-05-12 22:31:37 +00:00
Jason Rasmussen
bb775110ef refactor: password reset success modal (#18239) 2025-05-12 18:18:13 -04:00
Jason Rasmussen
7280331b76 refactor: confirm modal (#18238) 2025-05-12 22:02:49 +00:00
Jason Rasmussen
93ee6ee0a5 refactor: dialog controller (#18235) 2025-05-12 17:48:05 -04:00
Daniel Dietzler
7544a678ec refactor: remove unnecessary bg-color attributes and move to ui lib vars (#18234) 2025-05-12 17:17:01 -04:00
Jason Rasmussen
3066c8198c feat(web): user detail page (#18230)
feat: user detail page
2025-05-12 16:50:26 -04:00
Jason Rasmussen
eb8dfa283e fix(web): no rounded map on /map page (#18232) 2025-05-12 14:15:15 -04:00
Daniel Dietzler
41a127e2ab refactor: avatar selector modal (#18228) 2025-05-12 10:56:36 -04:00
Daniel Dietzler
feb475561e fix: missing translation in pin settings (#18203) 2025-05-10 15:27:42 -04:00
Alex
4c4c67f0d2 chore(web): color tuning (#18193) 2025-05-10 20:55:06 +02:00
Daimolean
381b66bf70 fix(web): IconButton size in user restore (#18194) 2025-05-10 07:28:37 -05:00
renovate[bot]
a89f3ad97c fix(deps): update typescript-projects (#18133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-10 13:07:20 +02:00
Jason Rasmussen
c473511133 feat(web): stat card tweaks (#18189)
feat: stat card tweaks
2025-05-09 17:56:41 -05:00
Ben McCann
0d66a6b51f chore(web): upgrade enhanced-img (#18186) 2025-05-09 16:05:07 -05:00
Jason Rasmussen
66400b2e8e fix(web): user restore (#18188) 2025-05-09 21:05:01 +00:00
Alex
87cdf0ebd9 chore: use correct font on buy button (#18187) 2025-05-09 17:04:03 -04:00
Alex
3f719bd8d7 feat: user pin-code (#18138)
* feat: user pincode

* pr feedback

* chore: cleanup

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-05-09 17:00:58 -04:00
Daniel Dietzler
55af925ab3 refactor: shared link url (#18185) 2025-05-09 15:23:00 -05:00
Alex
ff63b0fa8f docs: face lift, botox x3 (#18184)
* chore: docs face lift

* logo and fonts

* docs: face lift, botox x3

* docs: face lift, botox x3
2025-05-09 13:27:21 -05:00
Daniel Dietzler
f21fe8716c refactor: shortcuts modal (#18175) 2025-05-09 13:24:36 -04:00
Daniel Dietzler
6a69dafd31 refactor: share modals (#18183) 2025-05-09 16:59:29 +00:00
Daniel Dietzler
47b1938f17 fix: search filter modal close (#18180) 2025-05-09 10:10:10 -05:00
Martin Schmidt
2ffcfe06f3 fix: properly work with languages with multiple scripts (#18167)
Co-authored-by: Ewe Zu Lin <zlewe1997@gmail.com>
2025-05-09 10:09:24 -05:00
Daniel Dietzler
89551edee5 fix: z-index war in the asset viewer (#18091) 2025-05-09 10:17:26 -04:00
Zack Pollard
cb6c541ae1 fix: constraint migration to handle any existing pkey name (#18178) 2025-05-09 13:45:44 +00:00
luzpaz
b1e1362246 fix: various typos (grouped in to separate commits) (#18177) 2025-05-09 13:10:34 +00:00
Alex
ccc2b191dd fix: notification text's color (#18170) 2025-05-08 19:07:12 -04:00
Alex
bb7010b2bb chore: rounded map corner when needed (#18163) 2025-05-09 00:49:16 +02:00
Daniel Dietzler
8db666bc38 refactor: search filter modal (#18159) 2025-05-08 15:36:05 -05:00
Daimolean
eace0f716d fix(web): add photos to album (#18166) 2025-05-08 20:24:51 +00:00
bo0tzz
96743b6c33 fix: properly set cache key suffix in image build (#18169) 2025-05-08 15:24:29 -05:00
bo0tzz
ff181cf346 fix: always set cache-key-base during image build (#18168) 2025-05-08 15:14:33 -05:00
Daimolean
0cd5960007 fix(web): ui (#18160)
* fix(web): ui

* fix(web): ui

* lint

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-08 19:32:45 +00:00
Dan Pizappi
698592c1b0 chore: update truenas install guide (#18142)
* Update truenas.md

* Update truenas.md

fix link

* Update truenas.md

* Update docs/docs/install/truenas.md

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-08 13:51:04 +00:00
Robert Vollmer
f75d853e9a fix(mobile): Remote video playback and asset download on Android with mTLS (#16403)
* Add class to apply SSL options

* Apply client certificate for native Android code

* Refactor self-signed check

* Allow self-signed certificates

* Fix Dart analysis

* Add HostnameVerifier

Android explicitly does NOT check the Common Name of a certificate,
only the Subject Alt Names. Chances are that someone who self-signs a
certificate doesn't go through the extra steps to add a SAN, and in
that case the connection would be prevented by the HostnameVerifier
even thought the TrustManager was fine with the certificate itself.

* Rename parameter like in Dart

* Fix NPE

* Catch all native errors in HttpSSLOptionsPlugin

* Workaround for too early onChanged() callback

* Fix formatting

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-08 13:45:11 +00:00
Alex
3a1e3e82e7 fix: notification text's color (#18151) 2025-05-08 12:15:11 +02:00
bo0tzz
0beb3ac4c1 feat: extract multi-arch image building to shared logic (#17877) 2025-05-08 12:00:05 +02:00
Daniel Dietzler
894545aeed refactor: modal manager types (#18150) 2025-05-07 22:08:19 +00:00
Daniel Dietzler
5250269fa4 refactor: user page modals (#18147) 2025-05-07 17:58:46 -04:00
Daniel Dietzler
a169fb6a79 refactor: map (#18143) 2025-05-07 17:39:50 -04:00
Daniel Dietzler
09ced9a171 refactor: help modal (#18145) 2025-05-07 17:31:38 -04:00
Jason Rasmussen
a6e5e4f625 fix: schema ci checks (#18146) 2025-05-07 21:14:20 +00:00
Daniel Dietzler
bbd8de177b refactor: side bar modals (#18134) 2025-05-07 09:01:51 -05:00
bo0tzz
867f6e64f9 chore: run all e2e tests on github runners (#17987)
* chore: run all e2e tests on github runners

* fix: use it.each for multi-case test
2025-05-07 01:42:48 -04:00
SGT
ec6379b0b2 chore: remove usage of deprecated Kysely method (#18127)
* minor update. fix usage of deprecated method'

* restore original formatting
2025-05-06 17:01:02 -04:00
Mert
2a80251dc3 fix(server): more robust person thumbnail generation (#17974)
* more robust person thumbnail generation

* clamp bounding boxes

* update sql

* no need to process invalid images after decoding

* cursed knowledge

* new line
2025-05-06 14:18:22 -04:00
Alex
d33ce13561 feat(server): visibility column (#17939)
* feat: private view

* pr feedback

* sql generation

* feat: visibility column

* fix: set visibility value as the same as the still part after unlinked live photos

* fix: test

* pr feedback
2025-05-06 12:12:48 -05:00
Nicholas Flamy
016d7a6ceb fix(docs): remove old patch versions from version switcher (#18130) 2025-05-06 17:53:17 +01:00
renovate[bot]
8ff25a4f7a fix(deps): update dependency @react-email/components to ^0.0.37 (#18126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 18:23:45 +02:00
renovate[bot]
61a3eba1bd fix(deps): update machine-learning (#18118) 2025-05-06 15:27:34 +00:00
David Cruz
7072e48cbe feat: Add DB_SSL_MODE environment variable for Postgres sslmode (#18025)
* feat: Add DB_SSL_MODE environment variable for Postgres sslmode

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-05-06 09:25:37 -04:00
shenlong
ece977d9ca fix(mobile): empty translation placeholders (#18063)
* fix: empty placeholders

* fix: use namedArgs

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-05-06 09:21:05 -04:00
Jason Rasmussen
2af8095880 fix(web): e2e download tests (#18125) 2025-05-06 15:07:04 +02:00
renovate[bot]
30822fcd10 fix(deps): update typescript-projects (#18124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 14:50:22 +02:00
Alex
c578273e7a chore: modal shenanigan (#18116) 2025-05-06 08:47:58 -04:00
Jovan Gerodetti
118a3fc9db fix: update assets when duplicateId is provided as null (#18071)
Update assets when duplicateId is provided as null
2025-05-06 08:47:19 -04:00
Daniel Dietzler
1138f6dcce refactor: job create modal (#18106)
* refactor: job create modal

* chore: better modal manager types (#18107)
2025-05-06 08:44:44 -04:00
renovate[bot]
33f3751b72 chore(deps): update github-actions (#18114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 08:39:14 -04:00
renovate[bot]
b8509e6411 chore(deps): update docker.io/valkey/valkey:8-bookworm docker digest to 4a9f847 (#18113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 08:35:24 -04:00
renovate[bot]
bd43edbcd7 chore(deps): update prom/prometheus docker digest to e2b8aa6 (#18117)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 08:35:01 -04:00
Matthew Momjian
c8b4a7e1f1 fix(docs): update nginx reverse proxy (#18104)
update nginx reverse proxy
2025-05-05 21:09:42 -05:00
Jason Rasmussen
f34f83e164 refactor: controller tests (#18100) 2025-05-05 18:57:32 -04:00
Alex
df2cf5d106 refactor: use UI library variable for table (#18105) 2025-05-05 22:39:52 +00:00
Daniel Dietzler
52975eadb3 refactor: all user admin page modals (#18097) 2025-05-05 23:54:42 +02:00
Sergey Katsubo
12610e4a9f fix(server): handle orientation of imported face regions (#18021)
* Transform imported face RegionInfo according to Exif Orientation

* Add unit tests for re-orienting metadata face regions

* Make code DRY using ImmichTagsWithFaces instead of NonNullable

* Add e2e test for importing metadata face regions when orientation is RotateCW90

* Disable new e2e test until its asset is added to the test-assets project

* Simplify unit tests by using the same face tag definition

* Combine similar e2e tests

* Disable new e2e test until portrait-orientation-6.jpg is added to test-assets

* Fix lint error: Expected property shorthand

* Update test-assets ref to latest

* Enable new e2e test after updating test-assets
2025-05-05 11:11:21 -04:00
renovate[bot]
2b3efa02d8 chore(deps): update dependency vite to v6.3.4 [security] (#18003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-05 07:26:32 -07:00
Peter Denham
a21a997f21 fix: documentation - synology install docker link (#18084)
* fix docker link

* fix docker link

---------

Co-authored-by: Peter Denham <peter@denham>
2025-05-05 08:08:11 -05:00
David
7d61ed7ce4 feat(web): Map in albums & shared albums (#17906)
* add btn, map and marker

* Fix bug in navigation assetviewer

* Correct bug on main Viewer

* Add to user album the map of his pictures

* change icon to outline

* lint & format

* with manager instead of variable

* remove duplicate

* chore: minor styling change

* formatting

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-05-05 02:58:44 +00:00
Daniel Dietzler
8f7baf8336 chore: add language requests from weblate (#18050) 2025-05-04 21:04:53 +02:00
Weblate (bot)
44923acfd6 chore(web): update translations (#17817)
Co-authored-by: Ali Afzal <ali.afzalt20@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: CanbiZ <mickey.leskowitz@gmail.com>
Co-authored-by: Conrad <conrad@grosser.group>
Co-authored-by: Daniel A <aquino.daniel1994@ikmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Diomed <diomed@tuta.io>
Co-authored-by: Dragonslayer <chybzik@gmail.com>
Co-authored-by: Felipe Garcia <garcia.o.felipe@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: HanYuan <lion70332@gmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Javier Villanueva García <jvg2203@gmail.com>
Co-authored-by: Jesús Jiménez <jesjimenez@gmail.com>
Co-authored-by: John Kapelakos <johnkapelakos5@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Luna <me@devkit.dk>
Co-authored-by: Malhelo <weblate@malhelo.de>
Co-authored-by: Marco Vockner <marco.vockner@outlook.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Matthew Momjian <mmomjian@gmail.com>
Co-authored-by: Micash <micash_545@protonmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: NoopyD <antish85@gmail.com>
Co-authored-by: Olaf Nielsen <solluh@mail.de>
Co-authored-by: PixelAxolotl <catmeowmeow009@gmail.com>
Co-authored-by: Raul <raul.plesa@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: Stanislav <stanislavnastasiu0@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Tobias Calcetin <arbelos@gmail.com>
Co-authored-by: Tomi Pöyskö <tomi.poysko@gmail.com>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Vinyas N S <vinyasns@gmail.com>
Co-authored-by: Väino Daum <vainodaum@gmail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Zvonimir <zzrakic@protonmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: dvbthien <dvbthien@users.noreply.hosted.weblate.org>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: fmis13 <76878393+fmis13@users.noreply.github.com>
Co-authored-by: fmis136696a34093be41a0 <miskovicfrano2@gmail.com>
Co-authored-by: godzinilla <godzinilla@gmail.com>
Co-authored-by: jojo <e80f8c6f-ccb0-423e-9526-614163e44d51@anonaddy.me>
Co-authored-by: jonas-bonas <frage.zeichen@posteo.at>
Co-authored-by: labolstad <lasse.bolstad@gmail.com>
Co-authored-by: lsy223622 <lsy223622@outlook.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: stephane Carrié <spcc70@gmail.com>
Co-authored-by: tct123 <tct1234@protonmail.com>
Co-authored-by: vzvl <lojewski.vitus@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-05-04 20:47:46 +02:00
Matthew Momjian
ab95881ebb fix(mobile): Share page URL (#17834)
* Update share_intent.page.dart

* Update share_intent.page.dart

* unused stores

* remove unused duplicate function
2025-05-04 08:58:45 -05:00
Alex
8801ae5821 fix(web): text dim in darkmode (#18072) 2025-05-04 08:30:21 -04:00
Jason Rasmussen
ea9f11bf39 refactor: controller tests (#18035)
* feat: controller unit tests

* refactor: controller tests
2025-05-03 09:39:44 -04:00
Daniel Dietzler
62fc5b3c7d refactor: introduce modal manager (#18039) 2025-05-02 18:41:42 -04:00
Daniel Dietzler
15d431ba6a refactor: dialog callbacks (#18034) 2025-05-02 13:34:53 -04:00
Jason Rasmussen
5d21ba3166 chore: logging clean up (#18031) 2025-05-02 12:34:35 -05:00
Thomas
da7a81b752 chore(server): split album update notifications into multiple jobs (#17879)
We would like to move away from the concept of finding and removing pending
jobs. The only place this is used is for album update notifications, and this
is done so that users who initially uploaded assets to an album will also
receive a notification if someone else then adds assets to the same album. This
can also be achieved with a job for each recipient. Multiple jobs also has the
advantage that it will scale better for albums with many users, it's possible
to send notifications concurrently, retries are possible without sending
duplicate notifications, and it's clear what recipient a job failed for.
2025-04-30 17:45:35 -04:00
Jason Rasmussen
becdc3dcf5 refactor: job on-done (#18004) 2025-04-30 17:02:53 -04:00
Eli Gao
84b51e3cbb fix(server): double rotation on HEIF files (#18002)
* fix(server): double rotation on HEIF/HEIC files

* Update server/src/services/media.service.ts

* formatting

---------

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2025-04-30 20:33:18 +00:00
Jason Rasmussen
b845184c80 chore: remove old memory lane implementation (#18000) 2025-04-30 14:23:32 -04:00
Jason Rasmussen
1fde02ee1e chore: remove unused types and code (#17999) 2025-04-30 13:41:23 -04:00
Jason Rasmussen
526c02297c refactor: stream queue migration (#17997) 2025-04-30 16:23:13 +00:00
Alex
732b06eec8 refactor: stream for sidecar (#17995)
* refactor: stream for sidecar

* chore: make sql

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-30 10:53:51 -05:00
Daniel Dietzler
436cff72b5 refactor: activity manager (#17943) 2025-04-30 15:50:38 +00:00
Jason Rasmussen
be5cc2cdf5 refactor: stream detect faces (#17996) 2025-04-30 11:25:30 -04:00
Jason Rasmussen
094a41ac9a chore: remove audit file report (#17994) 2025-04-30 11:17:23 -04:00
Daniel Dietzler
ebad6a008f fix: add missing translations to face editor (#17993) 2025-04-30 10:07:21 -05:00
Jason Rasmussen
0c261ffbe2 fix: queue in batches (#17989) 2025-04-30 10:52:51 -04:00
Jason Rasmussen
6df6103c67 chore: better immich-web logging (#17992) 2025-04-30 09:48:24 -05:00
Jason Rasmussen
8c5116bc1d refactor: stream search duplicates (#17991) 2025-04-30 10:40:32 -04:00
bo0tzz
e3812a0e36 chore: also run e2e tests on arm64 (#17822)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-30 14:22:10 +02:00
Min Idzelis
4b1ced439b feat: improve/refactor focus handling (#17796)
* feat: improve focus

* test

* lint

* use modulus in loop
2025-04-30 00:19:38 -04:00
Jason Rasmussen
2e8a286540 refactor: smart search queue (#17977) 2025-04-29 17:44:28 -04:00
Jason Rasmussen
038a82c4f1 refactor: theme manager (#17976) 2025-04-29 17:44:09 -04:00
renovate[bot]
2c2dd01bf0 fix(deps): update machine-learning (#17951) 2025-04-29 20:02:58 +00:00
Ben
ac73e163df chore(mobile): translate toast messages (#17964) 2025-04-29 14:26:41 -05:00
Jason Rasmussen
d89e88bb3f feat: configure token endpoint auth method (#17968) 2025-04-29 15:17:48 -04:00
Thomas
3ce353393a chore(server): don't insert embeddings if the model has changed (#17885)
* chore(server): don't insert embeddings if the model has changed

We're moving away from the heuristic of waiting for queues to complete. The job
which inserts embeddings can simply check if the model has changed before
inserting, rather than attempting to lock the queue.

* more robust dim size update

* use check constraint

* index command cleanup

* add create statement

* update medium test, create appropriate extension

* new line

* set dimension size when running on all assets

* why does it want braces smh

* take 2

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-29 14:23:01 -04:00
Min Idzelis
0e4cf9ac57 feat(web): responsive date group header height (#17944)
* feat: responsive date group header height

* update tests

* feat(web): improve perf when changing mobile orientation (#17945)

fix: improve perf when changing mobile orientation
2025-04-29 13:59:06 -04:00
Min Idzelis
07290580a6 feat: improve semantic nav/main tags (#17800)
feat: nav/main elements

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-29 13:51:39 -04:00
AverageHelper
d9ce74b896 chore: add security.txt (#17952)
* feat: Create .well-known/security.txt

* feat: Add another security.txt for the main website

* fix: deploy hidden files

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-29 13:48:06 -04:00
Jason Rasmussen
4c0f79b162 fix: use lint:p in checkall script (#17969) 2025-04-29 17:34:36 +00:00
renovate[bot]
9851d24628 chore(deps): update docker.io/valkey/valkey:8-bookworm docker digest to c855f98 (#17948)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 12:08:50 +01:00
renovate[bot]
fe6cbd93b1 chore(deps): pin dependencies (#17947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 12:08:40 +01:00
renovate[bot]
df20788088 chore(deps): update grafana/grafana docker tag to v11.6.1 (#17955)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 12:08:08 +01:00
renovate[bot]
3d042cc7f1 fix(deps): update typescript-projects (#17961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 13:00:37 +02:00
renovate[bot]
85446c5862 chore(deps): update redis:6.2-alpine docker digest to 3211c33 (#17950)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 10:09:25 +00:00
renovate[bot]
fb52ac0f5b chore(deps): update node.js to v22.15.0 (#17956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 12:08:32 +02:00
Eli Gao
48bcbee6ed feat(server): JXL previews from DNG 1.7+ (#17861)
* feat(server): JXL previews from RAW

* refactor(server): use var name assumedExtractedFormat for clarity

* test(server): fix existing media.extract() returning JPEG

* chore(openapi): regen

* style(server): lint

* fix(server): ignore undefined decode orientation

* fix(server): correct orientation assignment in media decode options

* test(server): unit tests of JXL-encoded DNG

* refactor(server): return buffer and format from mediaRepository.extract()

* chore(open-api): regen

* refactor

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-28 18:18:46 -04:00
Daniel Dietzler
f621f8ef2c refactor: more job queries (#17745) 2025-04-29 00:03:20 +02:00
Jason Rasmussen
7f69abbf0d refactor: app init event (#17937) 2025-04-28 14:48:33 -04:00
Jason Rasmussen
895b2bf5cd refactor: download manager (#17935) 2025-04-28 14:21:24 -04:00
Jason Rasmussen
f64e6f5dc3 refactor: auth login event (#17934) 2025-04-28 14:13:14 -04:00
Luke Towers
64e738f79d feat(web): move duplicates controls above preview of duplicate images (#17837)
Move duplicates controls above preview of duplicate images
2025-04-28 16:10:40 +00:00
Daniel Dietzler
a17390a422 refactor: move managers to new folder (#17929) 2025-04-28 16:56:04 +02:00
Jason Rasmussen
1b5fc9c665 feat: notifications (#17701)
* feat: notifications

* UI works

* chore: pr feedback

* initial fetch and clear notification upon logging out

* fix: merge

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-04-28 10:36:14 -04:00
Yaros
23717ce981 feat(mobile): save grid size on gesture resize (#17891) 2025-04-28 09:23:33 -05:00
Min Idzelis
2fd05e8447 feat: preload and cancel images with a service worker (#16893)
* feat: Service Worker to preload/cancel images and other resources

* Remove caddy configuration, localhost is secure if port-forwarded

* fix e2e tests

* Cache/return the app.html for all web entry points

* Only handle preload/cancel

* fix e2e

* fix e2e

* e2e-2

* that'll do it

* format

* fix test

* lint

* refactor common code to conditionals

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-28 14:23:05 +00:00
Min Idzelis
c664d99a34 refactor: vscode - format/organize on save (#17928) 2025-04-28 10:11:19 -04:00
Andreas Tollkötter
21c7d70336 feat(mobile): Capitalize month names in asset grid (#17898)
* capitalize month titles

* capitalize day titles as well
2025-04-28 13:56:36 +00:00
Jason Rasmussen
ad272333db refactor: user avatar color (#17753) 2025-04-28 08:54:51 -05:00
Zack Pollard
460d594791 feat: api response compression (#17878) 2025-04-28 08:54:11 -05:00
Jason Rasmussen
e6c575c33e feat: rtl (#17860) 2025-04-28 08:53:53 -05:00
Andreas Tollkötter
85ac0512a6 fix(web): Make date-time formatting follow locale (#17899)
* fixed missing $locale parameter to .toLocaleString

* Remove unused types and functions in timeline-util

* remove unused export

* re-enable export because it is needed for tests

* format
2025-04-28 08:53:26 -05:00
Alex
205260d31c chore: post release tasks (#17895) 2025-04-27 23:02:03 -05:00
Alex
3858973be5 chore(mobile): translation (#17920) 2025-04-27 23:00:40 -05:00
github-actions
02994883fe chore: version v1.132.3 2025-04-25 19:44:05 +00:00
Alex
a1f8150c30 fix: Authelia OAuth code verifier value contains invalid characters (#17886)
* fix(mobile): Authelia OAuth code verifier value contains invalid characters

* Refactor

* Refactoring with Jason

* Refactoring with Jason
2025-04-25 19:39:14 +00:00
Yaros
d85ef19bfc fix(mobile): revert get location on app start (#17882) 2025-04-25 10:38:30 -05:00
Jason Rasmussen
d0014bdf94 refactor: event manager (#17862)
* refactor: event manager

* refactor: event manager
2025-04-25 08:36:31 -04:00
Martin Mikita
e822e3eca9 docs: update MapTiler name (#17863) 2025-04-25 08:57:44 +00:00
Alex
644defa4a1 chore: post release tasks (#17867) 2025-04-25 04:14:40 +00:00
Matthew Momjian
1fe3c7b9b3 fix(docs): priorities (Capitalization) (#17866)
priorities
2025-04-25 04:07:42 +00:00
github-actions
0d60be3d87 chore: version v1.132.2 2025-04-25 03:07:06 +00:00
Alex
765da7b182 fix(mobile): mobile migration logic (#17865)
* fix(mobile): mobile migration logic

* add exception

* remove unused comment

* finalize
2025-04-25 00:16:54 +00:00
shenlong
b037158028 fix(mobile): auto trash using MANAGE_MEDIA (#17828)
fix: auto trash using MANAGE_MEDIA

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-24 19:09:50 -05:00
Daimolean
a03902f174 fix(docs): incorrect date sorting (#17858) 2025-04-24 19:40:52 -04:00
Jason Rasmussen
1d610ad9cb refactor: database connection parsing (#17852) 2025-04-24 12:58:29 -04:00
Min Idzelis
dab4870fed fix: flappy e2e test (#17832)
* fix: flappy e2e test

* lint
2025-04-23 23:30:13 -04:00
github-actions
37f5e6e2cb chore: version v1.132.1 2025-04-23 21:43:47 +00:00
Alex
57d622bc43 chore: post release tasks (#17816) 2025-04-23 16:41:08 -05:00
Alex
c167e46ec7 chore: revert #16732 (#17819)
* chore: revert #16732

* lint
2025-04-23 16:40:59 -05:00
Mert
6ce8a1deeb fix(server): bump sharp (#17818)
* bump sharp

* test linking

* link in prod image too

* force global

* keep unnecessary libraries

* override sharp version

* revert dockerfile changes

* add node-gyp and napi

* dev dependency
2025-04-23 17:08:29 -04:00
github-actions
f659ef4b7a chore: version v1.132.0 2025-04-23 16:44:47 +00:00
Zack Pollard
bb6cdc99ab ci: correct permissions for building mobile during release flow (#17814) 2025-04-23 11:38:43 -05:00
Weblate (bot)
830b4dadcb chore(web): update translations (#17808)
Co-authored-by: Aleksander Vae Haaland <aleksander@vaehaaland.no>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: Bruno López Barcia <brunolopar46@gmail.com>
Co-authored-by: Chris Axell <chris.axell@gmail.com>
Co-authored-by: Dymitr <zasvab@gmail.com>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Happy <happygamernintendoswitch@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Jane <asetmalik@gmail.com>
Co-authored-by: Javier Villanueva García <jvg2203@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Karl Solgård <karl.f91@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: MannyLama <Manfred@lama.be>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: RWDai <869759838@qq.com>
Co-authored-by: Roi Gabay <roigby@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Sebastian <sebastiankiwidk@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sidewave Tech <tech@sidewave.it>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Zvonimir <zzrakic@protonmail.com>
Co-authored-by: adri1m64 <adrien.melle@laposte.net>
Co-authored-by: catelixor <catelixor+weblate@proton.me>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: stanciupaul <stanciupaul90@yahoo.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 灯笼 <gh_denglong@163.com>
2025-04-23 17:26:58 +01:00
Zack Pollard
d2f2f8d672 fix: retrieve version from lockfile and fallback to cli command (#17812) 2025-04-23 17:10:43 +01:00
Alex
be1062474b chore: memory spacing (#17813)
chore(web): memory spacing
2025-04-23 16:02:49 +00:00
bo0tzz
64000d9d76 feat: static analysis job for gha workflows (#17688)
* fix: set persist-credentials explicitly for checkout

https://woodruffw.github.io/zizmor/audits/#artipacked

* fix: minimize permissions scope for workflows

https://woodruffw.github.io/zizmor/audits/#excessive-permissions

* fix: remove potential template injections

https://woodruffw.github.io/zizmor/audits/#template-injection

* fix: only pass needed secrets in workflow_call

https://woodruffw.github.io/zizmor/audits/#secrets-inherit

* fix: push perm for single-arch build jobs

I hadn't realised these push to the registry too :x

* chore: fix formatting

* fix: $

* fix: retag job quoting

* feat: static analysis job for gha workflows

* chore: fix formatting

* fix: clear last zizmor checks

* fix: broken merge

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-23 15:49:06 +00:00
Toni
59fa8fbd0e perf(mobile): remove small thumbnail and cache generated thumbnails (#17792)
* Remove small thumbnail and cache generated thumbnails

* Creating the small thumbnails takes quite some time, which should not be underestimated.
* The time needed to generate the small or big thumbnail is not too different from each other. Therefore there is no real benefit of the small thumbnail and it only adds frustration to the end user experience. That is because the image appeared to have loaded (the visual move from blur to something better) but it's still so bad that it is basically a blur. The better solution is therefore to stay at the blur until the actual thumbnail has loaded.
* Additionaly to the faster generation of the thumbnail, it now also gets cached similarly to the remote thumbnail which already gets cached. This further speeds up the all over usage of the app and prevents a repeatet thumbnail generation when opening the app.
* Decreased the quality from the default 95 to 80 to provide similar quality with much reduces thumbnail size.
* Use try catch around the read of the cache file.
* Use the key provided in the loadImage method instead of the asset of the constructor.

* Use userId instead of ownerId

* Remove import

* Add checksum to thumbnail cache key
2025-04-23 10:31:35 -05:00
Zack Pollard
19746a8685 fix: cache build versions (#17811) 2025-04-23 16:31:18 +01:00
Thomas
987e5ab76c fix(server): start job workers after DB (#17806)
Job workers are currently started on app init, which means they are started
before the DB is initialised. This can be problematic if jobs which need to use
the DB start running before it's ready. It also means that swapping out the
queue implementation for something which uses the DB won't work.
2025-04-23 15:07:32 +00:00
Jason Rasmussen
1b5e981a45 fix: failing ci checks (#17810) 2025-04-23 10:59:54 -04:00
Tin Pecirep
b7a0cf2470 feat: add oauth2 code verifier
* fix: ensure oauth state param matches before finishing oauth flow

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* chore: upgrade openid-client to v6

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* feat: use PKCE for oauth2 on supported clients

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* feat: use state and PKCE in mobile app

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: remove obsolete oauth repository init

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: rewrite callback url if mobile redirect url is enabled

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: propagate oidc client error cause when oauth callback fails

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: adapt auth service tests to required state and PKCE params

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: update sdk types

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: adapt oauth e2e test to work with PKCE

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

* fix: allow insecure (http) oauth clients

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>

---------

Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-23 15:08:11 +01:00
Alex
13d6bd67b1 feat: no small local thumbnail (#17787)
* feat: no small local thumbnail

* pr feedback
2025-04-23 14:02:51 +00:00
Toni
1de2eae12d perf(mobile): remove load of thumbnails in the image provider (#17773)
Remove loading of thumbnail in the image provider

* Removed the load of the thumbnail from the local and remote image provider as they shall provide the image, not the thumbnail. The thumbnail gets provided by the thumbnail provider.
* The thumbnail provider is used as the loadingBuilder and the image provider as the imageProvider. Therefore loading the thumbnail in the image provider loads it a second time which is completely redundant, uses precious time and yields no results.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-23 13:55:51 +00:00
Zack Pollard
bc5875ba8d chore: multithreaded web linting (#17809) 2025-04-23 13:05:31 +01:00
renovate[bot]
0426b574fe fix(deps): update typescript-projects (#17625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-04-23 11:45:38 +00:00
renovate[bot]
2c3658e642 fix(deps): update machine-learning (#17769) 2025-04-23 07:44:30 -04:00
renovate[bot]
a493dab294 chore(deps): update github-actions (#17766)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-23 11:41:51 +00:00
Matthew Momjian
699fdd0d1b fix(mobile): recently added -> taken (#17780) 2025-04-23 12:38:25 +01:00
Weblate (bot)
a774153f67 chore(web): update translations (#17627)
Co-authored-by: Aleksander Vae Haaland <aleksander@vaehaaland.no>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: Bruno López Barcia <brunolopar46@gmail.com>
Co-authored-by: Chris Axell <chris.axell@gmail.com>
Co-authored-by: Dymitr <zasvab@gmail.com>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Happy <happygamernintendoswitch@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Jane <asetmalik@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: MannyLama <Manfred@lama.be>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: RWDai <869759838@qq.com>
Co-authored-by: Roi Gabay <roigby@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Sebastian <sebastiankiwidk@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sidewave Tech <tech@sidewave.it>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Zvonimir <zzrakic@protonmail.com>
Co-authored-by: adri1m64 <adrien.melle@laposte.net>
Co-authored-by: catelixor <catelixor+weblate@proton.me>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: stanciupaul <stanciupaul90@yahoo.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 灯笼 <gh_denglong@163.com>
2025-04-23 12:30:38 +01:00
Bastian Machek
ca12aff3a4 docs: updated community-projects.tsx: lrc-immich-plugin (#17801) 2025-04-23 12:11:42 +01:00
renovate[bot]
550c1c0a10 chore(deps): update prom/prometheus docker digest to 339ce86 (#17767)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-23 12:04:33 +01:00
Mert
92ac1193e6 fix(server): queue android motion assets for transcoding (#17781) 2025-04-23 12:03:28 +01:00
Min Idzelis
2a95eccf6a fix: vscode vitest ext - missing jsdom dev dependency (#17799) 2025-04-22 23:01:22 -04:00
Łukasz Wawrzyk
ee017803bf fix(mobile): use immutable cache keys for local images (#17794) 2025-04-23 02:32:03 +00:00
Alex
0986a71ce3 fix(mobile): revert cache fixes (#17786)
* Revert "fix(mobile): use immutable cache keys for local images (#17736)"

This reverts commit 010b144754.

* Revert "perf(mobile): remove small thumbnail and cache generated thumbnails (#17682)"

This reverts commit b71039e83c.
2025-04-22 12:15:54 -05:00
Alex
af36eaa61b fix(mobile): video player initialization (#17778)
* fix(mobile): video player initialization

* nit
2025-04-22 11:51:20 -04:00
Alex
fda68f972f fix(web): forceDark control app bar doesn't work (#17759) 2025-04-22 09:25:27 -04:00
renovate[bot]
a8eec92da7 chore(deps): update dependency @types/node to ^22.14.1 (#17770)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-04-22 10:18:44 +00:00
Alex
ad8511c978 feat(docs): APK download button (#17768) 2025-04-21 23:27:00 -05:00
Bonne Eggleston
fe8c5e8107 feat: add album start and end dates for storage template (#17188) 2025-04-21 19:54:33 -04:00
Yaros
c70140e707 fix(web): map marker positioning in details pane (#17754)
fix: map marker positioning in details pane
2025-04-21 13:01:38 -05:00
Łukasz Wawrzyk
010b144754 fix(mobile): use immutable cache keys for local images (#17736)
fix(mobile): usse immutable cache keys for local images
2025-04-21 13:00:46 -05:00
Toni
b71039e83c perf(mobile): remove small thumbnail and cache generated thumbnails (#17682)
* Remove small thumbnail and cache generated thumbnails

* Creating the small thumbnails takes quite some time, which should not be underestimated.
* The time needed to generate the small or big thumbnail is not too different from each other. Therefore there is no real benefit of the small thumbnail and it only adds frustration to the end user experience. That is because the image appeared to have loaded (the visual move from blur to something better) but it's still so bad that it is basically a blur. The better solution is therefore to stay at the blur until the actual thumbnail has loaded.
* Additionaly to the faster generation of the thumbnail, it now also gets cached similarly to the remote thumbnail which already gets cached. This further speeds up the all over usage of the app and prevents a repeatet thumbnail generation when opening the app.

* Decrease quality and use try catch

* Decreased the quality from the default 95 to 80 to provide similar quality with much reduces thumbnail size.
* Use try catch around the read of the cache file.

* Replace ImmutableBuffer.fromUint8List with ImmutableBuffer.fromFilePath

* Removed unnecessary comment

* Replace debugPrint with log.severe for catch of error

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-21 12:51:37 -05:00
Jason Rasmussen
56a4aa9ffe refactor: email repository (#17746) 2025-04-21 12:53:37 -04:00
Jason Rasmussen
488dc4efbd refactor: notification-admin controller (#17748) 2025-04-21 10:49:26 -04:00
Yaros
f0ff8581da feat(mobile): map improvements (#17714)
* fix: remove unnecessary db operations in map

* feat: use user's location for map thumbnails

* chore: refactored handleMapEvents

* fix: location fails fetching & update geolocator

* chore: minor refactor

* chore: small style tweak

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-21 05:55:13 +00:00
Yaros
c49fd2065b chore(mobile): bump ios deployment target (#17715)
* chore: bump ios deployment target

* podfile

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-21 05:18:25 +00:00
aviv926
21a6eb30ff feat(docs): documentation update (#17720)
Documentation update
2025-04-20 23:55:58 -05:00
Matthew Momjian
9e063c993c fix(docs): Database dump warnings (#17676)
* docs

* admin page

* roadmap

* whitespace

* whitespace

* no danger
2025-04-20 23:54:37 -05:00
Daniel Dietzler
dd1fcd5be5 chore: remove asset entity (#17703) 2025-04-18 21:39:56 +00:00
Daniel Dietzler
52ae06c119 refactor: remove album entity, update types (#17450) 2025-04-18 23:10:34 +02:00
Daniel Dietzler
854ea13d6a chore: simplify asset getByIds (#17699) 2025-04-18 16:52:41 -04:00
bo0tzz
504930947d fix: various actions workflow security improvements (#17651)
* fix: set persist-credentials explicitly for checkout

https://woodruffw.github.io/zizmor/audits/#artipacked

* fix: minimize permissions scope for workflows

https://woodruffw.github.io/zizmor/audits/#excessive-permissions

* fix: remove potential template injections

https://woodruffw.github.io/zizmor/audits/#template-injection

* fix: only pass needed secrets in workflow_call

https://woodruffw.github.io/zizmor/audits/#secrets-inherit

* fix: push perm for single-arch build jobs

I hadn't realised these push to the registry too :x

* chore: fix formatting

* fix: $

* fix: retag job quoting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-18 15:10:27 -05:00
Alex
0e6ac87645 feat(mobile): assets + exif stream sync placeholder (#17677)
* feat(mobile): assets + exif stream sync placeholder

* feat(mobile): assets + exif stream sync placeholder

* refactor

* fix: test

* fix:test

* refactor(mobile): sync stream service (#17687)

* refactor: sync stream to use callbacks

* pr feedback

* pr feedback

* pr feedback

* fix: test

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

---------

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-18 19:01:16 +00:00
Yaros
bd2deda50c feat(mobile): search on places page (#17679)
* feat: search on places page

* chore: use searchfield on people page
2025-04-18 11:19:51 -05:00
Jason Rasmussen
160bb492a2 fix: skip initial kysely migration for existing installs (#17690)
* fix: skip initial kysely migration for existing installs

* Update docs/src/pages/errors.md

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-18 11:19:11 -05:00
Jason Rasmussen
6474a78b8b feat: initial kysely migration file (#17678) 2025-04-17 17:38:47 -04:00
Jason Rasmussen
e275f2d8b3 feat: add foreign key indexes (#17672) 2025-04-17 14:41:06 -04:00
shenlong
81ed54aa61 feat: user sync stream (#16862)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* feat: drift

* pr feedback

* refactor: move common overrides to mixin

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* feat: user & partner sync stream

* pr changes

* refactor: sync service and add tests

* chore: remove generated change

* chore: move sync model

* rebase: convert string ids to byte uuids

* rebase

* add processing logs

* batch db calls

* rewrite isolate manager

* rewrite with worker_manager

* misc fixes

* add sync order test

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-17 10:25:27 -05:00
Daniel Dietzler
067338b0ed chore: remove transfer encoding header (#17671) 2025-04-17 09:46:52 -05:00
Min Idzelis
5e68f8c519 fix: longpress triggers contextmenu (#17602) 2025-04-16 19:24:26 -04:00
Mert
242a559e0f refactor: query for fetching faces and people of assets (#17661)
* use json instead of jsonb

* missing condition
2025-04-16 19:00:55 -04:00
Jonathan Jogenfors
ed2b54527c chore(server): don't check null dates (#17664) 2025-04-16 18:40:08 -04:00
Daniel Dietzler
8b38f8a58d fix: do not select album in time bucket query (#17662) 2025-04-16 17:52:22 -04:00
yparitcher
29b30570bf fix: use IMMICH_HOST in microservices (#17659) 2025-04-16 23:05:12 +02:00
Daniel Dietzler
586a7a173b refactor: handle detect faces job query (#17660) 2025-04-16 22:52:54 +02:00
Daniel Dietzler
1bbfacfc09 refactor: more job query stuff (#17658) 2025-04-16 22:10:20 +02:00
Daniel Dietzler
85c2d36d99 refactor: dedicated get album thumbnail files query (#17657) 2025-04-16 21:10:27 +02:00
Jason Rasmussen
8cefa0b84b refactor: migrate some e2e to medium (#17640) 2025-04-16 14:59:08 -04:00
Daniel Dietzler
f50e5d006c refactor: dedicated queries for asset jobs (#17652) 2025-04-16 14:08:49 -04:00
renovate[bot]
8f8ff3adc0 fix(deps): update machine-learning (#17610) 2025-04-16 10:56:40 -04:00
Zack Pollard
c4c35ed140 fix(ci): images missing correct OCI annotations and PR cache (#17378)
Co-authored-by: secustor <sebastian@poxhofer.at>
2025-04-15 22:31:23 +01:00
Nils Uliczka
be2f670d35 fix: skip places that no longer exist in geo import (#17637) 2025-04-15 21:27:47 +00:00
Alex
7efcba2b12 chore(mobile): flutter 3.29.3 (#17638)
* chore(mobile): flutter 3.29.3

* chore(mobile): flutter 3.29.3

* upgrade background_downloader
2025-04-15 21:03:22 +00:00
Paul Puschmann
459c815086 feat(docs): Clarify the usage of immich-cli with Docker (#17595)
Add some explanation how to use the various usage parameters together
with the `immich-cli` in the container.
2025-04-15 20:08:55 +00:00
Alex
36fa61c013 fix(mobile): new loading icon too small (#17636) 2025-04-15 20:08:34 +00:00
Jason Rasmussen
8da5f21fcf refactor: medium tests (#17634) 2025-04-15 15:54:23 -04:00
Jonathan Jogenfors
76db8cf604 refactor(server): remove asset placeholder (#17621)
chore: remove AssetEntityPlaceholder

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-15 15:53:49 -04:00
Daniel Dietzler
21becbf1b0 refactor: dedicated query for asset migration job (#17631) 2025-04-15 15:49:15 -04:00
Min Idzelis
26f0ea4cb5 feat: responsive controlbar (#17601) 2025-04-15 14:39:30 -05:00
Alex
19e5a6f68f chore(doc): translation instruction for mobile app (#17629) 2025-04-15 14:31:13 -05:00
shenlong
78f8e23834 fix(mobile): exif not updated on sync (#17633)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-15 14:30:58 -05:00
Daniel Dietzler
5bceefce75 refactor: stream assets for thumbnail job (#17623) 2025-04-15 19:53:28 +02:00
Jason Rasmussen
b710ad36f3 feat: upgrade kysely (#17630)
* feat: upgrade kysely

* chore: pr feedback
2025-04-15 13:26:56 -04:00
Daniel Dietzler
270d178a2e fix: unsafe cast (#17590) 2025-04-15 11:35:00 -05:00
Daniel Dietzler
309528c807 chore: upgrade package locks (#17626) 2025-04-15 11:34:21 -05:00
Toni
7c422363fb chore(mobile): clear the backup detail view when no backup is in progress (#17619)
Clear the backup detail view when no backup is in progress

* When no backup is in progress, display a simple "-" for the details in the upload file info, instead of the data of the last uploaded asset.
* This prevents confusion if a upload job is stuck or just finished.
2025-04-15 11:30:24 -05:00
Weblate (bot)
3eb316abea chore(web): cleanup unused translations (#17624) 2025-04-15 17:24:29 +01:00
renovate[bot]
b3371e16f2 fix(deps): update typescript-projects (#17611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 15:55:03 +00:00
Alex
b2c903c000 feat(mobile): use Weblate for i18n (2) (#17620)
* feat(mobile): use Weblate for i18n (2)

* remove old translation files

* dedup keys

* remove migration report

* chore

* remove localizely.yml
2025-04-15 15:54:26 +00:00
Jason Rasmussen
17e720440d refactor: new asset-job repository (#17622)
* refactor: new asset-job repository

* fix: broken medium tests on main
2025-04-15 10:24:51 -04:00
Alex
a522130122 feat(mobile): use Weblate for i18n (1) (#17609) 2025-04-15 08:30:01 -05:00
Weblate (bot)
cecd9c24a4 chore(web): update translations (#17438)
Co-authored-by: Alex <rainbowpulp@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Ciprriann <cipriannebeja@gmail.com>
Co-authored-by: Eskuero <3skuero@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Gustavo Batista <gustavo_prg@hotmail.com>
Co-authored-by: Happy <happygamernintendoswitch@gmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Josep Mengual <josep@truita.es>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonard Baki <leonard.baki@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Molnar Eduard <edimolnar@posteo.ro>
Co-authored-by: Nergis <me@nergis.dev>
Co-authored-by: Nghiem Long Phan <nghiemlong@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stein-Aksel Basma <stein-aksel@basma.no>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TheScientistPT <joao.ed.reis.gomes@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: alexxss <rainbowpulp+weblate@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: hachimaru <eugenereuh@gmail.com>
Co-authored-by: kylo32 <kylo32@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: shiuh67 <shiuh.cheng@gmail.com>
Co-authored-by: stelle <itsazripp2@gmail.com>
Co-authored-by: szelek <janek.szelewicz@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
2025-04-15 14:27:57 +01:00
Jason Rasmussen
f189c7b101 refactor: medium tests (#17599) 2025-04-15 08:53:14 -04:00
renovate[bot]
c5f087a3ca chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to a20b8a3 (#17606)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:56:00 +01:00
renovate[bot]
72f6d7791e chore(deps): update dependency @sveltejs/kit to v2.20.6 [security] (#17603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:47:30 +01:00
renovate[bot]
f73fce1046 chore(deps): update base-image to v202504081114 (major) (#17613)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:47:10 +01:00
renovate[bot]
f2edcde1b2 chore(deps): update actions/create-github-app-token action to v2 (#17612)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:04:43 +01:00
renovate[bot]
9d0dd9dff8 chore(deps): update github-actions (#17605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:03:45 +01:00
Mert
c3d10c5be2 refactor(server): non-nullable file metadata (#17598) 2025-04-15 12:03:31 +01:00
Andrei Mironov
bd92748ddd perf(mobile): optimize date loading with batch loading (#17240)
* perf(mobile): optimize date loading with batch loading

Introduce DateBatchLoader to reduce the number of database queries by loading dates in batches, improving performance when querying large lists.

* remove unused totalCount parameter from DateBatchLoader

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-14 19:06:36 +00:00
Toni
aad5c3bada chore(mobile): don't show drag scroll date in search page (#17594)
Dont show drag scroll date in search page

* When using the drag scroll, the date of the current image is shown. This is now made toggleable.
* For the mobile search result page, the display of the date is now disabled because the results are not sorted by date and therefore a display of the date is not desirable.
2025-04-14 14:03:18 -05:00
Jason Rasmussen
b2753103c6 chore: remove unused logger (#17593) 2025-04-14 15:01:49 -04:00
Aamir Azad
e3f3baadb0 fix(web): improve mobile web album viewer padding (#17575)
Reduce margin on mobile web album viewer
2025-04-14 13:46:53 -05:00
Daniel Dietzler
0b69d1c147 refactor: selected columns in queries (#17589) 2025-04-14 13:34:06 -05:00
Min Idzelis
5a51ad3622 fix: responsive: timeline glitch and keyboard-accessible scrubber (#17556)
* fix: responsive: timeline glitch

* lint

* fix margin-right on mobile

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-14 11:56:40 -05:00
AutisticShark
664c99278a feat(mobile): remove duplicated i18n file (#17591)
https://github.com/immich-app/immich/issues/8946

Co-authored-by: Cat <cat@nextpanel.dev>
2025-04-14 11:36:18 -05:00
Daniel Dietzler
184e142d87 refactor: migrate asset job status entity (#17560) 2025-04-14 12:21:56 +02:00
Andreas Tollkötter
8b00578c7b fix: read longitude and latitude when reverse geocoding is off (#17558) 2025-04-14 10:43:46 +01:00
Erik Nygren
7562088fac feat(server): parse EXIF creation time for some insta360 images (#17564)
It seems insta360 stores metadata in XMP GPano tags, with their own
non-standard and undocumented addition `SourceImageCreateTime`. For some
pictures this is the only EXIF tag containing a creation time.
2025-04-13 23:44:18 -04:00
Ben
79d4ce2d6d fix(web): search bar deactivates when focus exits (#17549)
* fix(web): search bar deactivates when focus exits

* fix: disable search bar on destroy

For example, on the search page. If the escape key is pressed while the advanced filters button is focused, the search page will close but the search bar will remain activated.
2025-04-13 22:43:50 -05:00
Min Idzelis
983f656a6b fix: in dev, delay web server start until api server is started (#17563) 2025-04-13 10:06:35 -04:00
Alex
ab2a7006f9 chore(mobile): small visual fix and update (#17547)
* chore(mobile): small visual fix and update

* update

* update

* remove design placeholder
2025-04-13 08:01:32 -05:00
Min Idzelis
1f18fe31f0 fix: occasional empty buckets, after canceled loads (#17552) 2025-04-13 07:50:24 -05:00
Daniel Dietzler
a373034629 refactor: migrate stacks (#17559)
chore: migrate stacks
2025-04-12 08:33:35 -04:00
renovate[bot]
5dac315af7 fix(deps): update dependency @nestjs/common to v11.0.16 [security] (#17557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 12:31:18 +02:00
Min Idzelis
8309b73a02 fix: responsive: long press while scroll (#17555) 2025-04-11 18:28:36 -04:00
Min Idzelis
e440cbe353 feat: responsive-web: shrink mem-lane (#17550) 2025-04-11 17:10:58 -05:00
Daniel Dietzler
5548eb0dad fix: live photo hiding (#17548) 2025-04-11 17:09:58 -05:00
Min Idzelis
3bec8dc337 refactor: responsive: device units (#17551) 2025-04-11 17:09:10 -05:00
Min Idzelis
5bcb58c3e7 feat: responsive: skeleton (#17553)
feature: responsive: skeleton
2025-04-11 17:04:48 -05:00
Min Idzelis
c62fc155c8 feat: show thumbhash behind load error, if possible (#17554)
* feat: show thumbhash behind load error, if possible

* forgot this
2025-04-11 17:01:51 -05:00
Rudhra Raveendran
40e3322b25 docs: Add PowerShell example for running web client only (#17546)
Add PowerShell example for running web client only
2025-04-11 17:02:21 -04:00
Mert
25f2b9602f refactor(server): remove face, person and face search entities (#17535)
* remove face, person and face search entities

update tests and mappers

check if face relation exists

update sql

unused imports

* pr feedback

generate sql, remove unused imports
2025-04-11 14:44:45 -04:00
Jason Rasmussen
ae6653392e feat: view qr code from share modal (#17544) 2025-04-11 14:02:07 -04:00
Etienne
d7a782da34 feat: sync pictureFile with oidc if it isn't set already (#17397)
* feat: sync pictureFile with oidc if it isn't set already

fix: move picture writer to get userId

fix: move await promise to the top of the setPicure function before checking its value and automatically create the user folder

chore: code cleanup

* fix: extension double dot

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-11 13:00:39 -05:00
renovate[bot]
08b5952c87 chore(deps): update dependency vite to v6.2.6 [security] (#17541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 13:56:01 -04:00
Jason Rasmussen
584e5894bf refactor: user factories instead of stubs (#17540) 2025-04-11 11:53:37 -04:00
Yaros
52d4b2fe57 fix(mobile): remove locate asset button from trashed asset (#17503)
* fix: remove locate asset button from trashed asset

* chore: refactor code
2025-04-11 09:41:10 -05:00
Ben
92f0973a46 fix(web): reset search history after logout (#17534)
fix(web): reset search suggestions after logout
2025-04-10 20:34:45 +00:00
Jason Rasmussen
75c83cb704 refactor: metadata stub (#17532) 2025-04-10 21:58:55 +02:00
Jason Rasmussen
0b22d3348e refactor: count all return type (#17529) 2025-04-10 14:38:49 -04:00
Alex
abde0fbe60 fix(web): mobile view double scroll layer (#17528) 2025-04-10 13:50:05 -04:00
Jason Rasmussen
eaa0e07329 refactor: asset files entity (#17527) 2025-04-10 13:26:27 -04:00
Mitchell Pleune
9fd2c5220d fix: test_sets_default_sess_options fails if compiling with globally enabled cuda (#17516)
Coming from nixos, this test fails when cuda is enabled. https://github.com/NixOS/nixpkgs/pull/382896

Solution as proposed by @mertalev
2025-04-10 13:06:33 -04:00
Snowknight26
7fcab4b251 feat(server): read additional lens exif tags (#17125)
* fix(server): read additional lens exif tags

* Update order of read tags

* Fix e2e test

* Fix e2e test

* Fix e2e test

* Fix e2e test

* Update test

* Filter unknown lens exif data

* Formatting fixes
2025-04-10 12:02:41 -05:00
Ben
e3995fb5f4 fix(web): increase sidebar breakpoint (#17436) 2025-04-10 12:00:30 -05:00
Alex
6d3f3d8616 refactor: convert download manager into a state class (#17491)
* fix(web): download progress bar not functioning

* remove unused method
2025-04-10 16:48:21 +00:00
Jason Rasmussen
4412680679 refactor: remove unused shared users list (#17526) 2025-04-10 11:44:47 -05:00
Brandon Wees
7df2c9c905 fix: patch-package install in docker build and better postgres patch (#17523)
* always patch package when running npm i, install immich CLI outside of directory so post install doesnt run

* handles case where query is an object and defined but origin is not.

* move patch-package from a dev dependency to a normal dependency. Also copy the patches folder for the docker build to use and patch with

* fix Dockerfile

* use query.reject instead of throw for queryError

* package-lock to reflect the dev dependency change

* dont throw the error, just provide an empty string for query.origin if it does not exist

* remove npm link and demote patch-package back to a dev dependency

* modify patch to add defensive check to catch queries that will fail to parse and reject
2025-04-10 12:43:35 -04:00
Daniel Dietzler
7a1e8ce6d8 chore: remove exif entity (#17499) 2025-04-10 12:36:29 -04:00
Jason Rasmussen
8aea07b750 refactor: album user entity (#17524) 2025-04-10 11:53:21 -04:00
Zack Pollard
94dba29298 refactor: remove user entity (#17498) 2025-04-10 10:53:21 -04:00
Rudhra Raveendran
9e49783e49 feat: use browser download manager for single file downloads (#17507)
* Fix download panel reactivity

* Directly download individual files without buffering in memory

* Fix shared link e2e download tests
2025-04-10 09:13:50 -05:00
renovate[bot]
43e3075f93 fix(deps): update machine-learning (#17455) 2025-04-09 16:20:11 +00:00
Zack Pollard
d03647904b refactor: remove move entity (#17489) 2025-04-09 11:54:20 -04:00
Jason Rasmussen
206545356d refactor: metadata entity (#17492) 2025-04-09 11:45:30 -04:00
renovate[bot]
3e372500b0 fix(deps): update typescript-projects (#17456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-04-09 14:47:29 +00:00
Jason Rasmussen
8943ec23ba refactor: more database types (#17490) 2025-04-09 10:24:38 -04:00
Gagan Yadav
04b03f2924 fix(mobile): asset grid will infinitely scroll on iOS when select and… (#17469)
fix(mobile): asset grid will infinitely scroll on iOS when select and drag
2025-04-09 08:36:27 -05:00
Jason Rasmussen
cf2c0260a6 refactor: activity item (#17470)
* refactor: activity item

* fix query

* qualified columns

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-09 08:35:20 -04:00
Alex
ae8af84101 fix: no thumbnail generated for motion assets (#17472) 2025-04-08 16:07:10 -05:00
Jason Rasmussen
4794eeca88 refactor: database types (#17468) 2025-04-08 12:40:03 -04:00
Gagan Yadav
ac65d46ec6 fix(mobile): adds support for Internationalized Domain Name (IDN) (#17461) 2025-04-08 11:04:42 -05:00
Alex
e5ca79dd44 refactor: remove session entity (#17466)
* refactor: remove session entity

* fix: test

* update sql

* remote export
2025-04-08 16:04:07 +00:00
Jason Rasmussen
49be6d7fd8 refactor: more database enums (#17465) 2025-04-08 12:02:05 -04:00
Daniel Dietzler
15c6506aee fix: broken start/end dates on album update (#17467) 2025-04-08 15:47:44 +00:00
Jason Rasmussen
2c31a11e41 chore: replace generated enums with actual types (#17463) 2025-04-08 11:13:46 -04:00
Jason Rasmussen
b6c5a03533 refactor: remove tag entity (#17462) 2025-04-08 10:52:54 -04:00
Gagan Yadav
75bc32b47b fix(mobile): hide asset description text field if user is not owner (#17442)
* fix(mobile): hide asset description text field if user is not owner

* If user is not the owner and asset has no description then hide the text field

* Apply suggestions from code review

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

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 09:18:33 -05:00
Jason Rasmussen
fdbe6d649f refactor: remove smart search entity (#17447)
refactor: smart search entity
2025-04-08 09:56:45 -04:00
Aleksandr
2b131fe935 feat: opt-in sync of deletes and restores from web to Android (#16732)
* Features: Local file movement to trash and restoration back to the album added. (Android)

* Comments fixes

* settings button marked as [EXPERIMENTAL]

* _moveToTrashMatchedAssets refactored, moveToTrash renamed.

* fix: bad merge

* Permission check and request for local storage added.

* Permission request added on settings switcher

* Settings button logic changed

* Method channel file_trash moved to BackgroundServicePlugin

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 08:50:40 -05:00
snek
6ae24fbbd4 feat(web): improve individual share ux (#17430) 2025-04-08 09:11:37 -04:00
renovate[bot]
7f116d8e98 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to b0b88ef (#17453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:32:14 +01:00
renovate[bot]
bd0840c411 chore(deps): update github/codeql-action digest to 45775bd (#17452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:57 +01:00
renovate[bot]
a5123dec1a chore(deps): update grafana/grafana docker tag to v11.6.0 (#17460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:46 +01:00
renovate[bot]
ffd18c5459 chore(deps): update dependency @types/node to ^22.14.0 (#17459)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 12:14:30 +02:00
PyKen
8242ff9bab fix(server): Exclude album assets in shared link payload (#17207)
* fix(server): Exclude album assets in shared link payload

* Fix e2e test
2025-04-08 00:19:06 -04:00
Jason Rasmussen
8203b6c450 refactor: stop using geodata entity type (#17444) 2025-04-08 00:15:43 -04:00
Jason Rasmussen
b352cf3336 refactor: remove natural earth countries enity (#17445) 2025-04-08 00:15:16 -04:00
bo0tzz
96ed9a8c4a fix: restore mangled footnotes (#17446)
I broke this in #17257
2025-04-07 18:03:32 -04:00
Jason Rasmussen
e7a5b96ed0 feat: extension, triggers, functions, comments, parameters management in sql-tools (#17269)
feat: sql-tools extension, triggers, functions, comments, parameters
2025-04-07 15:12:12 -04:00
renovate[bot]
51c2c60231 chore(deps): update dependency vite to v6.2.5 [security] (#17391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 16:35:29 +01:00
shenlong
43d585ce55 fix(mobile): exifInfo not updated on sync (#17407)
* fix(mobile): exifInfo not updated on sync

* add tests

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 10:21:37 -05:00
shenlong
042da669d1 fix(mobile): use custom filter to fetch asset path entities (#17344)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 09:39:24 -05:00
Yaros
a724f147fe fix(mobile): items not deselecting on back button (#17403)
* fix: items not deselecting on back button

* chore: add comments
2025-04-07 09:35:27 -05:00
Sebastian Schneider
1e4b9ae5b7 fix(mobile): video player restarting when device rotates (#17362)
* fix(mobile): Video player restarting when device rotates

* use global key in state

* Implement suggestions from code review
2025-04-07 09:26:08 -05:00
Ruben Hensen
99cddf1fd6 feat: allow accounts with a quota of 0 GiB (#17413)
* Allow 0GiB quotas in user create/edit form, remove unused translations

* Make requireQuota check for null or 0

* Add unlimited quota change to the docs

* Fix user dto formatting

* Fix formating edit-user-form

* Regenerate open-api files

* Revert unnecessary i18n file changes

* Re-add newline en.json

* Resolve linting issues

* Fix formatting edit-user-form

* Re-add manifest
2025-04-07 09:22:56 -05:00
Weblate (bot)
30d33f968f chore(web): update translations (#17254)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bi/
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/el/
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/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
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/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ka/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
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/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/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
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/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Daniel Correa Lobato <daniel@lobato.org>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: GND <jehende@jehende.fr>
Co-authored-by: Gocha Gulua <gocha.gulua@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Leigh van der merwe <palitu822@gmail.com>
Co-authored-by: LennartWeinzierl <lennart.weinzierl@gmx.de>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Luis Peregrina <luis.a.peregrina@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Oleksandr Zhukov <aleksandr.a.zhukov@gmail.com>
Co-authored-by: Passawish Paktiwong <passawishp@outlook.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Ruben Hensen <ruben.hensen@protonmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stein-Aksel Basma <stein-aksel@basma.no>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tachibana Saza <tachibanasaza@proton.me>
Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Vin <k3kelm4vw@mozmail.com>
Co-authored-by: aks-cadesign <aks@cadesignbase.dk>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: late <late@users.noreply.hosted.weblate.org>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: przmkg <przemek@gasinski.eu>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-04-07 12:28:59 +01:00
Ben McCann
31ee19181a chore(web): switch to writable derived one more place (#17399) 2025-04-06 22:05:47 -05:00
shenlong
b58a450152 fix(mobile): prevent unnecessary reload on multi user timeline (#17418)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-06 22:04:13 -05:00
Zlendy
b87ba6865b fix(web): Video memories are played at 100% volume instead of respecting user preference (#17424) 2025-04-06 22:03:19 -05:00
Lorenzo Montanari
565cceb323 docs: fixed a wrong path in CLI docs page (#17369)
docs: fixed a wrong path in CLI page
2025-04-06 22:00:10 -05:00
Matthew Momjian
f096dd0cc0 fix(deployment): warning for database on network share (#17412)
Update example.env
2025-04-06 10:09:54 +02:00
Daniel Dietzler
a3c3f9cfcb fix: reset memories on logout (#17405) 2025-04-05 13:09:56 -04:00
Mert
7b6a4be30c chore: use valkey (#17396)
use valkey
2025-04-04 17:46:46 -05:00
martin
720189e2c2 fix: improve initial loading time (#17379) 2025-04-04 17:04:52 -04:00
shenlong
dfab32c8f2 fix(mobile): ignore invalid store keys (#17370)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 22:35:50 -05:00
shenlong
60174d662d fix(mobile): bump isar maxSize (#17372) 2025-04-03 21:49:50 -05:00
bo0tzz
8b6a765e12 chore: remove demo box spec from README.md (#17367) 2025-04-03 18:09:29 -04:00
Zack Pollard
2248a38567 fix: missing index and geodata import process uses normal table (#17343)
* chore: add geodata indexes to table definitions

* chore: rename incorrectly name geodata index

* fix: import into geodata places with correct index names
2025-04-03 21:32:33 +01:00
shenlong
97e52c5156 refactor(mobile): device asset entity to use modified time (#17064)
* refactor: device asset entity to use modified time

* chore: cleanup

* refactor: remove album media dependency from hashservice

* refactor: return updated copy of asset

* add hash service tests

* chore: rename hash batch constants

* chore: log the number of assets processed during migration

* chore: more logs

* refactor: use lookup and more tests

* use sort approach

* refactor hash service to use for loop instead

* refactor: rename to getByIds

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 14:42:35 -05:00
Mert
e8b4ac0522 fix(web): use original image if web compatible (#17347)
* use original image if web compatible

* add e2e

* fix shared link handling

* handle redirect in e2e

* fix size not being passed to thumbnail url

* test fullsize in e2e
2025-04-03 09:01:41 -05:00
Alex
548298b0c7 chore: post release tasks (#17341) 2025-04-03 08:47:52 -04:00
Zack Pollard
40cff2893c fix: metadata service init failure should halt server startup (#17356) 2025-04-03 12:35:39 +01:00
Abhinav Valecha
b621281351 feat(server): Avoid face match with people born after file creation #4743 (#16918)
* feat(server): Avoid face matching with people born after file creation date (#4743)

* lint

* add medium tests for facial recognition

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-02 10:37:26 -05:00
Snowknight26
4336afd6bf fix(web): fix thumbnail hover link position (#16762)
* fix(web): don't show a scrollbar when hovering over the last row of images on the search page

* Format code

* Fix asset selection z-index

* Remove anchor overlay on mouseover

* Fix a test

* Fix merge

* Fix overlays

* fix merge

* fix stack thumbs in asset viewer

* fix dimmed bounds, animation

* lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-04-02 10:30:41 -05:00
shenlong
5a456ef277 feat(mobile): sqlite (#16861)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* feat: drift

* pr feedback

* refactor: move common overrides to mixin

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-02 08:58:17 -05:00
renovate[bot]
5cb5fcbf62 fix(deps): update machine-learning (#17286) 2025-04-02 03:57:19 +00:00
Alex
95e3b15776 fix(web): padding (#17320) 2025-04-01 23:32:54 -04:00
Ben
50335dc363 fix(web): menu button size (#17321)
Adjusting the menu button size, to match match the other buttons in the navigation bar.
2025-04-01 22:25:17 -05:00
Ben
6e62c09d84 feat(web): expand/collapse sidebar (#16768)
* feat: expand/collapse sidebar

* fix: general PR cleanup

- add skip link unit test
- remove unused tailwind styles
- adjust asset grid spacing
- fix event propogation

* fix: cleaning up event listeners

* fix: purchase modal and button on small screens

* fix: explicit tailwind classes

* fix: no animation on initial page load

* fix: sidebar spacing and reactivity

* chore: reverting changes to icons in nav and account info panel

* fix: remove left margin from the asset grid after merging in new timeline

* chore: extract search-bar changes for a separate PR

* fix: add margin to memories
2025-04-01 21:12:04 -05:00
github-actions
00d3b8d83a chore: version v1.131.3 2025-04-01 22:27:52 +00:00
Mert
d911b76c08 fix(server): use stat instead of exifinfo for file date metadata (#17311)
* use stat instead of filecreatedate

* update tests

* unused import
2025-04-01 17:24:07 -05:00
shenlong
502854cee1 fix(server): remove stacks on stack.deleteAll (#17288)
* fix(server): delete all stacks on deleteAll

* remove unnecessary assets update

* generate sql

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-01 17:20:43 -05:00
Mert
59e5c82569 fix(server): full-size images not migrated or deleted correctly (#17308)
* fix file path logic

* update tests

* add empty array fallback just in case for now
2025-04-01 18:11:46 -04:00
Daimolean
e4b0c00885 fix(web): select all button displays incorrectly (#17305)
* fix(web): select all show incorrectly

* fix: lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-04-01 19:00:48 +00:00
Alex
946507231d fix(web): blank locale cause blank timeline to render (#17284)
* fix(web): blank locale cause blank timeline to render

* correct fix

* newline

* pr feedback
2025-04-01 18:58:11 +00:00
Alex
20ba800a50 fix(web): date time change reactivity (#17306)
* fix(web): date time change reactivity

* remove logs
2025-04-01 18:57:53 +00:00
Alex
f434e858ed fix(mobile): getAllByRemoteId return all assets on empty arguments value (#17263)
* chore: post release tasks

* fix(mobile): getAllByRemoteId return all assets if ids is empty
2025-04-01 08:59:21 -05:00
bo0tzz
3e03c47fbf fix: strip extra metadata when transcoding (#17297) 2025-04-01 08:58:59 -05:00
github-actions
9aa3850769 chore: version v1.131.2 2025-04-01 11:41:56 +00:00
renovate[bot]
628dcdeebf fix(deps): update typescript-projects (#17294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 10:58:55 +00:00
renovate[bot]
11bfde2aa8 chore(deps): update github-actions (#17282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 11:49:11 +01:00
renovate[bot]
69b1ac47ea fix(deps): update typescript-projects (#17287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:32:09 +02:00
renovate[bot]
4f81265694 chore(deps): update dependency @types/node to ^22.13.14 (#17283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:30:41 +02:00
renovate[bot]
3428a876c7 chore(deps): update dependency vite to v6.2.4 [security] (#17259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 00:36:54 +01:00
Alex
bd822657d3 chore: post release tasks (#17262) 2025-04-01 00:36:18 +01:00
Mert
9e7744a9ab fix(ml): healthcheck (#17274) 2025-03-31 19:23:40 -04:00
github-actions
7729fe80fa chore: version v1.131.1 2025-03-31 20:36:48 +00:00
martin
68e24ad168 fix: posix compliant command (#17264) 2025-03-31 16:35:02 -04:00
Jason Rasmussen
186c573565 fix: missing migration folder broke non-root setups (#17266) 2025-03-31 20:18:13 +00:00
github-actions
5b63b9fc8b chore: version v1.131.0 2025-03-31 18:41:13 +00:00
Eli Gao
5c80e8734b feat: original-sized previews for non-web-friendly images (#14446)
* feat(server): extract full-size previews from RAW images

* feat(web): load fullsize preview for RAW images when zoomed in

* refactor: tweaks for code review

* refactor: rename "converted" preview/assets to "fullsize"

* feat(web/server): fullsize preview for non-web-friendly images

* feat: tweaks for code review

* feat(server): require ASSET_DOWNLOAD premission for fullsize previews

* test: fix types and interfaces

* chore: gen open-api

* feat(server): keep only essential exif in fullsize preview

* chore: regen openapi

* test: revert unnecessary timeout

* feat: move full-size preview config to standalone entry

* feat(i18n): update en texts

* fix: don't return fullsizePath when disabled

* test: full-size previews

* test(web): full-size previews

* chore: make open-api

* feat(server): redirect to preview/original URL when fullsize thumbnail not available

* fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off

* refactor(server): AssetRepository.deleteFiles with Kysely

* fix(server): type of MediaRepository.writeExif

* minor simplification

* minor styling changes and condensed wording

* simplify

* chore: reuild open-api

* test(server): fix media.service tests

* test(web): fix photo-viewer test

* fix(server):  use fullsize image when requested

* fix file path extension

* formatting

* use fullsize when zooming back out or when "display original photos" is enabled

* simplify condition

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-31 13:24:28 -04:00
bo0tzz
a5093a9434 docs: separate upgrading page (#17257)
* docs: separate upgrading page

* chore: move "setup optional features" into postinstall

* docs: stronger backup warning in postinstall

* chore: link to upgrading page

* docs: reiterate breaking changes in upgrade doc

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-31 11:43:14 -05:00
Mert
637ad1fdcb docs: minor typo (#17258)
three -> two
2025-03-31 18:34:29 +02:00
Mert
6789c2ac19 feat(ml): better multilingual search with nllb models (#13567) 2025-03-31 11:06:57 -04:00
PathToLife
838a8dd9a6 feat(web): increase album collapse click area (#17213) 2025-03-31 09:45:30 -05:00
Brandon Wees
d71c5602c3 fix(server): Postgres error pretty printing (#17204)
* add patch-package to dev dependencies

this allows us to patch upstream packages without waiting for PRs to be merged (or not!). Patch-package does a pretty good job of notifying if upstream does a change to invalidate the patch (its a git patch under the hood).

* Patch implementation of https://github.com/porsager/postgres/pull/944

This PR has not been merged by upstream and helps produce verbose error messages when postgres fails to connect (usually incorrect credentials). This is in contrast to error messages such as

`TypeError: Cannot read properties of undefined (reading 'replace'), stack: TypeError: Cannot read properties of undefined (reading 'replace')`

* have postinstall only run when not installing a global package (such as immich-cli in the Docker build)
2025-03-31 09:34:43 -05:00
Mert
8c50e3e80e feat(server): consider JpgFromRaw2 tag for embedded previews (#17123)
* add jpgfromraw2

* unused catch
2025-03-31 09:17:57 -05:00
Jonathan Jogenfors
efcb1129ce fix(server): don't sync null date assets (#17247) 2025-03-31 09:16:53 -05:00
Jonathan Jogenfors
faabda4446 fix(server): multiple exclusion patterns (#17221) 2025-03-31 09:16:30 -05:00
Alex
b8b2898c87 fix(server): double extension when filename has uppercase extension (#17226)
* fix(server): double extension when filename has uppercase extension

* Proper tests
2025-03-31 09:16:04 -05:00
Ben McCann
b25914c2a5 chore: use writable derived in more places (#17248)
chore(web): use writable derived in more places
2025-03-31 09:15:52 -05:00
Zack Pollard
d613f15606 test: fix flaky user handle delete check medium test (#17253)
we can't run specifically the handleUserDeleteCheck tests concurrently due to one of the tests modifying the config in the shared database
if run concurrently you can get race conditions where the other tests pick up the change, even with resetting the config in the beforeEach
therefore the test that checks a delete actually happens, fails
there are many ways to solve this, disabling concurrency for the suite, forcing sequential tests for just handleUserDeleteCheck, increasing the delete test deletedAt to more than the custom duration tests deleteDelay
I applied all three of these. You could also force all the user tests to run in their own databases, but that feels overkill
2025-03-31 13:19:57 +01:00
hwang
a831876fdc fix: MAX_PARAMETERS_EXCEEDED error during person cleanup job (#17222)
* add batch size in sql delete,fix person cleanup error: ERROR [Microservices:{}] Unable to run job handler (backgroundTask/person-cleanup): Error: MAX_PARAMETERS_EXCEEDED: Max number of parameters (65534) exceeded

* add chunked decorator to delete

* chore: prettier formatting fixes

---------

Co-authored-by: hwang3419 <“hwang.iit@gmail.com”>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-31 11:30:56 +00:00
PathToLife
09f4476f97 feat: improve performance for GET /api/album & /api/album/:id (#17124)
* fix(server) optimize number of sql calls for GET /api/albums

remove unnecessary join for getMetadataForIds
remove separate call to getLastUpdatedAssetForAlbumId

* fix(server) remove unnecessary getLastUpdatedAssetForAlbumId call for GET /api/album/:id

also remove getLastUpdatedAssetForAlbumId query as it is no longer referenced

* fix(server): correct lastModifiedAssetTimestamp return type + formatting and typing

* chore(server): address type issue with tests found via npm:check

tests & lint still pass before this commit.
2025-03-31 11:28:41 +00:00
Daniel Dietzler
238c151ac3 chore: finish migrating eslint config files; bump unicorn (#17200) 2025-03-31 12:18:25 +01:00
bo0tzz
e4f83680d9 feat: use my.immich.app for externalDomain fallback (#17209)
* feat: use my.immich.app for externalDomain fallback

This is probably more useful than localhost.

* chore: remove port param

* fix: update expected value in tests

* fix: update expected value in e2e
2025-03-31 12:08:41 +01:00
Daniel Dietzler
74f7fd4b53 chore: add language requests from weblate (#17236) 2025-03-31 10:48:41 +01:00
Weblate (bot)
f4dbfd856e chore(web): update translations (#17115)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translation: Immich/immich

Co-authored-by: Abhijeet Viswam <abhijeetviswam@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Henrik Sommerfeld <henrik@sommerfeld.nu>
Co-authored-by: Karsten Dambekalns <karsten@dambekalns.de>
Co-authored-by: Miro Rýzek <miroslav.ryzek@gmail.com>
Co-authored-by: Mohd Nader <mohd.nader@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nergis <me@nergis.dev>
Co-authored-by: Utkarsh Prajapati <utkarshprap@gmail.com>
Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
Co-authored-by: grgergo <gergo_g@proton.me>
2025-03-31 09:47:08 +00:00
Jason Rasmussen
55a3c30664 feat: kysely migrations (#17198) 2025-03-29 09:26:24 -04:00
renovate[bot]
6fa0cb534a fix(deps): update dependency @opentelemetry/context-async-hooks to v2 (#17031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-28 20:51:01 +01:00
Ben McCann
9f0dbfc150 chore(web): update to newer persisted store package name (#17094) 2025-03-28 20:40:57 +01:00
Saschl
6419ac74af fix: update renderlist after asset deleted (#16786) 2025-03-28 18:34:19 +00:00
Yaros
d2bcf5d716 fix(mobile): pause background video play (#17032)
* fix(mobile): prevent background video playback

* fix: logic for tracking app state

* chore: move lifecycle handler in separate file

* chore: replace useState with useRef

* chore: useOnAppLifecycleStateChange

* fix: removed print statement
2025-03-28 10:32:25 -05:00
shenlong
c8331f111f fix(mobile): prefer remote orientation (#17177)
* fix(mobile): prefer remote orientation

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-28 10:24:31 -05:00
Jason Rasmussen
4b4bcd23f4 feat: schema diff sql tools (#17116) 2025-03-28 10:40:09 -04:00
Ben McCann
3fde5a8328 feat: map globe view, style hot reloading and load lag fixed (#17079)
* chore: upgrade svelte-maplibre and enforce runes

* feat: maplibre-gl 5, globe view, style hot reloading, fast map markers

* fix: remove location-pin class that wasn't being used

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-28 14:08:54 +00:00
Joren Guillaume
cc3ea32cd2 docs: update folder support for app in README.md (#17191)
Update folder support for app in README.md
2025-03-28 09:35:36 +00:00
Ben McCann
431cf281da chore(web): update typescript-eslint (#17093) 2025-03-28 00:04:31 -04:00
Alex
8f786fd7dd fix(web): form reactivity (#17183) 2025-03-27 19:58:49 -05:00
Alex
3e73765375 fix(web): don't show newly uploaded asset in inapplicable views (#17184) 2025-03-27 19:45:50 -04:00
Alex
411521b21d chore: post release tasks (#17179) 2025-03-27 19:41:22 -04:00
renovate[bot]
e163808348 fix(deps): update typescript-projects (#17080)
* fix(deps): update typescript-projects

* fix: otel

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-27 22:33:58 +00:00
Ben McCann
411772123f chore(web): remove unused props (#17141) 2025-03-27 23:12:14 +01:00
Mert
84c35e35d6 chore(ml): installable package (#17153)
* app -> immich_ml

* fix test ci

* omit file name

* add new line

* add new line
2025-03-27 19:49:09 +00:00
Mert
f7d730eb05 chore(ml): remove exporter (#17182)
* remove exporter code

* update gha
2025-03-27 14:48:02 -04:00
Mert
16e0166d22 docs: evaluate models on xtd-10 and flickr30k (#17159)
update docs
2025-03-27 11:30:51 -05:00
github-actions
43f8f473e9 chore: version v1.130.3 2025-03-27 15:54:30 +00:00
shenlong
cc393b2b7b fix(mobile): oauth-mobile-first-login (#17173)
invalidate ref

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-27 15:49:55 +00:00
Alex
6341962de4 fix(web): better touch device detection (#17144)
* fix(web): better touch device detection

* variable name
2025-03-27 10:43:56 -05:00
Min Idzelis
c26b28f6a4 fix: bug with svelte gestures (#17154)
* fix: bug with svelte gestures

* lint
2025-03-27 08:51:52 -05:00
shenlong
c72c82c401 fix(mobile): faster device album refresh after initial sync (#17170)
fix(mobile): faster device album refresh after fresh sync

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-27 08:47:05 -05:00
Alex
fecf3809a6 fix(server): album count does not account for assets without exif (#17150)
* fix(server): album count doesn't accounted for assets without exif

* sql
2025-03-26 21:24:22 -05:00
Mert
619bd72de9 docs: mention rknn among image options (#17156)
mention rknn
2025-03-26 19:05:48 -04:00
Jason Rasmussen
fd4a5f71b5 fix: broken album page (#17149) 2025-03-26 18:59:23 -04:00
github-actions
2f8725c66f chore: version v1.130.2 2025-03-26 15:34:54 +00:00
Jonathan Jogenfors
9fbd6369b9 fix(server): check asset against multiple import paths (#17128)
* fix sql logic

* refactor: map import paths into not or sql statements

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-26 10:10:53 -05:00
Snowknight26
c547d849d9 fix(web): prevent comb box dropdowns from staying open when clicking on labels (#17119)
fix(web): prevent combobox dropdowns from staying open when clicking on label
2025-03-26 08:58:00 -05:00
renovate[bot]
6ba94ac2f2 fix(deps): update machine-learning (#17078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-26 02:04:41 +00:00
Alex
dfb0626c91 fix(web): default search to context (#17118)
* fix(web): default search to context

* one liner

* Refactor
2025-03-25 17:57:12 -05:00
Alex
392ce7deb2 fix(web): albums display order again (#17117) 2025-03-25 22:14:00 +00:00
Mert
75df8fc10e refactor(server): bulk update exif (#17109)
* bulk update exif

* update sql

* update tests

* check job queeuing in test
2025-03-25 21:24:24 +00:00
github-actions
4cf7c55680 chore: version v1.130.1 2025-03-25 20:25:01 +00:00
Alex
b8ff93a3c9 chore: post release tasks (#17097) 2025-03-25 21:22:30 +01:00
Alex
37eb70c1eb fix(web): albums display order (#17106)
* fix(web): albums display order

* ergonomic

* perf ergonomic

* miss 1
2025-03-25 20:21:38 +00:00
renovate[bot]
aa4d6405f4 chore(deps): update base-image to v202503251114 (major) (#17085)
* chore(deps): update base-image to v202503251114

* fix: geocoding changes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-25 20:15:02 +00:00
Alex
ae447542a4 fix(web): asset navigation (#17104) 2025-03-25 15:00:30 -05:00
renovate[bot]
90f21d9047 chore(deps): pin dependencies (#17077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:59 +00:00
renovate[bot]
567a92fe77 chore(deps): update dependency vite to v6.2.3 [security] (#17092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:25 +00:00
Weblate (bot)
8d6f5a2da9 chore(web): update translations (#16807)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/af/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
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/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
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/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
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/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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Agostino Pit <scheccia@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Andreas Resch <weblate@resch.io>
Co-authored-by: Basilis Pantelis <bpantelis10@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Dawider10 <dawider110@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Focron <eliaelmas55@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jean-Philippe Jodoin <jpjodoin@gmail.com>
Co-authored-by: Johan Ohly <johanohly@gmail.com>
Co-authored-by: Jørgen Næss Berge <jorgen.n.berge@gmail.com>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Knud Bachmann Røn <knudbachmannron@proton.me>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: MSDNicrosoft <wang3311835119@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nicolás McCarthy <nicomcc24@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Ryan Gleeson <gleeson.ryanj@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tomas Svec <svec.tomas@gmail.com>
Co-authored-by: Umesh Verma <umesh.verma236@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: beckett <beckett.blakey@proton.me>
Co-authored-by: johnwoo_nl <pb@lunenburg-productions.nl>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: yousaf465 <yousaf465@gmail.com>
Co-authored-by: 灯笼 <gh_denglong@163.com>
2025-03-25 18:05:23 +00:00
bo0tzz
69662e1ab4 chore: shared renovate configuration (#16903)
* chore: shared renovate configuration

dep: https://github.com/immich-app/.github/pull/2

* chore: move typescript-projects and schedule to shared config

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-25 14:56:54 +00:00
github-actions
42b1efb679 chore: version v1.130.0 2025-03-25 13:48:45 +00:00
Snowknight26
b8bc11b0d9 fix(web): fix escape key not closing video player after seeking (#16860)
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
2025-03-25 13:42:23 +00:00
Ben McCann
91065db3ff chore: migrate previously missed file to Svelte 5 (#17074) 2025-03-24 19:44:05 -04:00
Alex
c14668bdd4 chore(mobile): translation (#17073)
chore(mobile): translation update
2025-03-24 22:16:10 +00:00
Yaros
9757f70064 fix(web): not autoplay after moving playhead on paused video (#17038)
fix(web): prevent autoplay after moving playhead
2025-03-24 16:55:46 -05:00
Min Idzelis
4a0045db44 feat(web): support long-press selection on mobile web (#16906)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint

* feat(web): support long-press selection on mobile web

* use svelte-gestures

* fix test

* Bug fix

* globalThis

* format

* revert generator

* Testing

* bad merge

* Fix typo/tap on thumbnail

* feat: shrink header on small screens (#16909)

* feat(web): shrink header on small screens

* fix test

* test

* Fix test

* Revert user-page-layout chagne

* Restore icons sizes, make consistent, improve logo responsiveness

* remove 4 more pix, lint

* lint

* chore

---------

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

* Revert "Testing"

This reverts commit 442f11c9e1.

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-24 16:36:36 -05:00
Yaros
a651a4bf0e chore(mobile): search field in separate widget (#16977)
* chore(mobile): search field in separate widget

* fix: removed unnecessary use of context

* chore: minor styling tweak

* fix: controller not bound

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-24 14:40:33 -05:00
Alex
8bc80076bb fix(mobile): show new local assets in offline mode (#16817)
fix: show new local assets in offline mode
2025-03-24 16:56:18 +00:00
Luigi311
89656472ef fix(mobile): fallback authentication client model/type to unknown (#17059)
mobile: fallback authentication client model/type to unknown

Add fallback for client model/type if device is not ios or android

Signed-off-by: Luis Garcia <git@luigi311.com>
2025-03-24 11:26:05 -05:00
Yaros
d9c6ec06e5 chore(mobile): suffix to app name on debug builds (#17044) 2025-03-24 11:23:07 -05:00
Mert
4bfef2460a docs: model benchmarks (#17036)
* model benchmarks

* minor fixes

* formatting

* docs build

* maybe fix reference

* clarify optimal

* use emojis

* wording

* wording

* clarify optimal wording

* bolding

* more detailed instructions

* clarify edge case fix

* early exit in dim loop
2025-03-24 12:02:33 -04:00
shenlong
ad151130f9 chore: rename user api interface (#17062)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-24 11:00:08 -05:00
Damiano Ferrari
a77608e36b fix(mobile): selectedIcon not set when the device is landscape (#17027) 2025-03-24 10:50:49 -05:00
Nicholas Flamy
9e015c7f97 feat: lint workflow files and others files in .github (#16914)
* add npm prettier dep and format script to .github folder

* initial work on prettier formatting test

* attempt index notation

* change name of .github job to be valid

* another use of index notation

this is getting overcomplicated

* Change job ID to `github-files-formatting` and chane the name to `.github Files Checks`

* Change job name to `.github Files Formatting`

* Update Makefile with .github module and `filter-out`s

* run prettier formatting as added in this PR
2025-03-24 10:49:18 -05:00
Damiano Ferrari
df8ba21b7d fix(mobile): Make icons consistent (all outlined) (#17028)
* fix(mobile): Make icons consistent (all outlined)

* fix(mobile): make `date_range` icon outlined
2025-03-24 10:10:15 -05:00
Yaros
a285b1898e fix(mobile): platform-dependent share icons & label (#17034)
fix: platform-dependant icons
2025-03-24 08:36:15 -05:00
Mert
6a8e38042d fix(ml): add librknnrt.so in rknn image (#17022)
add librknnrt.so
2025-03-21 16:57:14 -04:00
Min Idzelis
55b52ecbec feat: mobile-web improvements - scrubber (#16856)
* feat: mobile-web improvements - scrubber

* lint

* cruft

* lint

* fix: thumb style

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-21 18:00:24 +00:00
Alex
b5d5c40c69 fix(web): update stack state in timeline (#17021)
* fix(web): update stack state in timeline

* js docs

* fix: handle state update from unstack action from gallery viewer

* use navigate in View Stack notification

---------

Co-authored-by: Snowknight26 <Snowknight26@users.noreply.github.com>
2025-03-21 12:42:36 -05:00
Snowknight26
b00da18e84 fix(web): timeline renders nothing with an invalid asset scroll target (#16994)
* fix(web): fix asset grid showing nothing with an invalid asset target

* Deduplicate

* Scroll to position where appropriate

* a bit cleaner

* fix: lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-21 08:40:57 -05:00
Ben
3c87341902 fix(web): clicking away closes context menu (#16989)
* fix(web): clicking away closes context menu

* fix: use pointerdown event instead

* Revert "fix: use pointerdown event instead"

This reverts commit 0d2cf47194.
2025-03-21 08:39:41 -05:00
Alex
bcd9248b43 fix(web): timeline regression 2 (#16982)
* fix(web): timeline renders nothing after archiving in asset viewer

* fix(web): timeline renders nothing after archiving in asset viewer

* fix: ensure geometry updated when performing bulk action on all

* fix: album assets selection
2025-03-20 22:30:27 -05:00
Alex
dbc279f843 fix: gallery viewer sliding window offload assets (#17016)
* fix: gallery viewer sliding window offload assets

* fix: update bottom sliding window

* do not use negative

* Calculate offset before gallery

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-03-20 22:30:01 -05:00
Alex
21954939cf chore: remove limit in memory generation (#16920)
* chore: remove limit in memory generation

* generate sql

* chore: assets limit
2025-03-20 13:31:51 -05:00
renovate[bot]
d537f2c2d1 chore(deps): update github-actions (#16965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 13:17:36 -05:00
Snowknight26
1820c0aa0d fix(web): fix View in Timeline not working for stacked assets (#16993)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-03-20 13:17:14 -05:00
Yaros
0d805a1f5b fix(web): removed merge person with itself (#16987)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-20 15:25:42 +00:00
Alex
f5e6042eb1 fix: extend e2e test cookie expiration date (#17007)
fix: extend e2e test cookie
2025-03-20 16:17:55 +01:00
renovate[bot]
8de71ddaf3 chore(deps): update dependency flutter to v3.29.2 (#16963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 10:58:57 -05:00
Min Idzelis
7075c5b393 feat(web): make asset grid row height responsive (#16970)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint
2025-03-19 10:57:44 -05:00
Min Idzelis
9398b0d4b3 fix: regression in select-all (#16969)
* bug: select-all

* set->[] in interaction store, clear select-all on cancel

* feedback

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-19 15:55:50 +00:00
renovate[bot]
1a0a9ef36c chore(deps): update base-image to v202503182202 (major) (#16968)
chore(deps): update base-image to v202503182202

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 00:28:32 -04:00
Dmitry Vakhnenko
ce456709b5 fix(web): reset selection state when adding assets to a album (#16880)
* fix(web): cancel multiselect before adding assets to album

* chore: format with prettier

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-19 00:11:58 +00:00
renovate[bot]
bc90678276 fix(deps): update machine-learning (#16966) 2025-03-18 23:07:21 +00:00
renovate[bot]
217a90bf61 chore(deps): update actions/download-artifact digest to b14cf4c (#16934)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:10:19 -05:00
Yaros
62ba8c3e71 fix(web): date alignment on timeline (#16961) 2025-03-18 21:55:36 +00:00
renovate[bot]
564724b398 fix(deps): update machine-learning (#16960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 20:55:43 +00:00
renovate[bot]
cedeba8723 chore(deps): update prom/prometheus docker digest to 502ad90 (#16956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 16:48:52 -04:00
bo0tzz
1d994333a6 fix: duplicated steps in docker workflow (#16952)
Not sure how that happened, maybe a bad merge conflict resolution?
2025-03-18 16:39:30 -04:00
renovate[bot]
db8155f738 fix(deps): update typescript-projects (#16945)
* fix(deps): update typescript-projects

* fix: very weird variables

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-18 20:29:21 +00:00
renovate[bot]
4d723f4b56 chore(deps): update dependency types-setuptools to v76 (#16949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 15:02:25 -04:00
renovate[bot]
898b3e75c2 fix(deps): update machine-learning (#16935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:09:46 +00:00
bo0tzz
8c2d02c362 chore: run docs and cli builds on all PRs (#16954)
All the other workflows already do this.
2025-03-18 11:55:18 -05:00
Dmitry Vakhnenko
d7a6e78bf0 fix(server): /api/stacks does not handles primaryAssetId query param (#16868)
fix(server): add missing validation decorator
2025-03-18 11:54:50 -05:00
Viharm
8723f585e0 chore(docs): clarify missing ':ro' tag in volume mount as a warning (#16877)
📝 Clarify missing ':ro' tag in volume mount as a warning

Changed description in comment of example docker compose file to clarify it as a warning that Immich may delete it, instead of sounding as if it is ok to delete.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 16:50:59 +00:00
Mert
9f46ba8eb4 fix(server): set pixel format when scaling and not tonemapping (#16932)
set pixel format when scaling and not tonemapping
2025-03-18 11:42:09 -05:00
Andreas
fe19f9ba84 fix(web): asset selection on memories page is broken (#16759)
* 16712: Proper intialisation of the memory store to avoid loading up duplicate object refs of the same asset.

* 16712: Add auth to memory mapping so isFavorite is actually return correctly from the server.

* 16712: Move logic that belongs in the store into the store.

* 16712: Cleanup.

* 16712: Fix init behaviour.

* 16712: Add comment.

* 16712: Make method private.

* 16712: Fix import.

* 16712: Fix format.

* 16712: Cleaner if/else and fix typo.

* fix: icon size mismatch

* 16712: Fixed up state machine managing memory playback:
* Updated to `Tween` (`tweened` was deprecated)
* Removed `resetPromise`. Setting progressController to 0 had the same effect, so not really sure why it was there?
* Removed the many duplicate places the `handleAction` method was called. Now we just called it on `afterNavigate` as well as when `galleryInView` or `$isViewing` state changes.

* 16712: Add aria tag.

* 16712: Fix memory player duplicate invocation bugs. Now we should only call 'reset' and 'play' once, after navigate/page load. This should hopefully fix all the various bugs around playback.

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-18 11:34:09 -05:00
renovate[bot]
b609f35841 chore(deps): update base-image to v20250318 (major) (#16950)
* chore(deps): update base-image to v20250318

* chore

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 11:07:11 -05:00
shenlong
9cf3b88f80 refactor(mobile): remove int user id (#16814)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* fix: migration

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-18 11:05:37 -05:00
Min Idzelis
e96ffd43e7 feat: timeline performance (#16446)
* Squash - feature complete

* remove need to init assetstore

* More optimizations. No need to init. Fix tests

* lint

* add missing selector for e2e

* e2e selectors again

* Update: fully reactive store, some transitions, bugfixes

* merge fallout

* Test fallout

* safari quirk

* security

* lint

* lint

* Bug fixes

* lint/format

* accidental commit

* lock

* null check, more throttle

* revert long duration

* Fix intersection bounds

* Fix bugs in intersection calculation

* lint, tweak scrubber ui a tiny bit

* bugfix - deselecting asset doesnt work

* fix not loading bucket, scroll off-by-1 error, jsdoc, naming
2025-03-18 09:14:46 -05:00
shenlong
dd263b010c refactor(mobile): use user service methods (#16783)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): refactor to use user service methods

* fix: late init error

* fix: lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 08:32:33 -05:00
renovate[bot]
6c2985df26 chore(deps): update dependency @types/node to ^22.13.10 (#16944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 12:15:07 +01:00
Mert
2b37caba03 feat(ml): rocm (#16613)
* feat(ml): introduce support of onnxruntime-rocm for AMD GPU

* try mutex for algo cache

use OrtMutex

* bump versions, run on mich

use 3.12

use 1.19.2

* acquire lock before any changes can be made

guard algo benchmark results

mark mutex as mutable

re-add /bin/sh (?)

use 3.10

use 6.1.2

* use composite cache key

1.19.2

fix variable name

fix variable reference

aaaaaaaaaaaaaaaaaaaa

* bump deps

* disable algo caching

* fix gha

* try ubuntu runner

* actually fix the gha

* update patch

* skip mimalloc preload for rocm

* increase build threads

* increase timeout for rocm

* Revert "increase timeout for rocm"

This reverts commit 2c4452f5d132198ed381a7b262b4a5cab5114b5f.

* attempt migraphx

* set migraphx_home

* Revert "set migraphx_home"

This reverts commit c121d3e48754b3bce100636f8d666deec58a44b7.

* Revert "attempt migraphx"

This reverts commit 521f9fb72dbe506dc6cb8faeb6494817d87265c6.

* migraphx, take two

* bump rocm

* allow cpu

* try only targeting migraphx

* skip tests

* migraph 

* known issues

* target gfx900 and gfx1102

* mention `HSA_USE_SVM`

* update lock

* set device id for rocm

---------

Co-authored-by: Mehdi GHESH <mehdi.ghesh@hotmail.fr>
2025-03-17 21:08:19 +00:00
Jason Rasmussen
6a40aa83b7 refactor: better types for getList and getDeletedAfter (#16926) 2025-03-17 15:32:12 -04:00
Yaros
93907a89d8 fix(mobile): age calculation & formatting (#16833) 2025-03-17 13:51:17 -05:00
renovate[bot]
3ce8608662 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 2ef2373 (#16925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 14:07:09 -04:00
Abhinav Valecha
d0e283f687 feat(server): version command for immich-admin #9611 (#16924)
* feat(server): Add version command for immich-admin #9611

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-03-17 17:57:59 +00:00
Yaros
f8b40188e2 fix(mobile): change share icons for consistency (#16904) 2025-03-17 12:34:58 -05:00
renovate[bot]
9105e696bf chore(deps): pin github action dependencies (#16923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 17:25:14 +00:00
bo0tzz
0a8135dde4 fix: docker workflow for rknn (#16922)
* fix: specify gha runner for rknn

* fix: remove s from platforms

* fix: merge job for rknn
2025-03-17 18:13:43 +01:00
Jason Rasmussen
0bb95544e5 chore: pin github action digests (#16875) 2025-03-17 11:30:13 -05:00
Yoni Yang
14c3b99c0f feat(ml): ML on Rockchip NPUs (#15241) 2025-03-17 12:04:08 -04:00
shenlong
1e184a70f1 refactor: cleanup background service (#16855)
refactor: background service

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-17 08:48:22 -05:00
Jason Rasmussen
9a4495eb5b refactor: use more immich ui buttons (#16840) 2025-03-14 09:38:06 -04:00
Jason Rasmussen
8ad95b368b feat: use immich ui components for dialog component (#16839) 2025-03-14 09:37:56 -04:00
shenlong
b778a86c99 refactor(mobile): move user service to domain (#16782)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): move user service to domain

* fix: timeline not visible on album selection page

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-13 22:20:26 -05:00
Jason Rasmussen
a65ce2ac55 refactor: immich logo assets (#16850) 2025-03-13 18:05:08 -04:00
Jason Rasmussen
f69d7e7bad chore: web cleanup (#16849) 2025-03-13 18:04:21 -04:00
ExceptionsOccur
858d1e9d9b fix(mobile): back gesture in asset selection page from an album (#16449)
* fix(mobile): the page for adding photos to the album cannot be navigated back using gestures #16409

* First-time return gesture adds the feature to cancel all current selections

---------

Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
2025-03-13 11:37:05 +05:30
renovate[bot]
a1a61f19eb chore(deps): update typescript-projects (#16795)
* chore(deps): update typescript-projects

* fix: aria

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-12 23:20:26 +01:00
Jason Rasmussen
996ffed5eb fix: immich ui toggles and switches (#16834)
* fix: immich ui toggles and switches

* Update web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte

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

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 16:25:27 -05:00
Jason Rasmussen
2d7a94ce23 feat: better library rename UX (#16837) 2025-03-12 16:00:16 -05:00
Jason Rasmussen
72a7be26c0 refactor: use immich/ui button component in user settings (#16836) 2025-03-12 15:56:55 -05:00
shenlong
77fad86b82 chore(mobile): bump dependency versions (#16823)
* chore(mobile): bump dep version

* reorganize files

* sort

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 14:33:11 +00:00
Yaros
52d90a8280 fix(web): fixed formatting of video length (#16829)
* fix(web): fixed formatting of video time

* shortened the condition
2025-03-12 09:18:43 -05:00
shenlong
d1c8fe5303 refactor: user entity (#16655)
* refactor: user entity

* fix: add users to album & user profile url

* chore: rebase fixes

* generate files

* fix(mobile): timeline not reset on login

* fix: test stub

* refactor: rename user model (#16813)

* refactor: rename user model

* simplify import

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>

* chore: generate files

* fix: use getAllAccessible instead of getAll

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 08:56:56 -05:00
Snowknight26
a75718ce99 fix(web): update search results when searching from info panel (#16729)
* fix(web): update search results when searching from info panel

* Prevent double search when using search bar

* Format/lint

* Fix infinite loading on intersect

* Remove redundant function
2025-03-11 17:23:25 -05:00
Nicholas Flamy
d72d715f6b fix(docs): logo not loading dark theme variant in production (#16820)
fix logo not loading dark theme variant in production
2025-03-11 17:13:25 -05:00
Jason Rasmussen
16fd19994b refactor: use factory and kysely types for partner repository (#16812) 2025-03-11 16:29:56 -04:00
Mert
83ed03920e fix(ml): dev environment dependencies (#16815)
use /opt/venv
2025-03-11 13:39:33 -05:00
bo0tzz
9c825e15de fix: run preview label remove job on PR close (#16811)
🤦
2025-03-11 15:26:09 +00:00
Andreas
b8acae2f21 feat(web): Add keyboard shortcut selection on grid (#16713)
* 15712: Added keyboard shortcuts for opening add to album modal and highlighting/selecting an album to add to.

* 15712: Re-factored logic from template code into script. Extracted new album button into separate cmponent.

* 15712: Document new keyboard shortucts now that they work everywhere.

* 15712: Extract some constants/helper functions.

* 15712: Missing comma.

* 15712: Pulled logic out into separate unit testable class.

* 15712: Added a unit test.

* 15712: Move the modal back up to keep the github PR happy.

* 15712: PR feedback - renamed typescript files and switch to class bind directive.

* 15712:Move selection modal into correct package.

* 15712: Better naming of module and files.

* 15712: Add asset highlight using arrow keys.

* 15172: Add escape behaviour everywhere.

* 15712: Don't allow highlighting past start or end.

* 15712: Clear the highlight on changes to the component state.

* 15712: Use focus to track highlighted element.

* 15712: Rename highlight -> focussed.

* 15712: Better naming.

* 15712: Cleanup.

* 15712: Cleanup & simplify.

* 15712: bugfix for clicking on button.

* 15712: Cleanup.

* 15712: Rollback unnecessary changes.

* 15712: Add unit test.

* 15712: Add thumbnail unit test.

* 15712: Prettier.

* 15712: Fix merge issue.

* 15712: Add shortcut info.

* 15712: Fix linter.
2025-03-11 10:18:14 -05:00
Alex
c80afea468 feat(web): better person naming interface (#16631)
* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface
2025-03-11 10:08:52 -05:00
shenlong
6caa11d079 chore(mobile): use path provider foundation (#16804)
* chore(mobile): use path provider foundation

* chore: update podfile

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-11 09:26:43 -05:00
shenlong
653fa3f0b1 chore(mobile): add orientation tests for exif (#16806)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 09:25:46 -05:00
Alex
2be8b6c16d chore: ignore correct build folder (#16808) 2025-03-11 14:22:05 +00:00
Jonathan Jogenfors
6bb0aa217c fix(server): set unit test timezone to UTC (#16805) 2025-03-11 10:19:33 -04:00
bo0tzz
04fd83d9da chore: shared suffix for docker tags (#16727) 2025-03-11 12:25:10 +00:00
renovate[bot]
ba9e3715f0 chore(deps): update base-image to v20250311 (major) (#16803)
chore(deps): update base-image to v20250311

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-11 12:24:31 +00:00
shenlong
ac1b2d2fab chore(mobile): generated files and ci check (#16798)
* chore(mobile): more generated files

* ci: verify generated files in mobile are up-to-date

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 12:22:31 +00:00
Lorenzo Montanari
d7e0f0e70e feat(web): exposed a job to manually trigger database backup procedures (#16622)
* feat(web): exposed a new job to create a manual database backup

* chore(server): added a new test case

* chore(server): moved job to backup db into the create job popup

* remove irrelevant change

* openapi

* chore: formatting

* docs: trigger backup documentation

---------

Co-authored-by: Lorenzo Montanari <13736036+l0ll098@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
2025-03-11 11:30:43 +00:00
Snowknight26
decc878267 feat(web): show full date when hovering over photos date groups (#16561)
* fix(web): Update asset grid date group titles to show full date

* Fix formatting
2025-03-11 11:18:29 +00:00
Zack Pollard
e0a09f2ea0 fix: weblate pre-job not running (#16802)
* chore: add debug step to weblate pre-job

* fix: weblate enforce lock missing needs for pre-job
2025-03-11 11:10:00 +00:00
sarunas-zilinskas
b9ecdf9286 chore: change k which stood for 1000 to more understandable notation of kbit/s (#16734) 2025-03-11 10:54:42 +00:00
Weblate (bot)
4c719cc3bb chore(web): update translations (#16252)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/af/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
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/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
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/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
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/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/mr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nn/
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/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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
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/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Ahmad Amin <ahmadamindev@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Aniruddha <aniruddha@aniruddhas.com>
Co-authored-by: Bader Alqahtani <baq100@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Björn Boström <weblate@boztrom.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Carlo_Mava <carlomavaracchio@gmail.com>
Co-authored-by: Cem TURKER <forumcemturker@gmail.com>
Co-authored-by: Cohinem <twitch9ofe@gmail.com>
Co-authored-by: ConfusedAlex <alex@confusedalex.dev>
Co-authored-by: Damian Krysta <damian@krysta.dev>
Co-authored-by: Daniel A <aquino.daniel1994@ikmail.com>
Co-authored-by: Eric Lehmann Llevat <lemmi93@googlemail.com>
Co-authored-by: Eskuero <3skuero@gmail.com>
Co-authored-by: Etienne-Bdt <etienne.bardet@gmail.com>
Co-authored-by: FarSniper <ozmatlik@gmail.com>
Co-authored-by: Felipe Simões <felipebouabci@gmail.com>
Co-authored-by: Filip <fjokovic0@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Georgi Iliev <georgi.iliev533@outlook.com>
Co-authored-by: Hoi <Hoihoi@users.noreply.hosted.weblate.org>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Héctor Martínez Juste <hectorzin@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: JohannesBoanerges <jb@johannes-boanerges.de>
Co-authored-by: Jonathan Jogenfors <jonathan@jogenfors.se>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Juan Palacios <mastergeek.juan@gmail.com>
Co-authored-by: Julius969 <juliusdjorup@proton.me>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonardo Patti <leonardo.patti90@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Macgyver <macgyver@users.noreply.hosted.weblate.org>
Co-authored-by: MaliciousSpark <fijalkowskikonras@gmail.com>
Co-authored-by: Marius Kavoliunas <kavoliunas.m@gmail.com>
Co-authored-by: Mateusz <account.srrr3@slmail.me>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Medallyon <mbups98@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nir Cohen <nir10146@gmail.com>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Pavol Valko <xpaulos2@gmail.com>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Pixiii <imapixel00@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Sandro <account@donner-nsu.de>
Co-authored-by: Santiago <santiwever@hotmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sheridan Jegels <sheridanjegels@gmail.com>
Co-authored-by: Stijn <gielisstijn@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Toine Rademacher <hi@toine.zip>
Co-authored-by: Torin Wu <xuan329269@gmail.com>
Co-authored-by: Vesa Jylhä <vesa.jylha@gmail.com>
Co-authored-by: Vladimir <vladimir.stoev1015@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: atsza661 <ats.altmets@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: francesco stigliano <fra.stigliano@gmail.com>
Co-authored-by: icerocker <icerocker@users.noreply.hosted.weblate.org>
Co-authored-by: mattix7771 <mattione7@gmail.com>
Co-authored-by: pierrebengtsson <pierre.bengtsson@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: szelek <janek.szelewicz@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Øyvind Hovden <oyvhov@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-03-11 10:48:34 +00:00
shenlong
81df812f56 fix(mobile): calculate isFlipped for exif from db (#16797)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 10:41:47 +00:00
Nicholas Flamy
f0f0056fe3 feat(docs): highlight active version in version switcher (#16790)
* docs: highlight active version in version switcher

* Add comment explaining workaround
2025-03-11 10:41:12 +00:00
renovate[bot]
48dddb78d4 chore(deps): update docker/setup-qemu-action action to v3.6.0 (#16794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-11 10:37:36 +00:00
Nicholas Flamy
5d86e6d2d3 fix(web): update old discord logo to new one (#16789)
* fix: update discord svg path and add viewbox

* fix formatting
2025-03-10 22:46:32 -05:00
Alex
75fa305e98 chore: flutter 3.29.1 (#16730)
* update dependencies

* update flutter version reference

* update flutter version reference

* update AndroidManifest with flutter_web_auth_2

* chore: lock file flutter version

* fix: ios build
2025-03-10 21:46:36 -05:00
renovate[bot]
8cd5aec4c5 chore(deps): update dependency @types/node to ^22.13.9 (#16792)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 22:43:16 -04:00
renovate[bot]
cb489a1aa9 chore(deps): pin ghcr.io/astral-sh/uv docker tag to 562193a (#16791) 2025-03-10 22:23:50 -04:00
Jason Rasmussen
1382b27349 refactor: repository mocks (#16785) 2025-03-10 16:52:44 -04:00
Jason Rasmussen
1b35400043 chore: remove unused package (#16777) 2025-03-10 14:50:32 -04:00
Jason Rasmussen
a96bba4b26 feat: sync assets, partner assets, exif, and partner exif (#16658)
* feat: sync assets, partner assets, exif, and partner exif

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

* refactor: remove duplicate where clause and orderBy statements in sync queries

* fix: asset deletes not filtering by ownerId

---------

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-10 12:05:39 -04:00
Jason Rasmussen
e97df503f2 refactor: api key spec to use factories (#16776) 2025-03-10 12:04:35 -04:00
renovate[bot]
fe959b2f05 fix(deps): update machine-learning (#16594) 2025-03-10 14:48:53 +00:00
Yaros
f794c3e0df feat(web): show birthdate on person page (#16772)
* feat(web): show birthdate on person page

* shorten null check

Co-authored-by: Jason Rasmussen <jason@rasm.me>

* directly use birthDate

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-10 14:47:44 +00:00
Alex
57272904d6 chore(mobile): upgrade maplibre (#16739)
* chore(mobile): upgrade maplibre

* chore(mobile): upgrade maplibre

* color
2025-03-10 09:41:43 -05:00
Jensen H
2496bd7514 docs: update unraid installation steps (#16766)
Update unraid.md

Current steps omit this key step, which results in the postgresql docker complaining about the data folder not being empty. (It tries to use the `/mnt/user/appdata` folder as its application data folder.
2025-03-10 08:56:42 +00:00
Nicholas Flamy
c6ede48e59 fix(server): set the dev server restart policy of the dev server container to match the other containers (#16753)
set the restart policy of the dev server container to match the other containers
2025-03-09 22:25:03 -05:00
Adam O'neill
70a08707d2 feat(web): remember search context (#16614)
* Retain search context in LocalStorage.

* Remove debug logging

* Prettier

* Added QueryType and VALID_QUERY_TYPES to $lib/constants

* Prettier

* Renamed VALID_QUERY_TYPES to fit the codestyle.

Ran prettier

* show current search type on search bar

* fix: linting

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-09 22:20:25 -05:00
Snowknight26
2f8e89c7ec feat(server): read Android and Sony video camera make/model (#16678)
* feat(server): read Android and Sony video camera exif data

* Remove a logger line
2025-03-09 22:20:11 -05:00
David Bourgault
9870ad9687 fix(server): adjust type of person.birthDate (#16628)
The API currently does not respect the documentation when returning a
person's birthDate. The doc/swagger says it will be of "YYYY-MM-DD"
format but the string is a full ISO8601-with-tz string. This causes
issue #16216 because the <input> tag is strict about supported value
formats.

I believe this was introduced by #15242 which switched some queries from
TypeORM to Kysely for the person repository. TypeORM does not parse
date, but our Kysely configuration does (explicitely).

This commits updates the types to represent both possibilities and ensure
the API always returns the correct format.
2025-03-09 21:32:05 -05:00
Lukas
097749d872 fix(web): add labels to memory lane buttons (#16664)
* fix(web): add labels to memory lane buttons

* use generic button labels
2025-03-09 21:31:55 -05:00
Yaros
bdabea4030 feat(mobile): locate in timeline (#16722)
* feat(mobile): view in timeline

* fix: throwing error on scroll

* only show option if not in photos tab
2025-03-09 21:31:34 -05:00
Mert
6da77600e5 chore(ml): uv (#16725)
* poetry to uv

* update ci

* remove caching

* add typeshed to dev

* no need for `--non-interactive`

* move backends to extras

* oopsie

* update ci
2025-03-09 21:30:16 -05:00
Daniel Dietzler
573d9a7733 fix: 🍪 packages confusion (#16735)
fix: cookie packages confusion
2025-03-09 21:03:10 -05:00
Corentin Hatte
2aac679185 fix(web): Update people-card favorite position (#16746)
Update people-card favorite position

Move heart icon a bit more inward to mak it more visible
2025-03-10 01:32:32 +00:00
Alex
82624b0979 chore(mobile): upgrade riverpod (#16742) 2025-03-09 20:30:58 -05:00
Alex
17c5094719 chore(mobile): upgrade flutter_web_auth_2 (#16741)
* chore(mobile): upgrade flutter_web_auth_2

* pod file
2025-03-09 20:26:37 -05:00
Matthew Momjian
051431b757 fix(docs): edge case when restoring dump that is unreadable as current user (#16758)
* new gunzip setup

* windows
2025-03-09 20:26:00 -05:00
Yaros
6c5f99c47a feat(mobile): person age on photo properties (#16728)
* feat(mobile): person age on photo properties

* switch to using placeholder
2025-03-08 23:02:40 +01:00
Jason Rasmussen
1e127ae3a1 refactor: migrate library spec to factories (#16711) 2025-03-08 13:44:36 -05:00
Jason Rasmussen
fd46d43726 chore: remove unused file (#16707) 2025-03-07 22:47:27 -06:00
Yaros
5252c013ec fix(mobile): fix notification icon not displaying properly (#16710) 2025-03-07 19:08:53 -06:00
Jason Rasmussen
3f06a494a9 refactor: queue asset deletes via stream (#16706) 2025-03-07 22:22:57 +00:00
renovate[bot]
086d8a448a fix(deps): update typescript-projects (#16597)
* fix(deps): update typescript-projects

* chore: update server lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-07 21:20:45 +00:00
bo0tzz
8ace44fb95 feat: log before running migrations (#16703)
* feat: log before running migrations

* fix: it's called log not info

It should be called info...

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-07 21:15:06 +00:00
Jason Rasmussen
ce74f765b1 refactor: memory stub (#16704) 2025-03-07 16:03:34 -05:00
Yaros
b0bf4e4fff feat(mobile): search on people page (#16696) 2025-03-07 14:43:32 -06:00
Jason Rasmussen
2d106755f6 refactor: convert activity stub to a factory (#16702) 2025-03-07 15:20:04 -05:00
Jason Rasmussen
f82786a297 feat: use stream for template migrations (#16700) 2025-03-07 14:30:01 -05:00
Yaros
c12986d38c fix(mobile): remain on albums tab after album deletion (#16698)
fix(mobile): remain on albums after album deletion
2025-03-07 13:25:07 -06:00
Matthew Momjian
19c40e3be9 fix(docs): remove /api from README (#16692)
* no api

* change internationalized
2025-03-07 08:58:18 -05:00
Jonathan Jogenfors
9959755dda refactor(server): use constant for external library batch size (#16685) 2025-03-07 11:29:06 +00:00
Lukas
fdf2331c82 fix(web): hide scroll right button when scrolled to the right in memory lane (#16656)
fix(web): hide scroll right button when scrolled to the right
2025-03-06 20:50:56 -06:00
Lukas
e03d7f888e fix(web): remove margin on last memory item (#16665) 2025-03-07 02:50:16 +00:00
Matthew Momjian
2eeed6524f fix(github): consistent folder format for PR template (#16669)
consistent formatting for folders
2025-03-06 20:32:10 -05:00
Jason Rasmussen
d45fa491ce refactor: stream asset ids for library queue jobs (#16666) 2025-03-06 20:22:17 -05:00
Matthew Momjian
5c82c485d7 feat(server): normalize extensions in storage template (#16667)
* normalize and lowercase extensions

* un const

* do not change ext before stripping off old one

* braces
2025-03-06 18:02:28 -05:00
Sergey Katsubo
feb65bf5a7 docs: reading existing face tag metadata is supported currently (#16662)
Fix FAQ: reading existing face tag metadata is supported currently
2025-03-06 20:42:14 +00:00
Jason Rasmussen
2cdbb0a37c refactor: database repository (#16593)
* refactor: database repository

* fix error reindex check

* chore: remove WIP code

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-06 13:33:24 -05:00
shenlong
fe931faf17 refactor: exif entity (#16621)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-06 11:58:24 -06:00
Arno
4ebc25c754 feat(mobile): Folder View for mobile (#15047)
* very rough prototype for folder navigation without assets

* fix: refactored data model and tried to implement asset loading

* fix: openapi generator shadowing query param in /view/folder

* add simple alphanumeric sorting for folders

* basic asset viewing in folders

* rudimentary switch sorting order

* fixed reactivity when toggling sort order

* Fixed trailing comma

* Fixed bad merge conflict resolution

* Regenerated open-api

* Added rudimentary breadcrumbs

* Fixed linting problems

* feat: cleanup

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-06 17:27:43 +00:00
Mert
deb399ea15 refactor(server): use exiftool for file date metadata (#16453)
* use exiftool for file date metadata

* handle tag not existing in exifinfo (?)

* update medium tests

* fix typo

* set file size too

* set file size only if undefined
2025-03-06 16:47:12 +00:00
Yaros
d01b7a0d67 feat(web): aspect ratio of memory cards (#16652)
Fix aspect ratio of memory cards
2025-03-06 15:24:01 +00:00
Jonathan Jogenfors
3af26ee94a feat(server): library refresh go brrr (#14456)
* feat: brr

---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-06 16:00:18 +01:00
Mert
bc61497461 refactor(server): group async calls in metadata extraction (#16450)
* group async calls

use debugFn

no need to change mock

* check call count in tests
2025-03-06 08:56:35 -06:00
Alex
1ed1a0a1fc feat(mobile): new sync (#16556)
* feat(mobile): new sync

* refactor

* refactor

* refactor

* refactor

* refactor

* refactor

* update analysis option

* remove database operation

* pr feedback
2025-03-06 08:44:28 -06:00
Lukas
2875303b4c feat(web): allow horizontal scrolling in memory lane (#16647) 2025-03-06 08:37:11 -06:00
rrrockey
d84009648e refactor(server): replace switch statement in sendFile with Record lookup (#16630)
* refactor cache control handling in server/utils/file.ts

* add ability to null CacheControl.NONE

* Cache control handling comment

* Added comment to file.ts

This comment provides a better understanding of what the cacheControlHeader is doing.

* Update file.ts

Added comments

* Update server/src/utils/file.ts

* fix comments in file.ts

* run prettier with --write to fix formatting

---------

Co-authored-by: pnleguizamo <pnleguizamo@gmail.com>
Co-authored-by: drew-kearns <dkearns@iastate.edu>
Co-authored-by: Sierra (Izumi) Brown <119357873+SierraIBrown@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-06 12:46:37 +01:00
Nick Huang
fc2df05190 docs: fix png extension typo in supported formats table (#16636)
Update supported-formats.md
2025-03-06 11:44:06 +00:00
Savely Krasovsky
69b5365965 feat: enable PMTiles protocol support (#16629)
This patch enables PMTiles protocol for MapLibre-GL. Protocol allows to fetch tiles from a single file.  This drastically simplifies the process to self-host own tiles.
2025-03-06 10:50:14 +00:00
Alex
c110c9b00e chore(mobile): post release task (#16623) 2025-03-05 14:54:56 -06:00
Yaros
b241a80339 feat(mobile): Navigate back on memories (#16545)
* Navigate back on memories

* Fixes crash on navigating back
2025-03-05 14:42:43 -06:00
github-actions
31dd15ce8a chore: version v1.129.0 2025-03-05 19:47:50 +00:00
Alex
6108587c8b fix(web): show tags timeline (#16617)
* fix(web): show tags timeline

* fix(web): show tags timeline
2025-03-05 13:36:56 -06:00
Alex
3e50f668d9 feat(mobile): add catalan i18n (#16616)
* feat(mobile): Add Catalan

* refactor

* fix: load correct file

* chore: remove unused language files
2025-03-05 11:47:31 -06:00
Daniel Dietzler
9b82617e22 docs: 60k stars! (#16618)
60k stars! 
2025-03-05 11:40:45 -06:00
Alex
76cb32d8d0 chore(mobile): translations update (#16615)
chore(mobile): translation update
2025-03-05 16:33:41 +00:00
Yaros
e8f3348833 fix(mobile): Fixed zh-Hans not persisting (#16608)
Fixed zh-Hans not persisting
2025-03-05 09:56:00 -06:00
Zack Pollard
9922c8de59 fix: storage template failure after re-upload and previous fail (#16611)
fix: storage template breaks when files are re-uploaded after a move failure
2025-03-05 15:00:37 +00:00
shenlong
3f4bbab4eb fix: isar crash on resume from app detach (#16599)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-05 08:28:40 -06:00
Jason Rasmussen
2da9e3152b refactor: download service (#16600) 2025-03-05 08:38:23 -05:00
Min Idzelis
56b85f7479 fix(web): fix lost scrollpos on deep link to timeline asset, scrub stop (#16305)
* Work in progress - super quick asset store->state

* bugfix: deep linking to timeline, on scrub stop

* format, remove stale

* disable test, todo: fix test

* remove unused import

* Fix merge

* lint

* lint

* lint

* Default to non-wasm layout

* lint

* intobs fix

* fix rejected promise

* Review comments, static import wasm

* Back to dynamic

* try top-level-await

* back to the first solution, with more finesse

* comment out wasm for now

* back out the wasm/thumbhash/thumbnail changes

* lint

* Fully remove wasm

* lockfile

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-04 20:34:53 -06:00
waclaw66
8b43066632 fix(mobile): .well-known usage (#16577)
fix: .well-known

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-04 20:25:57 -06:00
bo0tzz
20acdcd884 chore: run docker workflow on non-main PRs (#16582) 2025-03-05 02:15:17 +00:00
Jonathan Jogenfors
22d348beca feat(server): e2e for missing jobs (#15910)
* feat: test face detection

* Add duplicate and smart search fixes and tests

* do e2e instead

* Remove ML e2e jobs
2025-03-04 20:44:31 -05:00
shenlong
3b0af1c8a9 fix(mobile): do not pause audio on app start (#16596)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-04 16:00:01 -06:00
Mert
61c8237a4d fix(ml): set face detection threshold correctly in locust (#13419)
* set minScore correctly

* cleanup

* remove outdated tag score
2025-03-04 20:52:07 +00:00
Jason Rasmussen
d740f0283a chore: no more immortal PRs (#16595) 2025-03-04 15:06:41 -05:00
Jonathan Jogenfors
4ada28ac99 fix(server): check updateLibraryIndex for zero (#16585)
* fix(server): check updateLibraryIndex for zero

* Update web/src/routes/admin/library-management/+page.svelte

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-03-04 20:00:10 +00:00
Jason Rasmussen
63c01b78e2 refactor: test utils (#16588) 2025-03-04 16:15:41 +00:00
renovate[bot]
1423cfd53c chore(deps): update ghcr.io/immich-app/base-server-dev docker tag to v20250304 (#16580)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 15:39:34 +00:00
Snowknight26
867eec86f5 fix(web): Update menu titles to be more consistent (#16558) 2025-03-04 12:55:54 +00:00
Alex
86e8effd8e fix(mobile): incorrect memories with timezone (#16562) 2025-03-04 12:54:54 +00:00
Jonathan Jogenfors
49d393216a fix(server): fix import path truthiness check (#16570) 2025-03-04 12:54:12 +00:00
renovate[bot]
75c9f63757 chore(deps): update typescript-projects (#16573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 12:53:28 +00:00
Kofi
63984890df docs: clean up environment variables formatting & grammar (#16555)
docs: clean up environment variables formatting & grammar - Just going through the docs and noticed some inconsistent capitalization and minor grammar issues. Fixed them up while having my Monday coffee :) Nothing major, but makes the docs a bit more polished.
2025-03-04 05:00:27 +00:00
Jason Rasmussen
1356468c38 fix: reset/regenerate memories (#16548)
fix: reset memories
2025-03-03 23:48:05 -05:00
renovate[bot]
c23c53bf6f fix(deps): update machine-learning (#16560) 2025-03-04 01:42:35 +00:00
renovate[bot]
0dcfc43461 chore(deps): update node (#16538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 14:31:34 -05:00
Jason Rasmussen
d1fd0076cc refactor: migration tag repository to kysely (#16398) 2025-03-03 18:41:19 +00:00
Zack Pollard
ff19502035 feat: qr code for new shared link (#16543) 2025-03-03 13:40:41 -05:00
renovate[bot]
6ef069b537 chore(deps): update github-actions (#16539)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 18:39:15 +00:00
Matthew Momjian
a03e999bde fix(docs): info on preloading ML models (#16452)
info on preload
2025-03-03 18:39:02 +00:00
aviv926
ad1ba4be5f docs: better facial recognition cluster guide (#14911)
* Better Facial Recognition Clusters

* Add information about the guide

* Update docs/docs/features/facial-recognition.md

Co-authored-by: Felix Bühler <Stunkymonkey@users.noreply.github.com>

* PR Feedback

---------

Co-authored-by: Felix Bühler <Stunkymonkey@users.noreply.github.com>
2025-03-03 18:33:32 +00:00
Alessandro Baroni
f89e74181b fix(web): delete action closes asset viewer in asset view (#15469)
fixes #14647
2025-03-03 18:24:37 +00:00
Eli Gao
e2c34f17ba feat(cli): watch paths for auto uploading daemon (#14923)
* feat(cli): watch paths for auto uploading daemon

* chore: update package-lock

* test(cli): Batcher util calss

* feat(cli): expose batcher params from startWatch()

* test(cli): startWatch() for `--watch`

* refactor(cli): more reliable watcher

* feat(cli): disable progress bar on --no-progress or --watch

* fix(cli): extensions match when upload with watch

* feat(cli): basic logs without progress on upload

* feat(cli): hide progress in uploadFiles()

* refactor(cli): use promise-based setTimeout() instead of hand crafted sleep()

* refactor(cli): unexport UPLOAD_WATCH consts

* refactor(cli): rename fsWatchListener() to onFile()

* test(cli): prefix dot to mocked getSupportedMediaTypes()

* test(cli): add tests for ignored patterns/ unsupported exts

* refactor(cli): minor changes for code reviews

* feat(cli): disable onFile logs when progress bar is enabled
2025-03-03 13:05:32 -05:00
Zack Pollard
23b1256592 ci: weblate checks should always run, should skip on en.json (#16544) 2025-03-03 17:12:26 +00:00
Yaros
7bbc1d9f68 feat(web): Video memories on web (#16500)
* Video memories on web

* switched mixed up strings
2025-03-03 09:54:26 -06:00
renovate[bot]
8b24c31d20 fix(deps): update typescript-projects (#16540)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 09:38:24 -06:00
shenlong
7f61ac6983 chore(mobile): fix store.put type def (#16517)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-03 09:11:13 -06:00
shenlong
4db8f0c666 refactor(mobile): move timeline methods to timeline repo (#16526)
* refactor: move timeline calls to timeline repo

* refactor: review changes

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-03 09:10:09 -06:00
renovate[bot]
3d6a6f77a8 chore(deps): update dependency eslint-plugin-svelte to v3 (#16532)
* chore(deps): update dependency eslint-plugin-svelte to v3

* chore: linting

* chore: rebase

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-03 14:24:26 +00:00
Mert
5698f446f7 refactor(server): link live photos as part of metadata extraction instead of queueing job (#16390)
* link live photos helper instead of job

* update test

* queue storage template migration

* queue in onDone

* remove link live photos job
2025-03-03 09:19:36 -05:00
renovate[bot]
eb74fafb00 chore(deps): update dependency globals to v16 (#16534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 14:11:44 +00:00
Zack Pollard
24da25dbbf ci: don't check weblate lock on chore/translations and add success job (#16533) 2025-03-03 13:22:33 +01:00
renovate[bot]
9b842d4cca chore(deps): update tensorchord/pgvecto-rs:pg14-v0.2.0 docker digest to 739cdd6 (#16530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 12:13:38 +00:00
renovate[bot]
a99bd94717 fix(deps): update dependency ua-parser-js to v2 (#14301)
* fix(deps): update dependency ua-parser-js to v2

* fix: breaking changes from ua-parsed-js major update

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-03 12:01:40 +00:00
renovate[bot]
4b568dcbb3 chore(deps): update dependency black to v25 (#16033)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 11:57:46 +00:00
renovate[bot]
12ab56c885 chore(deps): update prom/prometheus docker digest to 6927e09 (#16529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 11:52:22 +00:00
renovate[bot]
eed6465b41 chore(deps): update grafana/grafana docker tag to v11.5.2 (#16301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 11:51:44 +00:00
renovate[bot]
5f6c16080b chore(deps): update docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0 docker digest to 739cdd6 (#16528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 11:51:13 +00:00
Alex
a2aab1f373 fix: don't use public keyword in migration query (#16514)
Co-authored-by: Zack Pollard <zack@futo.org>
2025-03-03 11:40:14 +00:00
bo0tzz
8e076ecfe4 feat: weblate checks workflow (#16251) 2025-03-03 11:39:53 +00:00
Zack Pollard
fe702ba6d7 feat: partner sync (#16424)
feat: partner CUD sync
2025-03-03 11:05:30 +00:00
Jonathan Jogenfors
869839f642 feat(server): library cleanup from ui (#16226)
* feat(server,web): scan all libraries from frontend

* feat(server,web): scan all libraries from frontend

* Add button text
2025-03-02 21:29:02 -06:00
Justin Cichra
8885e3105e chore: reword backup_manual_in_progress (#16513)
fix(i18n): reword backup_manual_in_progress

Split "sometime" into "some time".
2025-03-03 03:27:20 +00:00
bo0tzz
6e51c4ec71 chore: add extra note to no-dupes checkbox (#16499) 2025-03-02 21:02:36 -06:00
knechtandreas
6bf2e8dbcb feat: add album keyboard shortcuts (#16442)
* 15712: Added keyboard shortcuts for opening add to album modal and highlighting/selecting an album to add to.

* 15712: Re-factored logic from template code into script. Extracted new album button into separate cmponent.

* 15712: Document new keyboard shortucts now that they work everywhere.

* 15712: Extract some constants/helper functions.

* 15712: Missing comma.

* 15712: Pulled logic out into separate unit testable class.

* 15712: Added a unit test.

* 15712: Move the modal back up to keep the github PR happy.

* 15712: PR feedback - renamed typescript files and switch to class bind directive.

* 15712:Move selection modal into correct package.

* 15712: Better naming of module and files.
2025-03-02 13:15:00 +00:00
Yaros
366f23774a fix(web): Default to context search on web (#16485)
Default to context search on web
2025-03-02 13:06:15 +00:00
Yaros
fd5e931617 fix(mobile): Updated formatting of server address in networking (#16483)
* Updated formatting of server address in networking

* fallback for undefined endpoint
2025-03-02 06:58:05 -06:00
shenlong
d8d87bb565 chore(mobile): rename log enum to lowercase (#16476)
* chore(mobile): rename log enum to lowercase

* chore(mobile): do not abbreviate

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-02 06:30:48 -06:00
Lukas Jost
6cc1978b2d fix(web): Open huggingface.co link on settings page in new tab (#16470)
fix(web): Open huggingface on settings page in new tab
2025-03-01 23:02:56 +00:00
luzpaz
506d2d0f81 fix(web): fix typos (#16466)
Found via codespell
2025-03-01 16:51:50 -06:00
Yaros
f13d13b2ea fix(web): Fixed people list overflowing in advanced search (#16457)
* Fixed people list overflowing in search

* styling: better fix

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-01 20:34:57 +00:00
Thomas Laroche
2510684bf7 fix(web): unable to download live photo as anonymous user (#16455) 2025-03-01 14:07:19 -06:00
luzpaz
c8eef5ad4d fix(mobile): fix typos (#16456)
Found via codespell
2025-03-01 20:06:47 +00:00
bo0tzz
0cb3dc6211 chore: add 'not duplicate' checkbox to issue template (#16462) 2025-03-01 14:05:36 -06:00
Alex
f11080cc2d chore(mobile): post release task (#16437) 2025-02-28 21:09:09 -06:00
Matthew Momjian
efcf773ea0 feat(server): Shortened asset ID in storage template (#16433)
* Update storage-template.service.ts

* Update supported-variables-panel.svelte

* docs example

* Update storage-template-settings.svelte
2025-02-28 16:04:34 -05:00
github-actions
dc143046e3 chore: version v1.128.0 2025-02-28 18:54:08 +00:00
Jason Rasmussen
e684062569 fix: memories off by one (#16434) 2025-02-28 12:51:28 -06:00
Desmond Cox
5c0538e52c fix(server): stringify error log parameter to ensure correct overload (#16422)
* fix(server): stringify error log parameter to ensure correct overload

The intended error(message, stack, context) overload is only selected if context is a string.

* formatter
2025-02-28 11:50:00 -06:00
Jason Rasmussen
84cf0d1670 fix: duplicate memories (#16432) 2025-02-28 17:49:29 +00:00
Jonathan Jogenfors
bfcde05b1c chore(server): trash e2e cleanup (#16423) 2025-02-28 12:45:30 -05:00
Mert
b3b15e9b61 fix(server): include deleted assets if searching offline assets (#16417)
include deleted assets if searching for offline assets
2025-02-28 09:23:18 -06:00
Zack Pollard
819e56d9ca fix: user delete sync query sort by id (#16420) 2025-02-28 09:22:36 -06:00
shenlong
9a98712db7 fix(mobile): background backup failing due to store (#16418)
fix: background backup failing due to store

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-02-28 07:38:51 -06:00
Alex
a185e06399 fix(server): follow logs level setting (#16415) 2025-02-28 00:35:48 -05:00
Calum Dingwall
f2be9f7ad1 fix(web): person favorite icon bad placement (#16412)
move favorite person icon to top left

fixes #16003

Co-authored-by: Calum Dingwall <caburum@users.noreply.github.com>
2025-02-27 22:15:37 -06:00
Alex
5c879acd5b fix(server): don't show assets that no longer associate with a face (#16404) 2025-02-27 17:02:00 -06:00
shenlong
28c664c769 refactor(mobile): log service (#16383)
refactor: log service

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-02-27 15:18:49 -05:00
Jason Rasmussen
fbd85a89e0 refactor: logger (#16393) 2025-02-27 14:59:50 -05:00
Alex
1c86293035 chore(mobile): update analysis option (#16396)
chore-update-analysis-option
2025-02-27 18:35:28 +00:00
shenlong
4a9d80298b fix(mobile): bootstrap store inside isolates (#16392)
fix: bootstrap store inside isolates

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-27 18:01:36 +00:00
Alex
362feb1e62 feat(web): face tagging dialog enhancement (#16395) 2025-02-27 11:49:07 -06:00
Etienne
5503bf7a60 fix: improve contrast on disabled input field in light mode (#16368) (#16382) 2025-02-27 17:20:03 +00:00
Jonathan Jogenfors
d20e2e268a fix(server): don't reimport files more than once (#16375)
* fix(server) don't reimport files more than once

* fix: test

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-02-27 16:45:16 +00:00
Mert
a708649504 fix(server): skip stacked assets in duplicate detection (#16380)
* skip stacked assets in duplicate detection

* update sql

* handle stacking after duplicate detection runs
2025-02-27 10:16:13 -06:00
Tom Graham
a808b8610e fix(server): Fix delay with multiple ml servers (#16284)
* Prospective fix for ensuring that known active ML servers are used to reduce search delay.

* Added some logging and renamed backoff const.

* Fix lint issues.

* Update to use env vars for timeouts and updated documentation and strings.

* Fix docs.

* Make counter logic clearer.

* Minor readability improvements.

* Extract  skipUrl logic per feedback, and change log to verbose.

* Make code harder to read.
2025-02-27 10:14:09 -06:00
Alex
c70c9067b0 refactor(mobile): backup provider (#16360)
* refactor(mobile): backup provider

* refactor(mobile): backup provider
2025-02-27 09:56:23 -06:00
Alex
082471dfd9 chore(mobile): post release task (#16349) 2025-02-27 09:46:34 -06:00
Alex
9a098b4658 fix(web): storage template incorrect example (#16367) 2025-02-27 09:46:20 -06:00
immich-tofu[bot]
9d705097e8 chore: modify .github/FUNDING.yml 2025-02-27 14:28:08 +00:00
Mert
6050485ad8 feat(server): set exiftool process count (#16388)
exiftool concurrency control
2025-02-27 09:24:40 -05:00
Zack Pollard
fb907d707d refactor: use new updateId column for user CUD sync (#16384) 2025-02-27 09:22:02 -05:00
Mert
7d6cfd09e6 fix(server): don't expose source types in face creation api (#16381)
* don't expose source types in face creation api

* update open-api

* remove source type reference from web
2025-02-27 17:17:07 +03:00
Zack Pollard
967c69317b feat: updateId uuidv7 column for all entities with updatedAt (#16353) 2025-02-27 12:55:22 +00:00
Curtis Lowder
128d653fc6 fix(web): update search modal to not jump around (#16308)
* fix(web): update search modal to not jump around

Search People selection will change size while loading. This causes the
search modal to jump around as the people load in.

* loading spinner size

* remove unsued code

---------

Co-authored-by: cwlowder <me@curtislowder.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-02-27 03:06:41 +00:00
David Bourgault
8b69114924 feat(web): remember last chosen map location when editing (#16366)
Uses a global store to remember the last location chosen by a user when
editing asset locations. This fixes an annoyance when adding location
data to multiple assets in a row and having to zoom in the same area
everytime.
2025-02-26 21:01:29 -06:00
David Bourgault
4b55888d16 fix: ensure manually tagged faces have proper source type (#16364)
immich-app/immich#16062 added manual face tagging and deletion, but did
not add a new 'SourceType'. The create faces would default to
'machine-learning' which is incorrect, and has the annoying downside
that they will be wiped when the 'Refresh Faces' job is run.

Handling of non-machine-learning faces was previously added in
immich-app/immich#6455. This PR simply extends it to the new manually
tagged faces.
2025-02-26 20:53:21 -06:00
Alex
8fbd650483 refactor(mobile): refactor user provider (#16358) 2025-02-26 17:04:43 -06:00
Alex
c778516ce2 fix(web): tag people in video (#16351) 2025-02-26 12:55:32 -06:00
Adam O'neill
2969e25ff7 fix: websockets calling on_new_release across all sessions upon new websocket connection. (#16339)
* Implemented possible fix for the new_release window re-appearing across all active sessions when a new websocket connection is established.

* Reverted websocket.ts

Changes not needed to websocket.ts - was bouncing between ideas, current implementation doesn't need this to change.

* Prettier test format.

* Spelling (Aknowledged --> Acknowledged)
2025-02-26 17:48:18 +00:00
luzpaz
c055e1aefe docs: fix typos (#16352)
Found via `codespell -q 3 -S "./i18n,./docs/package-lock.json,./readme_i18n,./mobile/assets/i18n" -L afterall,nd,renderd`
2025-02-26 17:21:27 +00:00
github-actions
5f7f88ff17 chore: version v1.127.0 2025-02-26 15:18:50 +00:00
Zack Pollard
5053130e35 fix: sync set ack validation (#16320) 2025-02-26 09:35:51 -05:00
Alex
4ef7eb56a3 fix(server): memory assets order (#16325) 2025-02-25 19:10:52 -06:00
Alex
8ecc67a364 feat(mobile): use memories api (#16329) 2025-02-25 19:10:31 -06:00
Alex
90f7c3d9ae chore(mobile): translations update (#16328)
chore(mobile): translation update
2025-02-25 15:06:40 -06:00
Alex
d0381fddec refactor(mobile): render list (#16303)
* refactor(mobile): render list 2

* wip

* wip: asset selection page

* remove render_list provider

* remove dead code

* yaml format

* remove unused file

* woop woop more clean up

* woop woop more clean up 2

* fix: album selection doesn't load instantly
2025-02-25 11:33:48 -06:00
Jason Rasmussen
7c851893b4 feat: medium tests for user and sync service (#16304)
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-02-25 16:31:07 +00:00
RoseyWasTaken
ae61ea7984 Update community-guides.tsx (#16316)
* Update community-guides.tsx

Added an additional card linking to a remote access guide

* Update docs/src/components/community-guides.tsx

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-25 15:52:07 +00:00
Alex
bbcaee82f0 chore(web): revert wasm new justify layout (#16277)
* Revert "fix(web): justify layout import (#16267) "

This reverts commit ec58e1065f.

* Revert "fix(web): dynamically import wasm module (#16261)"

This reverts commit 4376fd72b7.

* Revert "feat(web): use wasm for justified layout calculation (#15524)"

This reverts commit 3925445de8.

* Revert "fix(web): viewport reactivity, off-screen thumbhashes being rendered (#15435)"

This reverts commit 52f21fb331.
2025-02-25 09:39:56 -06:00
Nicholas Flamy
16266c9f5a docs: #15988 follow-up: Use URL constructor to fix Version Switcher URL double slash issue (#16014)
* concat location properties and use URL constructor to fix issues

* remove slashes from old version urls

* remove versions 1.125.0 and 1.125.4 that don't have docs archives
2025-02-25 09:34:46 -06:00
Alex
6c64a6dab8 chore(web): Revert slight fade in animation when open/close asset-viewer (#16262) (#16306)
Revert "feat(web): slight fade in animation when open/close asset-viewer (#16262)"

This reverts commit 57829cee26.
2025-02-25 09:27:34 -06:00
ExceptionsOccur
c0fe98fe27 feat(mobile): photos group by date in album page view (#16272)
* feat(mobile): photos group by date in album page view

* fix: format

---------

Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-25 15:10:08 +00:00
Alex
579321251f refactor(mobile): partners provider (#16299)
* refactor(mobile): partners provider

* update analysis option

* update analysis option
2025-02-25 08:52:33 -06:00
Nicholas Flamy
392f9f205c fix(web): thumbnail playback stops when hovering over icon then video (#16302)
fix thumbnail playback when hovering over icon then video
2025-02-24 21:35:46 -06:00
Alex
57829cee26 feat(web): slight fade in animation when open/close asset-viewer (#16262) 2025-02-24 16:38:07 -06:00
Yamagishi Kazutoshi
4be2351d21 fix(web): use anonymous function in setTimeout in ponyfill of requestIdelCallback (#16264) 2025-02-24 16:37:58 -06:00
Nicholas Flamy
edbcf17e3a fix(docs): tsconfig issues in IDE (VSCode) - migrate tsconfig extends file to current docusaurus implementation (#16282)
fix tsx IDE (VSCode) issues in docs by migrating tsconfig extends from the Docusaurus tsconfig 2.X package to the 3.X package
2025-02-24 13:24:28 -06:00
Mert
eef74ee0ba chore: bump justified layout library (#16298)
bump
2025-02-24 10:28:34 -06:00
Alex
ec58e1065f fix(web): justify layout import (#16267)
* fix(web): justify layout import

* remove dead code
2025-02-23 02:38:08 +03:00
Mert
4376fd72b7 fix(web): dynamically import wasm module (#16261)
* dynamically import wasm module

* remove unused import
2025-02-22 12:16:06 -06:00
Jason Rasmussen
e4b6efc1f5 fix: cross site scripting issue on /share pages (#16255) 2025-02-22 11:32:53 +00:00
waclaw66
caea3a0812 fix: vite > 6.0.8 allowedHosts (#16257)
fix(web): vite > 6.0.8 allowedHosts

Enables any host for development environment same as for vite <= 6.0.8
2025-02-21 23:29:58 -05:00
Jonathan Jogenfors
9c2c85cbe1 feat(web): remove library type column (#16254) 2025-02-21 18:00:16 -05:00
Jason Rasmussen
d350022dec feat: persistent memories (#15953)
feat: memories

refactor

chore: use heart as favorite icon

fix: linting
2025-02-21 12:31:37 -06:00
Weblate (bot)
502f6e020d chore(web): update translations (#15559)
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 6Leoo6 <leo.takacs@yahoo.com>
Co-authored-by: Aldis Bārbelis <ceriemardon@gmail.com>
Co-authored-by: Alessandro Iaselli <alessandroias@gmail.com>
Co-authored-by: Andrea <andreadetomasi12@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: CRY WHY <a.pandagok1@gmail.com>
Co-authored-by: Casper Ong <casper10528@gmail.com>
Co-authored-by: Changhwan Kim <kimch061279@gmail.com>
Co-authored-by: Chris <6st6s7rgw@mozmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: CodingDK <CodingDK@users.noreply.github.com>
Co-authored-by: Daniel <daniel@nikul.in>
Co-authored-by: Daniel A <aquino.daniel1994@ikmail.com>
Co-authored-by: Daniel Correa Lobato <daniel@lobato.org>
Co-authored-by: David Lam <dlam06@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Eitan Nargassi <eitan1112@gmail.com>
Co-authored-by: Fabian Tubbing <fabian@tubbing.nl>
Co-authored-by: Farid <farid.for@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Francesco Borio <borio.francesco@gmail.com>
Co-authored-by: HanYuan <lion70332@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jan Schwebel <jan@schwebel.de>
Co-authored-by: Jirapan <jirapan_yankhan@hotmail.com>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Karol Klimczak <karol.klimczak.1.kk@gmail.com>
Co-authored-by: Laurentiu <laurfb@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonardo Patti <leonardo.patti90@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Lukas Hamm <ideallygrey@tuta.io>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Mark Rieder <markrieder111@gmail.com>
Co-authored-by: Martin Popovski <martinkozle@yahoo.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Max Lengerer <lengerer.max@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mohammed Al Otaibi <mopes.03.belle@icloud.com>
Co-authored-by: Nicolò <nicveronese@gmail.com>
Co-authored-by: Oleh Horbachov <gorbyo@gmail.com>
Co-authored-by: Pablo Portas López <pabloportas@protonmail.com>
Co-authored-by: Peder Vaagland <halsa.p.vaagland@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Rafa <rafa0292@gmail.com>
Co-authored-by: Ram Sujith Reddibathini (Ram) <sujithram.it@gmail.com>
Co-authored-by: Riccardo <lark-unit-rush@duck.com>
Co-authored-by: Rodrigo Bourbon Navarro <rodrigobourbon44@gmail.com>
Co-authored-by: Roi Gabay <roigby@gmail.com>
Co-authored-by: Rookie Nguyễn <nguyenquocthang2004@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: Torin Wu <xuan329269@gmail.com>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Vladislav Tkalin <mrtold11@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: YapWC <yapchengcheng3568@gmail.com>
Co-authored-by: Zulhilmi Ramli <ramli.zulhilmi@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: iancbogue <iancbogue@gmail.com>
Co-authored-by: intothevolt <francesco.ferriero97@gmail.com>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: krzemyk <krzemyk.official@proton.me>
Co-authored-by: pierrebengtsson <pierre.bengtsson@gmail.com>
Co-authored-by: shiuh67 <shiuh.cheng@gmail.com>
Co-authored-by: szelek <janek.szelewicz@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: wickdj <wickdj@gmail.com>
Co-authored-by: wojtasiq <wojtek.wroclaw@hotmail.com>
Co-authored-by: xmh10000 <xmh10000@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-02-21 17:30:19 +00:00
bo0tzz
ca9e02379d feat: remove preview label on pr close (#16249) 2025-02-21 17:54:11 +01:00
bo0tzz
36ec407c66 fix: use correct head sha on PR commit tag (#16248) 2025-02-21 17:02:24 +01:00
Alex
007eaaceb9 feat(web): manual face tagging and deletion (#16062) 2025-02-21 09:58:25 -06:00
shenlong
94c0e8253a test(mobile): store (#16243)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-02-21 09:10:42 -06:00
Alex
5acf6868b7 refactor(mobile): render list (#16239)
* refactor(mobile): trash provider

* refactor(mobile): trash provider

* pr feedback

* archive timeline

* favorite

* album

* trash timeline

* all videos timeline

* refactor

* refactor: home timeline and partner timeline

* update analysis option
2025-02-21 09:01:46 -06:00
Mert
616905211d fix(server): assets in multiple albums duplicated in map view (#16245) 2025-02-21 15:32:08 +03:00
Mert
3925445de8 feat(web): use wasm for justified layout calculation (#15524)
* working

* use wrapper class

* update import

* simplify

* it works without changing `optimizeDeps`

* inline layout options

* update gallery view

* use es2022

* fix import

* fix vitest

* empty geometry

* bump version

* Update web/src/lib/stores/assets.store.ts

Co-authored-by: Jason Rasmussen <jason@rasm.me>

* fix: typo

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-02-21 09:20:25 +00:00
Mert
52f21fb331 fix(web): viewport reactivity, off-screen thumbhashes being rendered (#15435)
* viewport optimizations

* fade in

* async bitmap

* fast path for smaller date groups

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-20 22:38:12 -06:00
Zack Pollard
ac36effb45 feat: sync implementation for the user entity (#16234)
* ci: print out typeorm generation changes

* feat: sync implementation for the user entity

wip

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-02-20 23:37:57 -05:00
bo0tzz
02cd8da871 docs: clarify custom locations guide (#16122) 2025-02-20 22:31:29 -06:00
Alex
17a2043e76 refactor(mobile): trash provider (#16219)
* refactor(mobile): trash provider

* refactor(mobile): trash provider

* pr feedback
2025-02-20 22:14:41 -06:00
Jason Antwi-Appah
34b88bb47a feat(web): support searching by EXIF rating (#16208)
* Add rating to search DTO

* Add search by EXIF rating in search query builder

* Generate OpenAPI spec

* Add rating filter on web

* Add rating filter to search docs

* Format / lint

* Hide rating filter if ratings are disabled

* chore: component order in form

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-02-20 16:17:06 +00:00
Jonathan Jogenfors
f6ba071569 feat(server): add path to metadata logging (#16212)
feat(server): Prefer original path instead of id when logging
2025-02-20 09:46:18 -06:00
Jonathan Jogenfors
6b7a7b0cbc feat(web): library import path onboarding (#16229) 2025-02-20 09:45:34 -06:00
Jonathan Jogenfors
b0102f8025 fix(server): set modifydate (#16225) 2025-02-20 09:28:30 -06:00
Lukas
9c95adc7fb feat(web): show memories in portrait on small screens (#16213) 2025-02-19 23:15:45 +00:00
renovate[bot]
376282e538 chore(deps): update dependency @types/node to ^22.13.4 (#16206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 14:54:12 -06:00
shenlong
76d95cd348 refactor(mobile): move store settings and store into domain folder (#16201)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-02-19 19:27:32 +00:00
Jonathan Jogenfors
31dc83f3f2 fix(server): don't warn about missing timezone (#16211)
fix(server): don't warn about timezone
2025-02-19 13:21:13 -06:00
shenlong
aeb3e0a84f refactor(mobile): split store into repo and service (#16199)
* refactor(mobile): migrate store

* refactor(mobile): expand abbreviations

* chore(mobile): fix lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-19 13:05:24 -06:00
Krassimir Valev
8634c59850 feat(server): search by partial asset path (#16173)
Similarly to how one can search by partial filename, change the
path search to work with partial matches instead of looking for a
full match.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-19 08:32:52 -06:00
Lukas
b13a98646f fix(web): improve memories layout on small screens (#16162)
* fix(web): improve memories layout on small screens

* decrease viewer height
2025-02-18 17:40:52 -06:00
renovate[bot]
7bf142dc43 chore(deps): update prom/prometheus docker digest to 5888c18 (#16171)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 16:02:56 -05:00
renovate[bot]
d8cda6ee40 chore(deps): update base-image to v20250218 (major) (#16204)
chore(deps): update base-image to v20250218

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 16:02:33 -05:00
renovate[bot]
a31bc94460 fix(deps): update typescript-projects (#16203)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 21:35:50 +01:00
renovate[bot]
516709ffe1 chore(deps): update dependency @types/node to ^22.13.2 (#16200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 15:10:44 -05:00
renovate[bot]
425cf62482 fix(deps): update typescript-projects (#16178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-02-18 20:40:09 +01:00
Jason Anderson
58242b3b4a chore(docs): Synology set-up guide (#16179)
* Addition of Synology set-up guide

* fix: format

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-18 13:39:42 -06:00
Alex
9d4aee36e2 refactor(mobile): asset provider (#16159)
* refactor(mobile): asset provider

* wip

* wip: delete local assets

* wip: delete remote assets

* wip: deletion logic

* refactor

* pr feedback
2025-02-18 13:10:55 -06:00
shenlong
70d08a2b2a chore(mobile): lint (#16182)
* lint - convert path to lowercase for finding index

* update dcm lint rules

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-02-18 09:34:19 -06:00
Zack Pollard
f1b98d5f45 ci: docker cleanup, cleanup (#16194) 2025-02-18 14:56:58 +00:00
bo0tzz
749eff03d5 fix: pgvectors docs link (#16187)
Fixes #16184
2025-02-18 08:38:07 -05:00
bo0tzz
5f257b9a84 fix: don't write cache on fork PRs (#16189) 2025-02-18 12:47:20 +01:00
Jonathan Jogenfors
0cae20033c fix(server): more e2e library flakiness cleanup (#16176) 2025-02-17 19:04:38 -05:00
Jonathan Jogenfors
115ee0d6cc fix(server): remove unused readme (#16175)
fix(server): remove readme
2025-02-17 19:03:43 -05:00
Jonathan Jogenfors
bfdd6eac01 fix(server): flaky library e2e tests (#16174) 2025-02-17 18:26:44 -05:00
bo0tzz
9eab770e79 fix: don't push on forks (#16165) 2025-02-17 20:13:56 +00:00
João Paulo Ros
efd8d8b884 fix(mobile): Server endpoint on the login screen. (#16149)
Fixing the server endpoint on the login screen. It added the "/api" suffix instead of using the default method getServerUrl, which takes care of sanitizing the URL.

Co-authored-by: Joao Paulo Ros <ros@voxit.ai>
2025-02-17 19:12:48 +00:00
Alessandro Craciun
25e1c8cc7f chore(web): update italian translations (#15695) 2025-02-17 13:09:55 -06:00
Jason Rasmussen
7c26663013 chore: removed unused endpoint (#16167) 2025-02-17 13:07:50 -06:00
bo0tzz
2c88ce8559 chore: run full jobs on workflow file change (#16166) 2025-02-17 12:09:38 -06:00
Nick Overacker
50b072803d fix: limit width of logo in emails to 100% (#16164)
Limit width of logo in emails to 100%

The current live version breaks Yahoo Mail (at least in Firefox). It appears far too large and makes the email unreadable by pushing the text outside of the reading pane.
2025-02-17 17:46:14 +00:00
Mangat Singh Toor | ਮੰਗਤ ਸਿੰਘ ਤੂਰ
1689cecaf7 fix: include live images in person view count (#16116)
* fix: include live images in person view count

Fixed an issue where the total image count in the person view excluded live images.
The query now correctly accounts for all relevant assets by removing the condition
that filtered out assets with a livePhotoVideoId.

Issue:
- Image count under a person’s name was inaccurate, showing only static images.

Fix:
- Removed `.on('assets.livePhotoVideoId', 'is', null)` from the LEFT JOIN condition.

Tested on:
- Web

Ran PR checklist

* chore: run make sql.

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-17 15:49:30 +00:00
Pablo P Varela
5cd1018db3 fix(mobile): failed to load gl-ES locale (#16123) 2025-02-17 08:48:55 -06:00
renovate[bot]
31e6270a28 chore(deps): update docker.io/redis:6.2-alpine docker digest to 148bb54 (#16113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 14:23:28 +00:00
renovate[bot]
b3fbd0809b chore(deps): update redis:6.2-alpine docker digest to 148bb54 (#16140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 14:23:03 +00:00
Zack Pollard
129a4a82e0 ci: docker build cache (#16156) 2025-02-17 13:55:22 +00:00
Zack Pollard
924d11a913 ci: copy image layers from ghcr to dockerhub on release (#16155) 2025-02-17 13:41:45 +00:00
Zack Pollard
425c87bce4 ci: machine learning separate native docker image builds (#16102) 2025-02-17 11:56:28 +00:00
bo0tzz
25fcda6eeb chore: add warning to all compose files (#16146) 2025-02-16 21:28:59 -06:00
Jason Rasmussen
f386b4d377 feat(web): use thumbhash as a cache key (#16106)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-16 03:34:13 +00:00
renovate[bot]
c524fcf084 chore(deps): update node.js to v22.14.0 (#16132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-15 21:29:33 -06:00
renovate[bot]
194c567a45 chore(deps): update redis:6.2-alpine docker digest to 785233c (#16114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-15 12:10:44 +00:00
Zack Pollard
411f96ef49 fix: place suggestions not clickable in asset set location modal (#16104)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-15 09:44:11 +00:00
Alex
4f912de018 refactor(mobile): album provider (#16099) 2025-02-14 19:27:39 -06:00
Alex
47203d2760 refactor(mobile): asset stack provider (#16100)
* refactor(mobile): asset stack provider

* remove file from ignore list
2025-02-14 13:23:14 -06:00
Zack Pollard
8ab87a8803 ci: retag commit hash unset outside of PRs (#16103) 2025-02-14 19:18:49 +01:00
Zack Pollard
5b4f894211 ci: docker images sha commit tag (#16098) 2025-02-14 16:08:41 +00:00
Mangat Singh Toor | ਮੰਗਤ ਸਿੰਘ ਤੂਰ
b1f05fc18b fix(web): properly project profile picture (#16095)
* fix(profile-image-cropper): ensure correct image area is saved after transparency check

Fixed an issue where users could not set a profile picture due to incorrect transparency detection.
After addressing transparency detection by passing explicit dimensions, another issue arose where the
generated blob did not represent the correct cropped image area. To fix this, a new cropped blob was generated using the canvas that was used to check for transparent pixels.

- Pass image width and height explicitly to `hasTransparentPixels` for accurate processing.
- Return both transparency status and the correctly cropped image blob.
- Ensure the final uploaded image is taken from `croppedImageBlob` to reflect user adjustments.

* chore: run pr web checklist. No issues in the changed file.

* fix(profile-image-cropper): ensure correct image area is saved after transparency check

Fixed an issue where users could not set a profile picture due to incorrect transparency detection.
To fix this, a new cropped blob was generated using the height and width of the imgElement.

Note: this is a simpler fix than the one in the previous commit.

* lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-02-14 15:49:22 +00:00
Zack Pollard
dbbefde98d feat: native arm and amd64 server builds (#15408) 2025-02-14 15:55:18 +01:00
Jonathan Jogenfors
5407a28533 feat(server): Nullable asset dates (#15669)
* nullable dates

* wip

* don't search for null dates

* Add placeholder type

* cleanup
2025-02-13 15:30:12 -06:00
bo0tzz
f5edc87e4d feat: comment URL on previewed PRs (#16085) 2025-02-13 21:10:00 +00:00
HelloMihai
bf16b61d43 fix: broken html id (#16084)
ids cannot have spaces

relative should not be in the ID of the element
2025-02-13 14:46:12 -05:00
Joren Guillaume
8c882b54cd docs: put Windows restore command on one line (#16074)
Lots of 'unexpected newline' comments when restoring from other users, this should fix that.
2025-02-13 05:44:33 -05:00
Jason Rasmussen
2d7c333c8c refactor(server): narrow auth types (#16066) 2025-02-12 15:23:08 -05:00
Yaros
7c821dd205 feat(mobile): Made Map Bottom Sheet extendable higher (#16056)
Made Map Bottom Sheet extendable higher
2025-02-12 14:56:50 +00:00
renovate[bot]
703361da1a chore(deps): update dependency svelte to v5.19.9 (#16043)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 17:24:39 -06:00
Jason Rasmussen
fa5aeaf539 refactor: last repository (#16042) 2025-02-11 22:15:56 +00:00
Jason Rasmussen
5f3a42a132 refactor: repositories (#16038) 2025-02-11 15:12:31 -05:00
Jason Rasmussen
9d85272c2b refactor: repositories (#16036) 2025-02-11 14:08:13 -05:00
renovate[bot]
d2575d8f00 fix(deps): update typescript-projects (#16023)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-02-11 18:50:18 +00:00
renovate[bot]
f0a4c945bd chore(deps): update github-actions (#16032)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 17:24:47 +00:00
renovate[bot]
a3766b879e fix(deps): update machine-learning (#16012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 11:23:54 -06:00
Alex
1a190c33a0 chore(mobile): post release task (#16004) 2025-02-11 11:23:02 -06:00
renovate[bot]
17a63e37b2 chore(deps): update base-image to v20250211 (major) (#16025)
chore(deps): update base-image to v20250211

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 11:21:25 -06:00
renovate[bot]
bf1f8da884 chore(deps): update docker/build-push-action action to v6.13.0 (#16022)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 14:16:10 +01:00
renovate[bot]
2271984dbd chore(deps): update dependency @types/node to ^22.13.1 (#16013)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 00:19:02 +00:00
Snowknight26
b40963ec52 fix(web): Update shared link Exif capitalization to match existing capitalization (#16010)
Update shared link Exif capitalization to match existing capitalization
2025-02-10 19:00:37 -05:00
Jason Rasmussen
735f8d661e refactor: test mocks (#16008) 2025-02-11 00:47:42 +01:00
github-actions
8794c84e9d chore: version v1.126.1 2025-02-10 17:54:02 +00:00
Alex
cef19eed97 chore(mobile): patch openapi preference (#16000) 2025-02-10 17:39:43 +00:00
Alex
90c607c1a6 chore(mobile): post release task (#15998) 2025-02-10 11:12:36 -06:00
Daniel Dietzler
52b650093d fix: merch link (#15999) 2025-02-10 16:56:40 +00:00
Parsa Poorshikhian
fe4c49c8e3 chore: update of the persian translation (#15972)
* chore: update of the persian translation

* chore: update of the persian translation

* chore: update of the persian translation

* chore: update of the persian translation
2025-02-10 16:47:53 +00:00
Nicholas Flamy
4cad23aaa3 docs: add-hash #15860 follow-up (#15988)
add-hash
2025-02-10 10:46:47 -06:00
github-actions
feba590de7 chore: version v1.126.0 2025-02-10 16:10:06 +00:00
renovate[bot]
64f0333306 chore(deps): update grafana/grafana docker tag to v11.5.1 (#15963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-09 07:00:37 -05:00
Jason Rasmussen
758bcd1e97 fix(server): validate oauth profile has a sub (#15967) 2025-02-08 17:01:28 -05:00
Alex
fb21950ad8 chore(web): shared links style tweaks (#15960) 2025-02-07 20:53:12 -05:00
Jason Rasmussen
758449e9f0 refactor: session repository (#15957) 2025-02-07 23:16:40 +00:00
Jason Rasmussen
d7d4d22fe0 refactor: process repository (#15956) 2025-02-07 18:04:04 -05:00
Jason Rasmussen
03948a69e2 refactor: system metadata repository (#15954) 2025-02-07 17:26:49 -05:00
Jason Rasmussen
61b8eb85b5 feat: view album shared links (#15943) 2025-02-07 16:38:20 -05:00
Jason Rasmussen
c5360e78c5 feat(web): shared link filters (#15948) 2025-02-07 13:05:15 -05:00
Jason Rasmussen
23014c263b feat(api): set person color (#15937) 2025-02-07 10:06:58 -05:00
Mert
2e5007adef docs: soften wording for openvino igpu (#15941) 2025-02-07 06:44:22 -05:00
Nicholas Flamy
c4531fc4d3 fix(docs): show version selection dropdown on mobile (#15894)
change-className-and-add-css-to-show-versions-on-mobile
2025-02-06 16:00:52 -05:00
renovate[bot]
252d3f5f2c chore(deps): update grafana/grafana docker tag to v11.5.0 (#15930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 15:59:47 -05:00
renovate[bot]
ef6c2bf547 chore(deps): update base-image to v20250204 (major) (#15931)
chore(deps): update base-image to v20250204

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 15:59:29 -05:00
Krassimir Valev
6aad9fae8e feat(web): revamp places (#12219)
* revamp places

* add english translations

* migrate places page and components to svelte 5

* fix lint

* chore: cleanup

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-02-06 20:54:01 +00:00
Daniel Dietzler
45f7401513 chore: nestjs 11 (#15542) 2025-02-06 13:56:26 -05:00
renovate[bot]
3c7edba388 chore(deps): update terraform cloudflare to v4.52.0 (#15526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 13:52:27 -05:00
renovate[bot]
76a70703a5 chore(deps): update base-image to v20250128 (major) (#15796)
chore(deps): update base-image to v20250128

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-06 13:51:52 -05:00
Ridvan
f78066d4b9 Update setup.md to include FVM dependency (#15927) 2025-02-06 18:50:55 +00:00
Jason Rasmussen
48d421e28c fix(server): always get UTC dates from postgres (#15920) 2025-02-05 18:47:27 +00:00
defooster
1492b55c07 fix(docs): typo in unraid.md (#15913)
Update unraid.md

fixed wrong word
2025-02-05 09:35:55 -06:00
bo0tzz
1d6a4e9318 fix: call hexOrBufferToBase64 for stripMetadata thumbhash (#15917)
Fixes #15916 (I think)
2025-02-05 09:20:46 -06:00
Alex
fe42e7410b chore(server): follow up on #15899 (#15907) 2025-02-04 16:57:11 -06:00
Jason Rasmussen
58bf58b393 refactor: get map markers database query (#15899) 2025-02-04 09:07:41 -06:00
Nicholas Flamy
99de52479e fix: pr template not being used and make some changes (#15893)
fix-pr-template-and-make-some-changes-with-suggestions
2025-02-04 09:06:54 -06:00
André Ventura
97574d7296 fix(web): prevent accidental modal closures on mouseup outside (#15900) 2025-02-04 13:43:19 +00:00
Nicholas Flamy
5015210f37 docs: add-current-path-to-version-switcher (#15860)
add-current-path-to-version-switcher
2025-02-04 04:09:07 -05:00
Lukas
0bb1219b5f fix(server): for individual shares not showing thumbnails (#15895)
* Fix for individual shares not showing thumbnails

* synced sql

* chore: add e2e test

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2025-02-04 09:07:50 +00:00
Jonathan Jogenfors
b730aa60ed fix(server): queue missing metadata (#15864)
fix: queue missing metadata
2025-02-04 04:00:39 -05:00
Arno
7ec3610753 feat: Mark people as favorite (#14866)
* feat: added ability to mark people as favorite, which get sorted to the front of the people list

* feat(server): added unit test for favorite people

* feat(server): refactored for better readability

* fixed person service unit tests

* fixed open-api and sql checks

* fixed bad codegen and removed unnecessary type assertion again

* chore: clean up

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2025-02-04 08:52:17 +00:00
Tom Graham
69e88ef985 fix(mobile): #15182 Video memories no longer play (#15210)
* Update current asset to play video.

* Updated location of currentAssetProvider update per feedback.

* Added a playbackDelayFactor to the video viewer to resolve an issue in memories.

Also adjusted the scale of the memory preview image to match the ratio of the video. This still appears to jump because the video preview doesn't seem to be the first frame for some reason :\

* add video indicator

---------

Co-authored-by: Tom graham <tomg@questps.com.au>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-03 22:43:23 +00:00
jtkmckenna
9358b4dc7e fix: bash install.sh script for mac os (#15874)
fix: bash script for mac os

Fix the displayed IP address in bash script if hostname fails to return a string

Co-authored-by: Joseph McKenna <dev@jtkmckenna.com>
2025-02-03 16:41:42 -06:00
Alex
06f077bac2 fix(server): memory lane assets order (#15882)
* fix(server): memory lane assets order

* fix: sql

* pr feedback

* sql
2025-02-03 16:29:41 -06:00
Meesam
47f6181d42 fix(mobile): improved the visibility of backup cloud icon on lighter images (#15886)
* fix(mobile): improved the visibility of backup cloud icon on lighter images

* refactor(mobile): add 'const' keyword to Offset constructor for improved performance
2025-02-03 20:30:39 +00:00
André Ventura
aac029d92b feat(web): merge suggestion modal: focus on Yes button by default. (#15827)
* feat(web): merge suggestion modal: focus on Yes button by default.

* refactor(web): merge suggestion modal: use Button from @immich/ui.

---------

Co-authored-by: André Ventura <afv@users.noreply.github.com>
2025-02-03 14:01:05 -06:00
Damiano Ferrari
ef245ea2d2 feat(mobile): Use NavigationRail when the screen is in landscape mode (#15885) 2025-02-03 13:49:55 -06:00
Stark
e8d05e78ad feat(web): Updated Onboarding page (#15880)
Updated Onboarding page

the "previous" button on the Storage Template page now points to privacy instead of theme
2025-02-03 17:36:25 +00:00
Matthew Momjian
52c9fbea5f fix(docs): query DB by ID (#15863)
* db query for id

* format

* backticks

* Update database-queries.md
2025-02-02 22:55:47 -06:00
bo0tzz
882163f545 chore: build metadata for ML container (#15831)
* chore: build metadata for ML container

* fix: build_image_url
2025-02-02 23:45:58 +01:00
Damiano Ferrari
96a6cc20b7 refactor(mobile): Use switch expression when possible (#15852)
refactor: Use `switch` expression when possible

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-02-02 15:46:46 -06:00
Alex
4efacfbb91 feat: search by description (#15818)
* feat: search by description

* wip: mobile

* wip: mobile ui

* wip: mobile search logic

* feat: using f_unaccent

* icon to fit with text search
2025-02-02 15:18:13 -06:00
Matthew Momjian
a808a840c8 fix(mobile): title of custom proxy headers (#15859)
fix title
2025-02-02 20:43:14 +00:00
Nicholas Flamy
3f18acdb1a docs: TrueNAS: add danger message to external libraries (#15857)
Add danger message to external libraries in truenas.md (Format fix included)
2025-02-02 12:07:39 -06:00
Zack Pollard
2b41b5efe1 feat: merch links (#15843) 2025-02-02 00:26:23 +01:00
David Wolff
9ac95d6845 feat: add searching by tags (#15395)
* feat: add searching by tags

* fix: fix merge

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-31 21:37:22 +00:00
Mangat Singh Toor | ਮੰਗਤ ਸਿੰਘ ਤੂਰ
221e197633 fix(mobile): retain edited title when album updates (#15806)
* fix(album-viewer): retain edited title when album updates

ensure `AlbumViewerEditableTitle` keeps user input while editing,
even when the album updates from another provider. fall back to
`albumName` only when not in edit mode.

* linting

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-31 09:24:53 -06:00
David Wolff
1b141d5ca9 refactor(server): filter assets by people using a subquery instead of a cte (#15768) 2025-01-31 09:06:45 -06:00
Alex
098bab7c9b fix(mobile): search page issues (#15804)
* fix: don't repeat search

* fix: show snackbar for no result

* fix: do not search on empty filter

* chore: syling
2025-01-31 03:12:57 +00:00
Felix Eckhofer
4fccc09fc1 chore: fix typo in libraries.md (#15800)
Fix typo in libraries.md
2025-01-30 20:34:12 -06:00
Jason Rasmussen
c016b65ef2 fix(web): shared link date range (#15802) 2025-01-30 18:36:45 -05:00
preeperkiller
844eed8707 fix(web): HelpAndFeedback button the same size as Theme button in navbar (#15791)
fix(server): HelpAndFeedback button the same size as Theme button in navbar
2025-01-30 12:43:35 -05:00
Justin Forseth
6e31ac4c75 feat(mobile): Add filter to people_picker.dart (#15771)
* Add filter to people_picker.dart

* feat: styling

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-29 21:02:54 +00:00
Jirapan.
b287c0cbe8 chore: update of the Thai translation (#15758) 2025-01-29 20:29:50 +00:00
Jason Rasmussen
1fcc75fb44 docs: update server arch (#15775) 2025-01-29 13:42:38 -06:00
Jonathan Jogenfors
ca79e25a6e feat(server): synology exclusion patterns (#15773)
feat: add synology exclusion patterns
2025-01-29 13:42:21 -06:00
github-actions
4fd8c1b3c1 chore: version v1.125.7 2025-01-29 17:41:38 +00:00
Antonio Sarro
f3ba994186 fix(web): update recent album after edit (#15762)
* fix(web): update recent album after edit

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2025-01-29 17:27:30 +00:00
Ben Cochran
b4a4abbf51 fix(docs): move a few API doc comments to descriptions (#15381)
Previously, the comments were being used as the summaries, and thus were
displayed as the “title” of these endpoints
2025-01-29 11:58:10 -05:00
Jason Rasmussen
a0aea021a1 fix(server): restore user (#15763) 2025-01-29 16:49:08 +00:00
Joren Guillaume
9033a99587 fix(server): Update vaapi-wsl to include dxg (#15759) 2025-01-29 16:39:02 +01:00
ayykamp
cc0cbd705e feat: add support for JPEG 2000 (#15710)
* chore(server): add support for .jp2

* docs: add support for .jp2

* chore: fix tests

* fix formatting

* unify sorting
2025-01-28 23:27:28 +00:00
Carsten Otto
da580d4685 fix: show local dates for range in album summary (#15654)
* fix(web): show local dates for range in album summary

* fix(server): show local dates for range in album summary
2025-01-28 14:33:38 -06:00
Simon
cb6d94c7a7 chore: update of the Ukrainian translation (#15751)
Update uk-UA.json

Update of the Ukrainian translation for the Immich app
2025-01-28 20:32:57 +00:00
André Ventura
060300de8a fix(web): cancel people merge selection: do not show "Change name successfully" notification (#15744)
fix(web): cancel people merge selection: do not show "Change name successfully" notification.

Co-authored-by: André Ventura <afv@users.noreply.github.com>
2025-01-28 11:43:52 -06:00
Miguel Angel Nubla
c2ba1cc202 docs: add immich-upload-optimizer to Community Projects list (#15738) 2025-01-28 09:40:00 -06:00
PastLeo
08db77db23 feat: resolution selection and default preview playback for 360° panorama videos (#15747)
* original/preview switching in photo-sphere-viewer

1. default to preview in photo-sphere-viewer video mode
2. install and integrate @photo-sphere-viewer/settings-plugin & @photo-sphere-viewer/resolution-plugin

* fix lint errors
2025-01-28 09:09:40 -06:00
RiggiG
92dff839d0 fix(web): do not throw error when hash fails (#15740)
change: do not throw error when hash fails
2025-01-28 03:54:56 +00:00
Christian Kündig
fe1e09e51f fix(server): Allow negative rating (for rejected images) (#15699)
Allow negative rating (for rejected images)
2025-01-27 21:54:29 -06:00
github-actions
f44669447f chore: version v1.125.6 2025-01-28 02:58:27 +00:00
Mert
92412ca2f7 fix(server): person thumbnail generation always being queued (#15734)
* fix person thumbnail generation always being queued

* fix thumbhash comparison

* fix mock
2025-01-27 16:20:18 -06:00
github-actions
64d926581f chore: version v1.125.5 2025-01-27 20:04:50 +00:00
Alex
c139e05170 fix(mobile): locale option causes the datetime filter error out (#15704) 2025-01-27 14:02:23 -06:00
Alex
0fe62298e1 fix(server): duplicate detection (#15727) 2025-01-27 13:53:59 -06:00
github-actions
e5794e6cfc chore: version v1.125.4 2025-01-27 18:44:12 +00:00
Alex
f6cbc9db06 fix(server): cannot render album page when all assets of an album are in trash (#15690)
* fix(server): cannot render album page when all assets of an album are in trash

* inner join

* add e2e test

* check empty albums too

* render add to album button on empty album

* lint

* count 0 if undefined

* fix album card test

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-01-26 21:18:34 -06:00
Alex
8dab5d3798 chore(mobile): post release task (#15662) 2025-01-26 15:09:15 -06:00
Carsten Otto
e864811a85 fix(web): sort folders (#15691)
fixes #13145
2025-01-26 15:07:22 -06:00
github-actions
72a55c13b6 chore: version v1.125.3 2025-01-26 14:14:48 +00:00
sudbrack
206412267a fix(server): /search/random API returns same assets every call (#15682)
* Fix for server searchRandom function not returning random results

* Fix lint
2025-01-26 14:06:18 +00:00
Damiano Ferrari
f780a56e24 fix(mobile): Misaligned text icon in circle avatar (#15683)
style(mobile): Use `DefaultTextStyle` for the text icon in `CircleAvatar`
2025-01-26 07:51:46 -06:00
Alex
7bbffccf76 fix(web): neon overflow on mobile screen (#15676) 2025-01-26 08:06:26 -05:00
Mert
05a446c259 fix(server): avoid duplicate rows in album queries (#15670)
* avoid duplicate rows

* left join, handle null vs. undefined

* update sql
2025-01-25 22:37:19 -06:00
Carsten Otto
4f725b95e1 fix(server): do not count deleted assets for album summary (#15668)
fixes #15645
fixes #15646
2025-01-25 16:45:13 -06:00
Carsten Otto
64b92cb24c fix(server): do not reset fileCreatedDate (#15650)
When marking an offline asset as online again, do not reset the
fileCreatedAt value. This value contains the "true" date, copied
from exif.dateTimeOriginal. If we overwrite this value, we'd need
to run the metadata extraction job again. Instead, we just leave
the old (and correct) value in place.

fixes #15640
2025-01-25 13:50:37 -06:00
Gagan Yadav
19f2f888ee fix(mobile): improve timezone picker (#15615)
- Fix missing timezones

- Remove the UTC prefix from timezone display text to align with web app

- Remove unnecessary layout builder

- Created a custom `DropdownSearchMenu` widget

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-25 13:36:49 -06:00
Alex
d12b1c907d fix(server): bulk update location (#15642) 2025-01-25 11:58:07 -06:00
Robert Schütz
947c053c15 chore(server): add DB_URL supports Unix sockets unit test (#15629)
* test(server): DB_URL supports Unix sockets

* chore: format

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-25 10:38:00 +00:00
Regenxyz
79592701dd chore: fix typos in Thai Language Readme (#15637)
Update README_th_TH.md

Fixing weird Thai Translate
2025-01-25 10:30:53 +00:00
jdicioccio
39697cd973 fix: increase upload timeout (#15588)
Fix upload timeout issue

Fix an issue where when uploading a large file, the upload would consistently abort after 30 minutes. I changed this timeout from 30 minutes to 1 day. Maybe that's excessive, or maybe the timeout isn't even needed, but the current 30 minute timeout definitely seems way too short.
2025-01-25 04:26:52 -06:00
Jonathan Jogenfors
10e518db42 chore(server): print stack in case of worker error (#15632)
feat: show error stack
2025-01-24 22:45:55 -05:00
Mert
72fa31f9e9 fix(server): changing vector dim size (#15630) 2025-01-24 20:01:24 -05:00
github-actions
9871a04d54 chore: version v1.125.2 2025-01-24 19:09:06 +00:00
Mert
ba01b40e7c fix(server): sslmode not working (#15587)
* parse db url before passing it to the driver

* don't be lazy

* simplify

* simplify

* add tests

* update sql sync script

* update mock

* remove unused import

* remove unused imports
2025-01-24 13:01:55 -06:00
Alex
f5a3d7ba23 fix(mobile): failed to load ga/gl locale (#15623) 2025-01-24 12:47:29 -06:00
Alex
d4a9eed4a1 fix(server): migration mentions public schema (#15622) 2025-01-24 18:11:22 +00:00
Alex
9d8072b994 fix(server): failed to get albums with archived assets (#15611)
* fix(mobile): failed to get albums with archived assets

* sql
2025-01-24 17:54:53 +00:00
Saschl
3c1fa22109 fix(mobile): deletion of single assets (#15597)
fix: set asset in currentassetprovider on image load

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-24 17:47:54 +00:00
Matthew Momjian
c0210bd6c0 fix(mobile): translation (no /api, experimental features) (#15600)
* initial /api removal

* translations /api

* experimental features

* japanese url update

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-24 11:47:01 -06:00
Mert
a6ace5151c fix(server): no exif metadata in the deduplication utility (#15585)
add exif to `getDuplicates`
2025-01-24 11:42:39 -06:00
Jason Rasmussen
ede9c99adb fix: demo login page (#15616) 2025-01-24 11:39:06 -06:00
Alex
ec7ab209f3 fix(server): link live photos (#15612)
* fix(server): link live photos

* chore: sql

* formatting
2025-01-24 11:38:59 -06:00
Alex
61bc24d7ea chore(mobile): post release task (#15581) 2025-01-24 17:28:00 +00:00
Alex
6c95eb22b7 fix(mobile): full refresh doesn't get albums (#15560) 2025-01-24 17:27:33 +00:00
Jason Rasmussen
aaea5cf1ad fix: login page (#15613) 2025-01-24 17:17:04 +00:00
Alex
96d2e9b4c5 fix(mobile): unit test (#15604)
* fix(mobile): unit test

* fix(mobile): unit test
2025-01-24 12:11:38 -05:00
Alex
19740a3560 fix(web): neon artifacts (#15582) 2025-01-24 09:18:26 -06:00
bo0tzz
8a481e2ea1 docs: add FAQ about app update approval (#15599) 2025-01-24 09:08:01 -06:00
Mert
ba105d9f19 fix(server): searchRandom response (#15580)
* fix searchRandom

* add e2e

* set outer limit
2025-01-24 00:41:54 -05:00
Lukas
065d885ca0 fix(server): Fix for sorting faces during merging (#15571)
* Fix for sorting faces

* Put uneccessary orderBy in if statement
2025-01-23 21:33:24 -05:00
Mert
a07ae9b5b2 fix(server): set updatedAt on updates (#15573)
* `updatedAt` triggers

* drop function at the end
2025-01-23 19:24:29 -05:00
Jason Rasmussen
1869b1b41a refactor: repositories (#15561)
* refactor: version history repository

* refactor: oauth repository

* refactor: trash repository

* refactor: telemetry repository

* refactor: metadata repository

* refactor: cron repository

* refactor: map repository

* refactor: server-info repository

* refactor: album user repository

* refactor: notification repository
2025-01-23 18:10:17 -05:00
Alex
995314446b feat(web): neon light behinds login form (#15570) 2025-01-23 17:23:23 -05:00
Jason Rasmussen
a1691ddc0f fix(web): auth page padding (#15569) 2025-01-23 21:38:34 +00:00
Mert
071b271484 fix(server): getTimeBuckets not handling boolean filters correctly (#15567)
fix boolean handling
2025-01-23 15:08:20 -06:00
github-actions
50a2f6193f chore: version v1.125.1 2025-01-23 16:52:23 +00:00
bo0tzz
907fed1081 fix: use push-o-matic to create release (#15562) 2025-01-23 10:46:56 -06:00
github-actions
49a16045bd chore: version v1.125.0 2025-01-23 16:23:47 +00:00
Alex
a47aa86392 chore: minor form bottom padding increase (#15558) 2025-01-23 15:45:07 +00:00
David Baxter
f32c5d97cd feat(web): Show lens model in the asset viewer detail panel (#15460)
* Adds lens details to the asset viewer

* Update lens detail search links

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-23 09:34:36 -06:00
Alex
afc6e91c66 fix(web): No EXIF info on stack navigation (#15533)
* fix(web): No EXIF info on stack navigation

* fix(web): No EXIF info on stack navigation

* add exif info to get stack query

* e2e test
2025-01-23 15:22:27 +00:00
renovate[bot]
1311189fab chore(deps): update base-image to v20250123 (major) (#15555)
chore(deps): update base-image to v20250123

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 08:32:32 -05:00
renovate[bot]
fa3b5a4c8f chore(deps): update node (#15554)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 08:32:14 -05:00
Jason Rasmussen
d3446f3092 refactor: logging repository (#15540) 2025-01-23 08:31:30 -05:00
renovate[bot]
b31414af8f fix(deps): update dependency @nestjs/bullmq to v11 (#15534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 22:37:02 +00:00
renovate[bot]
cf99dcb279 fix(deps): update dependency @nestjs/event-emitter to v3 (#15535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 22:34:50 +00:00
renovate[bot]
dc56ed5d45 fix(deps): update dependency @nestjs/schedule to v5 (#15537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 22:32:35 +00:00
renovate[bot]
d1d26c60d6 fix(deps): update typescript-projects (#14892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-01-22 22:15:38 +00:00
Jason Rasmussen
66849d0d45 refactor: migrate media repository (#15536) 2025-01-22 22:11:07 +00:00
renovate[bot]
30b8864d2d chore(deps): update base-image to v20250121 (major) (#15497)
chore(deps): update base-image to v20250121

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 16:45:25 -05:00
Jason Rasmussen
78464a4ba3 refactor: ui icon buttons (#15531) 2025-01-22 16:44:59 -05:00
Jason Rasmussen
1f19a65d1a refactor: migrate memory repository (#15532) 2025-01-22 21:39:13 +00:00
Jason Rasmussen
ca3619658b fix: incorrect event configuration (#15530) 2025-01-22 20:43:06 +00:00
renovate[bot]
c7a1f2944f chore(deps): update vitest monorepo to v3 (major) (#15528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 20:28:41 +00:00
Daniel Dietzler
7b71c145c8 chore: upgrade to vite 6 (#15508)
chore: upgrade to vite 5
2025-01-22 15:18:04 -05:00
Mert
49a6961ec6 fix(server): query fixes (#15509) 2025-01-22 14:17:42 -06:00
Alex
7b882b35e5 chore(mobile): translations update (#15523)
chore(mobile): translation update
2025-01-22 18:38:01 +00:00
Weblate (bot)
443aad5794 chore(web): update translations (#15335)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fil/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translation: Immich/immich

Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Andrius Cimakevicius <andrius.cim@gmail.com>
Co-authored-by: FDS <sfranzdanielsss@gmail.com>
Co-authored-by: Fredrik Rambris <fredrik@rambris.com>
Co-authored-by: Kaspar Brygger <kaspar.brygger@gmail.com>
Co-authored-by: Lauri Koo <late91@gmail.com>
Co-authored-by: Ramy <ramy.feteha@gmail.com>
Co-authored-by: Rico Sonntag <mail@ricosonntag.de>
Co-authored-by: Sedat Albayrak <sedat.albayrak@icloud.com>
Co-authored-by: Torin Wu <xuan329269@gmail.com>
Co-authored-by: ValinRo <edicomna@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: Øyvind Hovden <oyvhov@gmail.com>
Co-authored-by: Ümit Solmz <usnetv@users.noreply.hosted.weblate.org>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
2025-01-22 18:28:13 +00:00
Jason Rasmussen
8d6cbb51e2 fix: get asset by id for stacks (#15522) 2025-01-22 18:13:09 +00:00
renovate[bot]
c8abe9a2fd chore(deps): update node.js to v22.13.1 (#15503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 16:16:46 -06:00
Alex
58a75d59bd chore: update ui 14.1 (#15498) 2025-01-21 16:16:26 -06:00
Jason Rasmussen
36058b9b59 chore: remove unused code (#15499) 2025-01-21 16:47:48 -05:00
Matthew Momjian
8440f146e2 feat(docs): CIFS/Samba in-Docker example (#15502)
* CIFS

* quotes

* quote 2

* quote 3, lol
2025-01-21 12:59:30 -06:00
Matthew Momjian
3da17da7b4 fix(docs): remove old attribution (#15501)
update
2025-01-21 12:59:13 -06:00
Jason Rasmussen
ccf6d71c3c refactor: view repository (#15496) 2025-01-21 18:26:13 +00:00
renovate[bot]
5171630b98 fix(deps): update machine-learning (#15494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 13:17:55 -05:00
Jason Rasmussen
9a27a99cab refactor: config repository (#15495)
* refactor: access repository

* refactor: config repository
2025-01-21 13:13:09 -05:00
Daniel Dietzler
332a865ce6 refactor: migrate person repository to kysely (#15242)
* refactor: migrate person repository to kysely

* `asVector` begone

* linting

* fix metadata faces

* update test

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-01-21 13:12:28 -05:00
renovate[bot]
0c152366ec chore(deps): update docker/build-push-action action to v6.12.0 (#15493)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 12:34:14 -05:00
Alex
c35fd6cbdb refactor: migrate album repo to kysely (#15474) 2025-01-21 11:24:48 -06:00
renovate[bot]
58d5cc1e4b chore(deps): update dependency @types/node to ^22.10.7 (#15479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 11:54:47 -05:00
Jason Rasmussen
9a1068c867 refactor: api key repository (#15491) 2025-01-21 10:45:59 -06:00
Jason Rasmussen
1745f48f3d feat: better spec urls (#15487) 2025-01-21 10:26:52 -06:00
Jason Rasmussen
b0cdd8f475 refactor: access repository (#15490) 2025-01-21 10:09:24 -06:00
Alex
318dd32363 refactor: migrate stack repo to kysely (#15440)
* wip

* wip: add tags

* wip

* sql

* pr feedback

* pr feedback

* ergonomic

* pr feedback

* pr feedback
2025-01-21 09:36:28 -06:00
Jeff Sloyer
887267b133 fix: broken link on monitoring page (#15478)
* fix: broken link on monitoring page

* use absolute link
2025-01-20 22:20:03 -06:00
Tempest
1d0d4fc281 feat: Allow multiple ML models to be preloaded (#15418) 2025-01-20 21:39:14 -05:00
renovate[bot]
345791c0e6 chore(deps): update machine-learning (#15476) 2025-01-20 21:38:50 -05:00
Aaron Rodrigues
07698f8a40 fix: grammar on docs homepage (#15455)
Fix grammar on index.tsx
2025-01-20 16:14:49 -06:00
Yan-Ru Huang
6fdb8f83f0 feat: Add rule on robots.txt to allow robots access og tags (#15470)
Allow social media access og tags
2025-01-20 09:22:05 -05:00
Alex
a0b2c69b99 fix(mobile): cannot get new photos on Android (#15461) 2025-01-20 07:25:43 -06:00
David Wolff
70809c1465 fix(server): searching for multiple people yields false positives (#15447) 2025-01-19 13:01:21 -05:00
Robert Schütz
97ec3b147c fix(deps): use node-addon-api v8 (#15438) 2025-01-19 11:26:25 -05:00
Alex
d249b63c99 fix(mobile): Cannot type date format on Samsung phone (#15430)
* fix(mobile): Cannot type date format on Samsung phone

* use calendar
2025-01-18 21:56:18 +00:00
Alex
0f803a4f5e fix(web): scrolling memory timeline reset position (#15429) 2025-01-18 20:09:38 +00:00
renovate[bot]
8eac82c5a3 chore(deps): update dependency eslint-config-prettier to v10 (#15428)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 14:04:46 -06:00
Daniel Dietzler
3d13da7f11 refactor: migrate shared-link repository to kysely (#15289)
* refactor: migrate shared-link repository to kysely

* fix duplicate individual shared link return in getAll when there are more than 1 asset in the shared link

* using correct order condition

* using eb.table

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-18 13:25:15 -06:00
Sam Wilson
430d0b86ee fix(docs): Update unraid.md to use correct image url (#15427)
Update unraid.md to use correct image
2025-01-18 13:24:31 -06:00
imakida
f40fdce658 fix(web): Update asset count when deleting assets from person page (#15416)
Call updateAssetCount() after deleting assets.
2025-01-17 20:51:38 -06:00
Jason Rasmussen
097183b31d refactor: migrate partner repo to kysely (#15366) 2025-01-17 18:49:21 -05:00
Tempest
d5a9294eeb feat: Add additional env variables to ML container (#15398)
* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Update config.py

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Apply formatting

* minor update

* formatting

* root validator

* minor update

* minor update

* minor update

* change to support explicit models

* minor update

* minor change

* minor change

* minor change

* minor update

* add logs, resolve errors

* minor change

* add new enviornment variables

* minor revisons

* remove comments

* add additional variables to ML (fixed)

* add additional variables to ML (fixed)

* add additional variables to ML

* formatting

* remove comment

* remove mypy error

* remove unused module

* merge f strings
2025-01-17 17:22:05 -05:00
Alex
c5582fc8d9 chore: update ui 13 (#15414) 2025-01-17 20:03:11 +00:00
Alex
6993726d50 chore: generate sql for stack repo (#15413)
* chore: generate sql for stack repo

* update sql
2025-01-17 20:02:28 +00:00
Zack Pollard
c821458e6c refactor: migrate map repository to kysely (#15348)
* chore: migrate map repository to kysely

* chore: add kysely codegen command, exclude from prettier and re-run it on latest migrations

* refactor: migrate map repository to kysely

* chore: dont log postgres notices
2025-01-17 09:14:42 -06:00
Tom Graham
efbc0cb192 fix(mobile): 14983 Images upload to shared album with common name (#15127)
* Initial look at fixing issue where images are uploaded to the wrong album if a shared album conflicts with a local users album.

* Use owner instead of shared flag when fetching albums.

* Fix issue with refreshRemoteAlbums getting shared items twice and removed incorrect isShared comment.

Using `getAll(shared: true)` gets all shared albums the user can access (regardless of owner, despite the previous comment).

Using `getAll(shared: null)` gets all albums (incuding shared = true and shared = false). I presume the intent here was to get albums that were shared (and not mine), and not shared (ie: mine), but the logic is way off. It also just then combines them - so makes more sense to just get them in a single call.

* Fix formatting.

* Fixed tests.

* Revert "Fixed tests."

This reverts commit c38f5af5ac.

* Revert "Fix issue with refreshRemoteAlbums getting shared items twice and removed incorrect isShared comment."

This reverts commit 979ce90abf.

* Added comments to explain why filters behave the way they do for getAll() albums.

---------

Co-authored-by: Tom graham <tomg@questps.com.au>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-16 21:24:09 -06:00
Alex
fd99bd05cf feat(mobile): share to mechanism (#15229)
* setup ios

* chore: succesfully sent media to the app

* share from Android

* wip: navigate to share screen

* wip: UI for displaying upload candidate

* wip: logic

* wip: upload logic

* wip: up up up we got it up

* wip

* wip

* wip

* upload state

* feat: i18n

* fix: release build ios'

* feat: clear file cache

* pr feedback

* using const for checking download status

---------

Co-authored-by: Alex <alex@pop-os.localdomain>
2025-01-16 21:20:44 -06:00
Jason Rasmussen
3a2bf91889 refactor: replace link-button component with immich-ui buttons (#15374)
* refactor: replace link-button component with immich-ui buttons

* minor styling tweak

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-16 16:03:04 +00:00
Alex
378bd3c993 refactor: migrate access repo to kysely (#15365) 2025-01-16 09:25:03 -06:00
Jason Rasmussen
89f40b311c fix(web): map settings (#15375) 2025-01-16 10:05:14 -05:00
Jason Rasmussen
6ce1533117 fix: activity types (#15368) 2025-01-15 23:31:26 -05:00
Alex
0ce62d8efd chore: update immich ui 12 (#15378)
* chore: update ui 12

* chore: update ui 12
2025-01-15 23:02:49 +00:00
imakida
e151248b16 fix(web): end selection after click when choosing thumbnail, and notify (#15373)
fix(web): Change viewMode state after updateThumbnail

Fixes #14692

viewMode state was being changed before updateThumbnail which caused
AssetGrid.handleSelectAssets() to continue, instead of returning.

Also added notification to notify user that the album cover was
updated.
2025-01-15 21:13:16 +00:00
Daniel Dietzler
a2207f2eef refactor: migrate library repository to kysely (#15271) 2025-01-15 15:01:28 -06:00
Mattia Natali
81568dbda3 feat(web): Context menu scrolls on small devices (#15367)
Context menu scrolls on small devices
2025-01-15 14:48:26 -06:00
Jason Rasmussen
a60da1ccab refactor: migrate create user form to immich ui (#15350)
* refactor: migrate create user form to immich ui

* minor styling tweak

* remove unintentional commit

* revert formating diff

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-15 15:09:19 -05:00
Jason Rasmussen
2d2966caa0 chore: use port 2286 for the auth server (#15369) 2025-01-15 15:03:20 -05:00
Alex
7d087371b5 chore: sql sync (#15370)
* chore: sql sync

* chore: sql sync
2025-01-15 19:55:29 +00:00
Jason Rasmussen
93e2545275 refactor: migrate memory to kysely (#15314) 2025-01-15 11:34:11 -05:00
renovate[bot]
43b3181f45 chore(deps): update base-image to v20250114 (major) (#15347)
chore(deps): update base-image to v20250114

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 19:58:02 -05:00
Mert
2903ad8156 refactor(server): migrate album-user repo to kysely (#15351) 2025-01-14 19:27:16 -05:00
Tempest
c5476a99b1 feat: Add additional env variables for Machine Learning (#15326)
* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Update config.py

* Add additional variables to preload part ML models

* Add additional variables to preload part ML models

* Apply formatting

* minor update

* formatting

* root validator

* minor update

* minor update

* minor update

* change to support explicit models

* minor update

* minor change

* minor change

* minor change

* minor update

* add logs, resolve errors

* minor change

* add new enviornment variables

* minor revisons

* remove comments
2025-01-14 22:06:01 +00:00
Jason Rasmussen
5d2e421800 chore: add renovate config for immich-ui (#15349) 2025-01-14 21:01:21 +01:00
Jason Rasmussen
b9000d8770 feat(web): immich-ui components (#14263)
* feat: add immich-ui to auth pages

* fix: welcome icon

* styling

* fix: mobile padding

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-14 14:53:33 -05:00
renovate[bot]
073fccb517 chore(deps): update python:3.11-slim-bookworm docker digest to 6ed5bff (#15346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 18:33:27 +00:00
renovate[bot]
3e11b90851 chore(deps): update node.js to v22.13.0 (#15337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 13:20:12 -05:00
renovate[bot]
19e2504583 fix(deps): update machine-learning (#15336) 2025-01-14 10:19:01 -05:00
Mattia Natali
4279cd6e1e feat(web): Slideshow is enabled everywhere. It no longer needs assetStore. (#15077)
Slideshow no longer needs assetStore. It is enabled everywhere

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-14 14:24:58 +00:00
Jason Rasmussen
f70ee3f350 refactor: auth pages (#15328) 2025-01-14 08:14:28 -06:00
Jason Rasmussen
9e1651ef66 fix: bump web dependencies (#15325) 2025-01-13 23:40:19 -05:00
Alex
a35af2b242 refactor: migrate move repository to kysely (#15327)
* refactor: migrate move repository to kysely

* fix: tests

* fix: tests
2025-01-13 23:22:03 -05:00
Yonathan Randolph
fc99c5f530 chore(server): avoid copying sources in dev (#12794)
* chore(server): avoid copying sources in dev

Add a dev target to the web and server Dockerfiles, and change docker-compose.dev.yml to use the dev target. The dev target avoids copying files so that the docker image is smaller.

* chore: respond to PR: don't add dev target

web/Dockerfile is only used by docker-compose.dev.yml so a dev target is redundant. Instead, just remove the copy

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-01-13 22:00:55 -05:00
Weblate (bot)
e978b8c685 chore(web): update translations (#15145)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
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/el/
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/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
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/lt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
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/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/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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: AtmosphericIgnition <github.vvwnk@passmail.net>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Damian Krysta <krypton9208@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: Dominik Mielcarek <weblate@bmx.email>
Co-authored-by: Erik Järlestrand <erik.jarlestrand@gmail.com>
Co-authored-by: Filip Hanes <filip@hanes.tech>
Co-authored-by: Gerardo Doro <gerrydoro97@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jendrik Köhler <jendrik.koehler11@gmail.com>
Co-authored-by: Jordi Masip <jordi@masip.cat>
Co-authored-by: Kenji Opdam <kenji.opdam@gmail.com>
Co-authored-by: Krisztián <fabkrisz5+hosted_weblate_org@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Milo Germanus <milogermanus@gmail.com>
Co-authored-by: Máté Molnár <matmolni@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Rui <rui-costa@users.noreply.hosted.weblate.org>
Co-authored-by: Santiago <santiwever@hotmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Vykintas Vyšniauskas <vykintasv@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: rezi nagro <rezinagro@hotmail.com>
Co-authored-by: scudo <whiteshield.tg@protonmail.com>
Co-authored-by: stelle <itsazripp2@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Пламен Марков <tsmhunter@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
2025-01-14 02:57:54 +00:00
Zer0x00
3b06220219 feat: Upgrade devcontainer setup (#14419)
* Feat: Upgrade devcontainer

* Style: Format devcontainer.json

* Chore: Remove settings from devcontainer

* chore: add shebang

* chore: fix shellcheck

---------

Co-authored-by: Bünyamin Olgun <buenyamin.olgun@cancom.de>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-01-13 21:42:32 -05:00
renovate[bot]
dc53e2a9b9 chore(deps): update docker.io/redis:6.2-alpine docker digest to 905c4ee (#15193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 21:32:52 -05:00
Daniel Dietzler
28b08ed417 refactor: migrate audit repository to kysely (#15269) 2025-01-13 21:23:12 -05:00
Matthew Momjian
b74f013b53 fix(docs): database name for restore commands (#15276)
* cleanup dbname

* 2

* Update database-queries.md

* Update backup-and-restore.md

* Update backup-and-restore.md
2025-01-13 20:57:19 -05:00
Alex
79726acc72 refactor: migrate sessions repository to kysely (#15268)
* wip: search

* wip: getByToken

* wip: getByToken

* wip: getByUserId

* wip: create/update/delete

* remove unused code

* clean up and pr feedback

* fix: test

* fix: e2e test

* pr feedback
2025-01-13 20:45:52 -05:00
Jason Rasmussen
36eef9807b fix: version history sql (#15321) 2025-01-14 01:38:11 +00:00
Alex
3da750117f refactor: migrate user repository to kysely (#15296)
* refactor: migrate user repository to kysely

* refactor: migrate user repository to kysely

* refactor: migrate user repository to kysely

* refactor: migrate user repository to kysely

* fix: test

* clean up

* fix: metadata retrieval bug

* use correct typeing for upsert metadata

* pr feedback

* pr feedback

* fix: add deletedAt check

* fix: get non deleted user by default

* remove console.log

* fix: stop kysely after command finishes

* final clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-01-13 20:30:34 -05:00
Dr-Electron
a6c8eb57f1 fix(docs): fix admonition in mobile section (#15291)
fix(docs): Fix admonition in mobile section
2025-01-12 21:12:26 -06:00
Austin Dudzik
efe4396e54 fix(docs): Fix link label to refer to correct location on page (#15279)
Fix link label to refer to correct location on page
2025-01-12 09:51:55 -06:00
Desmond Cox
c4a8fdf0f3 fix(cli): handle folders with single quotes (#15283)
* fix(cli): handle folders with single quotes

* fix(cli): skip single quote test on Windows

* fix(cli): support double quote and backtick as well
2025-01-12 15:44:51 +00:00
Jin Xuan
abf5b0afe1 fix(web): mismatched deviceAssetId when uploading images (#15130)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-12 04:28:39 +00:00
Ferdinand Holzer
77d4eb8787 fix(web): render whitespaces in file names and paths on photos and folders pages correctly (#15266) 2025-01-11 22:10:33 -06:00
bo0tzz
e7abfe3067 docs: clarify filesystem backup paths (#15243)
* docs: clarify filesystem backup paths

* fix: backticks
2025-01-11 22:10:23 -06:00
Matthew Momjian
be1187bc46 chore(docs): clarify experimental network features (#15228)
* auth

* URL switch

* mobile app

* caps

* headers, app changes

* oxford comma

* Match case to other use in Immich

* add url

* asset download also causes issues
2025-01-11 22:09:54 -06:00
Mert
fef36e6a37 chore(server)!: default max bitrate unit to kbps (#15264)
default unit to kbps
2025-01-11 22:09:19 -06:00
imakida
a39fbcb8ac feat: #15237 toggle password visibility on shared albums (#15238)
* feat: toggle password visibility on shared albums

* feat: toggle password visibility on shared albums

* use password-field component

* remove div wrapping PasswordField

---------

Co-authored-by: Ian <ian@zetabyte.dev>
2025-01-11 22:08:08 -06:00
renovate[bot]
ca75bba3b0 chore(deps): update prom/prometheus docker digest to 6559acb (#15244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:06:45 -06:00
renovate[bot]
f3dbbfa16d chore(deps): update redis:6.2-alpine docker digest to 905c4ee (#15245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:06:30 -06:00
renovate[bot]
8b4390c247 chore(deps): update dependency @types/node to ^22.10.5 (#15246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:06:18 -06:00
renovate[bot]
581d32269d fix(deps): update machine-learning (#15247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:05:20 -06:00
renovate[bot]
2b76112014 chore(deps): update github-actions (#15248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:04:40 -06:00
renovate[bot]
2301affd7e chore(deps): update node.js to v22.13.0 (#15249)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:04:22 -06:00
renovate[bot]
2f9a66e961 chore(config): migrate renovate config (#15262)
chore(config): migrate config renovate.json

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 22:02:12 -06:00
renovate[bot]
0b8cfc6b82 chore(deps): update base-image to v20250107 (major) (#15251)
chore(deps): update base-image to v20250107

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 23:00:50 -05:00
bo0tzz
cab201270c chore: migrate version-history repository to kysely (#15267)
* chore: generate sql for version-history repository

* chore: run kysely-codegen

* chore: migrate version-history repository to kysely

* fix: change `| null` to `| undefined`

* chore: clean up unneeded async
2025-01-11 20:12:34 +00:00
Mert
beb31cebed fix(mobile): don't crash android app when video player throws exception (#15236)
update commit ref
2025-01-10 19:20:56 -06:00
Jason Rasmussen
e51091b6e5 refactor: migrate trash to kysely (#15233) 2025-01-10 18:48:21 -05:00
Jason Rasmussen
cc6a8b0c74 refactor: migrate system metadata to kysely (#15231) 2025-01-10 14:20:15 -05:00
Jason Rasmussen
930f979960 feat: migration api keys to use kysely (#15206) 2025-01-10 14:02:12 -05:00
Jin Xuan
3030e74fc3 fix(web): escape key to clear selection and go to previous page (#15142) (#15219) 2025-01-10 15:27:35 +00:00
Tom Graham
f9db60f25b fix(mobile): 15072 Fix issue with boolean filters filtering out results when they shouldn't (#15208)
Fix issue with boolean filters filtering out results when they shouldn't.

Co-authored-by: Tom graham <tomg@questps.com.au>
2025-01-10 09:18:40 -06:00
Daniel Dietzler
7d50d3032b refactor: activity queries (#15207) 2025-01-09 18:14:36 -05:00
Daniel Dietzler
1fb2b3f899 refactor: migrate activity repo to kysely (#15203)
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-01-09 14:31:46 -05:00
Mert
2e12c46980 refactor(server): use kysely (#12857) 2025-01-09 11:15:41 -05:00
renovate[bot]
1489d69f81 chore(deps): update terraform cloudflare to v4.50.0 (#14956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 10:31:15 +00:00
github-actions
8d836ae04f chore: version v1.124.2 2025-01-08 23:16:35 +00:00
Arno
cc473c42b5 fix(web): Reset asset selection when refreshing and changing folder (#15178)
* fix(web): Reset asset selection when refreshing and changing folder

* fix: refactor
2025-01-08 17:13:17 -06:00
Jonathan Jogenfors
bab04378dc fix(server): generate thumbnails for external assets (#15183)
fix: thumbnail generation of external assets
2025-01-08 17:12:39 -06:00
github-actions
cc10fc15c3 chore: version v1.124.1 2025-01-08 16:16:15 +00:00
Yaros
8cb9196bcb chore(docs): Translated README to Ukrainian (#15167)
* Wrote Ukrainian README

* Added links to Ukrainian README translation
2025-01-08 08:55:25 -06:00
Julian Collins
6cce24f391 chore(docs): update and polish Russian README (#15164)
* Actualize and polish RU readme

* Actualize and polish RU readme
2025-01-08 08:53:26 -06:00
Alex
36a9ae7c54 fix(server): email cannot render with pretty flag (#15157) 2025-01-08 08:53:08 -06:00
bo0tzz
4aabbec742 fix: invert asset path link nesting (#15163) 2025-01-08 07:52:59 -06:00
Alex
c5baf79f61 chore(mobile): post release task (#15148) 2025-01-08 11:51:08 +01:00
Alex
e183c9b917 chore(docs): remove duplicate filename (#15149) 2025-01-07 19:58:50 +00:00
github-actions
840d99ed25 chore: version v1.124.0 2025-01-07 19:00:42 +00:00
Sebastian Schneider
b4c1304b46 feat(web): Improve duplicate suggestion (#14947)
* feat: Improve duplicate suggestion

* format

* feat(web): Add deduplication info popup

* fix: lint

* fmt

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-07 18:30:11 +00:00
Jonathan Jogenfors
23f3e737fd fix(server): don't delete offline files from disk when trash empties (#14777)
fix: don't delete offline files from disk when emptying trash

Move logic to asset deletion check
2025-01-07 18:25:43 +00:00
Weblate (bot)
10e569cc1c chore(web): update translations (#14759)
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: AMIR IZZUDDIN <amirizzuddin@outlook.com>
Co-authored-by: Abhishek Kumar <abyshek.kumar@gmail.com>
Co-authored-by: Alan Ye <git@wrye.dev>
Co-authored-by: Alan Ye <me@wrye.dev>
Co-authored-by: Alexander Roumeliotis <alexroumeli@gmail.com>
Co-authored-by: Benjamin Freeman <b.t.freeman16@gmail.com>
Co-authored-by: Berkan Özkan <ozkanberkan@yandex.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bohuslav Uličný <justadreamer@duck.com>
Co-authored-by: Christian Shannon <dargelf@gmail.com>
Co-authored-by: Chuckame <antoine.michaud.17@gmail.com>
Co-authored-by: Cristi Bklash <bklash3@gmail.com>
Co-authored-by: Denis Saamiev <samievdenis@gmail.com>
Co-authored-by: Dominik <dominik.falis@proton.me>
Co-authored-by: Eirik Rolland Enger <engeir@pm.me>
Co-authored-by: Eshgin <eshqin.quluzade1@gmail.com>
Co-authored-by: Evgenij Spitsyn <evgeniy@spitsyn.net>
Co-authored-by: Filip <fjokovic0@gmail.com>
Co-authored-by: Fredrik Andersson <membership@fredande.se>
Co-authored-by: Heine Olsen <olsen10051988@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Jozef Pistej <pistej2@gmail.com>
Co-authored-by: Kalilinoe Alohilani <akalilinoe@gmail.com>
Co-authored-by: Kamil Warczek <kamilwarczek@gmail.com>
Co-authored-by: Kenji Opdam <kenji.opdam@gmail.com>
Co-authored-by: Lab Forensic <recoverylabkor@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leon S. Kennedy <leonsk29@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Matteo Morari <matteo.morari04@gmail.com>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mystically <github@mytrydas.com>
Co-authored-by: Nicolai Bonde <git@nicolaibonde.dk>
Co-authored-by: Noisy Fridge <pureprince.habib@gmail.com>
Co-authored-by: OskarSidor <oskar.sidor@gmail.com>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Pascal Dietrich <pascal.1.dietrich@hotmail.com>
Co-authored-by: Paul Kupper <p@ul-kupper.de>
Co-authored-by: Paul Murphy <djxistenz@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Rekku484 <rekku484@gmail.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: Sander Brilman <brilmansander@gmail.com>
Co-authored-by: Sedat Albayrak <sedat.albayrak@icloud.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Shogo Takata <pineapplehunter.daniel@gmail.com>
Co-authored-by: Stijn <gielisstijn@gmail.com>
Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Co-authored-by: Tal Sitton <tal.sitton04@gmail.com>
Co-authored-by: Thomas Möller <thomas.moeller@mailbox.org>
Co-authored-by: Torben Eims <torben.eims@gmx.de>
Co-authored-by: Venkateswaran Ganesan <vganes3@gmail.com>
Co-authored-by: Vojta Linha <vojtech.linha+weblate@gmail.com>
Co-authored-by: WilliamNT <hwbendeguz@gmail.com>
Co-authored-by: Yuki IWATA <daburutti@gmail.com>
Co-authored-by: aln <imyapear@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: gjarek98 <gjarek48@gmail.com>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: quitroot <quitroot@gmail.com>
Co-authored-by: rezi nagro <rezinagro@hotmail.com>
Co-authored-by: scudo <whiteshield.tg@protonmail.com>
Co-authored-by: sibber5 <ghasjado@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Álvaro Orduna León <alvaro.orduna.92@gmail.com>
Co-authored-by: Ľubomír Dlhý <dlhylubomir@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
Co-authored-by: Пламен Марков <tsmhunter@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
2025-01-07 17:13:40 +00:00
Alex
61c9c14ba6 fix(mobile): mismatch language (#15141) 2025-01-07 17:02:52 +00:00
Alex
d0ec24ef08 chore(mobile): translations update (#15139)
chore(mobile): translation update
2025-01-07 16:52:25 +00:00
David Koňařík
fa0b352bd0 feat: "add to album" shortcut and generic menu option shortcuts (#15056)
* Add shortcut prop to MenuOption

* Add "add to album" shortcut in photo grid
2025-01-07 10:29:22 -06:00
John Stef
c148a28a82 fix(mobile): fix text search (#14873)
* fix(mobile): fix text search

* chore(mobile): add tests for SearchPage

* fix(mobile): fix render overflow for small screens

Needed for SearchPage test to not throw overflow error

* chore(mobile): update import_rule_openapi

* styling

* preserve styling and skip a test

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-07 16:26:14 +00:00
Zack Pollard
776be7d205 fix: reverse geocoding data import don't use unlogged tables (#15136) 2025-01-07 15:36:07 +00:00
Alex
c937097db4 chore(mobile): add new language locales (#15138)
chore(mobile): add new languages locale
2025-01-07 15:30:52 +00:00
Jordan
ff7a66a2c5 docs: add warning about superuser requirement for automated database backups. (#15045)
Add warning about superuser requirement for automated database backups.
2025-01-07 09:04:04 -06:00
Jason Rasmussen
9bc13aca7c chore: use 307 for redirects (#15119) 2025-01-06 17:51:18 -05:00
Ovidijus R
a13b7b364e feat(mobile): add ability to force view original videos (#15094) 2025-01-06 15:29:47 -05:00
scottdesilva
1f0ffd634a fix(server): unit test for creating tag with color (#15120)
* Pass color to tag repo on creation

* unit test for creating tag with optional color
2025-01-06 13:33:48 -06:00
scottdesilva
c78e9d6ad5 fix(server): save color when creating tag (#15106)
Pass color to tag repo on creation
2025-01-06 12:21:55 -05:00
loowiz
6fd9f93375 docs: Add disable iOS low power mode suggestion (#15110)
* docs: Add disable iOS low power mode suggestion

Just added the suggestion under "Why is background backup on iOS not working?" to also disable low power mode.
I've seen so many people who just have low power mode permanently on, but this can affect background app refresh (https://support.apple.com/en-us/101604)

* Update FAQ.mdx

* Make wording more consistent in docs/docs/FAQ.mdx

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

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-06 15:38:36 +00:00
Matthew Momjian
e7667a7896 docs: warning for LXC use (#15071)
warn for LXC use
2025-01-05 16:10:00 -05:00
Matthew Momjian
a81fb73faf feat(docs): additional corruption checks (#15102)
corruption checks
2025-01-05 18:03:53 +00:00
Buan
6a9d57ad33 docs: update Spanish README (#15081)
* Update README_es_ES.md

* Add Traduction and activity section, and corrected a string
2025-01-04 13:00:46 -06:00
Mattia Natali
d29bdd6308 feat(web): Swipe down shows slideshow controlbar on mobile (#15080)
Swipe down show slideshow controlbar on mobile
2025-01-04 18:18:05 +00:00
Mert
fcd372238f chore(server): add support for .m2t (#15064)
* add m2t

* ordering
2025-01-03 16:28:32 -06:00
Arno
b45ff8d09f feat(web): Enable selection interactions in folder view (#15049)
* feat(web): Enable selection interactions in folder view

* feat(web): Add link to parent folder in detail pane, if folders are enabled

* Added invalidation and refreshing of asset cache on changes

* fix: removed unused imports and changed link

* chore: styling

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-03 16:09:31 +00:00
mehring
007caa26bd chore(web): remove tree item thumbnail class 'max-h-[500px]' (#14901)
* fix tree item thumbnail class 'max-h-[500px]'

* fix tag/folder navigation bar on the top all the time.
2025-01-02 12:14:44 -06:00
pyorot
c792f72469 chore(web): transcoding settings cleanup (#14765)
* rearrangement only

* add accordions (requiring new localisation keys)

* localisation string adjustments

* capitalisation fix in existing code

* suggestions from @mertalev + revert accidental EOF \n deletion

* linting

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-02 10:38:33 -06:00
waclaw66
d19a749903 fix(mobile): album tile translation and consolidation with card appereance (#15032)
fix(mobile): album tile translation and consolidation with card

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-02 10:19:55 -06:00
Alex
6239365f68 chore(docs): clean up and add new content (#15003)
* wip: Install

* wip: sharing

* wip: features

* wip: features

* wip: tags and folder view

* update links

* fix: broken reference to page sections

* pr feedback

* Update docs/docs/overview/comparison.md

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

* webp

* webp is glory

* webp is glory

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-01-02 10:04:14 -06:00
Ionuț Ciocîrlan
8641ab82e1 fix(web): fix input autofocus (#15028)
applies to tag creation modal, and possibly other places
2025-01-02 09:02:03 -06:00
Deluxe-7
6e78499fc9 chore(docs): Updated the docker-compose.mdx to account for additional bugs. (#15026)
Updated the docker-compose.mdx to account for another bug

I have found that receiving a permission denied error is likely due to the Docker engine not being installed.
2025-01-02 09:01:43 -06:00
bo0tzz
dbd10e4704 chore: add clarifying warning to backup page (#15000)
* chore: add clarifying warning to backup page

* add extra note
2025-01-02 09:01:29 -06:00
bo0tzz
953a643922 fix(docs): roadmap ordering (#15034)
Followup for #15023
2025-01-02 15:01:10 +00:00
bo0tzz
3e456dcb45 chore: add sub-path warning to reverse proxy docs (#15039) 2025-01-02 15:00:53 +00:00
Chuckame
3c35b467f4 feat(server): use the earliest date between file creation and modification timestamps when missing exif tags (#14874)
* feat(server): Use the earliest date between file creation and modification timestamps when missing exif tags

* PR fixes

* PR fixes

* Switch log to debug

* fix linter for min date

* apply prettier
2025-01-02 04:50:15 +00:00
Tom Graham
5111ceffac fix(mobile): playing a live photo causes the gallery to redraw the wrong image (#15027)
Fixed an issue where playing a motion video caused the gallery to re-render on the wrong image.

Co-authored-by: Tom graham <tomg@questps.com.au>
2025-01-01 22:46:06 -06:00
Matthew Momjian
4d6d5537b7 fix(docs): discourage docker desktop (#15020)
* discourage docker desktop

* callout *nix OS as supported

* change order, clarify mac
2025-01-01 19:58:53 -05:00
Matthew Momjian
fabf878637 fix(docs): month (#15024)
why is the date index at 0??
2025-01-01 18:34:01 -06:00
Matthew Momjian
efa24d26e6 fix(docs): push roadmap for 2025 (#15023)
* update roadmap.

* oops
2025-01-01 18:17:13 -06:00
Landon Thull
8fd5cdafd4 fix: spelling error in facial recognition docs (#15011) 2025-01-01 12:26:00 +00:00
jon6fingrs
ccf57458c7 docs: add immich-dl to community projects (#15005) 2025-01-01 12:25:25 +00:00
Felix Bühler
4448143197 chore(docs): add reference to metric ports (#14887)
chore(docs): add refference to metric ports
2024-12-28 17:49:06 -05:00
mehring
34ce61d03a feat(web): create tag on the fly (#14726) 2024-12-27 17:29:57 +00:00
Lukas
0250a7a23a fix(web): Fix for failing to load pictures (#14943)
* attempt at fix for failing to load pictures

* comments

* remove unused files

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-12-27 16:16:07 +00:00
renovate[bot]
b91f39d1af chore(deps): update base-image to v20241224 (major) (#14905)
chore(deps): update base-image to v20241224

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-27 09:51:42 -06:00
Daniel Dietzler
139090715e fix: trusted proxies (#14888) 2024-12-27 09:51:07 -06:00
Sam Debruyn
05cea0fc69 chore(mobile): remove duplicate settingsservice (#14946)
remove duplicate settingsservice
2024-12-27 09:45:23 -06:00
Yaros
2255f3e966 feat(mobile): Modified draggable area of detail modal (#14953)
Modified draggable area of detail modal
2024-12-27 09:28:54 -06:00
Yaros
2be1cb7de2 fix(mobile): Fixed resolution format in Details (#14954)
Fixed resolution format on mobile
2024-12-27 09:20:07 -06:00
indam
227eb4b0a6 docs: Update Chinese README (#14926)
* Update Chinese README

* retrigger checks
2024-12-25 08:09:47 -05:00
bo0tzz
23461e98fb fix: clarify PR label validation message (#14925) 2024-12-25 08:07:52 -05:00
renovate[bot]
ef0070c3fd fix(deps): update machine-learning (#14891) 2024-12-23 20:04:55 -05:00
renovate[bot]
6b08e82cf7 fix(deps): update dependency @nestjs/swagger to v8 (#13881)
* fix(deps): update dependency @nestjs/swagger to v8

* chore: generate open api

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-12-23 21:03:34 +00:00
Ben
b88f98bf66 feat(web): Add "set as featured" option for an asset (#14879) 2024-12-23 12:26:53 -06:00
Jonathan Jogenfors
c3be74c450 fix(server): support import paths with special chars (#14856) 2024-12-22 16:22:16 -06:00
Jonathan Jogenfors
4bc2aa5451 feat(server): Handle sidecars in external libraries (#14800)
* handle sidecars in external libraries

* don't add separate source
2024-12-21 20:50:07 -06:00
Alex
6080e6e827 fix(web): infinite loop browser navigation crash admin settings page (#14850)
* fix(web): infinite loop browser navigation crash admin settings page

* pr feedback
2024-12-21 19:26:01 +00:00
Lukas
d5906c2efe feat(web): Adds toggle to disable sorting of faces (#14830)
* Allows for toggling of sorting in the merge face selector

* Adds toggle to the side panel for faces

* Improve layout and fix toggle

* chore: ui cleanup

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-12-21 16:53:37 +00:00
Matthew Momjian
b3821c50d7 chore(docs): FAQ cleanup (#14835)
* FAQ cleanup

* link fix

* copy paste error
2024-12-20 23:40:33 -06:00
Matthew Momjian
1cec3af98c chore(docs): fix broken link in FAQ (#14834)
broken link
2024-12-20 16:36:42 -06:00
Ben McCann
da70a1e457 chore: migrate to SvelteKit app state (#14807)
* chore: migrate to SvelteKit app state

* update package-lock.json
2024-12-20 17:18:22 -05:00
Alex
a14735846c chore(mobile): add timeout when reading video files (#14831) 2024-12-20 13:52:42 -06:00
Michel Heusschen
79a780e8d9 fix(web): downloading partner assets (#14803) 2024-12-19 14:56:16 +00:00
Slavik
556c59f12f docs: misspelled var "urls" in the "machineLearning" (#14786)
[docs] misspelled var "urls" in the "machineLearning"

Co-authored-by: slavik.fursov <slavik.fursov@oracle.com>
2024-12-18 19:57:25 -05:00
renovate[bot]
8e724c3c27 chore(deps): update base-image to v20241217 (major) (#14776)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 18:27:08 +00:00
renovate[bot]
207bb527bb chore(deps): update dependency exiftool-vendored to v28.8.0 (#13924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 18:14:30 +00:00
Alex
b034cb1861 fix(mobile): keep empty album as selected target (#14778) 2024-12-18 11:10:29 -06:00
Daniel Dietzler
6a855f6331 chore: update deps (#14755) 2024-12-18 14:19:48 +00:00
renovate[bot]
a03f4f5610 chore(deps): update docker/setup-buildx-action action to v3.8.0 (#14757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 14:18:21 +00:00
renovate[bot]
e0fc8734bf chore(deps): update dependency ruff to v0.8.3 (#14756)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-17 15:35:22 -05:00
renovate[bot]
0d060ebb32 chore(deps): update node (#14736)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-17 15:21:01 -05:00
Alex
f58b2572e6 chore: post release tasks (#14749) 2024-12-17 14:02:07 -06:00
github-actions
fd34a914a6 chore: version v1.123.0 2024-12-17 16:00:50 +00:00
Weblate (bot)
b81470a383 chore(web): update translations (#14495)
Co-authored-by: Adam Uchmanowicz <auchmanowicz@gmail.com>
Co-authored-by: Andrii Solianyk <asolianik2015@gmail.com>
Co-authored-by: Andrius <sndriuss@gmail.com>
Co-authored-by: Arnyminer Z <arnyminer.z@gmail.com>
Co-authored-by: Benjamin Ulstein <ben@ulsteinmedia.no>
Co-authored-by: Berkan Özkan <ozkanberkan@yandex.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bohuslav Uličný <justadreamer@duck.com>
Co-authored-by: CanbiZ <mickey.leskowitz@gmail.com>
Co-authored-by: Denis Saamiev <samievdenis@gmail.com>
Co-authored-by: Dzmitry Babak <alexgott1990@gmail.com>
Co-authored-by: Emre Bicer <emreee.bicer@gmail.com>
Co-authored-by: Filip <fifammlaf@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Jak97 <mneamtu74@gmail.com>
Co-authored-by: Jonas Grubbauer <nicjontrickshots@gmail.com>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Kenneth <kenneth@flugheim.no>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Lukasz Socha <ukiduki.king@gmail.com>
Co-authored-by: Marrick Schröder <marrick.schroeder@gmail.com>
Co-authored-by: Mathias <mathias_aerts@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Matteo Crocetti <matteocrocetti@proton.me>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: MrJonasKr <hr.jonas.kr@protonmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Oton <oms.moreira@outlook.com>
Co-authored-by: Paul <paul.kunad@kabelmail.de>
Co-authored-by: Pelayo García Bárcena <pgarciabarcena@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: PontusÖsterlindh <pontus@osterlindh.com>
Co-authored-by: Ram Tourgeman <ramtorgeman@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: Ryan Gleeson <gleeson.ryanj@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Spark108 <kirito.asumo@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: Svetoslav Popov <svetoslav.b.popov@gmail.com>
Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Co-authored-by: Vatsal <gajjar.vatsal10602@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Zmicier Yarashevich <github@zmcr.de>
Co-authored-by: acc acc <hangergea@gmail.com>
Co-authored-by: bill85101 <bill85101@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: kawinhill <kawinhill1112@gmail.com>
Co-authored-by: kraptor <kraptor@kraptor.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: stelle <itsazripp2@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
2024-12-17 15:42:57 +00:00
Alex
6f3b6365e5 chore(mobile): translations update (#14747)
chore(mobile): translation update
2024-12-17 15:16:22 +00:00
aviv926
2948b9ed29 fix(web): fix missing icons (#14737)
* Updates

* fix

* Revert "Updates"

This reverts commit 724b538101.

* format
2024-12-16 23:06:50 -05:00
Alex
a2dd9622a3 fix(mobile): live photos playback (#14731) 2024-12-16 21:00:49 +00:00
Alex
c7b44bef81 fix(mobile): native dialog location (#14730) 2024-12-16 15:26:52 -05:00
Kevin Cox
95f300f8d2 docs: Add more documentation for video transcoding settings. (#13388)
Add more documentation for video transcoding settings.

This adds documentation on many of the video transcoding settings `ffmpeg.*`. I focused the documentation on values that aren't just passthough to ffmpeg settings but that are custom to Immich.
2024-12-16 11:20:33 -06:00
Alex
9503bf479b feat(album): album view sort order (#14648)
* feat(mobile): album view sort order

* feat: add error message

* refactor(mobile): album page (#14659)

* refactor album page

* update lint rule

* const record

* fix: updating sort order when pull to refresh

---------

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

* Move sort toggle button to bottom sheet menu

* chore: revert multiselectgrid loading status

* chore: revert multiselectgrid loading status

---------

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2024-12-16 16:11:48 +00:00
pyorot
364b717fde docs: improve install/requirements and install/docker-compose (#13569)
* cleanup install docs

* Apply suggestions from mmomjian's code review

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>

* consequent wording simplifications

* latest rewording of start/restart

* Update requirements.md

removed leftover newline

---------

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>
2024-12-16 10:04:39 -06:00
000yesnt
f180ae70f9 feat(server): add Bash healthcheck script (#14704)
* feat(server): add Bash healthcheck script

* fix(server): add 2 second timeout for healthcheck.js parity

* chore(server): delete old healthcheck Node script

* fix(server): feedback

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-12-16 15:19:18 +00:00
renovate[bot]
4edeed9739 fix(deps): update machine-learning (#14630)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 09:03:04 -06:00
renovate[bot]
e52774553f chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 9791f4a (#14700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 08:59:46 -06:00
Lukas
12e55f5bf0 feat(server): Merge Faces sorted by Similarity (#14635)
* Merge Faces sorted by Similarity

* Adds face sorting to the side panel face merger

* run make open-api

* Make it one query

* Only have the single order by when sorting by closest face
2024-12-16 08:47:11 -06:00
martin
8945a5d862 fix: reduce the number of API requests when changing route (#14666)
* fix: reduce the number of API requests when changing route

* fix: reset `userInteraction` after sign out
2024-12-16 08:45:01 -06:00
Alex
6b0f9ec46c chore(mobile): post release tasks (#14656) 2024-12-16 08:42:40 -06:00
Alex Sherwin
fe554c3a5b fix(mobile): set custom headers on external url (#14707) (#14708) 2024-12-15 21:09:52 +00:00
Alex
dd9feeec45 chore(mobile): remove screen auto-dimming (#14699) 2024-12-14 14:53:15 -05:00
renovate[bot]
cc111a1fcb fix(deps): update dependency analyzer to v7 (#14673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-14 13:43:31 -06:00
Michel Heusschen
b5022d80d6 refactor(web): asset interaction (#14662)
* refactor(web): asset interaction

* feedback
2024-12-14 13:30:33 -05:00
Tim Van Onckelen
525840b040 fix(server): fixed email footer image stretched #14617 (#14671) 2024-12-13 17:13:38 +00:00
Alex
bccf2f60b2 fix(web): upload info panel covers timeline navigation bar (#14651) 2024-12-13 11:59:14 -05:00
renovate[bot]
39732f3371 chore(deps): update base-image to v20241210 (major) (#14670)
chore(deps): update base-image to v20241210

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 16:28:27 +00:00
renovate[bot]
40a0bf6ad5 chore(deps): update terraform cloudflare to v4.48.0 (#14669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 10:14:34 -06:00
Michel Heusschen
6abe696d0b fix(web): allow minimizing upload panel (#14663) 2024-12-12 10:13:42 -06:00
renovate[bot]
59d6af54c7 chore(deps): update node.js to v22.12.0 (#14650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 10:12:44 -06:00
renovate[bot]
58d63d9f1c chore(deps): update grafana/grafana docker tag to v11.4.0 (#14633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 10:10:51 -06:00
Michel Heusschen
11be85feb3 fix(web): live photo link action (#14668) 2024-12-12 09:48:50 -06:00
github-actions
c52f1bae81 chore: version v1.122.3 2024-12-11 21:15:03 +00:00
Alex
0c03753642 fix(server): fix getByDayOfYear query (#14655)
* fix(server): fix getByDayOfYear query

* generate sql
2024-12-11 20:51:56 +00:00
renovate[bot]
71b48b11e6 chore(deps): update dependency pytest-cov to v6 (#13925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 11:24:13 -06:00
Mert
3053d84e49 fix(mobile): not being able to zoom into live photos (#14608)
fix live photo zoom
2024-12-11 11:23:20 -06:00
Travis Menghini
e40c7c51ee feat(web): allow tags to be applied in bulk on search, personID, and memory-viewer pages (#14368)
* Allow Tags to be applied in bulk on search page

* Added Tags Action To PersonID Page

* Fixed Formatting Issues

* Added Tags Option to Memory-Viewer
2024-12-11 10:31:11 -06:00
dvbthien
11f585d0ad refactor(mobile): refactor theme management (#14415) 2024-12-11 16:30:56 +00:00
renovate[bot]
5814a1b223 chore(deps): update docker/build-push-action action to v6.10.0 (#14631)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 17:07:16 -06:00
renovate[bot]
bcc438eafb fix(deps): update dependency python-multipart to v0.0.18 [security] (#14458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 22:00:01 +00:00
renovate[bot]
7cae25c28b chore(deps): update prom/prometheus docker digest to 565ee86 (#14535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 15:59:45 -06:00
vladd11
f6909a3b11 chore(docs): add Kodi plugin for Immich to the Community Projects list (#14586) 2024-12-10 15:58:14 -06:00
Alex
70b4647a21 chore(mobile): post release tasks (#14603) 2024-12-10 21:55:59 +00:00
Matthew Momjian
345f918784 chore(docs): stronger discouraging of non-Linux installations (#14620)
* no windows!

* 2

* 3

* Update docs/docs/install/requirements.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

* Update requirements.md

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-12-10 16:42:45 -05:00
Mert
9eff1c4b34 refactor(server): move filters to getByDayOfYear query (#14628)
move filters to getByDayOfYear query
2024-12-10 16:22:47 -05:00
Mert
25ca3b1124 refactor(server): use includeNull in query for search suggestions (#14626)
* use `includeNull`

* push down `includeNull` into query, inner joins

* remove filter

* update sql

* fix tests

* maybe fix e2e

* more e2e tests

* handle no exif row

* whoops

* update sql
2024-12-10 16:22:37 -05:00
Mert
60c783bbe9 fix(server): partial fallback for hardware transcoding (#14611) 2024-12-10 12:11:19 -05:00
Lukas
1ba622adc9 feat: Add support for vob (#14590)
Add support for vob
2024-12-08 20:35:23 -06:00
Daniel Dietzler
e4b76e8efe chore: add language requests from weblate (#14578) 2024-12-08 17:52:10 -06:00
github-actions
03eb5903fe chore: version v1.122.2 2024-12-08 23:41:22 +00:00
Alex
04b311bd93 chore(mobile): disable Impeller (#14589) 2024-12-08 23:22:39 +00:00
Cotterman-b
e99edc47b7 fix(mobile): fix translations on search page (#14533)
* Update en-US.json

* Update search.page.dart
2024-12-07 10:46:19 -06:00
Michel Heusschen
5e955a1b03 fix(web): recent albums sort (#14545) 2024-12-07 10:24:00 -06:00
renovate[bot]
e2b36476e7 chore(deps): update grafana/grafana docker tag to v11.3.1 (#14476)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-06 21:10:47 -05:00
Alex
c02e3e2a2e chore(mobile): post release tasks (#14520) 2024-12-06 21:04:02 -05:00
github-actions
97c1eb7289 chore: version v1.122.1 2024-12-06 13:49:14 +00:00
Mert
07096bdcee fix(server): images with non-ascii names failing to load (#14512)
* utf-8 filename

* Update file.ts

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>

---------

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
2024-12-06 07:43:58 -06:00
renovate[bot]
d36477381a chore(deps): update dependency @sveltejs/kit to v2.8.3 [security] (#14342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 19:31:27 -05:00
Alex
4380ecf7bb fix(web): misaligned icon on Firefox (#14500) 2024-12-05 21:10:08 +01:00
github-actions
37220a342a chore: version v1.122.0 2024-12-05 16:29:46 +00:00
Alex
5e662e4a93 chore(mobile): Translations update (#14493)
chore(mobile): translation update
2024-12-05 16:26:48 +00:00
Weblate (bot)
bb0242ae0a chore(web): update translations (#14255)
Co-authored-by: Alisher Nabiev <alisher.nabiev@gmail.com>
Co-authored-by: Armand Maree <aamaree@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Daniel <danielwichers@gmail.com>
Co-authored-by: Dean Cvjetanović <forteee@gmail.com>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Enrico Zangrando <enrizangri@gmail.com>
Co-authored-by: Eugenio Marotta <eugeniomarotta1961@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Jonathan <translate@lacroix.red>
Co-authored-by: João Pedro Grugel <joaopedrorg97@hotmail.com>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Koen <62koen@users.noreply.hosted.weblate.org>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Marco Lampis <lampis.marco2000@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Mickaël Descamps <mickael.descamps@mineyou.fr>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: OskarSidor <oskar.sidor@gmail.com>
Co-authored-by: Paweł <pawel.kozicki01@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Ramazan S <ramazansancar4545@gmail.com>
Co-authored-by: Rasulmmdv <rasul1995@live.com>
Co-authored-by: Rookie Nguyễn <nguyenquocthang2004@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: Stijn <gielisstijn@gmail.com>
Co-authored-by: Stsiapan Ranchynski <stsiapan.ranchynski@gmail.com>
Co-authored-by: Suryo Wibowo <nutzlichsein+github@gmail.com>
Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Viliam <hrygames@gmail.com>
Co-authored-by: Vladislav Tkalin <mrtold11@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: bill85101 <bill85101@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: mitakskia <spammitakskia@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: stelle <itsazripp2@gmail.com>
Co-authored-by: therry47 <soulietherry@gmail.com>
Co-authored-by: tomechio <tomasz@salamon.fi>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Ömer Efe ÇELİK <omerefecelik3@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
2024-12-05 16:11:02 +00:00
Alex
055f1fc72f feat(mobile): Auto switching server URLs (#14437) 2024-12-05 09:11:48 -06:00
shenlong
3c38851d50 feat(mobile): native_video_player (#12104)
* add native player library

* splitup the player

* stateful widget

* refactor: native_video_player

* fix: handle buffering

* turn on volume when video plays

* fix: aspect ratio

* fix: handle remote asset orientation

* refinements and fixes

fix orientation for remote assets

wip separate widget

separate video loader widget

fixed memory leak

optimized seeking, cleanup

debug context pop

use global key

back to one widget

fixed rebuild

wait for swipe animation to finish

smooth hero animation for remote videos

faster scroll animation

* clean up logging

* refactor aspect ratio calculation

* removed unnecessary import

* transitive dependencies

* fixed referencing uninitialized orientation

* use correct ref to build android

* higher res placeholder for local videos

* slightly lower delay

* await things

* fix controls when swiping between image and video

* linting

* extra smooth seeking, add comments

* chore: generate router page

* use current asset provider and loadAsset

* fix stack handling

* improved motion photo handling

* use visibility for motion videos

* error handling for async calls

* fix duplicate key error

* maybe fix duplicate key error

* increase delay for hero animation

* faster initialization for remote videos

* ensure dimensions for memory cards

* make aspect ratio logic reusable, optimizations

* refactor: move exif search from aspect ratio to orientation

* local orientation on ios is unreliable; prefer remote

* fix no audio in silent mode on ios

* increase bottom bar opacity to account for hdr

* remove unused import

* fix live photo play button not updating

* fix map marker -> galleryviewer

* remove video_player

* fix hdr playback on android

* fix looping

* remove unused dependencies

* update to latest player commit

* fix player controls hiding when video is not playing

* fix restart video

* stop showing motion video after ending when looping is disabled

* delay video initialization to avoid placeholder flicker

* faster animation

* shorter delay

* small delay for image -> video on android

* fix: lint

* hide stacked children when controls are hidden, avoid bottom bar dropping

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2024-12-04 16:03:46 -05:00
Tim Van Onckelen
5060ee95c2 feat(web): Album preview overview in menu (#13981) 2024-12-04 20:38:55 +00:00
Tim Van Onckelen
292182fa7f feat: Notification Email Templates (#13940) 2024-12-04 20:26:02 +00:00
Mert
4bf1b84cc2 feat(ml): support multiple urls (#14347)
* support multiple url

* update api

* styling

unnecessary `?.`

* update docs, make new url field go first

add load balancing section

* update tests

doc formatting

wording

wording

linting

* small styling

* `url` -> `urls`

* fix tests

* update docs

* make docusaurus happy

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-12-04 20:17:47 +00:00
Alessandro Piccin
411878c0aa fix(mobile): album most recent sorting on mobile (#13766)
* Fix album most recent sorting on mobile

* fix: format

* fix: format

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-12-04 19:53:55 +00:00
Mert
ba9b9353bc fix(server): show people without thumbnails (#14460)
* show people without thumbnails

* redundant clause

* updated sql
2024-12-03 15:04:42 -05:00
Mert
52247c3650 fix(server): always set transcoding device, prefer renderD* (#14455)
always set device, prefer renderD*
2024-12-02 20:28:50 -05:00
System Tester
ba71fd42da chore(mobile): added 'corrupt asset check' translation item (#14402) 2024-12-02 12:14:12 -06:00
Alex
1bb6926b5e chore(mobile): Add const linter (#14447) 2024-12-02 15:33:44 +00:00
Eli Gao
4eb7758f56 feat(server): specify names for thumbnail files (#14425) 2024-12-01 13:21:08 -06:00
System Tester
56d2309122 fix: ConnectivityResult.wifi regression (#14401) 2024-11-28 22:34:18 -06:00
Michel Heusschen
3d61548d7d fix(web): resolve issues with user usage statistics and refactor (#14374) 2024-11-27 07:45:52 -06:00
Alex
b4c96a09fb chore: follow up on auth refactoring (#14367)
* chore: follow up on auth refactoring

* remove async
2024-11-26 13:36:12 -06:00
Alex
21f14be949 chore(mobile): refactor authentication (#14322) 2024-11-26 12:43:44 -06:00
Sam Holton
5417e34fb6 feat(server): Add publicUsers toggle for user search (#14330)
* feat(server): Add publicUsers toggle for user search

* tests

* docs: add check:typescript for web PR checklist

* return auth.user when publicUsers is false - app testing

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-26 15:51:01 +00:00
Michel Heusschen
b6ec79cbdd fix(web): timeline issues on person page (#14366) 2024-11-26 15:02:48 +00:00
Matthew Momjian
25488b3138 chore(deployment): cleanup database container args, move to using internal container ENV vars (#14352)
* cleanup docker, normalize variable use

* newline

* semicolons
2024-11-26 08:59:56 -06:00
Alex
361d83c729 feat(web): dedicated view for user's usage stats (#14348)
* feat(web): dedicated view for user's usage stats

* cell heights

* Translation

* pr feedback

* clean up

* clean up

* pr feedback
2024-11-26 14:59:47 +00:00
Calum Dingwall
d277096d58 feat(web): persist scroll position on navigation back to album (#11388)
Co-authored-by: Calum Dingwall <caburum@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-25 18:16:42 +00:00
Michel Heusschen
51de108d43 chore(web): restore type checks and IDE autocomplete for $t('...') (#14343) 2024-11-25 11:10:12 -07:00
Michel Heusschen
ca37a13b25 fix(web): stack preview remains visible in asset viewer (#14341) 2024-11-25 16:34:48 +00:00
Michel Heusschen
447ff6fcb3 fix(web): clear combobox value when selectedOption is undefined (#14334) 2024-11-25 08:14:21 -06:00
renovate[bot]
b9e98d2706 chore(deps): update dependency flutter to v3.24.5 (#14332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 04:20:00 +00:00
Michel Heusschen
c33b918d74 refactor(web): folders store (#14305)
* refactor(web): folders store

* use typescript private
2024-11-23 13:22:13 -06:00
Michel Heusschen
454836b551 fix(web): make custom css textarea optional (#14303) 2024-11-23 13:20:30 -06:00
Alex
6d492985a2 fix(web): cannot upload folder with more than 100 files (#14284)
* fix: web cannot upload folder with more than 100 files

* recursively call the function

* async/do/while
2024-11-22 22:38:20 +00:00
San
1c82804f63 fix(server): use hw decoding for rkmpp w/o OpenCL if possible (#13848)
* Set hardware decoding options for rkmpp when hardware decoding is enabled with no OpenCL on non-HDR file

* Use hw decoding, sw tone-mapping on HDR files using RKMPP w/o OpenCL

* fallback to software decoding if is hdr video

* if hw decoding failed with hw dec config enabled, try sw dec+hw enc first, then full sw dec+enc

* fix unit test

* fix format, adjust log message

* formatting

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2024-11-22 08:08:49 +00:00
Matthew Momjian
1935b88d13 docs: clarify/strengthen wording of PG deployment requirements (#14294)
* clarify/strengthen PG wording

* 2

* oops

* Update requirements.md

---------

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2024-11-22 05:53:47 +00:00
dvbthien
e8da6604c9 refactor(mobile): refactor to use context helpers for consistency (#14235)
refactor to use context helpers for consistency

Co-authored-by: dvbthien <dvbthien@gmail.com>
2024-11-21 09:35:58 -06:00
renovate[bot]
45ba0cc3ac fix(deps): update typescript-projects (#13939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2024-11-21 14:07:06 +00:00
Rudolf Horváth
689c6aa276 docs: add developer notes about rootless docker setup (#13250) 2024-11-21 12:25:45 +00:00
Alex
6ec94f94f1 feat: show delete album option in empty album (#14271)
* fix: show delete album option in empty album

* remove unused code
2024-11-20 17:17:21 -06:00
Alex
9a9d40c193 feat(server): clean up interrupted upload files (#14265)
* feat(server): clean up interrupted upload files

* pr feedback

* remove console.log

* handle all errors

* remove return in callback function

* programming in bed is a bad idea
2024-11-20 17:17:12 -06:00
Jason Rasmussen
9e1e9b1fbf refactor: rename searchMetadata to searchAssets (#14151) 2024-11-20 14:47:25 -05:00
Jason Rasmussen
ed8a3101a8 chore: update dev ports (#14256) 2024-11-20 14:44:19 -05:00
Jason Rasmussen
876893c823 refactor(server): filter on-event handlers by worker (#14085) 2024-11-20 14:08:42 -05:00
renovate[bot]
c6e1dbec5c chore(deps): update base-image to v20241119 (major) (#14253)
chore(deps): update base-image to v20241119

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 14:05:39 -05:00
renovate[bot]
f40269bc3e chore(deps): update node.js to b64ced2 (#14218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 14:05:06 -05:00
Alex
95297cd024 chore(mobile): post release tasks (#14259) 2024-11-20 14:04:33 -05:00
Lukas
b6937c5e03 fix(server): Remove log that accidently was commited in #14134 (#14261)
Remove log that accidently was commited
2024-11-20 17:20:54 +00:00
github-actions
98c9ae1f7d chore: version v1.121.0 2024-11-20 16:15:53 +00:00
Weblate (bot)
1d8673eb3b chore(web): update translations (#13952)
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Antonio <antonioivanovski@gmail.com>
Co-authored-by: Benjamin Ulstein <ben@ulsteinmedia.no>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: Eduardo Pastor Fernández <123eduardoneko123@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: IM Ben <beniiorga@gmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jak97 <mneamtu74@gmail.com>
Co-authored-by: Jan Marten <kontakt@janmarten.dev>
Co-authored-by: Jaroslav Lichtblau <l10n@lichtblau.cz>
Co-authored-by: Ján Melíšek <melisek.janko@gmail.com>
Co-authored-by: Koen <62koen@users.noreply.hosted.weblate.org>
Co-authored-by: Krastyo Krastev <roshavi4ak@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Mehyar <mashkuov@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Noisy Fridge <pureprince.habib@gmail.com>
Co-authored-by: Peter Petrík <peter.petrik.fefe@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Samet Güzeldemirci <s.g52@gmx.de>
Co-authored-by: Sander Brilman <brilmansander@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: Thomas <thomas.ceccato.02@gmail.com>
Co-authored-by: Tomasz Jakubik <jakubik.tomasz@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: aquatic7 <aquatic7@protonmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: iamnotafatso <ee.chuajr@live.com>
Co-authored-by: kawinhill <kawinhill1112@gmail.com>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: krzemyk <krzemyk.official@proton.me>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: tuanhm107 <mtuanm03@gmail.com>
Co-authored-by: vassilismarougkas <billmarougkas@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-11-20 15:40:54 +00:00
Alex
026482099a chore(mobile): translations update (#14254)
chore(mobile): translation update
2024-11-20 15:32:17 +00:00
Shivansh Saini
c17c174149 docs: backup only selected photos (#14225)
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2024-11-20 15:19:01 +00:00
renovate[bot]
cfba7f7701 chore(deps): update terraform cloudflare to v4.46.0 (#14112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 15:10:29 +00:00
Mert
ad510dd6fd feat(server): faster geodata import (#14241)
* faster geodata import

* revert logging change

* unlogged tables

* leave spare connection

* use expression index instead of generated column

* do btree indexing with others
2024-11-20 08:57:14 -06:00
Daniel Dietzler
a3712e40bd fix: parse quota claim as number (#14178) 2024-11-19 15:40:56 -06:00
Mert
34fae31fd4 fix(server): remove unnecessary guc settings for vector search (#14237)
remove unnecessary guc settings
2024-11-19 15:37:39 -06:00
Alex
f8bbc6eabe fix: mobile album sync always triggered when opening the app (#14233)
* fix: mobile album sync always triggered when opening the app

* send lastModifiedAssetTimestamp when get individual album
2024-11-19 21:36:55 +00:00
weathondev
69e50d0d27 feat: Added shortcuts, shift-multi select and missing menu options to Search (Galleryviewer) (#14213)
feat: Added shortcuts, shift-multi select and missing menu options to GalleryViewer (Search, Share, Memories)

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-19 18:19:50 +00:00
John Stef
3a2e30e30e fix(mobile): fixes on language change (#14089)
* fix(mobile): make widgets rebuild on locale changes

This will make the make the pages to instantly refresh the correct
translated string, without the need to pop and push the settings page.

* fix(mobile): set the default intl locale

This is needed because across the app, you don't pass the context.locale
to DateFormat, so by default it uses the system's locale. This will fix
the issue without the need to refactor a lot of code.

* feat(mobile): create localeProvider

This provider can be used to refresh providers that provide UI elements
and get cached.

* fix(mobile): refresh asset providers on locale change

This is necessary to update the locale on the already evaluated
DateFormat.

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-19 12:09:29 -06:00
John Stef
53940f7d42 fix(mobile): make search page scrollable (#14228)
Fixes #13657
2024-11-19 17:59:26 +00:00
Alex
b66c53bef3 fix(web): layout shifting when scrolling up (#14226)
* fix(web): layout shifting when scrolling up

* feedback
2024-11-19 11:30:07 -06:00
Braydon Davis
1737013e66 feat(web): Implement keep this delete others for asset stacks (#14217) 2024-11-19 11:54:35 -05:00
John Stef
bcd17c2ebe feat(mobile): exclude locales from overpass font (#14158)
* feat(mobile): create localeProvider

This provider can be used to refresh providers that provide UI elements
and get cached.

* feat(mobile): use default font for locales not supported by Overpass

* chore(mobile): fix test

* refactor(mobile): use Locale instead of String
2024-11-19 09:36:46 -06:00
renovate[bot]
b031a8cac1 fix(deps): update machine-learning (#14219) 2024-11-18 20:17:18 -05:00
John Stef
41f138d3c8 fix(mobile): Dismissible menus (#14192)
* chore(mobile): make all search filters dismissible

* chore(mobile): make ImmichAppBarDialog dismissible

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-18 10:06:07 -06:00
Mert
6b5defc27b fix(mobile): use sets in album refresh, concurrent futures (#14193)
* use sets in album sync, concurrent futures

* batch excluded asset IDs

* update test

* take advantage of sets in Recents check

* move log statement

* smaller diff
2024-11-18 09:26:23 -06:00
renovate[bot]
2604940f09 chore(deps): pin mcr.microsoft.com/devcontainers/typescript-node docker tag to dc2c365 (#14124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 14:57:43 +01:00
Michel Heusschen
32f908baf1 fix: show tags when viewing stacked assets (#14199)
fix: refresh tags when viewing stacked assets
2024-11-18 07:50:04 -05:00
Mert
944ea7dbcd fix(mobile): unnecessary rebuilds from partner share notifier (#14170)
* fix unnecessary notifications

* move equality function

* sort by id

* use same comparison for initial and later queries
2024-11-17 12:04:55 -05:00
Matthew Momjian
4b5657c21e docs: get asset owner by ID from database (#14174)
asset owner
2024-11-16 14:43:32 -05:00
weathondev
f5c4af73aa feat: adding photo & video storage space to server stats (#14125)
* expose detailed user storage stats + display them in the storage per user table

* chore: openapi & sql

* fix: fix test stubs

* fix: formatting errors, e2e test and server test

* fix: upper lower case typo in spec file

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-15 16:38:57 -06:00
Michel Heusschen
24ae4ecff1 fix(web): don't refresh panorama viewer when modifying asset (#14163) 2024-11-15 16:30:38 -06:00
Michel Heusschen
64a7baec8c refactor(web): remove reactivity triggers (#14164) 2024-11-15 16:28:28 -06:00
Mert
caf6c0996d refactor(mobile): backup info box (#14171)
split up backup info box into separate widgets
2024-11-15 17:16:52 -05:00
Lena Tauchner
6729782c3f fix(cli): Concurrency not fully using queue potential (#11828) 2024-11-15 13:09:56 -05:00
Michel Heusschen
a60209db3e fix(web): prevent infinite loop when modifying stacked asset (#14162) 2024-11-15 07:16:56 -05:00
renovate[bot]
d1169e3b2f chore(deps): update prom/prometheus docker digest to 3b9b2a1 (#14154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 18:56:37 -05:00
Ben
df972ef711 feat(web): Added tag button to the context menu in the favorites page (#14156)
Added tag action to the context menu in the favorites page when selection is active
2024-11-14 16:06:36 -06:00
Alex
33263cf9f3 fix(mobile): Android local notification failes to invoke (#14155)
* fix(mobile): local notification failed to invoke

* add proguard rules
2024-11-14 16:05:32 -06:00
Michel Heusschen
1b5811d992 fix(web): allow selecting people after clearing search options (#14146) 2024-11-14 09:59:50 -06:00
Michel Heusschen
1fa0122eda fix(web): update description height when navigating between assets (#14145) 2024-11-14 09:59:30 -06:00
Alex
d1085e8a02 chore(web): move enum out of .svelte file (#14144)
* chore(web): clean up todo task

* chore(web): move enums out of .svelte file
2024-11-14 15:41:11 +00:00
Michel Heusschen
d6a70bc7e5 fix(web): saving pasted coordinates (#14143) 2024-11-14 15:21:40 +00:00
Michel Heusschen
d3fe238eef fix(web): ensure current asset index stays within bounds (#14013) 2024-11-14 09:05:36 -06:00
Pranay Pandey
35f24270fe fix: Routing back button in sharedLinks page (#13703)
* fix: go back to last page from shared links page. Handle albums page from shared links page routing

* add default route for sharing

* chore: remove redundant import

* remove unnecessary comment

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-14 15:00:33 +00:00
Đức
1f1a4ab1a3 fix(web): textarea autogrow height (#13983)
fix(web): remove album assetGridWidth & globalWidth

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-14 15:00:18 +00:00
Alex
0b3742cf13 chore(web): migration svelte 5 syntax (#13883) 2024-11-14 08:43:25 -06:00
Lukas
9203a61709 fix(server): Some MTS videos fail to generate thumbnail (#14134)
* Stop skipping of all frames in MTS video

* Only skip flag for mts videos

* Fix lint checks

* Adds test

* Add comment for why flag is removed
2024-11-14 07:07:04 +00:00
Mert
11403abfbc feat(mobile): new video slider ui (#14126) 2024-11-13 19:49:25 -05:00
mcarbonne
5a2af558fb feat: add minimal devcontainer setup (#14038)
* add minimal devcontainer setup

* fix Makefile & update doc

* fix Makefile

* add warning regarding devcontainer + add newline at EOF
2024-11-13 11:28:07 -06:00
John Stef
de993289ad fix(mobile): fix logout timeout (#14104)
* fix(mobile): add timeout to logout

* chore(mobile): refactor timeout durations

* feat(mobile): add loading state to logout button

* chore(mobile): format authentication.provider.dart

* chore: format

* chore: revert settings.json change

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-13 17:27:49 +00:00
Nicholas Flamy
c58bd307ce docs: Update TrueNAS docs for TrueNAS SCALE 24.10 (#14067)
* initial-docs-update

* add-info-about-external-libraries
2024-11-13 11:26:23 -06:00
Pablo Molina
333ca8827e feat: use dateTimeOriginal to calculate album date (#14119) 2024-11-13 11:17:14 -06:00
Alex
3dad19883d fix(mobile): duration ui overflow (#14120)
* fix(mobile): duration ui overflow

* pr feedback
2024-11-13 09:39:21 -06:00
renovate[bot]
4ca27a3e7f chore(deps): update redis:6.2-alpine docker digest to eaba718 (#14114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 07:12:30 -05:00
renovate[bot]
b0bb11f9e0 chore(deps): update docker.io/redis:6.2-alpine docker digest to eaba718 (#14113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 07:12:06 -05:00
Xuesong
ecb8349085 chore(docs): encode db dump in UTF-8 without BOM for Windows (#13775) 2024-11-13 10:05:53 +00:00
Mert
e1feba2198 refactor(mobile): video controls (#14086)
* refactor video controls

* inline

* make mute icon const

* move placeholder to private widget

* adjust text width, move volume button slightly right
2024-11-13 01:13:21 -05:00
renovate[bot]
53a7ac3868 chore(deps): update prom/prometheus docker digest to 2659f4c (#13928)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 23:30:06 -05:00
dependabot[bot]
f2e950d89c chore(deps): bump ytanikin/PRConventionalCommits from 1.2.0 to 1.3.0 (#13051)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-13 01:27:37 +00:00
renovate[bot]
8ba2c99b08 chore(deps): update docker.io/redis:6.2-alpine docker digest to 77c6e37 (#14097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 01:15:45 +00:00
renovate[bot]
93346496fc chore(deps): update redis:6.2-alpine docker digest to 77c6e37 (#14098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 01:15:30 +00:00
Alex
a9525de356 chore(mobile): post release tasks (#14105) 2024-11-12 14:34:33 -05:00
github-actions
31a1e64b58 chore: version v1.120.2 2024-11-12 17:30:29 +00:00
Zack Pollard
e17bd8efc6 fix(server): backup version checks not handling database versions correctly (#14102) 2024-11-12 10:57:05 -06:00
Alex
2f9019c0e1 fix(server): correct rotation for common files (#14092)
* fix(server): correct rotation for common files

* fix: test:

* pr feedback
2024-11-12 15:07:56 +00:00
Zack Pollard
dfa8a8a6e1 feat(server): use pg_dumpall version that matches the database version (#14083) 2024-11-12 14:58:29 +00:00
renovate[bot]
b9a0c3c79f chore(deps): update base-image to v20241112 (major) (#14088)
chore(deps): update base-image to v20241112

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 12:49:31 +00:00
renovate[bot]
bda97c4e0e chore(deps): update node (#14090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 07:32:52 -05:00
Robert Schütz
e3426c880f chore(ml): replace fastapi-slim with fastapi (#14091)
The two have been identical since version 0.112.0:
https://github.com/fastapi/fastapi/discussions/11525#discussioncomment-10219861
2024-11-11 23:08:29 -05:00
Zack Pollard
d4ca7d0075 fix: config updates not applying for job and storage template service (#14074) 2024-11-11 12:50:09 +00:00
Zack Pollard
f1c9b763cf docs: backup folder name is backups (#14073) 2024-11-11 12:28:53 +00:00
Zack Pollard
5097c92494 fix(server): attempt to delete failed backups immediately after failure (#13995) 2024-11-11 12:08:52 +00:00
gamescom15
7aacc92699 docs: clarify file size impact in hardware-transcoding.md (#14049) 2024-11-11 03:51:00 +00:00
Daniel Dietzler
00d6cc86ad chore: add weblate requests (#14051) 2024-11-10 15:49:23 -05:00
Joren Guillaume
54d881e5c6 docs: Fix DCM docs link (#14059)
Fix DCM docs link
2024-11-10 13:33:51 -05:00
Snowknight26
edce096680 chore(web): Update the new version announcement text (#14001)
* Update en.json

* Update en.json

* Update en.json
2024-11-09 12:15:25 -06:00
mcarbonne
5c31acbcf0 feat(web): stable json settings export (#14036)
* recursively sort json output (settings)

* fix format/lint/...g
2024-11-09 12:11:20 -06:00
Alex
6b49104d59 fix(mobile): make sure date locale is inititialized for some languages (#14035) 2024-11-09 10:40:13 -05:00
Ben
97dbe3236b chore(docs): roadmap SEO (#14024) 2024-11-08 19:48:23 -05:00
Michel Heusschen
586393f178 fix(web): use locale for scrubber label when scrolling (#14012) 2024-11-08 15:36:26 -05:00
bo0tzz
f3e88ea2fa docs: make IGNORE_MOUNT_CHECK warning stronger (#14011) 2024-11-08 13:29:10 +00:00
Terry Zhao
c8b46802d6 fix(server): thumbnail rotation when using embedded previews (#13948) 2024-11-08 06:30:59 +00:00
Jason Rasmussen
7534098596 fix(server): support non-default postgres port when taking a backup (#13992) 2024-11-07 20:06:16 +00:00
Zack Pollard
ec5b7c266b chore: backups custom location and config file docs (#13996) 2024-11-07 18:08:02 +00:00
Jason Rasmussen
e84ad084d5 refactor(server): cron validation (#13990) 2024-11-07 17:27:52 +00:00
Jason Rasmussen
dc2de47204 refactor(server): cron repository (#13988) 2024-11-07 12:15:54 -05:00
Alex
2fe6607aea chore(mobile): post release tasks (#13989) 2024-11-07 10:27:28 -06:00
Jason Rasmussen
64831e2328 refactor: remove smart info table (#13985) 2024-11-07 11:25:10 -05:00
Alex
6053214e75 chore(mobile): update isar build (#13987) 2024-11-07 09:54:19 -06:00
github-actions
599b489f81 chore: version v1.120.1 2024-11-07 15:31:19 +00:00
Jason Rasmussen
0b98c5e3c4 fix(web): time zone dependent test (#13859) 2024-11-07 10:05:55 -05:00
Alex
b238b69689 fix(mobile): video player not playing in full size on Android (#13986) 2024-11-07 15:04:20 +00:00
Jason Rasmussen
decbc741e2 docs: update roadmap (#13984) 2024-11-07 09:24:21 -05:00
Sefa Eyeoglu
564449a555 fix(server): database backups compatible with deduplication (#13965)
gzip --rsyncable has a slightly worse compression ratio, but allows for
efficient deduplication and, as the name implies, faster rsync
operations.

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2024-11-07 12:36:17 +00:00
Robert Schütz
f4741c70f3 fix(server): allow starting backup through API and fix pg_dumpall args when using database URLs (#13970)
* fix(server): allow starting backup through API

* fix(server): fix pg_dumpall args when using database URLs

The database has to be specified using `-d`, unlike for pg_dump.
2024-11-07 11:57:36 +00:00
yodatak
be2b76be8c docs: add backups to startup folders list (#13967)
Add the check of backups that is done on immich microservice of backups folder presence
2024-11-07 04:18:14 +00:00
Alex
cff0b95f4c chore(mobile): post release task (#13954) 2024-11-06 17:57:45 -05:00
Daniel Dietzler
1321a393c1 docs: 50k stars (#13964) 2024-11-06 22:49:18 +01:00
bo0tzz
a9fc840d65 chore: tidy up backup-and-restore.md (#13961) 2024-11-06 22:18:55 +01:00
Alex
ebf06dc12e fix(server): cannot render email template (#13957) 2024-11-06 22:14:11 +01:00
Thariq Shanavas
8d8becd0f7 docs: Added a note about avoiding redundant database backups (#13958)
* Add note about built-in backups

* npm run format:fix
2024-11-06 15:09:53 -06:00
slamp
3b5f5ec57a docs: improve custom-locations wording to be easier to read (#13849)
* Improve wording to make it easier to read custom-locations.md

It's only grammatical change

* Update docs/docs/guides/custom-locations.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

* Update custom-locations.md

Revert to 'because of' and remove 'hard drive'

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-11-06 19:49:23 +00:00
Daniel Dietzler
b29e4ec39f fix: docker link (#13956) 2024-11-06 13:45:52 -06:00
github-actions
f1b8a9374f chore: version v1.120.0 2024-11-06 16:17:29 +00:00
Weblate (bot)
497b3d995e chore(web): update translations (#13810)
Co-authored-by: Benjamin Freeman <b.t.freeman16@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Carl Dressler <cstmth@gmail.com>
Co-authored-by: Diego Saint Esteben <diego@saintesteben.me>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: Dragonslayer <chybzik@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Iwwww <mike.yolgin@gmail.com>
Co-authored-by: JBP <weblate@1peer1boom.nl>
Co-authored-by: Jonas Grubbauer <nicjontrickshots@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Kamil Warczek <kamilwarczek@gmail.com>
Co-authored-by: Kovács Ádám <kovaszftw@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Mehmet Numan Çam <mncam051@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Polly Julien <julien.polly@laposte.net>
Co-authored-by: Rastislav Simcisko <21sd95@gmail.com>
Co-authored-by: Samet Güzeldemirci <s.g52@gmx.de>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: T.Nikolaou <tnikolaou@users.noreply.hosted.weblate.org>
Co-authored-by: TheGothian <github@dreamstate.nu>
Co-authored-by: fmis13 <fmis13@disroot.org>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: vytautas <immichtranslation.a03gn@simplelogin.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xxzp3 <oliver@bastholm.dk>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-11-06 14:45:59 +00:00
Alex
9fd425dd5c chore(mobile): translation update (#13942) 2024-11-06 08:37:39 -06:00
Matthew Momjian
442d4e5e1c docs: fail2ban community project (#13943)
fail2ban
2024-11-05 21:19:12 -06:00
renovate[bot]
7134d26a19 chore(deps): update base-image to v20241105 (major) (#13826) 2024-11-05 21:24:36 +00:00
renovate[bot]
42ee7f1290 chore(deps): update typescript-projects (#13922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-11-05 20:04:39 +00:00
renovate[bot]
5d7a04367c chore(deps): update dependency @types/node to ^22.8.6 (#13937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 14:28:13 -05:00
Alex
06e0ba29f8 chore(web): scrubber animation (#13936)
* chore(web): scrubber animation

* minor styling
2024-11-05 13:55:20 -05:00
Alex
b36de7d7d4 chore(mobile): upgrade gradle (#13901)
* chore(mobile): upgrade gradle

* update photo_manager

* migrate from kapt to ksp

pumps kotlin and other dependency version to fix build issues

* increase java heap size

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2024-11-05 10:34:24 -06:00
Zack Pollard
d456d35510 refactor: config init event for first config load (#13930) 2024-11-05 16:30:56 +00:00
Zack Pollard
c383e115af chore: better observability for geodata import (#13931) 2024-11-05 16:20:56 +00:00
Jason Rasmussen
5edbb93a4d refactor(server): get worker (#13927) 2024-11-05 13:07:51 +00:00
renovate[bot]
1d55b5bfc0 chore(deps): update dependency @types/node to ^22.8.5 (#13923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 06:48:01 -05:00
renovate[bot]
60afd7b400 chore(deps): update node (#13918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 19:52:23 -05:00
renovate[bot]
3f99ef90ec fix(deps): update machine-learning (#13919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 19:50:17 -05:00
Pranay Pandey
380fc06979 fix: remove duplicateIds on unique assets (#13752) 2024-11-04 10:03:03 -05:00
renovate[bot]
d34d92dca3 fix(deps): update dependency exiftool-vendored to v28.7.0 (#13790)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:49:21 +00:00
Daniel Dietzler
3551407d95 fix: healthcheck if custom host is set (#13887) 2024-11-02 22:46:16 -04:00
cfitzw
6bfc20ef95 feat: render asset path (#13873)
render asset path
2024-11-02 13:27:40 -05:00
Daniel Dietzler
eadcbd52fb chore: svelte 5 🎉 (#13738)
chore: svelte 5

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
2024-11-02 10:49:07 -05:00
Jason Rasmussen
fed882a28a refactor(server): immich worker (#13871)
refactor(server): immich work
2024-11-01 17:19:36 -04:00
Carsten Otto
cdabd08139 fix(server): wrong image dimensions for RAW files (RAF, CR2) (also fixes face preview) (#13377) 2024-11-01 10:34:34 -04:00
Yashraj Jain
b95bc32310 fix(mobile): do not removed not backup asset when selecting the correspond options (#13256)
* fixed the local ids selecting issue

* code: updated impl inside deleteLocalOnlyAssets

* fix: used png instead of jpg to maintain picture quality

* Revert "fix: used png instead of jpg to maintain picture quality"

This reverts commit 04f2ed54e4.

* fix: update logic from code-review perspective

* refractor (mobile) : Dart fix applied

* fix (mobile) : Updated multi grid as per requirement

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-01 09:03:03 -05:00
Mert
b9096f3e99 feat(server): use tonemapx for software tone-mapping (#13785) 2024-10-31 20:48:23 -04:00
Alex
5ac236d6fd chore(mobile): update flutter_web_auth (#13863) 2024-10-31 17:35:01 -05:00
renovate[bot]
458f2acf42 chore(deps): update flutter (#13455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 17:53:26 +00:00
Jason Rasmussen
5b2cd704d3 refactor(server): job discovery (#13838)
refactor(server): job discorvery
2024-10-31 13:42:58 -04:00
Alan Grainger
0130052de5 chore(docs): Add Immich Public Proxy to the Community Projects list (#13836)
Update community-projects.tsx

Add Immich Public Proxy to Community Projects
2024-10-31 17:24:11 +00:00
Zack Pollard
16027678ee chore: move library settings cron expression to setting select element (#13856) 2024-10-31 15:06:53 +00:00
Alex
343cdcfeed fix(mobile): not throwing error when cannot parse orientation value (#13853)
* fix(mobile): not throw when error in parsing the orientation

* fix(mobile): not throw when error in parsing the orientation

* linting
2024-10-31 09:37:02 -05:00
renovate[bot]
a28b92b3cc chore(deps): update dependency node to v22 (#13855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 14:21:45 +00:00
renovate[bot]
066682f48d chore(deps): update dependency @types/node to ^22.8.1 (#13854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 14:20:26 +00:00
Zack Pollard
7d933ec97a feat: built-in automatic database backups (#13773) 2024-10-31 11:29:42 +00:00
dvbthien
30d42e571c fix(mobile): Reapply thumbnail image improvements and fix issue #13804 (#13835)
fix issue #13804

Co-authored-by: dvbthien <dvbthien@gmail.com>
2024-10-30 14:40:04 -05:00
Alex
318ab756cb fix(mobile): search page (#13833)
* fix(mobile): search page minor problems

* fix: flashing between search

* restore search size

* remove print statement

* linting
2024-10-30 14:27:13 -05:00
renovate[bot]
9d75c5b999 chore(deps): update typescript-projects (#13789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 15:03:32 -04:00
Jason Rasmussen
40fbef50cf refactor(server): remove unused on method (#13830) 2024-10-30 14:09:52 -04:00
renovate[bot]
7961435d36 fix(deps): update machine-learning (#13786) 2024-10-30 16:38:56 +00:00
renovate[bot]
92ad03615c chore(deps): update node to v22 (major) (#13792)
* chore(deps): update node to v22

* fix: deprecated constructor

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-10-30 16:05:02 +00:00
CanbiZ
33409a8cd0 chore(docs): update german readme to latest version (#13824)
* chore(docs): update german readme to latest version

* formatting
2024-10-30 12:02:05 -04:00
Alex
244c8cb4d4 feat(web): scrubber label and animation (#13815)
* feat(web): scrubber label and animation

* tune x fly in distance

* refactor

* lint and minor fix

* fly height
2024-10-30 14:38:35 +00:00
renovate[bot]
0d62ff11f1 chore(deps): update base-image to v20241029 (major) (#13821)
chore(deps): update base-image to v20241029

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 06:02:45 -04:00
renovate[bot]
ae2992a6d8 chore(deps): update terraform cloudflare to v4.45.0 (#13820)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 05:14:16 -04:00
renovate[bot]
952c6be6ea chore(deps): update grafana/grafana docker tag to v11.3.0 (#13763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 05:09:19 -04:00
Jason Rasmussen
0f668fd5c6 refactor(server): env validation (#13817) 2024-10-30 05:00:41 -04:00
Jason Rasmussen
19eb3ed8b9 refactor(server): cls (#13814) 2024-10-29 20:41:47 +00:00
Jason Rasmussen
2efba6326d chore(server): telemetry env clean up (#13813) 2024-10-29 19:20:32 +00:00
Justin
0230dc284b feat(web): disable opening image and library sub-items by default (#13729)
Disable opening image and library sub-items by default

Disable both the Image Settings and the External Library sub-items by default. This aligns with auth other settings sub-items showing as collapsed by default.
2024-10-29 12:02:34 -05:00
Alex
a39a1cfffa fix(mobile): thumbnail not filled area on tablet (#13808) 2024-10-29 16:39:14 +00:00
Alex
f776e049e9 chore(docs): add feature to readme (#13794) 2024-10-29 11:26:57 -05:00
Jason Rasmussen
37e437a568 fix(server): keep system config transformations (#13796) 2024-10-29 15:59:35 +00:00
Zack Pollard
2c86da07c6 feat(web): library settings crontab link includes existing expression (#13807) 2024-10-29 15:51:00 +00:00
Jason Rasmussen
4b9e460db5 refactor(server): worker cleanup (#13805) 2024-10-29 11:47:33 -04:00
Alex
143ee0bc34 fix(mobile): Revert thumbnail image ui improvements (#13655) (#13806)
Revert "chore(mobile): thumbnail image ui improvements  (#13655)"

This reverts commit 16f2364e93.
2024-10-29 15:38:20 +00:00
Zack Pollard
68a4cc25dc refactor: better postgres connection param typing (#13800) 2024-10-29 15:11:34 +00:00
Zack Pollard
e74ddca6c0 fix: shutdown api process when another worker exits unexpectedly (#13802) 2024-10-29 14:46:04 +00:00
Zack Pollard
02819dc079 feat: mount checks on a folder level (#13801) 2024-10-29 14:43:27 +00:00
Weblate (bot)
6a011a4595 chore(web): update translations (#13688)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_devel/
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/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
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/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
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/uk/
Translation: Immich/immich

Co-authored-by: Amirul Asri <amirulasrix@gmail.com>
Co-authored-by: Dean Cvjetanović <forteee@gmail.com>
Co-authored-by: Diego Saint Esteben <diego@saintesteben.me>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hexie <hexterjexter@gmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Lab Forensic <recoverylabkor@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Napat Srichan <napatsrichan2001@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: tux2000 <tux2k@web.de>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2024-10-29 14:35:36 +00:00
Jason Rasmussen
e029190a5d fix(server): handle N/A duration response from ffprobe (#13803) 2024-10-29 14:21:30 +00:00
github-actions
00dd9419a5 chore: version v1.119.1 2024-10-29 13:33:36 +00:00
aviv926
96e97278d3 docs: Add info about album sync&folder view (#12371)
* Album Sync

* npm run format:fix

* fix path

* info about folder view

* Sync albums

* npm run format:fix

* Add information about limitations of a property that appears in multiple albums

* npm run format:fix

* - to ->

* Update docs/docs/features/mobile-app.mdx

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

* Update docs/docs/features/mobile-app.mdx

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

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2024-10-29 05:00:43 +00:00
Jevgeni Kiski
e1d968d1b3 docs: note about Nginx reverse proxy compatibility with Let's Encrypt (#13764)
* Nginx reverse proxy compatibility with Let's Encrypt

* Update reverse-proxy.md

* Update reverse-proxy.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

* Priority of = is higher

* Update reverse-proxy.md

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-10-28 23:48:09 -05:00
renovate[bot]
db69361f19 chore(deps): update stumpylog/image-cleaner-action action to v0.9.0 (#13788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 23:47:54 -05:00
renovate[bot]
490fcc5591 chore(deps): update dependency @types/node to ^20.17.0 (#13787)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 21:55:44 -04:00
Alex
921b7cbc8d feat(web): add job action to search page result (#13784) 2024-10-28 22:50:08 +00:00
Alex
044c3e93f8 chore(mobile): post release task (#13779) 2024-10-28 16:12:35 +00:00
github-actions
8449e78c8f chore: version v1.119.0 2024-10-28 14:41:08 +00:00
Sweebah
f8a2bcee79 fix: Add DB_DATA_LOCATION config. (#13754)
Add DB_DATA_LOCATION config.

Posted [on reddit](https://www.reddit.com/r/unRAID/comments/1f8wq45/immich_install_via_docker_compose_database_cannot/).
2024-10-27 18:25:58 -05:00
bo0tzz
9204cd6a21 feat: github actions workflow to fix formatting (#13768) 2024-10-27 18:24:34 -05:00
Robert Schütz
988d527212 chore(ml): remove setuptools from dependencies (#13762) 2024-10-27 17:10:55 +00:00
Darrel
a70ed7c7f6 fix: X years ago ordering (#13742)
* fix: order by fileCreatedAt to account for tz

* run make sql
2024-10-26 15:28:33 -04:00
renovate[bot]
88d85eff0a chore(deps): update base-image to v20241025 (major) (#13736)
chore(deps): update base-image to v20241025

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-26 09:09:01 -04:00
Zack Pollard
d95b474e58 fix: duplicated library scan jobs and api server library watch (#13734) 2024-10-25 14:48:42 +01:00
Jason Rasmussen
43d18ccc36 refactor(server): user create logic (#13728) 2024-10-24 17:24:37 -04:00
Jason Rasmussen
fb995816a1 refactor(server): database config (#13730) 2024-10-24 17:12:25 -04:00
Daniel Dietzler
151ba9f1d9 refactor(server): telemetry env variables (#13705)
refactor(server)!: telemetry env variables

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2024-10-24 21:07:32 +00:00
Jason Rasmussen
bc06863d28 feat: track when assets are added to an album (#13725) 2024-10-24 15:45:00 -05:00
renovate[bot]
5d9b4b4532 chore(deps): update base-image to v20241024 (major) (#13719)
chore(deps): update base-image to v20241024

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-24 09:56:41 -04:00
automaton82
a1dd587590 fix(web): add crossorigin to link manifest for PWA (#13708)
Fix for 13695 add crossorigin to link manifest for PWA
2024-10-24 01:53:23 +00:00
Pranay Pandey
7e9fb5df5e fix(web): Add debouncing to the search popup form (#13684)
This will fix the bug where when we click on the second date picker just after selecting date in first date picker it closes the search popup form
2024-10-23 07:51:17 -05:00
Mert
1ec9a60e41 feat(ml): configurable batch size for facial recognition (#13689)
* configurable batch size, default openvino to 1

* update docs

* don't add a new dependency for two lines

* fix typing
2024-10-23 07:50:28 -05:00
Mert
a76c39812f fix(server): nan transcoding estimate (#13693)
fix nan transcoding estimate
2024-10-23 07:49:20 -05:00
renovate[bot]
c124cf9ace chore(deps): update typescript-projects (#13676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 19:28:58 -04:00
renovate[bot]
110546bab2 chore(deps): update prom/prometheus docker digest to 378f4e0 (#13678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 19:24:38 -04:00
Mert
a93fda8e0d fix(server): add ld_library_path in start.sh (#13686)
add ld_library_path in start.sh
2024-10-22 18:41:59 -04:00
renovate[bot]
d455a547cc chore(deps): update base-image to v20241022 (major) (#13673)
chore(deps): update base-image to v20241022

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 18:41:10 -04:00
renovate[bot]
1ef2804d20 chore(deps): update dependency ruff to v0.7.0 (#13682) 2024-10-22 17:14:01 +00:00
Pranay Pandey
d40cbe4c5f feat: Use video thumbnail for GIF types (#13677) 2024-10-22 13:04:44 -04:00
Ben
e98acc976e chore: move weblate translations to root directory (#13604)
* chore: move translations to root directory

* chore: update build processes to work with new i18n location
2024-10-22 15:39:28 +00:00
Weblate (bot)
62e0658e5a chore(web): update translations (#13443)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
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/cv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_devel/
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/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
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/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/mn/
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/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
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/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: David S <weblate.arjy8@flexi.name>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Felipe Silva <dorsal-cobweb-life@duck.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Haris Solakidis <hsolakidis@yahoo.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jan Marten <kontakt@janmarten.dev>
Co-authored-by: Jef <weblate@whaw.eu>
Co-authored-by: Julio Cesar de jesus Boaventura <deusmeuprotetorsempre02@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Marc Cizeron <marc@cizeron.me>
Co-authored-by: Marco Kraft <marco77755.mk@gmail.com>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Maximos Prasinos <maxprasinos@gmail.com>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Miro Rýzek <miroslav.ryzek@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nandhakumar Subramanian <nandha.kumar790@gmail.com>
Co-authored-by: Nicolò <nicveronese@gmail.com>
Co-authored-by: Phannawich Jadpotwanich <phannawich1122@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: Ron <goldenchocobo2007@yahoo.com>
Co-authored-by: Rupertas Riskus <rupertas_riskus@rapid7.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Szymon Dudzik <dudzik.dev@gmail.com>
Co-authored-by: Thomas <thomas.ceccato.02@gmail.com>
Co-authored-by: Vladislav Tkalin <mrtold11@gmail.com>
Co-authored-by: Vykintas Vyšniauskas <vykintasv@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: clementdelestre <clementdelestre@gmail.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: fa1seut0pia <git@falseu.io>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: lumppu <saukkolanerkki@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: tddaij <xdaint@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Данияр Чолпонкулов <zelenyilom@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
Co-authored-by: Оргил Пүрэвдорж <orgyldinio@proton.me>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
Co-authored-by: 이경복 <kblee0@gmail.com>
Co-authored-by: 전경재 <ppskj178@gmail.com>
2024-10-22 13:53:43 +00:00
renovate[bot]
0d4a18151d fix(deps): update dependency pydantic-settings to v2.6.0 (#13671) 2024-10-22 09:42:23 -04:00
Animesh Kotka
45c86e95e8 feat(web): allow changing shared user role in album options modal (#13654)
* enable user options suggestion as workaround in top option menu in 
shared album

* PR Review changes:
Function rename to handleUpdateSharedUserRole
2024-10-22 12:34:38 +00:00
CrushedAsian255
13d2febc33 feat(docs): add mention to purchase to support immich page (#13612) 2024-10-22 12:01:04 +01:00
renovate[bot]
0cb9c0d20d chore(deps): update dependency @types/node to ^20.16.12 (#13660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 11:58:43 +01:00
renovate[bot]
c6227b49ff fix(deps): update typescript-projects (#13662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 11:58:27 +01:00
renovate[bot]
84e6e276bf fix(deps): update machine-learning (#13661) 2024-10-21 22:21:38 -04:00
Jason Rasmussen
e6a666f1d3 refactor(server): telemetry (#13588)
refactor: telemetry
2024-10-21 23:52:30 +00:00
dvbthien
16f2364e93 chore(mobile): thumbnail image ui improvements (#13655)
improve ui for thumbnail image

Co-authored-by: dvbthien <dvbthien@gmail.com>
2024-10-21 16:36:15 -05:00
Mert
21d7cf6de6 chore(server): make date-time logs verbose (#13659)
make date-time logs verbose
2024-10-21 16:35:56 -05:00
Darrel
c77345637b chore(web): add tests for ChangeDate component (#13599)
* chore(web): setup tests for ChangeDate component

* chore(web): add tests for callback funcs with the right value

* chore(web): add tests for daylight saving time

* rename file properly

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-10-21 14:39:47 -04:00
polgarc
b7cd770831 docs: add warning to repair page (#13640)
* chore: remove repair docs

* add warning instead of remove
2024-10-21 14:39:28 -04:00
Alex
791c37d2cc chore(mobile): proper new UI layout for tablet (#13650)
* chore(mobile): better tablet UI

* fix spacing when trash is disable

* better layout for library page

* Removed navigation rail

* removed navigation rail reference

* correct padding

* fixed people page
2024-10-21 13:39:18 -05:00
Evie Lau
d137fc3eb6 docs: add qsv note for jasper lake cpus (#13622)
* Update hardware-transcoding.md

Add niche instruction to get QSV working with Jasper Lake CPUs, based on conclusion from #3595

* Relocate note to setup step, under the Admin page changes

* Add Elkhart Lake

* chore: cleanup

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-10-21 18:37:21 +00:00
Jonathan Jogenfors
b411e30796 fix(server): only allow absolute import paths (#13642)
fix: only allow absolute paths
2024-10-21 09:12:12 -05:00
John Strunk
56bebd01df chore(docs): correct two small typos (#13644) 2024-10-21 13:05:17 +00:00
Darrel
45517ab7ae fix(web): reset select all button state on escape press (#13600)
* factor out cancel multiselect state logic to utils

* use cancel multiselct helper in album page

* use cancel multiselct helper in album-viewer component

* use cancel multiselct helper in asset-grid component

* remove unused to fix lint
2024-10-20 18:11:00 +00:00
dvbthien
ee0130a58b fix(mobile): Fix minor issues with downloading assets (#13609)
* improve download asset

* fix: download motion photos on ios

---------

Co-authored-by: dvbthien <dvbthien@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-20 12:56:02 -05:00
Mert
62e55f3db9 fix(server): Revert "fix(server): copy video projection metadata for 360 videos (#12376)" (#13611)
Revert "fix(server): copy video projection metadata for 360 videos (#12376)"

This reverts commit aa0097bde2.
2024-10-20 10:15:50 -05:00
bo0tzz
8c38d22f42 revert: gh container registry rate limits (#13602) 2024-10-19 14:51:37 +02:00
Alex
39b571a95c fix(server): encodes iPhone 16 Pro video with unknown audio codec (#13593)
* fix(server): encodes iPhone 16 Pro video with unknown audio codec

* remove white space

* pr feedback + unit test

* remove public method keyword

* test the service

* correcting unit test
2024-10-19 00:50:08 -05:00
Alex
c9c0212ca9 fix(web): intersection observer not triggered to load more people (#13589) 2024-10-18 22:53:47 +02:00
Hayden
4a2a7b7735 feat(server): wait five minutes before sending email on new album item (#12223)
Album update jobs will now wait five minutes to send. If a new image is added while that job is pending, the old job will be cancelled, and a new one will be enqueued for a minute.

This is to prevent a flood of notifications by dragging in images directly to the album, which adds them to the album one at a time.

Album updates now include a list of users to email, which is generally everybody except the updater. If somebody else updates the album within that minute, both people will get an album update email in a minute, as they both added images and the other should be notified.
2024-10-18 14:51:34 -05:00
Christian Koch
76c0b964eb chore(docs): update _storage-template.md (#13578)
Update _storage-template.md

The example for the {{if}} was a little bit confusing. Just a recommendation
2024-10-18 19:43:48 +00:00
akara
e1e3ae811d chore(docs): add Thai README (#13591)
* chore(docs): add Thai README

* chore(docs): add links to Thai README
2024-10-18 19:41:32 +00:00
Jason Rasmussen
3fb5adb31c refactor(server): rename metrics to telemetry (#13584) 2024-10-18 14:50:32 -04:00
pyorot
b1149881bd feat(server): add pcm_s16le accepted audio codec (#13418) 2024-10-18 08:26:16 -04:00
Jason Rasmussen
12628b80bc refactor(server): telemetry env (#13564) 2024-10-17 18:04:25 -04:00
Mert
23646f0d55 feat(server): vaapi hardware decoding (#13561)
* add hw decoding for vaapi

* add tests

* update docs
2024-10-17 18:02:41 -04:00
Jason Rasmussen
c8f672f494 refactor(server): telemetry ports env (#13560) 2024-10-17 21:00:22 +00:00
renovate[bot]
0eabb3ef80 fix(deps): update dependency sirv to v3 (#13511)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 15:54:40 -04:00
Daniel Dietzler
6b2f23b5a3 fix: web search add to album reactivity (#13539) 2024-10-17 15:53:12 -04:00
Daniel Dietzler
57704ba5a7 fix: gh container registry rate limits (#13554) 2024-10-17 15:17:38 -04:00
Daniel Dietzler
274381deaa fix: person update state inconsistencies (#13556) 2024-10-17 18:23:51 +00:00
grgergo
7011231c4c fix(web): improve photosphere viewer settings (#13468)
change photosphere viewer settings
2024-10-17 18:07:01 +00:00
Jason Rasmussen
e3fc4d7b0a refactor(server): auth enums (#13552) 2024-10-17 13:17:32 -04:00
CrushedAsian255
d9949434f6 feat(web): Change relink person icon from minus to pencil (#13536)
The relink person icon is currently a minus symbol. This can be confusing as it looks like a "remove person" button. Changing it to a pencil makes it clear it is an editing operation, not a removing operation.
I don't know how to write Dart code, so I cannot help with the Mobile app.
2024-10-17 13:13:35 -04:00
Jason Rasmussen
3d971f69dc refactor(server): storage template options (#13553) 2024-10-17 13:11:51 -04:00
jedi04
bb694aeeeb fix(server): Allow passwordless users when oauth enabled (#13517)
* fix(server): Allow passwordless users when oauth enabled

* fix(web): Use features flags for checking oauth
2024-10-17 12:24:50 -04:00
Jason Rasmussen
3f663106e8 refactor(server): redis config (#13538)
* refactor(server): redis config

* refactor: cache parsed env data

* chore: add database and redis tests
2024-10-17 10:50:54 -04:00
bo0tzz
79acbc1d7b feat: show warning when running main branch build (#13462)
* feat: show warning when running main branch build

* fix: emoji weirdness

* fix: use icon instead of emoji

* fix: missing conditional
2024-10-17 08:36:52 -04:00
Jason Rasmussen
01a9cda15d fix(server): never try to parse Duration from exif data (#13497) 2024-10-16 18:20:44 -04:00
Jason Rasmussen
8ac40a933a refactor(server): external domain fallback (#13506) 2024-10-16 18:13:12 -04:00
Jason Rasmussen
51d4899cd1 refactor(server): move host env to config repo (#13507)
* refactor(server): access host through repository

* refactor(server): access host through repository
2024-10-16 18:12:13 -04:00
github-actions
e8015dc7d7 chore: version v1.118.2 2024-10-16 18:44:39 +00:00
lyyn
782ba48470 fix(server): ffmpeg matrices (#13461)
* Fix ffmpeg matrices

* override `getColors`

* formatting

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2024-10-16 14:29:59 -04:00
Mert
c266465317 chore(deps): update base-image to v20241016 (major) (#13512)
chore(deps): update base-image to v20241016
2024-10-16 11:58:51 -04:00
Jason Rasmussen
426008b714 fix(docs): cancelled builds on main (#13499) 2024-10-16 07:03:43 -04:00
Zack Pollard
a17d34b186 ci: don't refresh state when destroying tf (#13355)
ci: dont refresh state when destroying tf
2024-10-16 05:46:21 -04:00
renovate[bot]
263d2ba161 fix(deps): update dependency exiftool-vendored to v28.6.0 (#13454)
* fix(deps): update dependency exiftool-vendored to v28.6.0

* fix: incorrect day light savings date time

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-10-16 05:45:09 -04:00
renovate[bot]
ece4553321 chore(deps): update base-image to v20241015 (major) (#13437)
chore(deps): update base-image to v20241015

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 05:01:15 -04:00
renovate[bot]
5bb7854f4f chore(deps): update terraform cloudflare to v4.44.0 (#13482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 05:00:51 -04:00
renovate[bot]
7d3ed6bd55 chore(deps): update typescript-projects (#13453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 04:57:57 -04:00
Manan Jain
c653c48ed2 fix: styling for last image in person grid (#13444)
* Add Display Content to LastPersonContainer Div

* Update web/src/lib/components/faces-page/people-infinite-scroll.svelte

Co-authored-by: Jason Rasmussen <jason@rasm.me>

---------

Co-authored-by: manan <manan@manan.myguest.virtualbox.org>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-10-16 08:57:06 +00:00
renovate[bot]
240de1239e fix(deps): update dependency ftfy to v6.3.0 (#13480) 2024-10-15 19:59:17 -04:00
github-actions
edd7dfb5d8 chore: version v1.118.1 2024-10-15 20:44:10 +00:00
Jason Rasmussen
4c55597478 fix(server): mobile oauth login (#13474) 2024-10-15 16:41:19 -04:00
renovate[bot]
7e49b0c875 fix(deps): update dependency tokenizers to v0.20.1 (#13470) 2024-10-15 15:38:18 -04:00
Kevin Cox
e57bd94f04 chore(server): explicitly use svt-av1 encoder (#13389) 2024-10-15 18:53:18 +00:00
ngtrio
8eb79805ae fix(docs): typo in backup-and-restore.md (#13458) 2024-10-15 18:44:51 +00:00
renovate[bot]
0a3bfd5cc3 fix(deps): update dependency device_info_plus to v11 (#13427) 2024-10-15 14:41:42 -04:00
renovate[bot]
f2b799cd6f chore(deps): update node (#13449) 2024-10-15 14:39:55 -04:00
renovate[bot]
6d56927c2c chore(deps): update machine-learning (#13452) 2024-10-15 14:39:35 -04:00
github-actions
8f69d9d0ec chore: version v1.118.0 2024-10-15 10:48:53 +00:00
renovate[bot]
0985d7f3c4 chore(deps): update docker/setup-buildx-action action to v3.7.1 (#13448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 23:24:07 -04:00
Daniel Dietzler
ee50d0b42a chore: stack service unit tests (#13441) 2024-10-14 19:18:41 -04:00
Weblate (bot)
b8524680f6 chore(web): update translations (#13126)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/az/
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/cv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
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/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
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/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
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/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
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/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Ahmad Eri Syafrizal bin Syamaial Huda <erisyafrizal@gmail.com>
Co-authored-by: Ben Tomsen <torben+554gc3ym@g-b.dk>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: CanbiZ <mickey.leskowitz@gmail.com>
Co-authored-by: CrossDrain <github.grafting409@passmail.com>
Co-authored-by: David S <weblate.arjy8@flexi.name>
Co-authored-by: Dorin Rusu <rusu.dorin.adrian@gmail.com>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Erman Yaman <ermanyaman@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Furkan Aydın <aydnfurkan007@gmail.com>
Co-authored-by: Henrik <goransson.henrik@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jacek <jacek64@gmail.com>
Co-authored-by: Jamil Farajov <jamilfarajov@gmail.com>
Co-authored-by: Jonne Saloranta <saloranta.jonne@gmail.com>
Co-authored-by: Juan <yacussijuancruz@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Marius Redean <marius.redean@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nick Renieris <velocityra@gmail.com>
Co-authored-by: Rookie Nguyễn <nguyenquocthang2004@gmail.com>
Co-authored-by: Simone D'Anna <simonedanna7@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Thomas Möller <thomas.moeller@mailbox.org>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: bill85101 <bill85101@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: coolstuff99 <aspasmoya@gmail.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: extremq <other@extremq.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: samk <kaceriak.s@gmail.com>
Co-authored-by: tomtom <beub3u@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
Co-authored-by: 전경재 <ppskj178@gmail.com>
2024-10-14 15:16:44 +00:00
Alex
22a2bfc812 chore(mobile): Translations update (#13423)
chore(mobile): translation update
2024-10-14 11:06:24 -04:00
Jason Rasmussen
7a78c3372c chore: add deprecated release notes section (#13435) 2024-10-14 10:20:10 -04:00
Alex
452ce73e7f fix(mobile): more efficient loading local image on ios (#13426) 2024-10-14 15:52:58 +07:00
Alex
346a0847ef fix(server): REVERT incorrect out_color_matrix value when generating thumbnails (#13409) (#13424)
Revert "fix(server): incorrect out_color_matrix value when generating thumbnails (#13409)"

This reverts commit 9bdfb41e9c.
2024-10-14 00:40:46 -04:00
Alex
f59b813ffe chore(mobile): search page minor enhancements (#13403)
* chore(mobile): search page retouched

* add placeholder photos

* remove unused page

* focus the search input when tapping on the search controller button

* detail fixed

* remove print statements

* disable scrolling of empty content
2024-10-14 09:50:07 +07:00
fa1seut0pia
1193adf0f5 fix(web): change the code zh-Hans to zh-CN (#13414)
fix/(web) change the code zh-Hans to zh-CN
2024-10-14 08:23:20 +07:00
Mert
e7397f35c9 chore(ml): update pydantic (#13230)
* update pydantic

* fix typing

* remove unused import

* remove unused schema
2024-10-13 18:00:21 -04:00
martin
f29fb1655a docs: update authelia link (#13413) 2024-10-13 21:34:38 +02:00
lyyn
9bdfb41e9c fix(server): incorrect out_color_matrix value when generating thumbnails (#13409) 2024-10-13 13:19:40 -04:00
Alex
5a3e352950 fix(server): typeorm (੭ °ཀ°)੭ (#13411) 2024-10-13 17:10:52 +00:00
bo0tzz
e183ff6feb feat: log SOURCE_REF immediately in container startup (#13405)
This change makes sure the ref should be in pretty much any log we might get sent, making it easier to catch people running the wrong version.
2024-10-13 09:08:40 -04:00
Daniel Dietzler
20b4d281bb chore: media service unit tests (#13382) 2024-10-11 21:33:10 -04:00
Jonathan Jogenfors
0b48d46402 chore: Add viteconfig-timestamp to .gitignore (#13380) 2024-10-11 20:51:46 +02:00
Daniel Dietzler
3b7bf76db9 chore: library unit tests (#13357) 2024-10-11 14:40:29 -04:00
Jason Rasmussen
930df46f74 chore(server): remove unused code (#13367) 2024-10-11 00:44:38 -04:00
Jason Rasmussen
8daa8073ae refactor(server): add base methods for access checks (#13349) 2024-10-10 11:53:53 -04:00
Daniel Dietzler
97edf90889 fix: library deletion (#13350) 2024-10-10 11:51:54 -04:00
Zack Pollard
24e266cd52 ci: don't auto-update mapbox-gl-rtl-text (#13351) 2024-10-10 15:45:50 +01:00
Daniel Dietzler
79ae4e211b chore: database service unit tests (#13345) 2024-10-10 13:07:37 +00:00
Daniel Dietzler
bd779ff437 chore: cli unit tests (#13343) 2024-10-10 09:04:44 -04:00
Zack Pollard
94048dedbd fix(web): rtl text on map is hidden (#13342) 2024-10-10 12:16:37 +01:00
Alex
ee461e5910 chore(mobile): remove unused translation keys (#13335) 2024-10-10 16:53:33 +07:00
Alex
4ce49e4666 chore(mobile): clean up (#13338) 2024-10-10 16:53:20 +07:00
Pranav tiwari
1baa49edb7 fix(web): User removal from option menu on the top in shared album (#12959)
* bug fix

* added few more type hint

* onMount removed, removed current user to user

* user check removed and conflict in view mode resolved between option and share info modal

* format fix

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-10 08:56:08 +00:00
Yashraj Jain
53358c768c fix(mobile): trash sorting order (#13299)
* fix: trash sorting order

* updated after comparing with web
2024-10-10 08:52:12 +00:00
Alex
e9813315e7 feat(mobile): new mobile UI (#12582) 2024-10-10 15:44:14 +07:00
Jonathan Jogenfors
b59abdff3d chore(e2e): dont check for immich folder (#13298)
chore: dont check immich folder
2024-10-10 15:42:59 +07:00
Jason Rasmussen
465f4639da feat: align compose ports (#13185) 2024-10-09 16:01:52 -04:00
Jonathan Jogenfors
b7dcc97712 fix(cli): allow special characters in paths (#13282)
* fix(cli): commas in import paths

* adding more test cases
2024-10-09 18:15:50 +02:00
rgomulin
057510af0a chore(mobile): added 'ignore_icloud' translation item (#12788)
impr: added 'ignore_icloud' translation item
2024-10-09 16:06:16 +00:00
dependabot[bot]
7561d41a6a chore(deps): bump docker/setup-buildx-action from 3.6.1 to 3.7.0 (#13148)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.6.1 to 3.7.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3.6.1...v3.7.0)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-09 16:05:34 +00:00
Max
360e7d6d7a docs: fix typo in Backup Script Guide (#12399) 2024-10-09 16:04:13 +00:00
dependabot[bot]
e1540c8dfd chore(deps): bump rexml from 3.2.8 to 3.3.6 in /mobile/ios (#12621)
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.8 to 3.3.6.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.8...v3.3.6)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-09 22:59:24 +07:00
Joren Guillaume
1a72602ff9 docs: Add DB name to backup-and-restore (#13244)
* Update backup-and-restore.md

changelog:
Add database name to the restore command and document it in the notes

* docs: remove added database flag and change warn wording

* docs: fix forgotten warning change

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>

---------

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>
2024-10-09 22:37:47 +07:00
Jason Rasmussen
f7ad6efc4a feat(server): medium tests (#13289) 2024-10-09 10:00:40 -04:00
renovate[bot]
27c04f9d26 chore(deps): update typescript-projects (#13293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-09 11:32:18 +01:00
itoktsnhc
4780bb4fcd fix(server): fix server ping URL path mismatch in healthcheck.ts (#13297)
fix server ping URL path mismatch in healthcheck.ts
2024-10-09 04:21:31 +00:00
Mert
3ba2602664 fix(ml): pin onnxruntime-openvino (#13290) 2024-10-08 18:03:28 -04:00
Mert
08d428cbce fix(server): duplicate faces, face insert query failing (#13294)
fix duplicate faces, query failing
2024-10-08 21:37:41 +00:00
Daniel Dietzler
9d0f03808c chore: finishing unit tests for a couple of services (#13292) 2024-10-08 17:08:49 -04:00
renovate[bot]
f5e0cdedbc chore(deps): update redis:6.2-alpine docker digest to 2ba50e1 (#13266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 15:27:47 -04:00
renovate[bot]
9a6fd1c3ff chore(deps): update docker.io/redis:6.2-alpine docker digest to 2ba50e1 (#13265)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 15:27:27 -04:00
renovate[bot]
bff3690a2f chore(deps): update docker/setup-buildx-action action to v3.7.0 (#13281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 15:26:53 -04:00
renovate[bot]
d2800a647c chore(deps): update base-image to v20241008 (major) (#13284)
chore(deps): update base-image to v20241008

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 15:22:04 -04:00
Jason Rasmussen
d47def41d3 fix(server): timezones (#13262) 2024-10-08 16:10:52 +00:00
renovate[bot]
34305b2eae chore(deps): update dependency @types/lodash to v4.17.10 (#13280)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 12:37:55 +02:00
Alex
a11d45458b fix(web): video player on Safari (#13242) 2024-10-08 11:42:19 +07:00
renovate[bot]
60e0698110 chore(deps): update typescript-projects (#13272)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 22:44:28 -04:00
renovate[bot]
48c6c1ad2f chore(deps): update dependency node to v20.18.0 (#13271)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 22:42:33 -04:00
renovate[bot]
58f14f27cf fix(deps): update machine-learning (#13270) 2024-10-07 22:11:57 -04:00
renovate[bot]
680bf34042 chore(deps): update dependency @types/node to ^20.16.10 (#13269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 02:05:31 +00:00
Mert
bd826b0b9b feat(ml): round-robin device assignment (#13237)
* round-robin device assignment

* docs and tests

clarify doc
2024-10-07 17:37:45 -04:00
Mert
063969ca05 fix(server): searching with both personIds and withPeople (#13254)
* use cte

* linting
2024-10-07 15:44:04 -04:00
Jonathan Jogenfors
5b00bc499f fix(server): Allow commas and braces in import paths (#13259)
fix commas and braces in paths
2024-10-07 15:43:21 -04:00
Zack Pollard
94d213bbb9 fix(server): external libraries queueing two transcode jobs (#13251) 2024-10-07 14:34:48 +01:00
renovate[bot]
1b62c99b9e chore(deps): update grafana/grafana docker tag to v11.2.2 (#13235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2024-10-07 12:34:45 +01:00
Zack Pollard
b4bf1bbb3c feat: support and feedback modal with third party support (#13248) 2024-10-07 10:42:04 +00:00
Alex
6f86c2f372 chore(mobile): use sdk to for ping endpoint (#13218) 2024-10-07 08:45:23 +07:00
Mert
4bb42c4a25 docs: update version range for pgvecto.rs (#13231)
* update pgvecto.rs range

* clarify pg17
2024-10-06 13:16:31 -04:00
Yoni Yang
a8d16feb32 docs: fix confustion about libmali in hardware-transcoding.md (#13226) 2024-10-06 10:17:59 -04:00
Yuvraj P
52c700e9b0 feat(mobile): Adding filters feature to mobile image editor (#13174)
* Adding filters button

* Filter selection page

* routing

* Localization

* Add Filters to this page

* More Filters yay!

* Final filters

* Logic for saving the image

* Fixes

* Formmating

* Finalizing, formating, and fixes

* Layout fix

* chores

* Chore: Static code analysis

* fix translation file

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-06 13:51:11 +07:00
aviv926
c5c492eb4f feat(docs): update roadmap (#13212)
* feat(docs): update roadmap

* PR feedback

* PR feedabck
2024-10-05 19:00:09 -04:00
Daniel Dietzler
a5e9adb593 chore: migrate oauth to repo (#13211) 2024-10-05 16:37:33 -04:00
Daniel Dietzler
9d9bf1c88d chore: auth unit tests (#13207) 2024-10-05 12:16:23 -04:00
Fynn Petersen-Frey
0f3b8b67fe refactor(mobile): assert lists are sorted for diffing (#13180) 2024-10-05 08:02:34 +07:00
Jason Rasmussen
6bbaba7866 refactor(server): resource paths (#13194) 2024-10-04 21:09:02 +00:00
Jason Rasmussen
5d0a4bb1a5 refactor(server): app module (#13193) 2024-10-04 16:57:34 -04:00
Jason Rasmussen
7ee0221c8e chore: remove deprecated endpoint (#13190) 2024-10-04 15:10:13 -04:00
Jason Rasmussen
08db817d14 chore: remove deprecated controller (#13189) 2024-10-04 15:10:03 -04:00
Daniel Dietzler
dc18731bab chore: audit service unit tests (#13183) 2024-10-04 14:04:37 -04:00
Daniel Dietzler
4adedea128 chore: asset service unit tests (#13179) 2024-10-04 13:37:18 -04:00
Carsten Otto
bb3b4c8086 fix(server): update exiftool-vendored to v28.3.1 (#13176)
fixes #13141
2024-10-04 09:30:49 +01:00
Mert
2c87683fd4 feat(server): refresh face detection (#12335)
* refresh faces

handle non-ml faces

* fix metadata face handling

* updated tests

* added todo comment
2024-10-03 21:58:28 -04:00
Jason Rasmussen
9edc9d6151 refactor(server): immich app env (#13169) 2024-10-03 21:49:03 +00:00
Jason Rasmussen
3ac00b0ffa refactor(server): db env (#13167) 2024-10-03 17:48:40 -04:00
Jason Rasmussen
e2bf6808ca refactor(server): no color env (#13166) 2024-10-03 16:58:15 -04:00
Jason Rasmussen
0eb77147ef refactor(server): build support env (#13163) 2024-10-03 16:33:43 -04:00
Jason Rasmussen
3ddb5b8733 refactor(server): license key env (#13162) 2024-10-03 19:45:37 +00:00
Daniel Dietzler
2c8c3651de chore: some more unit tests :) (#13159) 2024-10-03 15:36:54 -04:00
Jason Rasmussen
db1623f43f refactor(server): worker env (#13160) 2024-10-03 15:28:36 -04:00
Jason Rasmussen
892a35acb5 refactor(server): port env (#13158) 2024-10-03 17:29:40 +00:00
bo0tzz
bf43c32dbf chore: disable dependabot (#13150) 2024-10-03 14:10:50 +02:00
Alex
68930cc42c feat(doc): new homepage design and font (#13084) 2024-10-03 13:33:36 +07:00
renovate[bot]
0454863c1e fix(deps): update dependency connectivity_plus to v6 (#13115)
* fix(deps): update dependency connectivity_plus to v6

* update api

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-03 03:57:50 +00:00
Alex
432bcbbd1a chore(mobile): post release task (#13136) 2024-10-03 10:19:14 +07:00
renovate[bot]
1700de909e fix(deps): update dependency device_info_plus to v10 (#13117)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 10:16:59 +07:00
Hannes R. Brunsch
35bb2e786f fix(mobile): respect orientation on displaying asset dimensions (#13129)
* fix(mobile): respect orientation on displaying asset dimensions

* lint

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-03 03:02:38 +00:00
martin
31c0dfb681 fix: preloading fonts (#13132) 2024-10-03 09:30:26 +07:00
github-actions
6b8462402b chore: version v1.117.0 2024-10-03 01:59:28 +00:00
Daniel Dietzler
9821b4608c chore: add more languages (#13127) 2024-10-02 23:28:13 +02:00
Mert
8ee825964d fix(server): thumbnail colorspace handling (#13130)
fix colorspace handling
2024-10-02 20:53:17 +00:00
Weblate (bot)
355ed5be72 chore(web): update translations (#12938)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/az/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
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/el/
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/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
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/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
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/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Alexis Rossfelder <rossfelderalexis@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Damian Krysta <krypton9208@gmail.com>
Co-authored-by: David S <weblate.arjy8@flexi.name>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Ioannis Ioannou <ioannis.ioannou.84@gmail.com>
Co-authored-by: Jacek <jacek64@gmail.com>
Co-authored-by: Jamil Farajov <jamilfarajov@gmail.com>
Co-authored-by: Joachim Segala <joachim.segala@gmail.com>
Co-authored-by: Jordi Masip <jordi@masip.cat>
Co-authored-by: JoseFilipeFerreira <jose.filipe.matos.ferreira@gmail.com>
Co-authored-by: Julien Deveaux <julien.deveaux@hotmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Lauritz Tieste <lauritz6000000@gmail.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Ognian Samokovliyski <ognian@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Unn Krigul <unn@arter.studio>
Co-authored-by: V R <hardorzz@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: clementdelestre <clementdelestre@gmail.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: faizfahmi-dev <faiztajuddin@kaf.com.my>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: ti777777 <ti12272198686@yahoo.com.tw>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-10-02 17:14:50 +00:00
Alex
3c9413fef3 chore(web): relax spacing for help and feedback modal (#13118) 2024-10-02 13:04:22 -04:00
Ben McCann
681b06a508 fix(docs): fix broken image URL (#13122) 2024-10-02 12:36:06 -04:00
martin
e7862fc0f0 fix: mouse hover over stack (#13119)
fix: mouse hover on stack
2024-10-02 22:04:21 +07:00
Jason Rasmussen
4ea281f854 refactor: service dependencies (#13108)
refactor(server): simplify service dependency management
2024-10-02 10:54:35 -04:00
PetrSvirak
1b7e4b4e52 fix(docs): Update TrueNAS installation docs (#13017)
Mention about ACL mode added for the case when library is located in a dataset with network sharing capabilities.

Based on [community issue](https://www.truenas.com/community/threads/immich-app-permissions-to-copy-to-path-inside-smb-share.117253/) and [redit post](https://www.reddit.com/r/truenas/comments/1b1weo9/comment/l132fuj/)
2024-10-02 13:39:14 +00:00
Fynn Petersen-Frey
f463bd18ef fix(mobile): device album sync (#13116) 2024-10-02 13:09:34 +00:00
Jason Rasmussen
6c7d51da34 refactor: more process.env references (#13106) 2024-10-02 08:37:26 -04:00
renovate[bot]
e5457ac8ee chore(deps): update dependency flutter_launcher_icons to ^0.14.0 (#13072)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 15:04:47 +07:00
renovate[bot]
b0bcc6c03e chore(deps): update typescript-projects (#13099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 19:29:48 -04:00
Jason Rasmussen
63437529e1 refactor(server): config file env (#13100) 2024-10-01 16:03:55 -04:00
Jason Rasmussen
4d20b11f25 feat: track upgrade history (#13097) 2024-10-01 13:33:58 -04:00
renovate[bot]
1c3603e23b chore(deps): update grafana/grafana docker tag to v11.2.1 (#13094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 13:06:45 -04:00
renovate[bot]
eb3ac09e0d chore(deps): update dependency svelte-check to v4.0.3 (#13090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 13:05:33 -04:00
Jason Rasmussen
305fc77ebe feat(server): better mount checks (#13092) 2024-10-01 13:04:37 -04:00
Zack Pollard
d46e50213a fix(server): offline assets don't restore when coming back online (#13087) 2024-10-01 14:03:19 +01:00
renovate[bot]
49486f2d26 chore(deps): update base-image to v20241001 (major) (#13089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 12:26:00 +00:00
renovate[bot]
eac189a9e5 chore(deps): update dependency prettier-plugin-svelte to v3.2.7 (#13088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 12:25:08 +00:00
Zack Pollard
3b968707a7 fix: deletedAt not set for offline assets during 1.116.0 migration (#13086) 2024-10-01 13:09:08 +01:00
Carsten Otto
67aa124de9 feat(server): parse offset from "Image_UTC_Data" (Samsung) (#13080)
* fix(deps): update dependency exiftool-vendored to v28.3.0

* feat(server): parse offset from "Image_UTC_Data" (Samsung)

A Samsung phone might provide the local time (e.g. 09:00) without any timezone or
offset information. If the file also includes the non-standard trailer tag
"TimeStamp" in "Image_UTC_Data", we can use the unix timestamp contained within to
deduce the offset.

As an example, if the local date/time is "2024-09-15T09:00" and the unix timestamp is
1726408800 (which is 2024-09-15T16:00 UTC), we know that the offset is -07:00.

The actual computation/fix is done in exiftool-vendored.

Also see
0f63a78090/lib/Image/ExifTool/Samsung.pm (L996-L1001)
https://github.com/photostructure/exiftool-vendored.js/issues/209

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 12:08:06 +00:00
renovate[bot]
076d8808bb chore(deps): update dependency ubuntu to v24 (#13079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 11:17:58 +01:00
renovate[bot]
67ddba0b13 chore(deps): update typescript-projects (#13073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 11:16:34 +01:00
Zack Pollard
3eccff4306 feat: support and feedback modal with third party support (#13056) 2024-10-01 11:15:31 +01:00
renovate[bot]
ecb5cb00eb chore(deps): update dependency flutter_lints to v5 (#13077)
* chore(deps): update dependency flutter_lints to v5

* lint

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-10-01 04:10:05 +00:00
martin
06048b6db9 feat: preload fonts (#13068) 2024-10-01 09:08:25 +07:00
renovate[bot]
f0ad6627a5 fix(deps): update machine-learning (#13070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 21:54:28 -04:00
renovate[bot]
14e6d23eeb chore(deps): update dependency @types/node to ^20.16.9 (#13069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 01:26:39 +00:00
renovate[bot]
d772cc6c6a chore(deps): update dependency lints to v5 (#13059)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:23:15 +07:00
Alex
fe33732958 chore(mobile): update photo_manager 3.5.0 (#13050) 2024-10-01 08:18:13 +07:00
Jason Rasmussen
a019fb670e refactor(server): config service (#13066)
* refactor(server): config service

* fix: function renaming

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-09-30 17:31:21 -04:00
Jason Rasmussen
f63d251490 refactor(server): user core (#13063) 2024-09-30 16:04:24 -04:00
Jason Rasmussen
dfc2d5002b refactor(server): client events (#13062) 2024-09-30 15:50:34 -04:00
dependabot[bot]
47821cda35 chore(deps): bump docker/build-push-action from 6.7.0 to 6.9.0 (#13052)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.7.0 to 6.9.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.7.0...v6.9.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-30 14:16:04 -04:00
Fynn Petersen-Frey
15c04d3056 refactor(mobile): DB repository for asset, backup, sync service (#12953)
* refactor(mobile): DB repository for asset, backup, sync service

* review feedback

* fix bug found by Alex

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-09-30 21:37:30 +07:00
Jason Rasmussen
a2d457b01d refactor(server): events (#13003)
* refactor(server): events

* chore: better type

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-09-30 10:35:11 -04:00
Alex
95c67949f7 fix(mobile): share to error (#13044) 2024-09-30 20:51:47 +07:00
renovate[bot]
5bcbe77fb6 chore(deps): update terraform cloudflare to v4.43.0 (#12860)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 12:02:30 +01:00
Mert
7adb35e59e fix(server): /search/random failing with certain options (#13040)
* fix relation handling, remove pagination

* update api, sql

* update mock
2024-09-30 00:29:35 -04:00
Mert
2f13db51df fix(server): "all" button for facial recognition deleting faces instead of unassigning them (#13042)
* unassign faces instead of deleting them

* formatting
2024-09-30 00:29:14 -04:00
Mert
9b309e84c9 docs: update config file (#13041)
update config file
2024-09-30 11:11:42 +07:00
Alex
fa9bb8074c feat(mobile): enhance download operations (#12973)
* add packages

* create download task

* show progress

* save video and image

* show progress info

* live photo wip

* download and link live photos

* Update list of assets

* wip

* correct progress

* add state to download

* revert unncessary change

* repository pattern

* translation

* remove unused code

* update method call from repository

* remove unused variable

* handle multiple livephotos download

* remove logging statement

* lint

* not removing all records
2024-09-29 08:22:02 +00:00
Mert
2bcd27e166 feat(server): generate all thumbnails for an asset in one job (#13012)
* wip

cleanup

add success logs, rename method

do thumbhash too

fixes

fix tests

handle `notify`

wip refactor

refactor

* update tests

* update sql

* pr feedback

* remove unused code

* formatting
2024-09-28 17:47:24 +00:00
Mert
995f0fda47 feat(server): separate quality for thumbnail and preview images (#13006)
* allow different thumbnail and preview quality, better config structure

* update web and api

* wording

* remove empty line?
2024-09-28 06:01:04 +00:00
Mert
4248594ac5 feat(server): better transcoding logs (#13000)
* better transcoding logs

* pr feedback
2024-09-27 18:10:39 -04:00
renovate[bot]
7579bc4359 fix(deps): update machine-learning (#12883)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 22:07:59 +00:00
2725 changed files with 236494 additions and 152568 deletions

View File

@@ -0,0 +1,67 @@
{
"name": "Immich - Backend, Frontend and ML",
"service": "immich-server",
"runServices": [
"immich-server",
"redis",
"database",
"immich-machine-learning"
],
"dockerComposeFile": [
"../docker/docker-compose.dev.yml",
"./server/container-compose-overrides.yml"
],
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"svelte.svelte-vscode",
"ms-vscode-remote.remote-containers",
"foxundermoon.shell-format",
"timonwong.shellcheck",
"rvest.vs-code-prettier-eslint",
"bluebrown.yamlfmt",
"vkrishna04.cspell-sync",
"vitest.explorer",
"ms-playwright.playwright",
"ms-azuretools.vscode-docker"
]
}
},
"forwardPorts": [3000, 9231, 9230, 2283],
"portsAttributes": {
"3000": {
"label": "Immich - Frontend HTTP",
"description": "The frontend of the Immich project",
"onAutoForward": "openBrowserOnce"
},
"2283": {
"label": "Immich - API Server - HTTP",
"description": "The API server of the Immich project"
},
"9231": {
"label": "Immich - API Server - DEBUG",
"description": "The API server of the Immich project"
},
"9230": {
"label": "Immich - Workers - DEBUG",
"description": "The workers of the Immich project"
}
},
"overrideCommand": true,
"workspaceFolder": "/workspaces/immich",
"remoteUser": "node",
"userEnvProbe": "loginInteractiveShell",
"remoteEnv": {
// The location where your uploaded files are stored
"UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./library}",
// Connection secret for postgres. You should change it to a random password
// Please use only the characters `A-Za-z0-9`, without special characters or spaces
"DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}",
// The database username
"DB_USERNAME": "${localEnv:DB_USERNAME:postgres}",
// The database name
"DB_DATABASE_NAME": "${localEnv:DB_DATABASE_NAME:immich}"
}
}

View File

@@ -0,0 +1,34 @@
services:
immich-server:
build:
target: dev-container-mobile
environment:
- IMMICH_SERVER_URL=http://127.0.0.1:2283/
volumes: !override # bind mount host to /workspaces/immich
- ..:/workspaces/immich
- cli_node_modules:/workspaces/immich/cli/node_modules
- e2e_node_modules:/workspaces/immich/e2e/node_modules
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
- server_node_modules:/workspaces/immich/server/node_modules
- web_node_modules:/workspaces/immich/web/node_modules
- ${UPLOAD_LOCATION}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION}/photos/upload:/workspaces/immich/server/upload/upload
- /etc/localtime:/etc/localtime:ro
database:
volumes:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
volumes:
# Node modules for each service to avoid conflicts and ensure consistent dependencies
cli_node_modules:
e2e_node_modules:
open_api_node_modules:
server_node_modules:
web_node_modules:
# UPLOAD_LOCATION must be set to a absolute path or vol-upload
vol-upload:
# DB_DATA_LOCATION must be set to a absolute path or vol-database
vol-database:

View File

@@ -0,0 +1,52 @@
{
"name": "Immich - Mobile",
"service": "immich-server",
"runServices": [
"immich-server",
"redis",
"database",
"immich-machine-learning"
],
"dockerComposeFile": [
"../../docker/docker-compose.dev.yml",
"./container-compose-overrides.yml"
],
"customizations": {
"vscode": {
"extensions": [
"Dart-Code.dart-code",
"Dart-Code.flutter",
"dcmdev.dcm-vscode-extension",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"svelte.svelte-vscode",
"ms-vscode-remote.remote-containers",
"foxundermoon.shell-format",
"timonwong.shellcheck",
"rvest.vs-code-prettier-eslint",
"bluebrown.yamlfmt",
"vkrishna04.cspell-sync",
"vitest.explorer",
"ms-playwright.playwright",
"ms-azuretools.vscode-docker"
]
}
},
"forwardPorts": [],
"overrideCommand": true,
"workspaceFolder": "/workspaces/immich",
"remoteUser": "node",
"userEnvProbe": "loginInteractiveShell",
"remoteEnv": {
// The location where your uploaded files are stored
"UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./Library}",
// Connection secret for postgres. You should change it to a random password
// Please use only the characters `A-Za-z0-9`, without special characters or spaces
"DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}",
// The database username
"DB_USERNAME": "${localEnv:DB_USERNAME:postgres}",
// The database name
"DB_DATABASE_NAME": "${localEnv:DB_DATABASE_NAME:immich}"
}
}

View File

@@ -0,0 +1,82 @@
#!/bin/bash
export IMMICH_PORT="${DEV_SERVER_PORT:-2283}"
export DEV_PORT="${DEV_PORT:-3000}"
# search for immich directory inside workspace.
# /workspaces/immich is the bind mount, but other directories can be mounted if runing
# Devcontainer: Clone [repository|pull request] in container volumne
WORKSPACES_DIR="/workspaces"
IMMICH_DIR="$WORKSPACES_DIR/immich"
IMMICH_DEVCONTAINER_LOG="$HOME/immich-devcontainer.log"
log() {
# Display command on console, log with timestamp to file
echo "$*"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >>"$IMMICH_DEVCONTAINER_LOG"
}
run_cmd() {
# Ensure log directory exists
mkdir -p "$(dirname "$IMMICH_DEVCONTAINER_LOG")"
log "$@"
# Execute command: display normally on console, log with timestamps to file
"$@" 2>&1 | tee >(while IFS= read -r line; do
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line" >>"$IMMICH_DEVCONTAINER_LOG"
done)
# Preserve exit status
return "${PIPESTATUS[0]}"
}
# Find directories excluding /workspaces/immich
mapfile -t other_dirs < <(find "$WORKSPACES_DIR" -mindepth 1 -maxdepth 1 -type d ! -path "$IMMICH_DIR" ! -name ".*")
if [ ${#other_dirs[@]} -gt 1 ]; then
log "Error: More than one directory found in $WORKSPACES_DIR other than $IMMICH_DIR."
exit 1
elif [ ${#other_dirs[@]} -eq 1 ]; then
export IMMICH_WORKSPACE="${other_dirs[0]}"
else
export IMMICH_WORKSPACE="$IMMICH_DIR"
fi
log "Found immich workspace in $IMMICH_WORKSPACE"
log ""
fix_permissions() {
log "Fixing permissions for ${IMMICH_WORKSPACE}"
run_cmd sudo find "${IMMICH_WORKSPACE}/server/upload" -not -path "${IMMICH_WORKSPACE}/server/upload/postgres/*" -not -path "${IMMICH_WORKSPACE}/server/upload/postgres" -exec chown node {} +
# Change ownership for directories that exist
for dir in "${IMMICH_WORKSPACE}/.vscode" \
"${IMMICH_WORKSPACE}/cli/node_modules" \
"${IMMICH_WORKSPACE}/e2e/node_modules" \
"${IMMICH_WORKSPACE}/open-api/typescript-sdk/node_modules" \
"${IMMICH_WORKSPACE}/server/node_modules" \
"${IMMICH_WORKSPACE}/server/dist" \
"${IMMICH_WORKSPACE}/web/node_modules" \
"${IMMICH_WORKSPACE}/web/dist"; do
if [ -d "$dir" ]; then
run_cmd sudo chown node -R "$dir"
fi
done
log ""
}
install_dependencies() {
log "Installing dependencies"
(
cd "${IMMICH_WORKSPACE}" || exit 1
run_cmd make install-server
run_cmd make install-sdk
run_cmd make build-sdk
run_cmd make install-web
)
log ""
}

View File

@@ -0,0 +1,48 @@
services:
immich-server:
build:
target: dev-container-server
env_file: !reset []
environment:
- IMMICH_SERVER_URL=http://127.0.0.1:2283/
volumes: !override
- ..:/workspaces/immich
- cli_node_modules:/workspaces/immich/cli/node_modules
- e2e_node_modules:/workspaces/immich/e2e/node_modules
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
- server_node_modules:/workspaces/immich/server/node_modules
- web_node_modules:/workspaces/immich/web/node_modules
- ${UPLOAD_LOCATION:-upload1-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION:-upload2-devcontainer-volume}${UPLOAD_LOCATION:+/photos/upload}:/workspaces/immich/server/upload/upload
- /etc/localtime:/etc/localtime:ro
immich-web:
env_file: !reset []
immich-machine-learning:
env_file: !reset []
database:
env_file: !reset []
environment: !override
POSTGRES_PASSWORD: ${DB_PASSWORD-postgres}
POSTGRES_USER: ${DB_USERNAME-postgres}
POSTGRES_DB: ${DB_DATABASE_NAME-immich}
POSTGRES_INITDB_ARGS: '--data-checksums'
POSTGRES_HOST_AUTH_METHOD: md5
volumes:
- ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data
redis:
env_file: !reset []
volumes:
# Node modules for each service to avoid conflicts and ensure consistent dependencies
cli_node_modules:
e2e_node_modules:
open_api_node_modules:
server_node_modules:
web_node_modules:
upload1-devcontainer-volume:
upload2-devcontainer-volume:
postgres-devcontainer-volume:

View File

@@ -0,0 +1,17 @@
#!/bin/bash
# shellcheck source=common.sh
# shellcheck disable=SC1091
source /immich-devcontainer/container-common.sh
log "Starting Nest API Server"
log ""
cd "${IMMICH_WORKSPACE}/server" || (
log "Immich workspace not found"
exit 1
)
while true; do
run_cmd node ./node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch
log "Nest API Server crashed with exit code $?. Respawning in 3s ..."
sleep 3
done

View File

@@ -0,0 +1,22 @@
#!/bin/bash
# shellcheck source=common.sh
# shellcheck disable=SC1091
source /immich-devcontainer/container-common.sh
log "Starting Immich Web Frontend"
log ""
cd "${IMMICH_WORKSPACE}/web" || (
log "Immich Workspace not found"
exit 1
)
until curl --output /dev/null --silent --head --fail "http://127.0.0.1:${IMMICH_PORT}/api/server/config"; do
log "Waiting for api server..."
sleep 1
done
while true; do
run_cmd node ./node_modules/.bin/vite dev --host 0.0.0.0 --port "${DEV_PORT}"
log "Web crashed with exit code $?. Respawning in 3s ..."
sleep 3
done

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# shellcheck source=common.sh
# shellcheck disable=SC1091
source /immich-devcontainer/container-common.sh
log "Setting up Immich dev container..."
fix_permissions
log "Installing npm dependencies (node_modules)..."
install_dependencies
log "Setup complete, please wait while backend and frontend services automatically start"
log
log "If necessary, the services may be manually started using"
log
log "$ /immich-devcontainer/container-start-backend.sh"
log "$ /immich-devcontainer/container-start-frontend.sh"
log
log "From different terminal windows, as these scripts automatically restart the server"
log "on error, and will continuously run in a loop"

6
.gitattributes vendored
View File

@@ -6,6 +6,12 @@ mobile/openapi/**/*.dart linguist-generated=true
mobile/lib/**/*.g.dart -diff -merge
mobile/lib/**/*.g.dart linguist-generated=true
mobile/lib/**/*.drift.dart -diff -merge
mobile/lib/**/*.drift.dart linguist-generated=true
mobile/drift_schemas/main/drift_schema_*.json -diff -merge
mobile/drift_schemas/main/drift_schema_*.json linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true

1
.github/.nvmrc vendored Normal file
View File

@@ -0,0 +1 @@
22.16.0

View File

@@ -1,5 +1,5 @@
title: "[Feature] feature-name-goes-here"
labels: ["feature"]
title: '[Feature] feature-name-goes-here'
labels: ['feature']
body:
- type: markdown
@@ -11,10 +11,9 @@ body:
- type: checkboxes
attributes:
label: I have searched the existing feature requests to make sure this is not a duplicate request.
label: I have searched the existing feature requests, both open and closed, to make sure this is not a duplicate request.
options:
- label: "Yes"
required: true
- label: 'Yes'
- type: textarea
id: feature

2
.github/FUNDING.yml vendored
View File

@@ -1 +1 @@
custom: ['https://buy.immich.app']
custom: ['https://buy.immich.app', 'https://immich.store']

View File

@@ -1,6 +1,12 @@
name: Report an issue with Immich
description: Report an issue with Immich
body:
- type: checkboxes
attributes:
label: I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.
options:
- label: 'Yes'
- type: markdown
attributes:
value: |
@@ -77,7 +83,7 @@ body:
id: repro
attributes:
label: Reproduction steps
description: "How do you trigger this bug? Please walk us through it step by step."
description: 'How do you trigger this bug? Please walk us through it step by step.'
value: |
1.
2.
@@ -90,12 +96,13 @@ body:
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant logs below. (code formatting is
description:
Please copy and paste any relevant logs below. (code formatting is
enabled, no need for backticks)
render: shell
validations:
required: false
- type: textarea
attributes:
label: Additional information

View File

@@ -1,2 +1 @@
blank_issues_enabled: false
blank_pull_request_template_enabled: false

View File

@@ -1,22 +0,0 @@
## Description
<!--- Describe your changes in detail -->
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
Fixes # (issue)
## How Has This Been Tested?
<!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration -->
- [ ] Test A
- [ ] Test B
## Screenshots (if appropriate):
## Checklist:
- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation if applicable

View File

@@ -1,7 +0,0 @@
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

28
.github/package-lock.json generated vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"name": ".github",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"devDependencies": {
"prettier": "^3.5.3"
}
},
"node_modules/prettier": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
}
}
}

9
.github/package.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"scripts": {
"format": "prettier --check .",
"format:fix": "prettier --write ."
},
"devDependencies": {
"prettier": "^3.5.3"
}
}

36
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,36 @@
## Description
<!--- Describe your changes in detail -->
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
Fixes # (issue)
## How Has This Been Tested?
<!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration -->
- [ ] Test A
- [ ] Test B
<details><summary><h2>Screenshots (if appropriate)</h2></summary>
<!-- Images go below this line. -->
</details>
<!-- API endpoint changes (if relevant)
## API Changes
The `/api/something` endpoint is now `/api/something-else`
-->
## Checklist:
- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation if applicable
- [ ] I have no unrelated changes in the PR.
- [ ] I have confirmed that any new dependencies are strictly necessary.
- [ ] I have written tests for new code (if applicable)
- [ ] I have followed naming conventions/patterns in the surrounding code
- [ ] All code in `src/services/` uses repositories implementations for database calls, filesystem operations, etc.
- [ ] All code in `src/repositories/` is pretty basic/simple and does not have any immich specific logic (that belongs in `src/services/`)

62
.github/release.yml vendored
View File

@@ -1,29 +1,33 @@
changelog:
categories:
- title: 🚨 Breaking Changes
labels:
- changelog:breaking-change
- title: 🔒 Security
labels:
- changelog:security
- title: 🚀 Features
labels:
- changelog:feature
- title: 🌟 Enhancements
labels:
- changelog:enhancement
- title: 🐛 Bug fixes
labels:
- changelog:bugfix
- title: 📚 Documentation
labels:
- changelog:documentation
- title: 🌐 Translations
labels:
- changelog:translation
changelog:
categories:
- title: 🚨 Breaking Changes
labels:
- changelog:breaking-change
- title: 🫥 Deprecated Changes
labels:
- changelog:deprecated
- title: 🔒 Security
labels:
- changelog:security
- title: 🚀 Features
labels:
- changelog:feature
- title: 🌟 Enhancements
labels:
- changelog:enhancement
- title: 🐛 Bug fixes
labels:
- changelog:bugfix
- title: 📚 Documentation
labels:
- changelog:documentation
- title: 🌐 Translations
labels:
- changelog:translation

View File

@@ -7,6 +7,15 @@ on:
ref:
required: false
type: string
secrets:
KEY_JKS:
required: true
ALIAS:
required: true
ANDROID_KEY_PASSWORD:
required: true
ANDROID_STORE_PASSWORD:
required: true
pull_request:
push:
branches: [main]
@@ -15,52 +24,56 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
mobile:
- 'mobile/**'
workflow:
- '.github/workflows/build-mobile.yml'
- name: Check if we should force jobs to run
id: should_force
run: echo "should_force=${{ github.event_name == 'workflow_call' || github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_call' || github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
build-sign-android:
name: Build and sign Android
needs: pre-job
permissions:
contents: read
# Skip when PR from a fork
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && needs.pre-job.outputs.should_run == 'true' }}
runs-on: macos-14
steps:
- name: Determine ref
id: get-ref
run: |
input_ref="${{ inputs.ref }}"
github_ref="${{ github.sha }}"
ref="${input_ref:-$github_ref}"
echo "ref=$ref" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ steps.get-ref.outputs.ref }}
ref: ${{ inputs.ref || github.sha }}
persist-credentials: false
- uses: actions/setup-java@v4
- uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: 'zulu'
java-version: '17'
cache: 'gradle'
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
@@ -76,6 +89,14 @@ jobs:
working-directory: ./mobile
run: flutter pub get
- name: Generate translation file
run: make translation
working-directory: ./mobile
- name: Generate platform APIs
run: make pigeon
working-directory: ./mobile
- name: Build Android App Bundle
working-directory: ./mobile
env:
@@ -87,7 +108,7 @@ jobs:
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
- name: Publish Android Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: release-apk-signed
path: mobile/build/app/outputs/flutter-apk/*.apk

View File

@@ -8,31 +8,38 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
cleanup:
name: Cleanup
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Cleanup
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REF: ${{ github.ref }}
run: |
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
BRANCH=${{ github.ref }}
echo "Fetching list of cache keys"
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
cacheKeysForPR=$(gh actions-cache list -R $REPO -B ${REF} -L 100 | cut -f 1 )
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
gh actions-cache delete $cacheKey -R "$REPO" -B "${REF}" --confirm
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -6,7 +6,6 @@ on:
- 'cli/**'
- '.github/workflows/cli.yml'
pull_request:
branches: [main]
paths:
- 'cli/**'
- '.github/workflows/cli.yml'
@@ -17,21 +16,25 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
packages: write
permissions: {}
jobs:
publish:
name: CLI Publish
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./cli
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org'
@@ -49,20 +52,25 @@ jobs:
docker:
name: Docker
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
needs: publish
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
@@ -77,7 +85,7 @@ jobs:
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
flavor: |
latest=false
@@ -88,7 +96,7 @@ jobs:
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and push image
uses: docker/build-push-action@v6.7.0
uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0
with:
file: cli/Dockerfile
platforms: linux/amd64,linux/arm64

View File

@@ -9,14 +9,14 @@
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
name: 'CodeQL'
on:
push:
branches: [ "main" ]
branches: ['main']
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
branches: ['main']
schedule:
- cron: '20 13 * * 1'
@@ -24,6 +24,8 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
analyze:
name: Analyze
@@ -36,43 +38,44 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
language: ['javascript', 'python']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
category: '/language:${{matrix.language}}'

View File

@@ -1,73 +0,0 @@
# This workflow runs on certain conditions to check for and potentially
# delete container images from the GHCR which no longer have an associated
# code branch.
# Requires a PAT with the correct scope set in the secrets.
#
# This workflow will not trigger runs on forked repos.
name: Docker Cleanup
on:
pull_request:
types:
- "closed"
push:
paths:
- ".github/workflows/docker-cleanup.yml"
concurrency:
group: registry-tags-cleanup
cancel-in-progress: false
jobs:
cleanup-images:
name: Cleanup Stale Images Tags for ${{ matrix.primary-name }}
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- primary-name: "immich-server"
- primary-name: "immich-machine-learning"
env:
# Requires a personal access token with the OAuth scope delete:packages
TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }}
steps:
- name: Clean temporary images
if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
with:
token: "${{ env.TOKEN }}"
owner: "immich-app"
is_org: "true"
do_delete: "true"
package_name: "${{ matrix.primary-name }}"
scheme: "pull_request"
repo_name: "immich"
match_regex: '^pr-(\d+)$|^(\d+)$'
cleanup-untagged-images:
name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }}
runs-on: ubuntu-22.04
needs:
- cleanup-images
strategy:
fail-fast: false
matrix:
include:
- primary-name: "immich-server"
- primary-name: "immich-machine-learning"
- primary-name: "immich-build-cache"
env:
# Requires a personal access token with the OAuth scope delete:packages
TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }}
steps:
- name: Clean untagged images
if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/untagged@v0.8.0
with:
token: "${{ env.TOKEN }}"
owner: "immich-app"
do_delete: "true"
is_org: "true"
package_name: "${{ matrix.primary-name }}"

View File

@@ -5,7 +5,6 @@ on:
push:
branches: [main]
pull_request:
branches: [main]
release:
types: [published]
@@ -13,297 +12,182 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
packages: write
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run_server: ${{ steps.found_paths.outputs.server == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
server:
- 'server/**'
- 'openapi/**'
- 'web/**'
- 'i18n/**'
machine-learning:
- 'machine-learning/**'
workflow:
- '.github/workflows/docker.yml'
- '.github/workflows/multi-runner-build.yml'
- '.github/actions/image-build'
- name: Check if we should force jobs to run
id: should_force
run: echo "should_force=${{ github.event_name == 'workflow_dispatch' || github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_dispatch' || github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
retag_ml:
name: Re-Tag ML
needs: pre-job
permissions:
contents: read
packages: write
if: ${{ needs.pre-job.outputs.should_run_ml == 'false' && !github.event.pull_request.head.repo.fork }}
runs-on: ubuntu-latest
strategy:
matrix:
suffix: ["", "-cuda", "-openvino", "-armnn"]
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image
run: |
REGISTRY_NAME="ghcr.io"
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
TAG_OLD=main${{ matrix.suffix }}
TAG_NEW=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_NEW $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
retag_server:
name: Re-Tag Server
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_server == 'false' && !github.event.pull_request.head.repo.fork }}
runs-on: ubuntu-latest
strategy:
matrix:
suffix: [""]
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image
env:
REGISTRY_NAME: 'ghcr.io'
REPOSITORY: ${{ github.repository_owner }}/immich-machine-learning
TAG_OLD: main${{ matrix.suffix }}
TAG_PR: ${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
TAG_COMMIT: commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
run: |
REGISTRY_NAME="ghcr.io"
REPOSITORY=${{ github.repository_owner }}/immich-server
TAG_OLD=main${{ matrix.suffix }}
TAG_NEW=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_NEW $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
docker buildx imagetools create -t "${REGISTRY_NAME}/${REPOSITORY}:${TAG_PR}" "${REGISTRY_NAME}/${REPOSITORY}:${TAG_OLD}"
docker buildx imagetools create -t "${REGISTRY_NAME}/${REPOSITORY}:${TAG_COMMIT}" "${REGISTRY_NAME}/${REPOSITORY}:${TAG_OLD}"
retag_server:
name: Re-Tag Server
needs: pre-job
permissions:
contents: read
packages: write
if: ${{ needs.pre-job.outputs.should_run_server == 'false' && !github.event.pull_request.head.repo.fork }}
runs-on: ubuntu-latest
strategy:
matrix:
suffix: ['']
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image
env:
REGISTRY_NAME: 'ghcr.io'
REPOSITORY: ${{ github.repository_owner }}/immich-server
TAG_OLD: main${{ matrix.suffix }}
TAG_PR: ${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
TAG_COMMIT: commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
run: |
docker buildx imagetools create -t "${REGISTRY_NAME}/${REPOSITORY}:${TAG_PR}" "${REGISTRY_NAME}/${REPOSITORY}:${TAG_OLD}"
docker buildx imagetools create -t "${REGISTRY_NAME}/${REPOSITORY}:${TAG_COMMIT}" "${REGISTRY_NAME}/${REPOSITORY}:${TAG_OLD}"
build_and_push_ml:
machine-learning:
name: Build and Push ML
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
runs-on: ubuntu-latest
env:
strategy:
fail-fast: false
matrix:
include:
- device: cpu
tag-suffix: ''
- device: cuda
tag-suffix: '-cuda'
platforms: linux/amd64
- device: openvino
tag-suffix: '-openvino'
platforms: linux/amd64
- device: armnn
tag-suffix: '-armnn'
platforms: linux/arm64
- device: rknn
tag-suffix: '-rknn'
platforms: linux/arm64
- device: rocm
tag-suffix: '-rocm'
platforms: linux/amd64
runner-mapping: '{"linux/amd64": "mich"}'
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@094bfb927b8cd75b343abaac27b3241be0fccfe9 # multi-runner-build-workflow-0.1.0
permissions:
contents: read
actions: read
packages: write
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
with:
image: immich-machine-learning
context: machine-learning
file: machine-learning/Dockerfile
strategy:
# Prevent a failure in one image from stopping the other builds
fail-fast: false
matrix:
include:
- platforms: linux/amd64,linux/arm64
device: cpu
dockerfile: machine-learning/Dockerfile
platforms: ${{ matrix.platforms }}
runner-mapping: ${{ matrix.runner-mapping }}
tag-suffix: ${{ matrix.tag-suffix }}
dockerhub-push: ${{ github.event_name == 'release' }}
build-args: |
DEVICE=${{ matrix.device }}
- platforms: linux/amd64
device: cuda
suffix: -cuda
- platforms: linux/amd64
device: openvino
suffix: -openvino
- platforms: linux/arm64
device: armnn
suffix: -armnn
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
- name: Login to Docker Hub
# Only push to Docker Hub when making a release
if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
# Skip when PR from a fork
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
with:
flavor: |
# Disable latest tag
latest=false
images: |
name=ghcr.io/${{ github.repository_owner }}/${{env.image}}
name=altran1502/${{env.image}},enable=${{ github.event_name == 'release' }}
tags: |
# Tag with branch name
type=ref,event=branch,suffix=${{ matrix.suffix }}
# Tag with pr-number
type=ref,event=pr,suffix=${{ matrix.suffix }}
# Tag with git tag on release
type=ref,event=tag,suffix=${{ matrix.suffix }}
type=raw,value=release,enable=${{ github.event_name == 'release' }},suffix=${{ matrix.suffix }}
- name: Determine build cache output
id: cache-target
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
# Essentially just ignore the cache output (PR can't write to registry cache)
echo "cache-to=type=local,dest=/tmp/discard,ignore-error=true" >> $GITHUB_OUTPUT
else
echo "cache-to=type=registry,mode=max,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{ env.image }}" >> $GITHUB_OUTPUT
fi
- name: Build and push image
uses: docker/build-push-action@v6.7.0
with:
context: ${{ env.context }}
file: ${{ env.file }}
platforms: ${{ matrix.platforms }}
# Skip pushing when PR from a fork
push: ${{ !github.event.pull_request.head.repo.fork }}
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{env.image}}
cache-to: ${{ steps.cache-target.outputs.cache-to }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
build-args: |
DEVICE=${{ matrix.device }}
BUILD_ID=${{ github.run_id }}
BUILD_IMAGE=${{ github.event_name == 'release' && github.ref_name || steps.metadata.outputs.tags }}
BUILD_SOURCE_REF=${{ github.ref_name }}
BUILD_SOURCE_COMMIT=${{ github.sha }}
build_and_push_server:
server:
name: Build and Push Server
runs-on: ubuntu-latest
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
env:
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@094bfb927b8cd75b343abaac27b3241be0fccfe9 # multi-runner-build-workflow-0.1.0
permissions:
contents: read
actions: read
packages: write
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
with:
image: immich-server
context: .
file: server/Dockerfile
strategy:
fail-fast: false
matrix:
include:
- platforms: linux/amd64,linux/arm64
device: cpu
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
- name: Login to Docker Hub
# Only push to Docker Hub when making a release
if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
# Skip when PR from a fork
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
with:
flavor: |
# Disable latest tag
latest=false
images: |
name=ghcr.io/${{ github.repository_owner }}/${{env.image}}
name=altran1502/${{env.image}},enable=${{ github.event_name == 'release' }}
tags: |
# Tag with branch name
type=ref,event=branch,suffix=${{ matrix.suffix }}
# Tag with pr-number
type=ref,event=pr,suffix=${{ matrix.suffix }}
# Tag with git tag on release
type=ref,event=tag,suffix=${{ matrix.suffix }}
type=raw,value=release,enable=${{ github.event_name == 'release' }},suffix=${{ matrix.suffix }}
- name: Determine build cache output
id: cache-target
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
# Essentially just ignore the cache output (PR can't write to registry cache)
echo "cache-to=type=local,dest=/tmp/discard,ignore-error=true" >> $GITHUB_OUTPUT
else
echo "cache-to=type=registry,mode=max,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{ env.image }}" >> $GITHUB_OUTPUT
fi
- name: Build and push image
uses: docker/build-push-action@v6.7.0
with:
context: ${{ env.context }}
file: ${{ env.file }}
platforms: ${{ matrix.platforms }}
# Skip pushing when PR from a fork
push: ${{ !github.event.pull_request.head.repo.fork }}
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{env.image}}
cache-to: ${{ steps.cache-target.outputs.cache-to }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
build-args: |
DEVICE=${{ matrix.device }}
BUILD_ID=${{ github.run_id }}
BUILD_IMAGE=${{ github.event_name == 'release' && github.ref_name || steps.metadata.outputs.tags }}
BUILD_SOURCE_REF=${{ github.ref_name }}
BUILD_SOURCE_COMMIT=${{ github.sha }}
dockerfile: server/Dockerfile
dockerhub-push: ${{ github.event_name == 'release' }}
build-args: |
DEVICE=cpu
success-check-server:
name: Docker Build & Push Server Success
needs: [build_and_push_server, retag_server]
needs: [server, retag_server]
permissions: {}
runs-on: ubuntu-latest
if: always()
steps:
- name: Any jobs failed?
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1
- name: All jobs passed or skipped
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: echo "All jobs passed or skipped" && echo "${{ toJSON(needs.*.result) }}"
- uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with:
needs: ${{ toJSON(needs) }}
success-check-ml:
name: Docker Build & Push ML Success
needs: [build_and_push_ml, retag_ml]
needs: [machine-learning, retag_ml]
permissions: {}
runs-on: ubuntu-latest
if: always()
steps:
- name: Any jobs failed?
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1
- name: All jobs passed or skipped
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: echo "All jobs passed or skipped" && echo "${{ toJSON(needs.*.result) }}"
- uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with:
needs: ${{ toJSON(needs) }}

View File

@@ -3,7 +3,6 @@ on:
push:
branches: [main]
pull_request:
branches: [main]
release:
types: [published]
@@ -11,27 +10,37 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
docs:
- 'docs/**'
workflow:
- '.github/workflows/docs-build.yml'
- name: Check if we should force jobs to run
id: should_force
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT"
build:
name: Docs Build
needs: pre-job
permissions:
contents: read
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
defaults:
@@ -40,10 +49,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './docs/.nvmrc'
@@ -57,8 +68,9 @@ jobs:
run: npm run build
- name: Upload build output
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: docs-build-output
path: docs/build/
include-hidden-files: true
retention-days: 1

View File

@@ -1,7 +1,7 @@
name: Docs deploy
on:
workflow_run:
workflows: ["Docs build"]
workflow_run: # zizmor: ignore[dangerous-triggers] no attacker inputs are used here
workflows: ['Docs build']
types:
- completed
@@ -9,6 +9,9 @@ jobs:
checks:
name: Docs Deploy Checks
runs-on: ubuntu-latest
permissions:
actions: read
pull-requests: read
outputs:
parameters: ${{ steps.parameters.outputs.result }}
artifact: ${{ steps.get-artifact.outputs.result }}
@@ -17,7 +20,7 @@ jobs:
run: echo 'The triggering workflow did not succeed' && exit 1
- name: Get artifact
id: get-artifact
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -35,7 +38,9 @@ jobs:
return { found: true, id: matchArtifact.id };
- name: Determine deploy parameters
id: parameters
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
with:
script: |
const eventType = context.payload.workflow_run.event;
@@ -57,7 +62,8 @@ jobs:
} else if (eventType == "pull_request") {
let pull_number = context.payload.workflow_run.pull_requests[0]?.number;
if(!pull_number) {
const response = await github.rest.search.issuesAndPullRequests({q: 'repo:${{ github.repository }} is:pr sha:${{ github.event.workflow_run.head_sha }}',per_page: 1,})
const {HEAD_SHA} = process.env;
const response = await github.rest.search.issuesAndPullRequests({q: `repo:${{ github.repository }} is:pr sha:${HEAD_SHA}`,per_page: 1,})
const items = response.data.items
if (items.length < 1) {
throw new Error("No pull request found for the commit")
@@ -95,30 +101,36 @@ jobs:
name: Docs Deploy
runs-on: ubuntu-latest
needs: checks
permissions:
contents: read
actions: read
pull-requests: write
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Load parameters
id: parameters
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
PARAM_JSON: ${{ needs.checks.outputs.parameters }}
with:
script: |
const json = `${{ needs.checks.outputs.parameters }}`;
const parameters = JSON.parse(json);
const parameters = JSON.parse(process.env.PARAM_JSON);
core.setOutput("event", parameters.event);
core.setOutput("name", parameters.name);
core.setOutput("shouldDeploy", parameters.shouldDeploy);
- run: |
echo "Starting docs deployment for ${{ steps.parameters.outputs.event }} ${{ steps.parameters.outputs.name }}"
- name: Download artifact
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
with:
script: |
let artifact = ${{ needs.checks.outputs.artifact }};
let artifact = JSON.parse(process.env.ARTIFACT_JSON);
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
@@ -138,12 +150,12 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "apply"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'apply'
- name: Deploy Docs Subdomain Output
id: docs-output
@@ -153,27 +165,30 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "output -json"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'output -json'
- name: Output Cleaning
id: clean
env:
TG_OUTPUT: ${{ steps.docs-output.outputs.tg_action_output }}
run: |
TG_OUT=$(echo '${{ steps.docs-output.outputs.tg_action_output }}' | sed 's|%0A|\n|g ; s|%3C|<|g' | jq -c .)
echo "output=$TG_OUT" >> $GITHUB_OUTPUT
CLEANED=$(echo "$TG_OUTPUT" | sed 's|%0A|\n|g ; s|%3C|<|g' | jq -c .)
echo "output=$CLEANED" >> $GITHUB_OUTPUT
- name: Publish to Cloudflare Pages
uses: cloudflare/pages-action@v1
# TODO: Action is deprecated
uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1.5.0
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }}
workingDirectory: "docs"
directory: "build"
workingDirectory: 'docs'
directory: 'build'
branch: ${{ steps.parameters.outputs.name }}
wranglerVersion: '3'
@@ -184,7 +199,7 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
with:
tg_version: '0.58.12'
tofu_version: '1.7.1'
@@ -192,7 +207,7 @@ jobs:
tg_command: 'apply'
- name: Comment
uses: actions-cool/maintain-one-comment@v3
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
if: ${{ steps.parameters.outputs.event == 'pr' }}
with:
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}

View File

@@ -1,32 +1,39 @@
name: Docs destroy
on:
pull_request_target:
pull_request_target: # zizmor: ignore[dangerous-triggers] no attacker inputs are used here
types: [closed]
permissions: {}
jobs:
deploy:
name: Docs Destroy
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Destroy Docs Subdomain
env:
TF_VAR_prefix_name: "pr-${{ github.event.number }}"
TF_VAR_prefix_event_type: "pr"
TF_VAR_prefix_name: 'pr-${{ github.event.number }}'
TF_VAR_prefix_event_type: 'pr'
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "destroy"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'destroy -refresh=false'
- name: Comment
uses: actions-cool/maintain-one-comment@v3
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
with:
number: ${{ github.event.number }}
delete: true

55
.github/workflows/fix-format.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: Fix formatting
on:
pull_request:
types: [labeled]
permissions: {}
jobs:
fix-formatting:
runs-on: ubuntu-latest
if: ${{ github.event.label.name == 'fix:formatting' }}
permissions:
contents: write
pull-requests: write
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: 'Checkout'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ steps.generate-token.outputs.token }}
persist-credentials: true
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './server/.nvmrc'
- name: Fix formatting
run: make install-all && make format-all
- name: Commit and push
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
with:
default_author: github_actions
message: 'chore: fix formatting'
- name: Remove label
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
if: always()
with:
script: |
github.rest.issues.removeLabel({
issue_number: context.payload.pull_request.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: 'fix:formatting'
})

View File

@@ -1,21 +1,24 @@
name: PR Label Validation
on:
pull_request_target:
pull_request_target: # zizmor: ignore[dangerous-triggers] no attacker inputs are used here
types: [opened, labeled, unlabeled, synchronize]
permissions: {}
jobs:
validate-release-label:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: read
pull-requests: write
steps:
- name: Require PR to have a changelog label
uses: mheap/github-action-required-labels@v5
uses: mheap/github-action-required-labels@fb29a14a076b0f74099f6198f77750e8fc236016 # v5.5.0
with:
mode: exactly
count: 1
use_regex: true
labels: "changelog:.*"
labels: 'changelog:.*'
add_comment: true
message: 'Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label.'

View File

@@ -1,6 +1,8 @@
name: "Pull Request Labeler"
name: 'Pull Request Labeler'
on:
- pull_request_target
- pull_request_target # zizmor: ignore[dangerous-triggers] no attacker inputs are used here
permissions: {}
jobs:
labeler:
@@ -9,4 +11,4 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0

View File

@@ -4,12 +4,16 @@ on:
pull_request:
types: [opened, synchronize, reopened, edited]
permissions: {}
jobs:
validate-pr-title:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: PR Conventional Commit Validation
uses: ytanikin/PRConventionalCommits@1.2.0
uses: ytanikin/PRConventionalCommits@b628c5a234cc32513014b7bfdd1e47b532124d98 # 1.3.0
with:
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
add_label: 'false'

View File

@@ -21,35 +21,40 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-root
cancel-in-progress: true
permissions: {}
jobs:
bump_version:
runs-on: ubuntu-latest
outputs:
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
permissions: {} # No job-level permissions are needed because it uses the app-token
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v1
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
token: ${{ steps.generate-token.outputs.token }}
persist-credentials: true
- name: Install Poetry
run: pipx install poetry
- name: Install uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
- name: Bump version
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
env:
SERVER_BUMP: ${{ inputs.serverBump }}
MOBILE_BUMP: ${{ inputs.mobileBump }}
run: misc/release/pump-version.sh -s "${SERVER_BUMP}" -m "${MOBILE_BUMP}"
- name: Commit and tag
id: push-tag
uses: EndBug/add-and-commit@v9
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
with:
default_author: github_actions
message: 'chore: version ${{ env.IMMICH_VERSION }}'
@@ -59,30 +64,47 @@ jobs:
build_mobile:
uses: ./.github/workflows/build-mobile.yml
needs: bump_version
secrets: inherit
permissions:
contents: read
secrets:
KEY_JKS: ${{ secrets.KEY_JKS }}
ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
with:
ref: ${{ needs.bump_version.outputs.ref }}
prepare_release:
runs-on: ubuntu-latest
needs: build_mobile
permissions:
actions: read # To download the app artifact
# No content permissions are needed because it uses the app-token
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
token: ${{ secrets.ORG_RELEASE_TOKEN }}
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
token: ${{ steps.generate-token.outputs.token }}
persist-credentials: false
- name: Download APK
uses: actions/download-artifact@v4
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: release-apk-signed
- name: Create draft release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
with:
draft: true
tag_name: ${{ env.IMMICH_VERSION }}
token: ${{ steps.generate-token.outputs.token }}
generate_release_notes: true
body_path: misc/release/notes.tmpl
files: |

35
.github/workflows/preview-label.yaml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Preview label
on:
pull_request:
types: [labeled, closed]
permissions: {}
jobs:
comment-status:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'preview' }}
permissions:
pull-requests: write
steps:
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
with:
message-id: 'preview-status'
message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/'
remove-label:
runs-on: ubuntu-latest
if: ${{ github.event.action == 'closed' && contains(github.event.pull_request.labels.*.name, 'preview') }}
permissions:
pull-requests: write
steps:
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
github.rest.issues.removeLabel({
issue_number: context.payload.pull_request.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: 'preview'
})

View File

@@ -4,20 +4,24 @@ on:
release:
types: [published]
permissions:
packages: write
permissions: {}
jobs:
publish:
name: Publish `@immich/sdk`
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./open-api/typescript-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './open-api/typescript-sdk/.nvmrc'
registry-url: 'https://registry.npmjs.org'

View File

@@ -9,37 +9,47 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
mobile:
- 'mobile/**'
workflow:
- '.github/workflows/static_analysis.yml'
- name: Check if we should force jobs to run
id: should_force
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
mobile-dart-analyze:
name: Run Dart Code Analysis
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
@@ -48,6 +58,44 @@ jobs:
run: dart pub get
working-directory: ./mobile
- name: Install DCM
run: |
sudo apt-get update
wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
sudo apt-get update
sudo apt-get install dcm
- name: Generate translation file
run: make translation
working-directory: ./mobile
- name: Run Build Runner
run: make build
working-directory: ./mobile
- name: Generate platform API
run: make pigeon
working-directory: ./mobile
- name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files
with:
files: |
mobile/**/*.g.dart
mobile/**/*.gr.dart
mobile/**/*.drift.dart
- name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: |
echo "ERROR: Generated files not up to date! Run make_build inside the mobile directory"
echo "Changed files: ${CHANGED_FILES}"
exit 1
- name: Run dart analyze
run: dart analyze --fatal-infos
working-directory: ./mobile
@@ -60,7 +108,33 @@ jobs:
run: dart run custom_lint
working-directory: ./mobile
# Enable after riverpod generator migration is completed
# - name: Run dart custom lint
# run: dart run custom_lint
# working-directory: ./mobile
- name: Run DCM
run: dcm analyze lib
working-directory: ./mobile
zizmor:
name: zizmor
runs-on: ubuntu-latest
permissions:
security-events: write
contents: read
actions: read
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Install the latest version of uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
- name: Run zizmor 🌈
run: uvx zizmor --format=sarif . > results.sarif
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
sarif_file: results.sarif
category: zizmor

View File

@@ -9,10 +9,15 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run_i18n: ${{ steps.found_paths.outputs.i18n == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_web: ${{ steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_server: ${{ steps.found_paths.outputs.server == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_cli: ${{ steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
@@ -21,15 +26,22 @@ jobs:
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_web: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_server_cli: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.server == 'true' || steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_.github: ${{ steps.found_paths.outputs['.github'] == 'true' || steps.should_force.outputs.should_force == 'true' }} # redundant to have should_force but if someone changes the trigger then this won't have to be changed
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
i18n:
- 'i18n/**'
web:
- 'web/**'
- 'i18n/**'
- 'open-api/typescript-sdk/**'
server:
- 'server/**'
@@ -42,26 +54,34 @@ jobs:
- 'mobile/**'
machine-learning:
- 'machine-learning/**'
workflow:
- '.github/workflows/test.yml'
.github:
- '.github/**'
- name: Check if we should force jobs to run
id: should_force
run: echo "should_force=${{ github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
server-unit-tests:
name: Test & Lint Server
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./server
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './server/.nvmrc'
@@ -80,8 +100,8 @@ jobs:
run: npm run check
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: npm run test:cov
- name: Run small tests & coverage
run: npm test
if: ${{ !cancelled() }}
cli-unit-tests:
@@ -89,16 +109,20 @@ jobs:
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./cli
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './cli/.nvmrc'
@@ -122,7 +146,7 @@ jobs:
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: npm run test:cov
run: npm run test
if: ${{ !cancelled() }}
cli-unit-tests-win:
@@ -130,16 +154,20 @@ jobs:
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
runs-on: windows-latest
permissions:
contents: read
defaults:
run:
working-directory: ./cli
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './cli/.nvmrc'
@@ -156,24 +184,28 @@ jobs:
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: npm run test:cov
run: npm run test
if: ${{ !cancelled() }}
web-unit-tests:
name: Test & Lint Web
web-lint:
name: Lint Web
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
runs-on: ubuntu-latest
runs-on: mich
permissions:
contents: read
defaults:
run:
working-directory: ./web
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './web/.nvmrc'
@@ -185,7 +217,7 @@ jobs:
run: npm ci
- name: Run linter
run: npm run lint
run: npm run lint:p
if: ${{ !cancelled() }}
- name: Run formatter
@@ -196,29 +228,102 @@ jobs:
run: npm run check:svelte
if: ${{ !cancelled() }}
web-unit-tests:
name: Test Web
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./web
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './web/.nvmrc'
- name: Run setup typescript-sdk
run: npm ci && npm run build
working-directory: ./open-api/typescript-sdk
- name: Run npm install
run: npm ci
- name: Run tsc
run: npm run check:typescript
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: npm run test:cov
run: npm run test
if: ${{ !cancelled() }}
i18n-tests:
name: Test i18n
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_i18n == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './web/.nvmrc'
- name: Install dependencies
run: npm --prefix=web ci
- name: Format
run: npm --prefix=web run format:i18n
- name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files
with:
files: |
i18n/**
- name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: |
echo "ERROR: i18n files not up to date!"
echo "Changed files: ${CHANGED_FILES}"
exit 1
e2e-tests-lint:
name: End-to-End Lint
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_e2e == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./e2e
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './e2e/.nvmrc'
@@ -243,23 +348,58 @@ jobs:
run: npm run check
if: ${{ !cancelled() }}
server-medium-tests:
name: Medium Tests (Server)
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./server
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './server/.nvmrc'
- name: Run npm install
run: npm ci
- name: Run medium tests
run: npm run test:medium
if: ${{ !cancelled() }}
e2e-tests-server-cli:
name: End-to-End Tests (Server & CLI)
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_e2e_server_cli == 'true' }}
runs-on: mich
runs-on: ${{ matrix.runner }}
permissions:
contents: read
defaults:
run:
working-directory: ./e2e
strategy:
matrix:
runner: [ubuntu-latest, ubuntu-24.04-arm]
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
submodules: 'recursive'
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './e2e/.nvmrc'
@@ -289,19 +429,25 @@ jobs:
name: End-to-End Tests (Web)
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_e2e_web == 'true' }}
runs-on: mich
runs-on: ${{ matrix.runner }}
permissions:
contents: read
defaults:
run:
working-directory: ./e2e
strategy:
matrix:
runner: [ubuntu-latest, ubuntu-24.04-arm]
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
submodules: 'recursive'
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './e2e/.nvmrc'
@@ -326,18 +472,39 @@ jobs:
run: npx playwright test
if: ${{ !cancelled() }}
success-check-e2e:
name: End-to-End Tests Success
needs: [e2e-tests-server-cli, e2e-tests-web]
permissions: {}
runs-on: ubuntu-latest
if: always()
steps:
- uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with:
needs: ${{ toJSON(needs) }}
mobile-unit-tests:
name: Unit Test Mobile
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
- name: Generate translation file
run: make translation
working-directory: ./mobile
- name: Run tests
working-directory: ./mobile
run: flutter test -j 1
@@ -347,55 +514,99 @@ jobs:
needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./machine-learning
steps:
- uses: actions/checkout@v4
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v5
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
python-version: 3.11
cache: 'poetry'
persist-credentials: false
- name: Install uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
# with:
# python-version: 3.11
# cache: 'uv'
- name: Install dependencies
run: |
poetry install --with dev --with cpu
uv sync --extra cpu
- name: Lint with ruff
run: |
poetry run ruff check --output-format=github app export
uv run ruff check --output-format=github immich_ml
- name: Check black formatting
run: |
poetry run black --check app export
uv run black --check immich_ml
- name: Run mypy type checking
run: |
poetry run mypy --install-types --non-interactive --strict app/
uv run mypy --strict immich_ml/
- name: Run tests and coverage
run: |
poetry run pytest app --cov=app --cov-report term-missing
uv run pytest --cov=immich_ml --cov-report term-missing
github-files-formatting:
name: .github Files Formatting
needs: pre-job
if: ${{ needs.pre-job.outputs['should_run_.github'] == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: ./.github
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './.github/.nvmrc'
- name: Run npm install
run: npm ci
- name: Run formatter
run: npm run format
if: ${{ !cancelled() }}
shellcheck:
name: ShellCheck
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
with:
ignore_paths: >-
**/open-api/**
**/openapi/**
**/openapi**
**/node_modules/**
generated-api-up-to-date:
name: OpenAPI Clients
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './server/.nvmrc'
@@ -409,7 +620,7 @@ jobs:
run: make open-api
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files
with:
files: |
@@ -419,17 +630,21 @@ jobs:
- name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: |
echo "ERROR: Generated files not up to date!"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
echo "Changed files: ${CHANGED_FILES}"
exit 1
generated-typeorm-migrations-up-to-date:
name: TypeORM Checks
sql-schema-up-to-date:
name: SQL Schema Checks
runs-on: ubuntu-latest
permissions:
contents: read
services:
postgres:
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3
env:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
@@ -447,10 +662,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './server/.nvmrc'
@@ -461,26 +678,29 @@ jobs:
run: npm run build
- name: Run existing migrations
run: npm run typeorm:migrations:run
run: npm run migrations:run
- name: Test npm run schema:reset command works
run: npm run typeorm:schema:reset
run: npm run schema:reset
- name: Generate new migrations
continue-on-error: true
run: npm run typeorm:migrations:generate ./src/migrations/TestMigration
run: npm run migrations:generate src/TestMigration
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files
with:
files: |
server/src/migrations/
server/src
- name: Verify migration files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: |
echo "ERROR: Generated migration files not up to date!"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
echo "Changed files: ${CHANGED_FILES}"
cat ./src/*-TestMigration.ts
exit 1
- name: Run SQL generation
@@ -489,7 +709,7 @@ jobs:
DB_URL: postgres://postgres:postgres@localhost:5432/immich
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-sql-files
with:
files: |
@@ -497,9 +717,12 @@ jobs:
- name: Verify SQL files have not changed
if: steps.verify-changed-sql-files.outputs.files_changed == 'true'
env:
CHANGED_FILES: ${{ steps.verify-changed-sql-files.outputs.changed_files }}
run: |
echo "ERROR: Generated SQL files not up to date!"
echo "Changed files: ${{ steps.verify-changed-sql-files.outputs.changed_files }}"
echo "Changed files: ${CHANGED_FILES}"
git diff
exit 1
# mobile-integration-tests:

57
.github/workflows/weblate-lock.yml vendored Normal file
View File

@@ -0,0 +1,57 @@
name: Weblate checks
on:
pull_request:
branches: [main]
permissions: {}
jobs:
pre-job:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- id: found_paths
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: |
i18n:
- 'i18n/!(en)**\.json'
enforce-lock:
name: Check Weblate Lock
needs: [pre-job]
runs-on: ubuntu-latest
permissions: {}
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
steps:
- name: Check weblate lock
run: |
if [[ "false" = $(curl https://hosted.weblate.org/api/components/immich/immich/lock/ | jq .locked) ]]; then
exit 1
fi
- name: Find Pull Request
uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # v1.9.0
id: find-pr
with:
branch: chore/translations
- name: Fail if existing weblate PR
if: ${{ steps.find-pr.outputs.number }}
run: exit 1
success-check-lock:
name: Weblate Lock Check Success
needs: [enforce-lock]
runs-on: ubuntu-latest
permissions: {}
if: always()
steps:
- uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with:
needs: ${{ toJSON(needs) }}

3
.gitignore vendored
View File

@@ -3,6 +3,7 @@
.DS_Store
.vscode/*
!.vscode/launch.json
!.vscode/extensions.json
.idea
docker/upload
@@ -21,3 +22,5 @@ mobile/openapi/.openapi-generator/FILES
open-api/typescript-sdk/build
mobile/android/fastlane/report.xml
mobile/ios/fastlane/report.xml
vite.config.js.timestamp-*

10
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"recommendations": [
"esbenp.prettier-vscode",
"svelte.svelte-vscode",
"dbaeumer.vscode-eslint",
"dart-code.flutter",
"dart-code.dart-code",
"dcmdev.dcm-vscode-extension"
]
}

75
.vscode/settings.json vendored
View File

@@ -1,44 +1,63 @@
{
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
"editor.formatOnSave": true
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
"editor.formatOnSave": true
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
"editor.formatOnSave": true
},
"[svelte]": {
"editor.defaultFormatter": "svelte.svelte-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"svelte.enable-ts-plugin": true,
"eslint.validate": [
"javascript",
"svelte"
],
"typescript.preferences.importModuleSpecifier": "non-relative",
"[dart]": {
"editor.defaultFormatter": "Dart-Code.dart-code",
"editor.formatOnSave": true,
"editor.selectionHighlight": false,
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.suggestSelection": "first",
"editor.tabCompletion": "onlySnippets",
"editor.wordBasedSuggestions": "off",
"editor.defaultFormatter": "Dart-Code.dart-code"
"editor.wordBasedSuggestions": "off"
},
"cSpell.words": [
"immich"
],
"[javascript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[svelte]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "svelte.svelte-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[typescript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"cSpell.words": ["immich"],
"editor.formatOnSave": true,
"eslint.validate": ["javascript", "svelte"],
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart",
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
}
},
"svelte.enable-ts-plugin": true,
"typescript.preferences.importModuleSpecifier": "non-relative"
}

72
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,72 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Fix Permissions, Install Dependencies",
"type": "shell",
"command": "[ -f /immich-devcontainer/container-start.sh ] && /immich-devcontainer/container-start.sh || exit 0",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "dedicated",
"showReuseMessage": true,
"clear": false,
"group": "Devcontainer tasks",
"close": true
},
"runOptions": {
"runOn": "default"
},
"problemMatcher": []
},
{
"label": "Immich API Server (Nest)",
"dependsOn": ["Fix Permissions, Install Dependencies"],
"type": "shell",
"command": "[ -f /immich-devcontainer/container-start-backend.sh ] && /immich-devcontainer/container-start-backend.sh || exit 0",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "dedicated",
"showReuseMessage": true,
"clear": false,
"group": "Devcontainer tasks",
"close": true
},
"runOptions": {
"runOn": "default"
},
"problemMatcher": []
},
{
"label": "Immich Web Server (Vite)",
"dependsOn": ["Fix Permissions, Install Dependencies"],
"type": "shell",
"command": "[ -f /immich-devcontainer/container-start-frontend.sh ] && /immich-devcontainer/container-start-frontend.sh || exit 0",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "dedicated",
"showReuseMessage": true,
"clear": false,
"group": "Devcontainer tasks",
"close": true
},
"runOptions": {
"runOn": "default"
},
"problemMatcher": []
},
{
"label": "Immich Server and Web",
"dependsOn": ["Immich Web Server (Vite)", "Immich API Server (Nest)"],
"runOptions": {
"runOn": "folderOpen"
},
"problemMatcher": []
}
]
}

View File

@@ -17,6 +17,9 @@ e2e:
prod:
docker compose -f ./docker/docker-compose.prod.yml up --build -V --remove-orphans
prod-down:
docker compose -f ./docker/docker-compose.prod.yml down --remove-orphans
prod-scale:
docker compose -f ./docker/docker-compose.prod.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans
@@ -39,7 +42,7 @@ attach-server:
renovate:
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
MODULES = e2e server web cli sdk
MODULES = e2e server web cli sdk docs .github
audit-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
@@ -48,11 +51,9 @@ install-%:
build-cli: build-sdk
build-web: build-sdk
build-%: install-%
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run | grep 'build' >/dev/null \
&& npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run build || true
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run build
format-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run | grep 'format:fix' >/dev/null \
&& npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run format:fix || true
npm --prefix $* run format:fix
lint-%:
npm --prefix $* run lint:fix
check-%:
@@ -66,15 +67,27 @@ test-e2e:
docker compose -f ./e2e/docker-compose.yml build
npm --prefix e2e run test
npm --prefix e2e run test:web
test-medium:
docker run \
--rm \
-v ./server/src:/usr/src/app/src \
-v ./server/test:/usr/src/app/test \
-v ./server/vitest.config.medium.mjs:/usr/src/app/vitest.config.medium.mjs \
-v ./server/tsconfig.json:/usr/src/app/tsconfig.json \
-e NODE_ENV=development \
immich-server:latest \
-c "npm ci && npm run test:medium -- --run"
test-medium-dev:
docker exec -it immich_server /bin/sh -c "npm run test:medium"
build-all: $(foreach M,$(MODULES),build-$M) ;
build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ;
install-all: $(foreach M,$(MODULES),install-$M) ;
check-all: $(foreach M,$(MODULES),check-$M) ;
lint-all: $(foreach M,$(MODULES),lint-$M) ;
format-all: $(foreach M,$(MODULES),format-$M) ;
check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ;
lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ;
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
audit-all: $(foreach M,$(MODULES),audit-$M) ;
hygiene-all: lint-all format-all check-all sql audit-all;
test-all: $(foreach M,$(MODULES),test-$M) ;
test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ;
clean:
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

View File

@@ -1,11 +1,11 @@
<p align="center">
<br/>
<br/>
<a href="https://opensource.org/license/agpl-v3"><img src="https://img.shields.io/badge/License-AGPL_v3-blue.svg?color=3F51B5&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: AGPLv3"></a>
<a href="https://discord.immich.app">
<img src="https://img.shields.io/discord/979116623879368755.svg?label=Discord&logo=Discord&style=for-the-badge&logoColor=000000&labelColor=ececec" alt="Discord"/>
</a>
<br/>
<br/>
<br/>
<br/>
</p>
<p align="center">
@@ -17,24 +17,25 @@
<img src="design/immich-screenshots.png" title="Main Screenshot">
</a>
<br/>
<p align="center">
<a href="readme_i18n/README_ca_ES.md">Català</a>
<a href="readme_i18n/README_es_ES.md">Español</a>
<a href="readme_i18n/README_fr_FR.md">Français</a>
<a href="readme_i18n/README_it_IT.md">Italiano</a>
<a href="readme_i18n/README_ja_JP.md">日本語</a>
<a href="readme_i18n/README_ko_KR.md">한국어</a>
<a href="readme_i18n/README_de_DE.md">Deutsch</a>
<a href="readme_i18n/README_nl_NL.md">Nederlands</a>
<a href="readme_i18n/README_tr_TR.md">Türkçe</a>
<a href="readme_i18n/README_zh_CN.md">中文</a>
<a href="readme_i18n/README_ru_RU.md">Русский</a>
<a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a>
<a href="readme_i18n/README_sv_SE.md">Svenska</a>
<a href="readme_i18n/README_ar_JO.md">العربية</a>
<a href="readme_i18n/README_vi_VN.md">Tiếng Việt</a>
<a href="readme_i18n/README_ca_ES.md">Català</a>
<a href="readme_i18n/README_es_ES.md">Español</a>
<a href="readme_i18n/README_fr_FR.md">Français</a>
<a href="readme_i18n/README_it_IT.md">Italiano</a>
<a href="readme_i18n/README_ja_JP.md">日本語</a>
<a href="readme_i18n/README_ko_KR.md">한국어</a>
<a href="readme_i18n/README_de_DE.md">Deutsch</a>
<a href="readme_i18n/README_nl_NL.md">Nederlands</a>
<a href="readme_i18n/README_tr_TR.md">Türkçe</a>
<a href="readme_i18n/README_zh_CN.md">中文</a>
<a href="readme_i18n/README_uk_UA.md">Українська</a>
<a href="readme_i18n/README_ru_RU.md">Русский</a>
<a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a>
<a href="readme_i18n/README_sv_SE.md">Svenska</a>
<a href="readme_i18n/README_ar_JO.md">العربية</a>
<a href="readme_i18n/README_vi_VN.md">Tiếng Việt</a>
<a href="readme_i18n/README_th_TH.md">ภาษาไทย</a>
</p>
## Disclaimer
@@ -60,9 +61,7 @@
## Demo
Access the demo [here](https://demo.immich.app). The demo is running on a Free-tier Oracle VM in Amsterdam with a 2.4Ghz quad-core ARM64 CPU and 24GB RAM.
For the mobile app, you can use `https://demo.immich.app/api` for the `Server Endpoint URL`
Access the demo [here](https://demo.immich.app). For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoint URL`.
### Login credentials
@@ -102,6 +101,8 @@ For the mobile app, you can use `https://demo.immich.app/api` for the `Server En
| Offline support | Yes | No |
| Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes |
| Tags | No | Yes |
| Folder View | Yes | Yes |
## Translations

View File

@@ -1 +1 @@
20.17.0
22.16.0

View File

@@ -1,4 +1,4 @@
FROM node:20.17.0-alpine3.20@sha256:2d07db07a2df6830718ae2a47db6fedce6745f5bcd174c398f2acdda90a11c03 AS core
FROM node:22.16.0-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e AS core
WORKDIR /usr/src/open-api/typescript-sdk
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./

View File

@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [
export default typescriptEslint.config([
eslintPluginUnicorn.configs.recommended,
eslintPluginPrettierRecommended,
js.configs.recommended,
typescriptEslint.configs.recommended,
{
ignores: ['eslint.config.mjs', 'dist'],
},
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsParser,
parser: typescriptEslint.parser,
ecmaVersion: 5,
sourceType: 'module',
@@ -58,4 +48,4 @@ export default [
'object-shorthand': ['error', 'always'],
},
},
];
]);

2854
cli/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.22",
"version": "2.2.71",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",
@@ -19,27 +19,27 @@
"@types/byte-size": "^8.1.0",
"@types/cli-progress": "^3.11.0",
"@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1",
"@types/node": "^20.16.5",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "^2.0.5",
"@types/node": "^22.15.31",
"@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0",
"cli-progress": "^3.12.0",
"commander": "^12.0.0",
"eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^55.0.0",
"globals": "^15.9.0",
"eslint-plugin-unicorn": "^59.0.0",
"globals": "^16.0.0",
"mock-fs": "^5.2.0",
"prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0",
"typescript": "^5.3.3",
"vite": "^5.0.12",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.0",
"vite-tsconfig-paths": "^5.0.0",
"vitest": "^2.0.5",
"vitest-fetch-mock": "^0.3.0",
"vitest": "^3.0.0",
"vitest-fetch-mock": "^0.4.0",
"yaml": "^2.3.1"
},
"scripts": {
@@ -62,11 +62,13 @@
"node": ">=20.0.0"
},
"dependencies": {
"chokidar": "^4.0.3",
"fast-glob": "^3.3.2",
"fastq": "^1.17.1",
"lodash-es": "^4.17.21"
"lodash-es": "^4.17.21",
"micromatch": "^4.0.8"
},
"volta": {
"node": "20.17.0"
"node": "22.16.0"
}
}

View File

@@ -1,12 +1,13 @@
import * as fs from 'node:fs';
import * as os from 'node:os';
import * as path from 'node:path';
import { describe, expect, it, vi } from 'vitest';
import { setTimeout as sleep } from 'node:timers/promises';
import { describe, expect, it, MockedFunction, vi } from 'vitest';
import { Action, checkBulkUpload, defaults, Reason } from '@immich/sdk';
import { Action, checkBulkUpload, defaults, getSupportedMediaTypes, Reason } from '@immich/sdk';
import createFetchMock from 'vitest-fetch-mock';
import { checkForDuplicates, getAlbumName, uploadFiles, UploadOptionsDto } from './asset';
import { checkForDuplicates, getAlbumName, startWatch, uploadFiles, UploadOptionsDto } from 'src/commands/asset';
vi.mock('@immich/sdk');
@@ -199,3 +200,112 @@ describe('checkForDuplicates', () => {
});
});
});
describe('startWatch', () => {
let testFolder: string;
let checkBulkUploadMocked: MockedFunction<typeof checkBulkUpload>;
beforeEach(async () => {
vi.restoreAllMocks();
vi.mocked(getSupportedMediaTypes).mockResolvedValue({
image: ['.jpg'],
sidecar: ['.xmp'],
video: ['.mp4'],
});
testFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'test-startWatch-'));
checkBulkUploadMocked = vi.mocked(checkBulkUpload);
checkBulkUploadMocked.mockResolvedValue({
results: [],
});
});
it('should start watching a directory and upload new files', async () => {
const testFilePath = path.join(testFolder, 'test.jpg');
await startWatch([testFolder], { concurrency: 1 }, { batchSize: 1, debounceTimeMs: 10 });
await sleep(100); // to debounce the watcher from considering the test file as a existing file
await fs.promises.writeFile(testFilePath, 'testjpg');
await vi.waitUntil(() => checkBulkUploadMocked.mock.calls.length > 0, 3000);
expect(checkBulkUpload).toHaveBeenCalledWith({
assetBulkUploadCheckDto: {
assets: [
expect.objectContaining({
id: testFilePath,
}),
],
},
});
});
it('should filter out unsupported files', async () => {
const testFilePath = path.join(testFolder, 'test.jpg');
const unsupportedFilePath = path.join(testFolder, 'test.txt');
await startWatch([testFolder], { concurrency: 1 }, { batchSize: 1, debounceTimeMs: 10 });
await sleep(100); // to debounce the watcher from considering the test file as a existing file
await fs.promises.writeFile(testFilePath, 'testjpg');
await fs.promises.writeFile(unsupportedFilePath, 'testtxt');
await vi.waitUntil(() => checkBulkUploadMocked.mock.calls.length > 0, 3000);
expect(checkBulkUpload).toHaveBeenCalledWith({
assetBulkUploadCheckDto: {
assets: expect.arrayContaining([
expect.objectContaining({
id: testFilePath,
}),
]),
},
});
expect(checkBulkUpload).not.toHaveBeenCalledWith({
assetBulkUploadCheckDto: {
assets: expect.arrayContaining([
expect.objectContaining({
id: unsupportedFilePath,
}),
]),
},
});
});
it('should filger out ignored patterns', async () => {
const testFilePath = path.join(testFolder, 'test.jpg');
const ignoredPattern = 'ignored';
const ignoredFolder = path.join(testFolder, ignoredPattern);
await fs.promises.mkdir(ignoredFolder, { recursive: true });
const ignoredFilePath = path.join(ignoredFolder, 'ignored.jpg');
await startWatch([testFolder], { concurrency: 1, ignore: ignoredPattern }, { batchSize: 1, debounceTimeMs: 10 });
await sleep(100); // to debounce the watcher from considering the test file as a existing file
await fs.promises.writeFile(testFilePath, 'testjpg');
await fs.promises.writeFile(ignoredFilePath, 'ignoredjpg');
await vi.waitUntil(() => checkBulkUploadMocked.mock.calls.length > 0, 3000);
expect(checkBulkUpload).toHaveBeenCalledWith({
assetBulkUploadCheckDto: {
assets: expect.arrayContaining([
expect.objectContaining({
id: testFilePath,
}),
]),
},
});
expect(checkBulkUpload).not.toHaveBeenCalledWith({
assetBulkUploadCheckDto: {
assets: expect.arrayContaining([
expect.objectContaining({
id: ignoredFilePath,
}),
]),
},
});
});
afterEach(async () => {
await fs.promises.rm(testFolder, { recursive: true, force: true });
});
});

View File

@@ -1,5 +1,6 @@
import {
Action,
AssetBulkUploadCheckItem,
AssetBulkUploadCheckResult,
AssetMediaResponseDto,
AssetMediaStatus,
@@ -11,13 +12,18 @@ import {
getSupportedMediaTypes,
} from '@immich/sdk';
import byteSize from 'byte-size';
import { Presets, SingleBar } from 'cli-progress';
import { Matcher, watch as watchFs } from 'chokidar';
import { MultiBar, Presets, SingleBar } from 'cli-progress';
import { chunk } from 'lodash-es';
import micromatch from 'micromatch';
import { Stats, createReadStream } from 'node:fs';
import { stat, unlink } from 'node:fs/promises';
import path, { basename } from 'node:path';
import { Queue } from 'src/queue';
import { BaseOptions, authenticate, crawl, sha1 } from 'src/utils';
import { BaseOptions, Batcher, authenticate, crawl, sha1 } from 'src/utils';
const UPLOAD_WATCH_BATCH_SIZE = 100;
const UPLOAD_WATCH_DEBOUNCE_TIME_MS = 10_000;
const s = (count: number) => (count === 1 ? '' : 's');
@@ -35,6 +41,9 @@ export interface UploadOptionsDto {
albumName?: string;
includeHidden?: boolean;
concurrency: number;
progress?: boolean;
watch?: boolean;
jsonOutput?: boolean;
}
class UploadFile extends File {
@@ -54,19 +63,100 @@ class UploadFile extends File {
}
}
const uploadBatch = async (files: string[], options: UploadOptionsDto) => {
const { newFiles, duplicates } = await checkForDuplicates(files, options);
const newAssets = await uploadFiles(newFiles, options);
if (options.jsonOutput) {
console.log(JSON.stringify({ newFiles, duplicates, newAssets }, undefined, 4));
}
await updateAlbums([...newAssets, ...duplicates], options);
await deleteFiles(
newAssets.map(({ filepath }) => filepath),
options,
);
};
export const startWatch = async (
paths: string[],
options: UploadOptionsDto,
{
batchSize = UPLOAD_WATCH_BATCH_SIZE,
debounceTimeMs = UPLOAD_WATCH_DEBOUNCE_TIME_MS,
}: { batchSize?: number; debounceTimeMs?: number } = {},
) => {
const watcherIgnored: Matcher[] = [];
const { image, video } = await getSupportedMediaTypes();
const extensions = new Set([...image, ...video]);
if (options.ignore) {
watcherIgnored.push((path) => micromatch.contains(path, `**/${options.ignore}`));
}
const pathsBatcher = new Batcher<string>({
batchSize,
debounceTimeMs,
onBatch: async (paths: string[]) => {
const uniquePaths = [...new Set(paths)];
await uploadBatch(uniquePaths, options);
},
});
const onFile = async (path: string, stats?: Stats) => {
if (stats?.isDirectory()) {
return;
}
const ext = '.' + path.split('.').pop()?.toLowerCase();
if (!ext || !extensions.has(ext)) {
return;
}
if (!options.progress) {
// logging when progress is disabled as it can cause issues with the progress bar rendering
console.log(`Change detected: ${path}`);
}
pathsBatcher.add(path);
};
const fsWatcher = watchFs(paths, {
ignoreInitial: true,
ignored: watcherIgnored,
alwaysStat: true,
awaitWriteFinish: true,
depth: options.recursive ? undefined : 1,
persistent: true,
})
.on('add', onFile)
.on('change', onFile)
.on('error', (error) => console.error(`Watcher error: ${error}`));
process.on('SIGINT', async () => {
console.log('Exiting...');
await fsWatcher.close();
process.exit();
});
};
export const upload = async (paths: string[], baseOptions: BaseOptions, options: UploadOptionsDto) => {
await authenticate(baseOptions);
const scanFiles = await scan(paths, options);
if (scanFiles.length === 0) {
console.log('No files found, exiting');
return;
if (options.watch) {
console.log('No files found initially.');
} else {
console.log('No files found, exiting');
return;
}
}
const { newFiles, duplicates } = await checkForDuplicates(scanFiles, options);
const newAssets = await uploadFiles(newFiles, options);
await updateAlbums([...newAssets, ...duplicates], options);
await deleteFiles(newFiles, options);
if (options.watch) {
console.log('Watching for changes...');
await startWatch(paths, options);
// watcher does not handle the initial scan
// as the scan() is a more efficient quick start with batched results
}
await uploadBatch(scanFiles, options);
};
const scan = async (pathsToCrawl: string[], options: UploadOptionsDto) => {
@@ -84,29 +174,35 @@ const scan = async (pathsToCrawl: string[], options: UploadOptionsDto) => {
return files;
};
export const checkForDuplicates = async (files: string[], { concurrency, skipHash }: UploadOptionsDto) => {
export const checkForDuplicates = async (files: string[], { concurrency, skipHash, progress }: UploadOptionsDto) => {
if (skipHash) {
console.log('Skipping hash check, assuming all files are new');
return { newFiles: files, duplicates: [] };
}
const progressBar = new SingleBar(
{ format: 'Checking files | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
Presets.shades_classic,
);
let multiBar: MultiBar | undefined;
progressBar.start(files.length, 0);
if (progress) {
multiBar = new MultiBar(
{ format: '{message} | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
Presets.shades_classic,
);
} else {
console.log(`Received ${files.length} files, hashing...`);
}
const hashProgressBar = multiBar?.create(files.length, 0, { message: 'Hashing files ' });
const checkProgressBar = multiBar?.create(files.length, 0, { message: 'Checking for duplicates' });
const newFiles: string[] = [];
const duplicates: Asset[] = [];
const queue = new Queue<string[], AssetBulkUploadCheckResults>(
async (filepaths: string[]) => {
const dto = await Promise.all(
filepaths.map(async (filepath) => ({ id: filepath, checksum: await sha1(filepath) })),
);
const response = await checkBulkUpload({ assetBulkUploadCheckDto: { assets: dto } });
const checkBulkUploadQueue = new Queue<AssetBulkUploadCheckItem[], void>(
async (assets: AssetBulkUploadCheckItem[]) => {
const response = await checkBulkUpload({ assetBulkUploadCheckDto: { assets } });
const results = response.results as AssetBulkUploadCheckResults;
for (const { id: filepath, assetId, action } of results) {
if (action === Action.Accept) {
newFiles.push(filepath);
@@ -115,19 +211,46 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
duplicates.push({ id: assetId as string, filepath });
}
}
progressBar.increment(filepaths.length);
checkProgressBar?.increment(assets.length);
},
{ concurrency, retry: 3 },
);
const results: { id: string; checksum: string }[] = [];
let checkBulkUploadRequests: AssetBulkUploadCheckItem[] = [];
const queue = new Queue<string, AssetBulkUploadCheckItem[]>(
async (filepath: string): Promise<AssetBulkUploadCheckItem[]> => {
const dto = { id: filepath, checksum: await sha1(filepath) };
results.push(dto);
checkBulkUploadRequests.push(dto);
if (checkBulkUploadRequests.length === 5000) {
const batch = checkBulkUploadRequests;
checkBulkUploadRequests = [];
void checkBulkUploadQueue.push(batch);
}
hashProgressBar?.increment();
return results;
},
{ concurrency, retry: 3 },
);
for (const items of chunk(files, concurrency)) {
await queue.push(items);
for (const item of files) {
void queue.push(item);
}
await queue.drained();
progressBar.stop();
if (checkBulkUploadRequests.length > 0) {
void checkBulkUploadQueue.push(checkBulkUploadRequests);
}
await checkBulkUploadQueue.drained();
multiBar?.stop();
console.log(`Found ${newFiles.length} new files and ${duplicates.length} duplicate${s(duplicates.length)}`);
@@ -143,7 +266,10 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
return { newFiles, duplicates };
};
export const uploadFiles = async (files: string[], { dryRun, concurrency }: UploadOptionsDto): Promise<Asset[]> => {
export const uploadFiles = async (
files: string[],
{ dryRun, concurrency, progress }: UploadOptionsDto,
): Promise<Asset[]> => {
if (files.length === 0) {
console.log('All assets were already uploaded, nothing to do.');
return [];
@@ -163,12 +289,20 @@ export const uploadFiles = async (files: string[], { dryRun, concurrency }: Uplo
return files.map((filepath) => ({ id: '', filepath }));
}
const uploadProgress = new SingleBar(
{ format: 'Uploading assets | {bar} | {percentage}% | ETA: {eta_formatted} | {value_formatted}/{total_formatted}' },
Presets.shades_classic,
);
uploadProgress.start(totalSize, 0);
uploadProgress.update({ value_formatted: 0, total_formatted: byteSize(totalSize) });
let uploadProgress: SingleBar | undefined;
if (progress) {
uploadProgress = new SingleBar(
{
format: 'Uploading assets | {bar} | {percentage}% | ETA: {eta_formatted} | {value_formatted}/{total_formatted}',
},
Presets.shades_classic,
);
} else {
console.log(`Uploading ${files.length} asset${s(files.length)} (${byteSize(totalSize)})`);
}
uploadProgress?.start(totalSize, 0);
uploadProgress?.update({ value_formatted: 0, total_formatted: byteSize(totalSize) });
let duplicateCount = 0;
let duplicateSize = 0;
@@ -194,20 +328,20 @@ export const uploadFiles = async (files: string[], { dryRun, concurrency }: Uplo
successSize += stats.size ?? 0;
}
uploadProgress.update(successSize, { value_formatted: byteSize(successSize + duplicateSize) });
uploadProgress?.update(successSize, { value_formatted: byteSize(successSize + duplicateSize) });
return response;
},
{ concurrency, retry: 3 },
);
for (const filepath of files) {
await queue.push(filepath);
for (const item of files) {
void queue.push(item);
}
await queue.drained();
uploadProgress.stop();
uploadProgress?.stop();
console.log(`Successfully uploaded ${successCount} new asset${s(successCount)} (${byteSize(successSize)})`);
if (duplicateCount > 0) {

View File

@@ -68,7 +68,19 @@ program
.env('IMMICH_UPLOAD_CONCURRENCY')
.default(4),
)
.addOption(
new Option('-j, --json-output', 'Output detailed information in json format')
.env('IMMICH_JSON_OUTPUT')
.default(false),
)
.addOption(new Option('--delete', 'Delete local assets after upload').env('IMMICH_DELETE_ASSETS'))
.addOption(new Option('--no-progress', 'Hide progress bars').env('IMMICH_PROGRESS_BAR').default(true))
.addOption(
new Option('--watch', 'Watch for changes and upload automatically')
.env('IMMICH_WATCH_CHANGES')
.default(false)
.implies({ progress: false }),
)
.argument('[paths...]', 'One or more paths to assets to be uploaded')
.action((paths, options) => upload(paths, program.opts(), options));

View File

@@ -72,8 +72,8 @@ export class Queue<T, R> {
* @returns Promise<void> - The returned Promise will be resolved when all tasks in the queue have been processed by a worker.
* This promise could be ignored as it will not lead to a `unhandledRejection`.
*/
async drained(): Promise<void> {
await this.queue.drain();
drained(): Promise<void> {
return this.queue.drained();
}
/**

View File

@@ -1,11 +1,13 @@
import mockfs from 'mock-fs';
import { readFileSync } from 'node:fs';
import { CrawlOptions, crawl } from 'src/utils';
import { Batcher, CrawlOptions, crawl } from 'src/utils';
import { Mock } from 'vitest';
interface Test {
test: string;
options: Omit<CrawlOptions, 'extensions'>;
files: Record<string, boolean>;
skipOnWin32?: boolean;
}
const cwd = process.cwd();
@@ -48,6 +50,18 @@ const tests: Test[] = [
'/photos/image.jpg': true,
},
},
{
test: 'should crawl folders with quotes',
options: {
pathsToCrawl: ["/photo's/", '/photo"s/', '/photo`s/'],
},
files: {
"/photo's/image1.jpg": true,
'/photo"s/image2.jpg': true,
'/photo`s/image3.jpg': true,
},
skipOnWin32: true, // single quote interferes with mockfs root on Windows
},
{
test: 'should crawl a single file',
options: {
@@ -115,17 +129,7 @@ const tests: Test[] = [
'/albums/image3.jpg': true,
},
},
{
test: 'should support globbing paths',
options: {
pathsToCrawl: ['/photos*'],
},
files: {
'/photos1/image1.jpg': true,
'/photos2/image2.jpg': true,
'/images/image3.jpg': false,
},
},
{
test: 'should crawl a single path without trailing slash',
options: {
@@ -280,8 +284,12 @@ describe('crawl', () => {
});
describe('crawl', () => {
for (const { test, options, files } of tests) {
it(test, async () => {
for (const { test: name, options, files, skipOnWin32 } of tests) {
if (process.platform === 'win32' && skipOnWin32) {
test.skip(name);
continue;
}
it(name, async () => {
// The file contents is the same as the path.
mockfs(Object.fromEntries(Object.keys(files).map((file) => [file, file])));
@@ -296,3 +304,38 @@ describe('crawl', () => {
}
});
});
describe('Batcher', () => {
let batcher: Batcher;
let onBatch: Mock;
beforeEach(() => {
onBatch = vi.fn();
batcher = new Batcher({ batchSize: 2, onBatch });
});
it('should trigger onBatch() when a batch limit is reached', async () => {
batcher.add('a');
batcher.add('b');
batcher.add('c');
expect(onBatch).toHaveBeenCalledOnce();
expect(onBatch).toHaveBeenCalledWith(['a', 'b']);
});
it('should trigger onBatch() when flush() is called', async () => {
batcher.add('a');
batcher.flush();
expect(onBatch).toHaveBeenCalledOnce();
expect(onBatch).toHaveBeenCalledWith(['a']);
});
it('should trigger onBatch() when debounce time reached', async () => {
vi.useFakeTimers();
batcher = new Batcher({ batchSize: 2, debounceTimeMs: 100, onBatch });
batcher.add('a');
expect(onBatch).not.toHaveBeenCalled();
vi.advanceTimersByTime(200);
expect(onBatch).toHaveBeenCalledOnce();
expect(onBatch).toHaveBeenCalledWith(['a']);
vi.useRealTimers();
});
});

View File

@@ -141,25 +141,21 @@ export const crawl = async (options: CrawlOptions): Promise<string[]> => {
}
}
let searchPattern: string;
if (patterns.length === 1) {
searchPattern = patterns[0];
} else if (patterns.length === 0) {
if (patterns.length === 0) {
return crawledFiles;
} else {
searchPattern = '{' + patterns.join(',') + '}';
}
if (recursive) {
searchPattern = searchPattern + '/**/';
}
const searchPatterns = patterns.map((pattern) => {
let escapedPattern = pattern.replaceAll("'", "[']").replaceAll('"', '["]').replaceAll('`', '[`]');
if (recursive) {
escapedPattern = escapedPattern + '/**';
}
return `${escapedPattern}/*.{${extensions.join(',')}}`;
});
searchPattern = `${searchPattern}/*.{${extensions.join(',')}}`;
const globbedFiles = await glob(searchPattern, {
const globbedFiles = await glob(searchPatterns, {
absolute: true,
caseSensitiveMatch: false,
onlyFiles: true,
dot: includeHidden,
ignore: [`**/${exclusionPattern}`],
});
@@ -176,3 +172,64 @@ export const sha1 = (filepath: string) => {
rs.on('end', () => resolve(hash.digest('hex')));
});
};
/**
* Batches items and calls onBatch to process them
* when the batch size is reached or the debounce time has passed.
*/
export class Batcher<T = unknown> {
private items: T[] = [];
private readonly batchSize: number;
private readonly debounceTimeMs?: number;
private readonly onBatch: (items: T[]) => void;
private debounceTimer?: NodeJS.Timeout;
constructor({
batchSize,
debounceTimeMs,
onBatch,
}: {
batchSize: number;
debounceTimeMs?: number;
onBatch: (items: T[]) => Promise<void>;
}) {
this.batchSize = batchSize;
this.debounceTimeMs = debounceTimeMs;
this.onBatch = onBatch;
}
private setDebounceTimer() {
if (this.debounceTimer) {
clearTimeout(this.debounceTimer);
}
if (this.debounceTimeMs) {
this.debounceTimer = setTimeout(() => this.flush(), this.debounceTimeMs);
}
}
private clearDebounceTimer() {
if (this.debounceTimer) {
clearTimeout(this.debounceTimer);
this.debounceTimer = undefined;
}
}
add(item: T) {
this.items.push(item);
this.setDebounceTimer();
if (this.items.length >= this.batchSize) {
this.flush();
}
}
flush() {
this.clearDebounceTimer();
if (this.items.length === 0) {
return;
}
this.onBatch(this.items);
this.items = [];
}
}

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.41.0"
constraints = "4.41.0"
version = "4.52.0"
constraints = "4.52.0"
hashes = [
"h1:0mc+YrjQrcctGrGYDmzlcqcgSv9MYB74rvMaZylIKC8=",
"h1:0zUx4vk4jOORQqn6xHBF7dO6N6bielFHdJ0mgF4Obn8=",
"h1:AsIZW3uLFNOZO7kL/K7/Y/S0IYxUV9Hz85NNk/3TTsA=",
"h1:FSgYM4+LHMbX/a4Y1kx7FPPWmXqS3/MQYzvjMJHHHWM=",
"h1:Tx6Nh3BWP1x9L3KK/Eyi+ET0T26g3+jf1jyiuqpNIis=",
"h1:VRI9wu8P43xxfpeTndRwsisLnqncfnmEYMOEH5zH4pQ=",
"h1:YxQqmiES/Yanq/VfGqBEqg+VIO7FGhO88aKoWFHyGIg=",
"h1:ZWHiaesjgDLKWlfdNj0oKyj/DWdxcfsO6NINu39zfpY=",
"h1:a2aCgDDBz3ccrr8YstIMl7VFnKo1xZAp+rOv59PPJ7U=",
"h1:aRyv8tB6wBAF9lKsLEdiHyCqnK5LfZq0FqMXCcUB4UU=",
"h1:lXpuO7zv2uD2GzPE1ARxznreRAh+QHTc2lAJ7iOoFgY=",
"h1:sA1xq0QNQ4fH8SHXouYNq50xirVD18SamKQwPsBQrrY=",
"h1:v7sHvKq7oqMYPn47ULHFyIQsKD9o+6Xg/uHbxQUixEw=",
"h1:wo/x4atWyXuWGlfR6h5nH0YwBAmBwTRY27HtWP8ycLo=",
"zh:339d26e06dc6fb299ea8aad9476a60fd65bb1d40631ae8eeb81cddf2dd2bebc8",
"zh:3dec2ad96ac2c283fd34ce65781b55c4edbb4d5c5cb53da8e31537176c0ed562",
"zh:5f63a5f8080319a2fff09d4d49944829fa708723436520787cfb60725ced80cf",
"zh:67162c28ccea71cb8141ed15c0637e35621354ebe14878e0b75a8f160fc5505d",
"zh:6ac1e07f5347b6395aca690ed22101bb25e957d25f986f760ff673a7adfd5ef6",
"zh:70282a723c7b52fcabde2baad41c864ed3a8d69f0c4d27a6b6933cac434cffc6",
"h1:2BEJyXJtYC4B4nda/WCYUmuJYDaYk88F8t1pwPzr0iQ=",
"h1:4IASk5SESeWKQ7JU0+M7KApuF5mZyklvwMXPBabim3c=",
"h1:5ImZxxALSnWfH/4EXw/wFirSmk5Tr0ACmcysy51AafE=",
"h1:6TJ3dxLSin4ZKBJLsZDn95H2ZYnGm8S7GGHvvXuuMQU=",
"h1:IzTUjg9kQ4N3qizP9CjYLeHwjsuGgtxwXvfUQWyOLcA=",
"h1:NTaOQfYINA0YTG/V1/9+SYtgX1it63+cBugj4WK4FWc=",
"h1:PXH48LuJn329sCfMXprdMDk51EZaWFyajVvS03qhQLs=",
"h1:Pi5M+GeoMSN2eJ6QnIeXjBf19O+rby/74CfB2ocpv20=",
"h1:ShXZ2ZjBvm3thfoPPzPT8+OhyismnydQVkUAfI8X12w=",
"h1:WQ9hu0Wge2msBbODfottCSKgu8oKUrw4Opz+fDPVVHk=",
"h1:Z5yXML2DE0uH9UU+M0ut9JMQAORcwVZz1CxBHzeBmao=",
"h1:jqI2qKknpleS3JDSplyGYHMu0u9K/tor1ZOjFwDgEMk=",
"h1:kgfutDh14Q5nw4eg6qGFamFxIiY8Ae0FPKRBLDOzpcI=",
"h1:zCAO7GZmfYhWb+i6TfqlqhMeDyPZWGio2IzEzAh3YTs=",
"zh:19be1a91c982b902c42aba47766860dfa5dc151eed1e95fd39ca642229381ef0",
"zh:1de451c4d1ecf7efbe67b6dace3426ba810711afdd644b0f1b870364c8ae91f8",
"zh:352b4a2120173298622e669258744554339d959ac3a95607b117a48ee4a83238",
"zh:3c6f1346d9154afbd2d558fabb4b0150fc8d559aa961254144fe1bc17fe6032f",
"zh:4c4c92d53fb535b1e0eff26f222bbd627b97d3b4c891ec9c321268676d06152f",
"zh:53276f68006c9ceb7cdb10a6ccf91a5c1eadd1407a28edb5741e84e88d7e29e8",
"zh:7925a97773948171a63d4f65bb81ee92fd6d07a447e36012977313293a5435c9",
"zh:7dfb0a4496cfe032437386d0a2cd9229a1956e9c30bd920923c141b0f0440060",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:924cd23abc326c6b3914e2cd9c94c7832c2552e1e9ae258fb9fd9aedaa5f7ce7",
"zh:a4b75e4c239879296259e7d54f1befbc7fdc16da2d62d1294e9f73add4cae61e",
"zh:a6ceb08feb63b00c7141783b31e45a154c76fd8cdebbdf371074805f0053572d",
"zh:afae1843f9ba85f2f6d94108c65cf43a457e83531a632d44d863e935160cb2ba",
"zh:bd6628ce60c778960a5755f7010b7e2cc5c6ff0341a21c175341b28058ec843d",
"zh:cd30866a1ff99d72b5fa1699db582fa4f25562e6ab21dcc6870324f3056108e0",
"zh:df5924cca691a8220aaaebb5cb55c3d6c32ff0a881f198695eff28155eb12b54",
"zh:e78d0696c941aba58df1cb36b8a0d25cd5f3963f01d9338fdbda74db58afdd49",
"zh:8d4aa79f0a414bb4163d771063c70cd991c8fac6c766e685bac2ee12903c5bd6",
"zh:a67540c13565616a7e7e51ee9366e88b0dc60046e1d75c72680e150bd02725bb",
"zh:a936383a4767f5393f38f622e92bf2d0c03fe04b69c284951f27345766c7b31b",
"zh:d4887d73c466ff036eecf50ad6404ba38fd82ea4855296b1846d244b0f13c380",
"zh:e9093c8bd5b6cd99c81666e315197791781b8f93afa14fc2e0f732d1bb2a44b7",
"zh:efd3b3f1ec59a37f635aa1d4efcf178734c2fcf8ddb0d56ea690bec342da8672",
]
}

View File

@@ -5,7 +5,7 @@ terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.41.0"
version = "4.52.0"
}
}
}

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.41.0"
constraints = "4.41.0"
version = "4.52.0"
constraints = "4.52.0"
hashes = [
"h1:0mc+YrjQrcctGrGYDmzlcqcgSv9MYB74rvMaZylIKC8=",
"h1:0zUx4vk4jOORQqn6xHBF7dO6N6bielFHdJ0mgF4Obn8=",
"h1:AsIZW3uLFNOZO7kL/K7/Y/S0IYxUV9Hz85NNk/3TTsA=",
"h1:FSgYM4+LHMbX/a4Y1kx7FPPWmXqS3/MQYzvjMJHHHWM=",
"h1:Tx6Nh3BWP1x9L3KK/Eyi+ET0T26g3+jf1jyiuqpNIis=",
"h1:VRI9wu8P43xxfpeTndRwsisLnqncfnmEYMOEH5zH4pQ=",
"h1:YxQqmiES/Yanq/VfGqBEqg+VIO7FGhO88aKoWFHyGIg=",
"h1:ZWHiaesjgDLKWlfdNj0oKyj/DWdxcfsO6NINu39zfpY=",
"h1:a2aCgDDBz3ccrr8YstIMl7VFnKo1xZAp+rOv59PPJ7U=",
"h1:aRyv8tB6wBAF9lKsLEdiHyCqnK5LfZq0FqMXCcUB4UU=",
"h1:lXpuO7zv2uD2GzPE1ARxznreRAh+QHTc2lAJ7iOoFgY=",
"h1:sA1xq0QNQ4fH8SHXouYNq50xirVD18SamKQwPsBQrrY=",
"h1:v7sHvKq7oqMYPn47ULHFyIQsKD9o+6Xg/uHbxQUixEw=",
"h1:wo/x4atWyXuWGlfR6h5nH0YwBAmBwTRY27HtWP8ycLo=",
"zh:339d26e06dc6fb299ea8aad9476a60fd65bb1d40631ae8eeb81cddf2dd2bebc8",
"zh:3dec2ad96ac2c283fd34ce65781b55c4edbb4d5c5cb53da8e31537176c0ed562",
"zh:5f63a5f8080319a2fff09d4d49944829fa708723436520787cfb60725ced80cf",
"zh:67162c28ccea71cb8141ed15c0637e35621354ebe14878e0b75a8f160fc5505d",
"zh:6ac1e07f5347b6395aca690ed22101bb25e957d25f986f760ff673a7adfd5ef6",
"zh:70282a723c7b52fcabde2baad41c864ed3a8d69f0c4d27a6b6933cac434cffc6",
"h1:2BEJyXJtYC4B4nda/WCYUmuJYDaYk88F8t1pwPzr0iQ=",
"h1:4IASk5SESeWKQ7JU0+M7KApuF5mZyklvwMXPBabim3c=",
"h1:5ImZxxALSnWfH/4EXw/wFirSmk5Tr0ACmcysy51AafE=",
"h1:6TJ3dxLSin4ZKBJLsZDn95H2ZYnGm8S7GGHvvXuuMQU=",
"h1:IzTUjg9kQ4N3qizP9CjYLeHwjsuGgtxwXvfUQWyOLcA=",
"h1:NTaOQfYINA0YTG/V1/9+SYtgX1it63+cBugj4WK4FWc=",
"h1:PXH48LuJn329sCfMXprdMDk51EZaWFyajVvS03qhQLs=",
"h1:Pi5M+GeoMSN2eJ6QnIeXjBf19O+rby/74CfB2ocpv20=",
"h1:ShXZ2ZjBvm3thfoPPzPT8+OhyismnydQVkUAfI8X12w=",
"h1:WQ9hu0Wge2msBbODfottCSKgu8oKUrw4Opz+fDPVVHk=",
"h1:Z5yXML2DE0uH9UU+M0ut9JMQAORcwVZz1CxBHzeBmao=",
"h1:jqI2qKknpleS3JDSplyGYHMu0u9K/tor1ZOjFwDgEMk=",
"h1:kgfutDh14Q5nw4eg6qGFamFxIiY8Ae0FPKRBLDOzpcI=",
"h1:zCAO7GZmfYhWb+i6TfqlqhMeDyPZWGio2IzEzAh3YTs=",
"zh:19be1a91c982b902c42aba47766860dfa5dc151eed1e95fd39ca642229381ef0",
"zh:1de451c4d1ecf7efbe67b6dace3426ba810711afdd644b0f1b870364c8ae91f8",
"zh:352b4a2120173298622e669258744554339d959ac3a95607b117a48ee4a83238",
"zh:3c6f1346d9154afbd2d558fabb4b0150fc8d559aa961254144fe1bc17fe6032f",
"zh:4c4c92d53fb535b1e0eff26f222bbd627b97d3b4c891ec9c321268676d06152f",
"zh:53276f68006c9ceb7cdb10a6ccf91a5c1eadd1407a28edb5741e84e88d7e29e8",
"zh:7925a97773948171a63d4f65bb81ee92fd6d07a447e36012977313293a5435c9",
"zh:7dfb0a4496cfe032437386d0a2cd9229a1956e9c30bd920923c141b0f0440060",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:924cd23abc326c6b3914e2cd9c94c7832c2552e1e9ae258fb9fd9aedaa5f7ce7",
"zh:a4b75e4c239879296259e7d54f1befbc7fdc16da2d62d1294e9f73add4cae61e",
"zh:a6ceb08feb63b00c7141783b31e45a154c76fd8cdebbdf371074805f0053572d",
"zh:afae1843f9ba85f2f6d94108c65cf43a457e83531a632d44d863e935160cb2ba",
"zh:bd6628ce60c778960a5755f7010b7e2cc5c6ff0341a21c175341b28058ec843d",
"zh:cd30866a1ff99d72b5fa1699db582fa4f25562e6ab21dcc6870324f3056108e0",
"zh:df5924cca691a8220aaaebb5cb55c3d6c32ff0a881f198695eff28155eb12b54",
"zh:e78d0696c941aba58df1cb36b8a0d25cd5f3963f01d9338fdbda74db58afdd49",
"zh:8d4aa79f0a414bb4163d771063c70cd991c8fac6c766e685bac2ee12903c5bd6",
"zh:a67540c13565616a7e7e51ee9366e88b0dc60046e1d75c72680e150bd02725bb",
"zh:a936383a4767f5393f38f622e92bf2d0c03fe04b69c284951f27345766c7b31b",
"zh:d4887d73c466ff036eecf50ad6404ba38fd82ea4855296b1846d244b0f13c380",
"zh:e9093c8bd5b6cd99c81666e315197791781b8f93afa14fc2e0f732d1bb2a44b7",
"zh:efd3b3f1ec59a37f635aa1d4efcf178734c2fcf8ddb0d56ea690bec342da8672",
]
}

View File

@@ -5,7 +5,7 @@ terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.41.0"
version = "4.52.0"
}
}
}

View File

@@ -1,4 +1,13 @@
# See:
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
# For development see:
# - https://immich.app/docs/developer/setup
# - https://immich.app/docs/developer/troubleshooting
@@ -16,7 +25,7 @@ services:
context: ../
dockerfile: server/Dockerfile
target: dev
restart: always
restart: unless-stopped
volumes:
- ../server:/usr/src/app
- ../open-api:/usr/src/open-api
@@ -36,14 +45,18 @@ services:
IMMICH_BUILD_URL: https://github.com/immich-app/immich/actions/runs/9654404849
IMMICH_BUILD_IMAGE: development
IMMICH_BUILD_IMAGE_URL: https://github.com/immich-app/immich/pkgs/container/immich-server
IMMICH_THIRD_PARTY_SOURCE_URL: https://github.com/immich-app/immich/
IMMICH_THIRD_PARTY_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues
IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://immich.app/docs
IMMICH_THIRD_PARTY_SUPPORT_URL: https://immich.app/docs/community-guides
ulimits:
nofile:
soft: 1048576
hard: 1048576
ports:
- 3001:3001
- 9230:9230
- 9231:9231
- 2283:2283
depends_on:
- redis
- database
@@ -53,17 +66,21 @@ services:
immich-web:
container_name: immich_web
image: immich-web-dev:latest
# Needed for rootless docker setup, see https://github.com/moby/moby/issues/45919
# user: 0:0
build:
context: ../web
command: ['/usr/src/app/bin/immich-web']
env_file:
- .env
ports:
- 2283:3000
- 3000:3000
- 24678:24678
volumes:
- ../web:/usr/src/app
- ../i18n:/usr/src/i18n
- ../open-api/:/usr/src/open-api/
# - ../../ui:/usr/ui
- /usr/src/app/node_modules
ulimits:
nofile:
@@ -78,12 +95,12 @@ services:
image: immich-machine-learning-dev:latest
# extends:
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build:
context: ../machine-learning
dockerfile: Dockerfile
args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports:
- 3003:3003
volumes:
@@ -99,13 +116,13 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck:
test: redis-cli ping || exit 1
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
env_file:
- .env
environment:
@@ -117,29 +134,7 @@ services:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
ports:
- 5432:5432
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command:
[
'postgres',
'-c',
'shared_preload_libraries=vectors.so',
'-c',
'search_path="$$user", public, vectors',
'-c',
'logging_collector=on',
'-c',
'max_wal_size=2GB',
'-c',
'shared_buffers=512MB',
'-c',
'wal_compression=on',
]
# set IMMICH_METRICS=true in .env to enable metrics
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
# immich-prometheus:
# container_name: immich_prometheus
# ports:

View File

@@ -1,3 +1,12 @@
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
name: immich-prod
services:
@@ -16,7 +25,7 @@ services:
env_file:
- .env
ports:
- 2283:3001
- 2283:2283
depends_on:
- redis
- database
@@ -29,12 +38,12 @@ services:
image: immich-machine-learning:latest
# extends:
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build:
context: ../machine-learning
dockerfile: Dockerfile
args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports:
- 3003:3003
volumes:
@@ -47,14 +56,14 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
env_file:
- .env
environment:
@@ -66,20 +75,14 @@ services:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
ports:
- 5432:5432
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
restart: always
# set IMMICH_METRICS=true in .env to enable metrics
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
immich-prometheus:
container_name: immich_prometheus
ports:
- 9090:9090
image: prom/prometheus@sha256:f6639335d34a77d9d9db382b92eeb7fc00934be8eae81dbc03b31cfe90411a94
image: prom/prometheus@sha256:9abc6cf6aea7710d163dbb28d8eeb7dc5baef01e38fa4cd146a406dd9f07f70d
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
@@ -91,7 +94,7 @@ services:
command: ['./run.sh', '-disable-reporting']
ports:
- 3000:3000
image: grafana/grafana:11.2.0-ubuntu@sha256:8e2c13739563c3da9d45de96c6bcb63ba617cac8c571c060112c7fc8ad6914e9
image: grafana/grafana:12.0.1-ubuntu@sha256:65575bb9c761335e2ff30e364f21d38632e3b2e75f5f81d83cc92f44b9bbc055
volumes:
- grafana-data:/var/lib/grafana

View File

@@ -1,10 +1,11 @@
#
# WARNING: Make sure to use the docker-compose.yml of the current release:
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#
name: immich
@@ -22,7 +23,7 @@ services:
env_file:
- .env
ports:
- 2283:3001
- '2283:2283'
depends_on:
- redis
- database
@@ -32,12 +33,12 @@ services:
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
@@ -48,28 +49,24 @@ services:
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
restart: always
volumes:

View File

@@ -2,7 +2,8 @@
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List

View File

@@ -13,6 +13,13 @@ services:
volumes:
- /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
- /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)
rknn:
security_opt:
- systempaths=unconfined
- apparmor=unconfined
devices:
- /dev/dri:/dev/dri
cpu: {}
@@ -26,6 +33,13 @@ services:
capabilities:
- gpu
rocm:
group_add:
- video
devices:
- /dev/dri:/dev/dri
- /dev/kfd:/dev/kfd
openvino:
device_cgroup_rules:
- 'c 189:* rmw'

View File

@@ -48,6 +48,7 @@ services:
vaapi-wsl: # use this for VAAPI if you're running Immich in WSL2
devices:
- /dev/dri:/dev/dri
- /dev/dxg:/dev/dxg
volumes:
- /usr/lib/wsl:/usr/lib/wsl
environment:

View File

@@ -1 +1 @@
20.17.0
22.16.0

View File

@@ -49,13 +49,22 @@ The behaviors differ based on your device manufacturer and operating system, but
On iOS (iPhone and iPad), the operating system determines if a particular app can invoke background tasks based on multiple factors, most of which the Immich app has no control over. To increase the likelihood that the background backup task is run, follow the steps below:
- Enable Background App Refresh for Immich in the iOS settings at `Settings > General > Background App Refresh`.
- Disable **Low Power Mode** when not needed, as this can prevent apps from running in the background.
- Disable Background App Refresh for apps that don't need background tasks to run. This will reduce the competition for background task invocation for Immich.
- Use the Immich app more often.
### Why are features not working with a self-signed cert or mTLS?
### Why are features in the mobile app not working with a self-signed certificate, Basic Auth, custom headers, or mutual TLS?
Due to limitations in the upstream app/video library, using a self-signed TLS certificate or mutual TLS may break video playback or asset upload (both foreground and/or background).
We recommend using a real SSL certificate from a free provider, for example [Let's Encrypt](https://letsencrypt.org/).
These network features are experimental. They often do not work with video playback, asset upload or download, and other features.
Many of these limitations are tracked in [#15230](https://github.com/immich-app/immich/issues/15230).
Instead of these experimental features, we recommend using the URL switching feature, a VPN, or a [free trusted SSL certificate](https://letsencrypt.org/) for your domain.
We are not actively developing these features and will not be able to provide support, but welcome contributions to improve them.
Please discuss any large PRs with our dev team to ensure your time is not wasted.
### Why isn't the mobile app updated yet?
The app stores can take a few days to approve new builds of the app. If you're impatient, android APKs can be downloaded from the GitHub releases.
---
@@ -69,7 +78,8 @@ However, Immich will delete original files that have been trashed when the trash
### Why do my file names appear as a random string in the file manager?
When Storage Template is off (default) Immich saves the file names in a random string (also known as random UUIDs) to prevent duplicate file names. To retrieve the original file names, you must enable the Storage Template and then run the STORAGE TEMPLATE MIGRATION job.
When Storage Template is off (default) Immich saves the file names in a random string (also known as random UUIDs) to prevent duplicate file names.
To retrieve the original file names, you must enable the Storage Template and then run the STORAGE TEMPLATE MIGRATION job.
It is recommended to read about [Storage Template](https://immich.app/docs/administration/storage-template) before activation.
### Can I add my existing photo library?
@@ -82,11 +92,20 @@ Template changes will only apply to _new_ assets. To retroactively apply the tem
### Why are only photos and not videos being uploaded to Immich?
This often happens when using a reverse proxy (such as Nginx or Cloudflare tunnel) in front of Immich. Make sure to set your reverse proxy to allow large `POST` requests. In `nginx`, set `client_max_body_size 50000M;` or similar. Also, check the disk space of your reverse proxy. In some cases, proxies cache requests to disk before passing them on, and if disk space runs out, the request fails.
This often happens when using a reverse proxy in front of Immich.
Make sure to [set your reverse proxy](/docs/administration/reverse-proxy/) to allow large requests.
Also, check the disk space of your reverse proxy.
In some cases, proxies cache requests to disk before passing them on, and if disk space runs out, the request fails.
If you are using Cloudflare Tunnel, please know that they set a maximum filesize of 100 MB that cannot be changed.
At times, files larger than this may work, potentially up to 1 GB. However, the official limit is 100 MB.
If you are having issues, we recommend switching to a different network deployment.
### Why are some photos stored in the file system with the wrong date?
There are a few different scenarios that can lead to this situation. The solution is to rerun the storage migration job. The job is only automatically run once per asset after upload. If metadata extraction originally failed, the jobs were cleared/canceled, etc., the job may not have run automatically the first time.
There are a few different scenarios that can lead to this situation. The solution is to rerun the storage migration job.
The job is only automatically run once per asset after upload. If metadata extraction originally failed, the jobs were cleared/canceled, etc.,
the job may not have run automatically the first time.
### How can I hide photos from the timeline?
@@ -98,7 +117,7 @@ See [Backup and Restore](/docs/administration/backup-and-restore.md).
### Does Immich support reading existing face tag metadata?
No, it currently does not. There is an [open feature request on GitHub](https://github.com/immich-app/immich/discussions/4348).
Yes, it creates new faces and persons from the imported asset metadata. For details see the [feature request #4348](https://github.com/immich-app/immich/discussions/4348) and [PR #6455](https://github.com/immich-app/immich/pull/6455).
### Does Immich support the filtering of NSFW images?
@@ -116,7 +135,8 @@ Also, there are additional jobs for person (face) thumbnails.
### Why do files from WhatsApp not appear with the correct date?
Files sent on WhatsApp are saved without metadata on the file. Therefore, Immich has no way of knowing the original date of the file when files are uploaded from WhatsApp, not the order of arrival on the device. [See #3527](https://github.com/immich-app/immich/issues/3527).
Files sent on WhatsApp are saved without metadata on the file. Therefore, Immich has no way of knowing the original date of the file when files are uploaded from WhatsApp,
not the order of arrival on the device. [See #9116](https://github.com/immich-app/immich/discussions/9116).
### What happens if an asset exists in more than one account?
@@ -144,6 +164,35 @@ For example, say you have existing transcodes with the policy "Videos higher tha
No. Our design principle is that the original assets should always be untouched.
### How can I mount a CIFS/Samba volume within Docker?
If you aren't able to or prefer not to mount Samba on the host (such as Windows environment), you can mount the volume within Docker.
Below is an example in the `docker-compose.yml`.
Change your username, password, local IP, and share name, and see below where the line `- originals:/usr/src/app/originals`,
correlates to the section where the volume `originals` was created. You can call this whatever you like, and map it to the docker container as you like.
For example you could change `originals:` to `Photos:`, and change `- originals:/usr/src/app/originals` to `Photos:/usr/src/app/photos`.
```diff
...
services:
immich-server:
...
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
+ - originals:/usr/src/app/originals
...
volumes:
model-cache:
+ originals:
+ driver_opts:
+ type: cifs
+ o: 'iocharset=utf8,username=USERNAMEHERE,password=PASSWORDHERE,rw' # change to `ro` if read only desired
+ device: '//localipaddress/sharename'
```
---
## Albums
@@ -191,7 +240,7 @@ Immich uses CLIP models. An ML model converts each image to an "embedding", whic
### How does facial recognition work?
See [How Facial Recognition Works](/docs/features/facial-recognition#How-Facial-Recognition-Works) for details.
See [How Facial Recognition Works](/docs/features/facial-recognition#how-facial-recognition-works) for details.
### How can I disable machine learning?
@@ -213,7 +262,7 @@ No, this is not supported. Only models listed in the [Hugging Face][huggingface]
### I want to be able to search in other languages besides English. How can I do that?
You can change to a multilingual CLIP model. See [here](/docs/features/smart-search#CLIP-model) for instructions.
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-models) for instructions.
### Does Immich support Facial Recognition for videos?
@@ -224,7 +273,7 @@ Scanning the entire video for faces may be implemented in the future.
No.
:::tip
You can use [Smart Search](/docs/features/smart-search.md) for this to some extent. For example, if you have a Golden Retriever and a Chihuahua, type these words in the smart search and watch the results.
You can use [Smart Search](/docs/features/searching.md) for this to some extent. For example, if you have a Golden Retriever and a Chihuahua, type these words in the smart search and watch the results.
:::
### I'm getting a lot of "faces" that aren't faces, what can I do?
@@ -266,7 +315,7 @@ The initial backup is the most intensive due to the number of jobs running. The
- For facial recognition on new images to work properly, You must re-run the Face Detection job for all images after this.
- At the container level, you can [set resource constraints](/docs/FAQ#can-i-limit-cpu-and-ram-usage) to lower usage further.
- It's recommended to only apply these constraints _after_ taking some of the measures here for best performance.
- If these changes are not enough, see [below](/docs/FAQ#how-can-i-disable-machine-learning) for instructions on how to disable machine learning.
- If these changes are not enough, see [above](/docs/FAQ#how-can-i-disable-machine-learning) for instructions on how to disable machine learning.
### Can I limit CPU and RAM usage?
@@ -308,7 +357,7 @@ Do not exaggerate with the job concurrency because you're probably thoroughly ov
### My server shows Server Status Offline | Version Unknown. What can I do?
You need to enable WebSockets on your reverse proxy.
You need to [enable WebSockets](/docs/administration/reverse-proxy/) on your reverse proxy.
---
@@ -339,7 +388,7 @@ The non-root user/group needs read/write access to the volume mounts, including
The Docker Compose top level volume element does not support non-root access, all of the above volumes must be local volume mounts.
:::
For a further hardened system, you can add the following block to every container except for `immich_postgres`.
For a further hardened system, you can add the following block to every container.
<details>
<summary>docker-compose.yml</summary>
@@ -388,29 +437,28 @@ If the error says the worker is exiting, then this is normal. This is a feature
There are a few reasons why this can happen.
If the error mentions SIGKILL or error code 137, it most likely means the service is running out of memory. Consider either increasing the server's RAM or moving the service to a server with more RAM.
If the error mentions SIGKILL or error code 137, it most likely means the service is running out of memory.
Consider either increasing the server's RAM or moving the service to a server with more RAM.
If it mentions SIGILL (note the lack of a K) or error code 132, it most likely means your server's CPU is incompatible. This is unlikely to occur on version 1.92.0 or later. Consider upgrading if your version of Immich is below that.
If your version of Immich is below 1.92.0 and the crash occurs after logs about tracing or exporting a model, consider either upgrading or disabling the Tag Objects job.
If it mentions SIGILL (note the lack of a K) or error code 132, it most likely means your server's CPU is incompatible with Immich.
## Database
### Why am I getting database ownership errors?
If you get database errors such as `FATAL: data directory "/var/lib/postgresql/data" has wrong ownership` upon database startup, this is likely due to an issue with your filesystem.
NTFS and ex/FAT/32 filesystems are not supported. See [here](/docs/install/environment-variables#supported-filesystems) for more details.
NTFS and ex/FAT/32 filesystems are not supported. See [here](/docs/install/requirements#special-requirements-for-windows-users) for more details.
### How can I verify the integrity of my database?
If you installed Immich using v1.104.0 or later, you likely have database checksums enabled by default. You can check this by running the following command.
Database checksums are enabled by default for new installations since v1.104.0. You can check if they are enabled by running the following command.
A result of `on` means that checksums are enabled.
<details>
<summary>Check if checksums are enabled</summary>
```bash
docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --command="show data_checksums"
docker exec -it immich_postgres psql --dbname=postgres --username=<DB_USERNAME> --command="show data_checksums"
data_checksums
----------------
on
@@ -419,13 +467,13 @@ docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --
</details>
If checksums are enabled, you can check the status of the database with the following command. A normal result is all zeroes.
If checksums are enabled, you can check the status of the database with the following command. A normal result is all `0`s.
<details>
<summary>Check for database corruption</summary>
```bash
docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --command="SELECT datname, checksum_failures, checksum_last_failure FROM pg_stat_database WHERE datname IS NOT NULL"
docker exec -it immich_postgres psql --dbname=postgres --username=<DB_USERNAME> --command="SELECT datname, checksum_failures, checksum_last_failure FROM pg_stat_database WHERE datname IS NOT NULL"
datname | checksum_failures | checksum_last_failure
-----------+-------------------+-----------------------
postgres | 0 |
@@ -437,6 +485,24 @@ docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --
</details>
You can also scan the Postgres database file structure for errors:
<details>
<summary>Scan for file structure errors</summary>
```bash
docker exec -it immich_postgres pg_amcheck --username=postgres --heapallindexed --parent-check --rootdescend --progress --all --install-missing
```
A normal result will end something like this and return with an exit code of `0`:
```bash
7470/8832 relations (84%), 730829/734735 pages (99%)
8425/8832 relations (95%), 734367/734735 pages (99%)
8832/8832 relations (100%), 734735/734735 pages (100%)
```
</details>
If corruption is detected, you should immediately make a backup before performing any other work in the database.
To do so, you may need to set the `zero_damaged_pages=on` flag for the database server to allow `pg_dumpall` to succeed.
After taking a backup, the recommended next step is to restore the database from a healthy backup before corruption was detected.

View File

@@ -5,6 +5,10 @@ import TabItem from '@theme/TabItem';
A [3-2-1 backup strategy](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) is recommended to protect your data. You should keep copies of your uploaded photos/videos as well as the Immich database for a comprehensive backup solution. This page provides an overview on how to backup the database and the location of user-uploaded pictures and videos. A template bash script that can be run as a cron job is provided [here](/docs/guides/template-backup-script.md)
:::danger
The instructions on this page show you how to prepare your Immich instance to be backed up, and which files to take a backup of. You still need to take care of using an actual backup tool to make a backup yourself.
:::
## Database
:::caution
@@ -15,12 +19,38 @@ Immich saves [file paths in the database](https://github.com/immich-app/immich/d
Refer to the official [postgres documentation](https://www.postgresql.org/docs/current/backup.html) for details about backing up and restoring a postgres database.
:::
The recommended way to backup and restore the Immich database is to use the `pg_dumpall` command. When restoring, you need to delete the `DB_DATA_LOCATION` folder (if it exists) to reset the database.
:::caution
It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so while the database is running can lead to a corrupted backup that cannot be restored.
:::
### Automatic Database Dumps
:::warning
The automatic database dumps can be used to restore the database in the event of damage to the Postgres database files.
There is no monitoring for these dumps and you will not be notified if they are unsuccessful.
:::
:::caution
The database dumps do **NOT** contain any pictures or videos, only metadata. They are only usable with a copy of the other files in `UPLOAD_LOCATION` as outlined below.
:::
For disaster-recovery purposes, Immich will automatically create database dumps. The dumps are stored in `UPLOAD_LOCATION/backups`.
Please be sure to make your own, independent backup of the database together with the asset folders as noted below.
You can adjust the schedule and amount of kept database dumps in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
By default, Immich will keep the last 14 database dumps and create a new dump every day at 2:00 AM.
#### Trigger Dump
You are able to trigger a database dump in the [admin job status page](http://my.immich.app/admin/jobs-status).
Visit the page, open the "Create job" modal from the top right, select "Create Database Dump" and click "Confirm".
A job will run and trigger a dump, you can verify this worked correctly by checking the logs or the `backups/` folder.
This dumps will count towards the last `X` dumps that will be kept based on your settings.
#### Restoring
We hope to make restoring simpler in future versions, for now you can find the database dumps in the `UPLOAD_LOCATION/backups` folder on your host.
Then please follow the steps in the following section for restoring the database.
### Manual Backup and Restore
<Tabs>
@@ -34,94 +64,59 @@ docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgre
docker compose down -v # CAUTION! Deletes all Immich data to start from scratch
## Uncomment the next line and replace DB_DATA_LOCATION with your Postgres path to permanently reset the Postgres database
# rm -rf DB_DATA_LOCATION # CAUTION! Deletes all Immich data to start from scratch
docker compose pull # Update to latest version of Immich (if desired)
docker compose create # Create Docker containers for Immich apps without running them
docker compose pull # Update to latest version of Immich (if desired)
docker compose create # Create Docker containers for Immich apps without running them
docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up
gunzip < "/path/to/backup/dump.sql.gz" \
sleep 10 # Wait for Postgres server to start up
# Check the database user if you deviated from the default
gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --username=postgres # Restore Backup
docker compose up -d # Start remainder of Immich apps
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # Restore Backup
docker compose up -d # Start remainder of Immich apps
```
</TabItem>
<TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)">
```powershell title='Backup'
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | Set-Content -Encoding utf8 "C:\path\to\backup\dump.sql"
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres))
```
```powershell title='Restore'
docker compose down -v # CAUTION! Deletes all Immich data to start from scratch
## Uncomment the next line and replace DB_DATA_LOCATION with your Postgres path to permanently reset the Postgres database
# Remove-Item -Recurse -Force DB_DATA_LOCATION # CAUTION! Deletes all Immich data to start from scratch
docker compose pull # Update to latest version of Immich (if desired)
docker compose create # Create Docker containers for Immich apps without running them
docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up
gc "C:\path\to\backup\dump.sql" | docker exec -i immich_postgres psql --username=postgres # Restore Backup
docker compose up -d # Start remainder of Immich apps
## You should mount the backup (as a volume, example: `- 'C:\path\to\backup\dump.sql:/dump.sql'`) into the immich_postgres container using the docker-compose.yml
docker compose pull # Update to latest version of Immich (if desired)
docker compose create # Create Docker containers for Immich apps without running them
docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up
docker exec -it immich_postgres bash # Enter the Docker shell and run the following command
# Check the database user if you deviated from the default. If your backup ends in `.gz`, replace `cat` with `gunzip --stdout`
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
exit # Exit the Docker shell
docker compose up -d # Start remainder of Immich apps
```
</TabItem>
</Tabs>
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.).
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.), in which case you need to delete the `DB_DATA_LOCATION` folder to reset the database.
:::tip
Some deployment methods make it difficult to start the database without also starting the server or microservices. In these cases, you may set the environmental variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Note that both the server and microservices must have this variable set to prevent the migrations from running. Be sure to remove this variable and restart the services after the database is restored.
:::
### Automatic Database Backups
The database dumps can also be automated (using [this image](https://github.com/prodrigestivill/docker-postgres-backup-local)) by editing the docker compose file to match the following:
```yaml
services:
...
backup:
container_name: immich_db_dumper
image: prodrigestivill/postgres-backup-local:14
restart: always
env_file:
- .env
environment:
POSTGRES_HOST: database
POSTGRES_CLUSTER: 'TRUE'
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE_NAME}
SCHEDULE: "@daily"
POSTGRES_EXTRA_OPTS: '--clean --if-exists'
BACKUP_DIR: /db_dumps
volumes:
- ./db_dumps:/db_dumps
depends_on:
- database
```
Then you can restore with the same command but pointed at the latest dump.
```bash title='Automated Restore'
gunzip < db_dumps/last/immich-latest.sql.gz \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --username=postgres
```
:::note
If you see the error `ERROR: type "earth" does not exist`, or you have problems with Reverse Geocoding after a restore, add the following `sed` fragment to your restore command.
Example: `gunzip < "/path/to/backup/dump.sql.gz" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | docker exec -i immich_postgres psql --username=postgres`
Some deployment methods make it difficult to start the database without also starting the server. In these cases, you may set the environment variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Be sure to remove this variable and restart the services after the database is restored.
:::
## Filesystem
Immich stores two types of content in the filesystem: (1) original, unmodified assets (photos and videos), and (2) generated content. Only the original content needs to be backed-up, which is stored in the following folders:
Immich stores two types of content in the filesystem: (a) original, unmodified assets (photos and videos), and (b) generated content. We recommend backing up the entire contents of `UPLOAD_LOCATION`, but only the original content is critical, which is stored in the following folders:
1. `UPLOAD_LOCATION/library`
2. `UPLOAD_LOCATION/upload`
3. `UPLOAD_LOCATION/profile`
If you choose to back up only those folders, you will need to rerun the transcoding and thumbnail generation jobs for all assets after you restore from a backup.
:::caution
If you moved some of these folders onto a different storage device, such as `profile/`, make sure to adjust the backup path to match your setup
:::
@@ -197,7 +192,7 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
- Stored in `UPLOAD_LOCATION/profile/<userID>`.
- **Thumbs Images:**
- Preview images (blurred, small, large) for each asset and thumbnails for recognized faces.
- Stored in `UPLOCAD_LOCATION/thumbs/<userID>`.
- Stored in `UPLOAD_LOCATION/thumbs/<userID>`.
- **Encoded Assets:**
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
@@ -224,3 +219,10 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
Do not touch the files inside these folders under any circumstances except taking a backup. Changing or removing an asset can cause untracked and missing files.
You can think of it as App-Which-Must-Not-Be-Named, the only access to viewing, changing and deleting assets is only through the mobile or browser interface.
:::
## Backup ordering
A backup of Immich should contain both the database and the asset files. When backing these up it's possible for them to get out of sync, potentially resulting in broken assets after you restore.
The best way of dealing with this is to stop the immich-server container while you take a backup. If nothing is changing then the backup will always be in sync.
If stopping the container is not an option, then the recommended order is to back up the database first, and the filesystem second. This way, the worst case scenario is that there are files on the filesystem that the database doesn't know about. If necessary, these can be (re)uploaded manually after a restore. If the backup is done the other way around, with the filesystem first and the database second, it's possible for the restored database to reference files that aren't in the filesystem backup, thus resulting in broken assets.

View File

@@ -18,4 +18,10 @@ You can use [this guide](/docs/guides/smtp-gmail) to use Gmail's SMTP server.
Users can manage their email notification settings from their account settings page on the web. They can choose to turn email notifications on or off for the following events:
<img src={require('./img/user-notifications-settings.png').default} width="80%" title="User notification settings" />
<img src={require('./img/user-notifications-settings.webp').default} width="80%" title="User notification settings" />
## Notification templates
You can override the default notification text with custom templates in HTML format. You can use tags to show dynamic tags in your templates.
<img src={require('./img/user-notifications-templates.webp').default} width="80%" title="User notification templates" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Some files were not shown because too many files have changed in this diff Show More