3609 Commits

Author SHA1 Message Date
Jason Rasmussen 0947c9ae8a fix: smpt email visibility (#32492) 2026-10-16 15:08:06 -04:00
renovate[bot] 93d376ac51 fix(deps): update dependency nestjs-cls to v7 (#31920)
* fix(deps): update dependency nestjs-cls to v7

* fix: pnpmfile checksum

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-10-15 13:21:46 +02:00
renovate[bot] 9bb78b30fb chore(deps): update dependency @types/node to ^24.19.2 (#32129)
* chore(deps): update dependency @types/node to ^24.19.2

* fix: pnpmfile checksum

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-10-15 12:45:11 +02:00
renovate[bot] 9755f64684 fix(deps): update dependency react-email to v6 (#32143)
* fix(deps): update dependency react-email to v6

* fix: move all react email imports to react-email

* fix: linting

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-10-15 11:58:34 +02:00
renovate[bot] 62ce1b9f4b chore(deps): update ghcr.io/jdx/mise docker tag to v2026.10.9 (#32131)
* chore(deps): update ghcr.io/jdx/mise docker tag to v2026.10.9

* fix: lockfile

* chore: upgrade mise lockfile

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-10-14 18:11:15 +02:00
Zack Pollard 6b79a82800 perf(server): improve people query performance (#32405)
fix(server): slow people query
2026-10-14 17:02:26 +02:00
Jason Rasmussen cc1e236365 feat: server feature level (#32178)
* feat: server feature level

* fix: correctly compute feature level
2026-10-14 09:56:49 -04:00
Jason Rasmussen 9d8435973e fix: medium test (#32418) 2026-10-14 09:56:47 -04:00
bo0tzz ac453b5557 perf(server): stop aggregating every album asset when loading a shared link (#32412)
SharedLinkRepository.get (shared link page load, /shared-links/me, and the
OpenGraph tags rendered for /share/:key) json_agg'd every asset of the
album, with its full exif row, ordered by fileCreatedAt. The only things
used from it are the asset count and the first/last localDateTime.

Load the album without assets and fill assetCount/startDate/endDate from
getMetadataForIds, which is what GET /albums/:id already uses. The counts
now also respect the default visibility filter, and the dates are
formatted the same as on /albums/:id.

150k-asset album link, PG 14:

|                        | before          | after  |
|------------------------|-----------------|--------|
| query                  | 4.2-6.5 s       | ~0.26 s (metadata aggregate) |
| JSON built by postgres | 261 MB          | -      |
| GET /shared-links/me   | -               | 0.28 s, 961 B |
2026-10-13 18:39:08 -04:00
bo0tzz 2a4e876ec9 perf(server): stop loading every album asset to build album responses (#32413)
* perf(server): stop loading every album asset to build album responses

Album create, update (rename, description, cover, sort order, activity
toggle) and add-users json_agg'd every asset of the album with its exif
row, only for mapAlbum to read the count and the first/last
localDateTime. Use getMetadataForIds for those fields, as GET /albums/:id
already does, and drop the now unused withAssets option from getById.

The responses now carry the same date format and lastModifiedAssetTimestamp
as GET /albums/:id.

PATCH /albums/:id on a 150k-asset album, PG 14 (response is ~900 B either
way): 3.4-3.6 s -> 0.13-0.16 s.

* refactor(server): share album metadata mapping
2026-10-13 18:36:20 -04:00
bo0tzz bb024c8626 perf(server): check shared link asset access without scanning the album (#32411)
* perf(server): check shared link asset access without scanning the album

checkSharedLinkAccess runs on every thumbnail, preview, playback and asset
info request made through a shared link. It joined every asset of the
link's album and only then filtered on an array overlap across four
outer-joined columns, so each request cost O(album size).

Split it into two branches (link assets, album assets) that find the
requested ids through the asset pkey / livePhotoVideoId index and then
probe the album_asset pkey.

Median per request, PG 14, 1.36M-asset instance:

| album behind the link | before | after   |
|-----------------------|--------|---------|
| 290 assets            | 2.1 ms | 0.17 ms |
| 150k assets           | 296 ms | 0.19 ms |

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-10-13 18:33:29 -04:00
renovate[bot] aec0dd1e6b chore(deps): update base-image to v202610131110 (#32410)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-13 16:57:07 +02:00
renovate[bot] 8c76ef2ade chore(deps): update base-image to v202610061109 (#32392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-13 14:57:40 +02:00
Brandon Richardson d8454261cd fix(logging): avoid multiline logging of feature flags in server service (#32275)
When logging feature flags at startup, avoid stringifying the features
in pretty format. Multiline log messages clutter logs and make it harder
to ingest and parse in log aggregation systems like loki, graylog or
logz.io.
2026-10-09 09:46:16 -04:00
infocus13 56319b76fc fix: run workflow steps in their configured order (#32240)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-10-08 21:39:38 +02:00
Jason Rasmussen 9971dade1b fix: include unamed people in otherPeople (#32237) 2026-10-08 14:47:51 -04:00
Daniel Dietzler 481a7bf3ae chore: mark people users endpoints as beta (#32232) 2026-10-08 15:58:16 +00:00
Daniel Dietzler 5fa7789e26 fix: include partner shared assets for people even without showInTimeline (#32219) 2026-10-08 16:13:16 +02:00
Daniel Dietzler 7e7a1de3fd refactor: migrate to native set operations (#32186) 2026-10-07 19:33:21 +02:00
bo0tzz 6962412c0b fix(server): read ISO values above 65535 (#32182) 2026-10-07 10:03:07 +02:00
Daniel Dietzler 8d377bfef5 fix: memories mobile sync for older clients (#32150)
Co-authored-by: Santo Shakil <shakil.mezbah@gmail.com>
2026-10-06 15:48:29 +02:00
Jason Rasmussen e49a5bb8c9 fix: memory upcoming query (#32164) 2026-10-06 09:46:16 -04:00
Jason Rasmussen c0506fe723 fix: person without assets (#32114) 2026-10-05 21:12:47 +02:00
Daniel Dietzler 549a76cd35 fix: people page search (#32094) 2026-10-05 17:58:00 +02:00
Zack Pollard 464400f821 fix(server): offline live photo motion deletion (#32077)
* fix(server): offline live photo motion deletion

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-10-05 10:35:28 -04:00
Lin, Chiang-Yu 69f06a29ca fix(server): don't select an audio stream ffprobe could not identify (#30901)
iPhone videos recorded with Apple Spatial Audio carry two audio tracks: an
AAC track and an APAC track that ffmpeg has no decoder for. Both are marked
default, so `compareStreams` ties on disposition and falls through to
bitrate, where the APAC track wins because spatial audio is encoded at a
higher rate. `audioStreams[0]` is then persisted and mapped into the
transcode command, and ffmpeg fails before it starts encoding:

    [aist#0:2/none] Decoding requested, but no decoder found for: none
    Error opening output file .../out.mp4
    Error opening output files: Invalid argument

Drop audio streams ffprobe reported as `unknown` before the existing
disposition/bitrate ordering runs. A stream with no codec to decode is not a
usable audio stream, so an asset whose every audio track is unidentified is
treated as having no audio at all. The video pipeline is unchanged, since the
evidence here covers audio selection only.

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
2026-10-03 21:19:54 +00:00
renovate[bot] ffa5bf428d chore(deps): update base-image to v202610021601 (#32030) 2026-10-02 18:24:48 +02:00
Daniel Dietzler f652f55ffd fix: improper filename sanitizing (#32009) 2026-10-02 15:51:01 +00:00
Daniel Dietzler 989e7cf203 fix: clarify PUT to PATCH migration (#32010) 2026-10-02 15:50:08 +00:00
Daniel Dietzler 28e375c058 fix: assetTagFilter any matching (#32008) 2026-10-02 17:40:23 +02:00
Daniel Dietzler 170baf19ea fix: metadata extraction for media streams with unknown profile (#32007) 2026-10-02 10:53:52 -04:00
Mees Frensel fd97f3e5a6 fix(server): include album owner for album shared links (#31837) 2026-10-01 18:54:08 +02:00
Daniel Dietzler 28d33b18eb fix: storage usage display on virtiofs and alike (#31982) 2026-10-01 15:34:09 +02:00
Jonathan Jogenfors de6dcf669c fix(server): make library exclusion matching consistently case-insensitive (#31970) 2026-10-01 12:02:49 +02:00
Jason Rasmussen 1741650348 feat: bulk person management (#31949)
* feat: bulk person access

* chore: wip

* chore: cleanup and minor UX improvements

* chore: pr feedback

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-30 17:15:24 -04:00
bo0tzz d66b590d04 fix(server): ignore Samsung Gallery rotation tag for HEIF orientation (#31937) 2026-09-30 10:24:48 +00:00
Jonathan Jogenfors 32e3239ba3 fix(server): dont queue unneeded jobs when no xmp file exists (#31927) 2026-09-30 11:35:09 +02:00
Jonathan Jogenfors a010802431 chore(server): better xmp testing (#31928) 2026-09-30 11:29:14 +02:00
aviv926 c9a3248d71 fix(server): make "limit" paramter use z.coerce (#31899) 2026-09-30 10:30:44 +02:00
Jason Rasmussen f77847dda0 feat(server): create all for owner (#31924) 2026-09-29 18:12:25 -04:00
Jason Rasmussen aec7c0d97b feat: auto-sync name changes to connected users (#31923)
* feat: auto-sync name changes to connected users

* fix: rename to faceId

* fix: pr feedback

* fix: mobile build
2026-09-29 18:12:25 -04:00
renovate[bot] a6aa9fc253 chore(deps): update base-image to v202609291109 (#31908) 2026-09-29 18:36:31 +02:00
Jason Rasmussen 4b1b1f8c2a fix(server): person birthdate timezone bug (#31901) 2026-09-29 16:22:15 +00:00
Daniel Dietzler 4408f49d15 fix: person management ids validation and permissions (#31898) 2026-09-29 18:02:33 +02:00
renovate[bot] 4d8219ef12 chore(deps): update ghcr.io/jdx/mise docker tag to v2026.9.17 (#31874) 2026-09-29 13:45:18 +02:00
renovate[bot] 0993482b0b chore(deps): update dependency eslint-plugin-unicorn to v76 (#31885)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-29 13:27:43 +02:00
immich-push-o-matic[bot] a9d102234b chore: version v3.3.0-rc.0 2026-09-28 21:54:03 +00:00
Thomas DELORGE b35eeb3be2 feat(server): sync OAuth claims on login (#8073) (#29013)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Signed-off-by: Thomas DELORGE <thomas.delorge@orbeet.io>
2026-09-28 23:27:50 +02:00
Jonas Stahl 7c0dc08041 feat: extract manufacturer and device for samsung videos (#29375)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-28 23:13:00 +02:00
Daniel Dietzler 42c45012d1 fix: email template (#31859) 2026-09-28 19:58:11 +00:00