Commit Graph

2699 Commits (7ea878359367f9076fd64fe28d8b9f12d350b84e)

Author SHA1 Message Date
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 +07:00
Alex 911c877e72
feat: clean up memory with locked assets (#18532) 2025-05-24 07:31:25 +07:00
github-actions 54bafccbf9 chore: version v1.133.1 2025-05-23 17:37:44 +07:00
Mert bc8e08f5e8
feat: lower disk usage during migration (#18440)
feat: less disk usage during migration
2025-05-22 08:41:10 +07:00
Mert 58c1b92816
fix(server): missing button for duplicate detection not working (#18433)
qualify column
2025-05-21 21:27:28 +07:00
github-actions 55adc136c8 chore: version v1.133.0 2025-05-21 19:47:42 +07:00
Jason Rasmussen cd288533a1
feat: sync albums and album users (#18377) 2025-05-21 14:35:32 +07:00
Mert bc906f7343
chore: specify vchord version in ci (#18423) 2025-05-21 13:41:14 +07:00
Mert 760b08506a
chore: tighten vchord version range (#18420)
guard minor version
2025-05-21 13:03:53 +07: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 +07:00
Mert a02fe89ec9
fix(server): drop old extension (#18400) 2025-05-21 09:53:40 +07: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 +07: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 +07:00
Alex bdf19ce331
fix: TimelineAsset visibility (#18395)
* fix: TimelineAsset visibility

* fix enum values
2025-05-20 15:53:34 +07: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 +07: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 +07:00
Mert a6a4dfcfd3
fix(server): queueing for duplicate detection (#18380)
* fix queueing

* update tests
2025-05-20 08:44:39 +07: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 +07: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 +07: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 +07: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 +07:00
Zack Pollard 230c286b97
chore: cleanup extraneous memories job item definition (#18372) 2025-05-19 14:02:44 +07:00
koostamas b63d6cdcd6
feat: bulk change description (#18288)
Co-authored-by: Tamas Koos <ext_tamas.koos@btrl.ro>
2025-05-17 12:17:00 +07: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 +07:00
Jason Rasmussen 28d8357cc5
feat(web): clear person birthdate (#18330) 2025-05-16 11:56:25 +07:00
Jason Rasmussen c1150fe7e3
feat: lock auth session (#18322) 2025-05-15 18:08:31 +07:00
Brandon Wees 6117329057
feat: add session creation endpoint (#18295) 2025-05-15 13:34:33 +07: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 +07: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 +07: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 +07:00
Mert 3a0ddfb92d
fix(server): vacuum after deleting people (#18299)
* vacuum after deleting people

* update sql
2025-05-14 23:13:13 +07: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 +07:00
Daimolean dccbe0b3ed
fix(web): user details (#18253)
fix(server, web): user details
2025-05-13 07:55:58 +07: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 +07: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 +07: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 +07: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 +07:00
Jason Rasmussen 3066c8198c
feat(web): user detail page (#18230)
feat: user detail page
2025-05-12 16:50:26 +07: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 +07: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 +07:00
Zack Pollard cb6c541ae1
fix: constraint migration to handle any existing pkey name (#18178) 2025-05-09 13:45:44 +07:00
luzpaz b1e1362246
fix: various typos (grouped in to separate commits) (#18177) 2025-05-09 13:10:34 +07:00
Jason Rasmussen a6e5e4f625
fix: schema ci checks (#18146) 2025-05-07 21:14:20 +07: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 +07: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 +07: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 +07: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 +07: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 +07: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 +07: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 +07:00
Jason Rasmussen f34f83e164
refactor: controller tests (#18100) 2025-05-05 18:57:32 +07: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 +07:00
Jason Rasmussen ea9f11bf39
refactor: controller tests (#18035)
* feat: controller unit tests

* refactor: controller tests
2025-05-03 09:39:44 +07:00
Jason Rasmussen 5d21ba3166
chore: logging clean up (#18031) 2025-05-02 12:34:35 +07: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 +07:00
Jason Rasmussen becdc3dcf5
refactor: job on-done (#18004) 2025-04-30 17:02:53 +07: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 +07:00
Jason Rasmussen b845184c80
chore: remove old memory lane implementation (#18000) 2025-04-30 14:23:32 +07:00
Jason Rasmussen 1fde02ee1e
chore: remove unused types and code (#17999) 2025-04-30 13:41:23 +07:00
Jason Rasmussen 526c02297c
refactor: stream queue migration (#17997) 2025-04-30 16:23:13 +07: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 +07:00
Jason Rasmussen be5cc2cdf5
refactor: stream detect faces (#17996) 2025-04-30 11:25:30 +07:00
Jason Rasmussen 094a41ac9a
chore: remove audit file report (#17994) 2025-04-30 11:17:23 +07:00
Jason Rasmussen 0c261ffbe2
fix: queue in batches (#17989) 2025-04-30 10:52:51 +07:00
Jason Rasmussen 8c5116bc1d
refactor: stream search duplicates (#17991) 2025-04-30 10:40:32 +07:00
Jason Rasmussen 2e8a286540
refactor: smart search queue (#17977) 2025-04-29 17:44:28 +07:00
Jason Rasmussen d89e88bb3f
feat: configure token endpoint auth method (#17968) 2025-04-29 15:17:48 +07: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 +07: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 +07: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 +07: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 +07:00
Daniel Dietzler f621f8ef2c
refactor: more job queries (#17745) 2025-04-29 00:03:20 +07: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 +07:00
Jason Rasmussen ad272333db
refactor: user avatar color (#17753) 2025-04-28 08:54:51 +07:00
Zack Pollard 460d594791
feat: api response compression (#17878) 2025-04-28 08:54:11 +07:00
github-actions 02994883fe chore: version v1.132.3 2025-04-25 19:44:05 +07:00
github-actions 0d60be3d87 chore: version v1.132.2 2025-04-25 03:07:06 +07:00
Jason Rasmussen 1d610ad9cb
refactor: database connection parsing (#17852) 2025-04-24 12:58:29 +07:00
github-actions 37f5e6e2cb chore: version v1.132.1 2025-04-23 21:43:47 +07: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 +07:00
github-actions f659ef4b7a chore: version v1.132.0 2025-04-23 16:44:47 +07:00
Zack Pollard d2f2f8d672
fix: retrieve version from lockfile and fallback to cli command (#17812) 2025-04-23 17:10:43 +07:00
Zack Pollard 19746a8685
fix: cache build versions (#17811) 2025-04-23 16:31:18 +07: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 +07:00
Jason Rasmussen 1b5e981a45
fix: failing ci checks (#17810) 2025-04-23 10:59:54 +07: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 +07: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 +07:00
Mert 92ac1193e6
fix(server): queue android motion assets for transcoding (#17781) 2025-04-23 12:03:28 +07:00
Min Idzelis 2a95eccf6a
fix: vscode vitest ext - missing jsdom dev dependency (#17799) 2025-04-22 23:01:22 +07: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 +07:00
Bonne Eggleston fe8c5e8107
feat: add album start and end dates for storage template (#17188) 2025-04-21 19:54:33 +07:00
Jason Rasmussen 56a4aa9ffe
refactor: email repository (#17746) 2025-04-21 12:53:37 +07:00
Jason Rasmussen 488dc4efbd
refactor: notification-admin controller (#17748) 2025-04-21 10:49:26 +07:00
Daniel Dietzler dd1fcd5be5
chore: remove asset entity (#17703) 2025-04-18 21:39:56 +07:00
Daniel Dietzler 52ae06c119
refactor: remove album entity, update types (#17450) 2025-04-18 23:10:34 +07:00
Daniel Dietzler 854ea13d6a
chore: simplify asset getByIds (#17699) 2025-04-18 16:52:41 +07: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 +07:00
Jason Rasmussen 6474a78b8b
feat: initial kysely migration file (#17678) 2025-04-17 17:38:47 +07:00
Jason Rasmussen e275f2d8b3
feat: add foreign key indexes (#17672) 2025-04-17 14:41:06 +07: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 +07:00
Jonathan Jogenfors ed2b54527c
chore(server): don't check null dates (#17664) 2025-04-16 18:40:08 +07:00
Daniel Dietzler 8b38f8a58d
fix: do not select album in time bucket query (#17662) 2025-04-16 17:52:22 +07:00
yparitcher 29b30570bf
fix: use IMMICH_HOST in microservices (#17659) 2025-04-16 23:05:12 +07:00
Daniel Dietzler 586a7a173b
refactor: handle detect faces job query (#17660) 2025-04-16 22:52:54 +07:00
Daniel Dietzler 1bbfacfc09
refactor: more job query stuff (#17658) 2025-04-16 22:10:20 +07:00
Daniel Dietzler 85c2d36d99
refactor: dedicated get album thumbnail files query (#17657) 2025-04-16 21:10:27 +07:00
Jason Rasmussen 8cefa0b84b
refactor: migrate some e2e to medium (#17640) 2025-04-16 14:59:08 +07:00
Daniel Dietzler f50e5d006c
refactor: dedicated queries for asset jobs (#17652) 2025-04-16 14:08:49 +07:00
Nils Uliczka be2f670d35
fix: skip places that no longer exist in geo import (#17637) 2025-04-15 21:27:47 +07:00
Jason Rasmussen 8da5f21fcf
refactor: medium tests (#17634) 2025-04-15 15:54:23 +07: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 +07:00
Daniel Dietzler 21becbf1b0
refactor: dedicated query for asset migration job (#17631) 2025-04-15 15:49:15 +07:00
Daniel Dietzler 5bceefce75
refactor: stream assets for thumbnail job (#17623) 2025-04-15 19:53:28 +07:00
Jason Rasmussen b710ad36f3
feat: upgrade kysely (#17630)
* feat: upgrade kysely

* chore: pr feedback
2025-04-15 13:26:56 +07:00
Daniel Dietzler 270d178a2e
fix: unsafe cast (#17590) 2025-04-15 11:35:00 +07:00
Daniel Dietzler 309528c807
chore: upgrade package locks (#17626) 2025-04-15 11:34:21 +07: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 +07: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 +07:00
Jason Rasmussen f189c7b101
refactor: medium tests (#17599) 2025-04-15 08:53:14 +07: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 +07:00
Mert c3d10c5be2
refactor(server): non-nullable file metadata (#17598) 2025-04-15 12:03:31 +07:00
Jason Rasmussen b2753103c6
chore: remove unused logger (#17593) 2025-04-14 15:01:49 +07:00
Daniel Dietzler 0b69d1c147
refactor: selected columns in queries (#17589) 2025-04-14 13:34:06 +07:00
Daniel Dietzler 184e142d87
refactor: migrate asset job status entity (#17560) 2025-04-14 12:21:56 +07:00
Andreas Tollkötter 8b00578c7b
fix: read longitude and latitude when reverse geocoding is off (#17558) 2025-04-14 10:43:46 +07: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 +07:00
Daniel Dietzler a373034629
refactor: migrate stacks (#17559)
chore: migrate stacks
2025-04-12 08:33:35 +07: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 +07:00
Daniel Dietzler 5548eb0dad
fix: live photo hiding (#17548) 2025-04-11 17:09:58 +07: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 +07: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 +07:00
Jason Rasmussen 584e5894bf
refactor: user factories instead of stubs (#17540) 2025-04-11 11:53:37 +07:00
Jason Rasmussen 75c83cb704
refactor: metadata stub (#17532) 2025-04-10 21:58:55 +07:00
Jason Rasmussen 0b22d3348e
refactor: count all return type (#17529) 2025-04-10 14:38:49 +07:00
Jason Rasmussen eaa0e07329
refactor: asset files entity (#17527) 2025-04-10 13:26:27 +07: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 +07:00
Jason Rasmussen 4412680679
refactor: remove unused shared users list (#17526) 2025-04-10 11:44:47 +07: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 +07:00
Daniel Dietzler 7a1e8ce6d8
chore: remove exif entity (#17499) 2025-04-10 12:36:29 +07:00
Jason Rasmussen 8aea07b750
refactor: album user entity (#17524) 2025-04-10 11:53:21 +07:00
Zack Pollard 94dba29298
refactor: remove user entity (#17498) 2025-04-10 10:53:21 +07:00
Zack Pollard d03647904b
refactor: remove move entity (#17489) 2025-04-09 11:54:20 +07:00
Jason Rasmussen 206545356d
refactor: metadata entity (#17492) 2025-04-09 11:45:30 +07: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 +07:00
Jason Rasmussen 8943ec23ba
refactor: more database types (#17490) 2025-04-09 10:24:38 +07: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 +07:00
Alex ae8af84101
fix: no thumbnail generated for motion assets (#17472) 2025-04-08 16:07:10 +07:00
Jason Rasmussen 4794eeca88
refactor: database types (#17468) 2025-04-08 12:40:03 +07:00
Alex e5ca79dd44
refactor: remove session entity (#17466)
* refactor: remove session entity

* fix: test

* update sql

* remote export
2025-04-08 16:04:07 +07:00
Jason Rasmussen 49be6d7fd8
refactor: more database enums (#17465) 2025-04-08 12:02:05 +07:00
Daniel Dietzler 15c6506aee
fix: broken start/end dates on album update (#17467) 2025-04-08 15:47:44 +07:00
Jason Rasmussen 2c31a11e41
chore: replace generated enums with actual types (#17463) 2025-04-08 11:13:46 +07:00
Jason Rasmussen b6c5a03533
refactor: remove tag entity (#17462) 2025-04-08 10:52:54 +07:00
Jason Rasmussen fdbe6d649f
refactor: remove smart search entity (#17447)
refactor: smart search entity
2025-04-08 09:56:45 +07: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 +07: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 +07:00
Jason Rasmussen 8203b6c450
refactor: stop using geodata entity type (#17444) 2025-04-08 00:15:43 +07:00
Jason Rasmussen b352cf3336
refactor: remove natural earth countries enity (#17445) 2025-04-08 00:15:16 +07: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 +07: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 +07: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 +07:00
Zack Pollard 40cff2893c
fix: metadata service init failure should halt server startup (#17356) 2025-04-03 12:35:39 +07: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 +07:00
github-actions 00d3b8d83a chore: version v1.131.3 2025-04-01 22:27:52 +07: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 +07: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 +07: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 +07:00
bo0tzz 3e03c47fbf
fix: strip extra metadata when transcoding (#17297) 2025-04-01 08:58:59 +07:00
github-actions 9aa3850769 chore: version v1.131.2 2025-04-01 11:41:56 +07: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 +07: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 +07: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 +07:00
github-actions 7729fe80fa chore: version v1.131.1 2025-03-31 20:36:48 +07:00
martin 68e24ad168
fix: posix compliant command (#17264) 2025-03-31 16:35:02 +07:00
Jason Rasmussen 186c573565
fix: missing migration folder broke non-root setups (#17266) 2025-03-31 20:18:13 +07:00
github-actions 5b63b9fc8b chore: version v1.131.0 2025-03-31 18:41:13 +07: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 +07:00
Mert 6789c2ac19
feat(ml): better multilingual search with nllb models (#13567) 2025-03-31 11:06:57 +07: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 +07:00
Mert 8c50e3e80e
feat(server): consider `JpgFromRaw2` tag for embedded previews (#17123)
* add jpgfromraw2

* unused catch
2025-03-31 09:17:57 +07:00
Jonathan Jogenfors efcb1129ce
fix(server): don't sync null date assets (#17247) 2025-03-31 09:16:53 +07:00
Jonathan Jogenfors faabda4446
fix(server): multiple exclusion patterns (#17221) 2025-03-31 09:16:30 +07: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 +07: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 +07: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 +07: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 +07:00
Daniel Dietzler 238c151ac3
chore: finish migrating eslint config files; bump unicorn (#17200) 2025-03-31 12:18:25 +07: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 +07:00
Jason Rasmussen 55a3c30664
feat: kysely migrations (#17198) 2025-03-29 09:26:24 +07: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 +07:00
Jason Rasmussen 4b4bcd23f4
feat: schema diff sql tools (#17116) 2025-03-28 10:40:09 +07: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 +07:00
github-actions 43f8f473e9 chore: version v1.130.3 2025-03-27 15:54:30 +07: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 +07:00
github-actions 2f8725c66f chore: version v1.130.2 2025-03-26 15:34:54 +07: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 +07: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 +07:00
github-actions 4cf7c55680 chore: version v1.130.1 2025-03-25 20:25:01 +07: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 +07:00
github-actions 42b1efb679 chore: version v1.130.0 2025-03-25 13:48:45 +07:00