From 762748f9eae5e6491ab580a2d4fa40c4b0feee70 Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 09:04:03 +0000 Subject: [PATCH 1/6] fix(mobile): show the memories date in every app language (#32262) fix(mobile): show the memories date in every app language (#32259) (cherry picked from commit 116a9436ad1f8164d9dee904551e5067d724be99) Co-authored-by: Santo Shakil --- .../widgets/memory/memory_title.widget.dart | 3 ++- .../test/unit/presentation/memory_list_page_test.dart | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mobile/lib/presentation/widgets/memory/memory_title.widget.dart b/mobile/lib/presentation/widgets/memory/memory_title.widget.dart index 8d6d1948b..4976545fd 100644 --- a/mobile/lib/presentation/widgets/memory/memory_title.widget.dart +++ b/mobile/lib/presentation/widgets/memory/memory_title.widget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/memory.model.dart'; +import 'package:immich_mobile/extensions/datetime_extensions.dart'; import 'package:immich_mobile/extensions/object_extensions.dart'; import 'package:immich_mobile/generated/translations.g.dart'; import 'package:intl/intl.dart'; @@ -10,7 +11,7 @@ String getMemoryTitle(Translations t, Memory memory, {RemoteAsset? asset, bool p switch (memory.type) { MemoryTypeEnum.onThisDay => preferDate - ? DateFormat.yMMMMd().format(memory.memoryAt) + ? DateFormat.yMMMMd(resolvedDateTimeLocale()).format(memory.memoryAt) : t.years_ago(years: DateTime.now().year - memory.data.year), MemoryTypeEnum.birthday => _getBirthdayTitle(t, memory.data, asset), }; diff --git a/mobile/test/unit/presentation/memory_list_page_test.dart b/mobile/test/unit/presentation/memory_list_page_test.dart index 235a38650..ddc154b12 100644 --- a/mobile/test/unit/presentation/memory_list_page_test.dart +++ b/mobile/test/unit/presentation/memory_list_page_test.dart @@ -2,6 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:immich_mobile/domain/models/memory.model.dart'; import 'package:immich_mobile/presentation/pages/memory_list.page.dart'; import 'package:immich_mobile/providers/infrastructure/memory.provider.dart'; +import 'package:intl/intl.dart'; import '../factories/remote_asset_factory.dart'; import 'presentation_context.dart'; @@ -44,6 +45,15 @@ void main() { expect(find.textContaining('ago'), findsNothing); }); + testWidgets('shows the date when intl has no date formats for the app language', (tester) async { + Intl.defaultLocale = 'kab'; + addTearDown(() => Intl.defaultLocale = null); + await pumpPage(tester, [newMemory(type: MemoryTypeEnum.onThisDay, memoryAt: DateTime(2025, 10, 7))]); + await tester.pump(); + + expect(find.text('October 7, 2025'), findsOneWidget); + }); + testWidgets('shows the person name for a birthday memory', (tester) async { await pumpPage(tester, [ newMemory(type: MemoryTypeEnum.birthday, memoryAt: DateTime(2025, 10, 7), personName: 'Alice'), From 4aca0ebdf1dd788c6e8800b54efabaf45c0e8cdd Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:11:55 +0000 Subject: [PATCH 2/6] chore(deps): update base-image to v202610061109 (#32407) chore(deps): update base-image to v202610061109 (#32392) (cherry picked from commit 8c76ef2adead8abb453b37cfa6d42d3ceb684df3) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- server/Dockerfile | 4 ++-- server/Dockerfile.dev | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index fdf28387d..6372eebec 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/immich-app/base-server-dev:202610021601@sha256:a97a4e83561eca4bee1a636d05642f354aefb8ceeb84c969f3ac372b4cde24a8 AS builder +FROM ghcr.io/immich-app/base-server-dev:202610061109@sha256:87f024c82f4012b0faeddc9bce1f7bf43b4ee3f583424705c26707fe09596b6e AS builder ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ COREPACK_HOME=/tmp \ @@ -86,7 +86,7 @@ RUN --mount=type=cache,id=pnpm,target=/buildcache/pnpm-store \ --mount=type=cache,id=mise-tools-${TARGETPLATFORM},target=/buildcache/mise \ mise //:plugins -FROM ghcr.io/immich-app/base-server-prod:202610021601@sha256:bd94134f812c8231e9e997076f1db1e006fb0df5463e343b3e93286bd517abe8 +FROM ghcr.io/immich-app/base-server-prod:202610061109@sha256:d3c2a6c18d019a3de24d3444b8d1ae8a8a95e220e576831b34d6700309ba7783 WORKDIR /usr/src/app ENV NODE_ENV=production \ diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index dc6da13c9..bd7deb292 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -1,5 +1,5 @@ # dev build -FROM ghcr.io/immich-app/base-server-dev:202610021601@sha256:a97a4e83561eca4bee1a636d05642f354aefb8ceeb84c969f3ac372b4cde24a8 AS dev +FROM ghcr.io/immich-app/base-server-dev:202610061109@sha256:87f024c82f4012b0faeddc9bce1f7bf43b4ee3f583424705c26707fe09596b6e AS dev COPY --from=ghcr.io/jdx/mise:2026.9.12@sha256:868b004119abb2e7c146618da63371ec65da40bfb0f38a0ec4128ca9e96c057a /usr/local/bin/mise /usr/local/bin/mise From f6b4699d2930668669f125ad4540c4d6dd9ef3f0 Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:07:24 +0000 Subject: [PATCH 3/6] chore(deps): update base-image to v202610131110 (#32414) chore(deps): update base-image to v202610131110 (#32410) (cherry picked from commit aec0dd1e6ba44d172b83cf6f3422211961aff99d) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- server/Dockerfile | 4 ++-- server/Dockerfile.dev | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index 6372eebec..a90b21877 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/immich-app/base-server-dev:202610061109@sha256:87f024c82f4012b0faeddc9bce1f7bf43b4ee3f583424705c26707fe09596b6e AS builder +FROM ghcr.io/immich-app/base-server-dev:202610131110@sha256:082dc5e2611953d63d7b30dc8427da37ff5cd1d932aa9e99ccc4a26298b5f7a5 AS builder ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ COREPACK_HOME=/tmp \ @@ -86,7 +86,7 @@ RUN --mount=type=cache,id=pnpm,target=/buildcache/pnpm-store \ --mount=type=cache,id=mise-tools-${TARGETPLATFORM},target=/buildcache/mise \ mise //:plugins -FROM ghcr.io/immich-app/base-server-prod:202610061109@sha256:d3c2a6c18d019a3de24d3444b8d1ae8a8a95e220e576831b34d6700309ba7783 +FROM ghcr.io/immich-app/base-server-prod:202610131110@sha256:9d4ce4bfd72d77edddd3072fbca78b7f4307a32c8cbe75276349944dd6405be3 WORKDIR /usr/src/app ENV NODE_ENV=production \ diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index bd7deb292..ceb4ef443 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -1,5 +1,5 @@ # dev build -FROM ghcr.io/immich-app/base-server-dev:202610061109@sha256:87f024c82f4012b0faeddc9bce1f7bf43b4ee3f583424705c26707fe09596b6e AS dev +FROM ghcr.io/immich-app/base-server-dev:202610131110@sha256:082dc5e2611953d63d7b30dc8427da37ff5cd1d932aa9e99ccc4a26298b5f7a5 AS dev COPY --from=ghcr.io/jdx/mise:2026.9.12@sha256:868b004119abb2e7c146618da63371ec65da40bfb0f38a0ec4128ca9e96c057a /usr/local/bin/mise /usr/local/bin/mise From 3dcaa05cd756cf2b1f40c04e55bb325001d7f042 Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 16:23:04 +0000 Subject: [PATCH 4/6] chore: version v3.3.2 --- e2e/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 8 ++++---- mobile/ios/Runner/Info.plist | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- package.json | 2 +- packages/cli/package.json | 2 +- packages/sdk/package.json | 2 +- packages/sdk/src/fetch-client.ts | 2 +- server/package.json | 2 +- web/package.json | 2 +- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 3d4f072d4..19dcb67cf 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "3.3.1", + "version": "3.3.2", "description": "", "main": "index.js", "type": "module", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index a227c2959..8c0b59e75 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "3.3.1" +version = "3.3.2" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.12,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 505de7f6a..033474d4c 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -676,7 +676,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "3.3.1" +version = "3.3.2" source = { editable = "." } dependencies = [ { name = "fastapi" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 2a5f18ae3..a6296335a 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -22,8 +22,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3030199, - "android.injected.version.name" => "3.3.1", + "android.injected.version.code" => 3030299, + "android.injected.version.name" => "3.3.2", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab', track: 'beta') @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3030199, - "android.injected.version.name" => "3.3.1", + "android.injected.version.code" => 3030299, + "android.injected.version.name" => "3.3.2", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index e2ceb531f..7bc63d768 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -78,7 +78,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.3.1 + 3.3.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 640d85c36..127da7d1f 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 3.3.1+3030199 +version: 3.3.2+3030299 environment: sdk: '>=3.12.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 229e03141..de91bf6f7 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -18211,7 +18211,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "3.3.1", + "version": "3.3.2", "contact": {} }, "tags": [ diff --git a/package.json b/package.json index 5f893a278..02af88d83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "3.3.1", + "version": "3.3.2", "description": "Monorepo for Immich", "type": "module", "private": true, diff --git a/packages/cli/package.json b/packages/cli/package.json index 5f1903fe1..759eeec1e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "3.3.1", + "version": "3.3.2", "description": "Command Line Interface (CLI) for Immich", "repository": { "type": "git", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 09816ca2a..de376c500 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "3.3.1", + "version": "3.3.2", "description": "Auto-generated TypeScript SDK for the Immich API", "repository": { "type": "git", diff --git a/packages/sdk/src/fetch-client.ts b/packages/sdk/src/fetch-client.ts index f5686dade..17f626999 100644 --- a/packages/sdk/src/fetch-client.ts +++ b/packages/sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 3.3.1 + * 3.3.2 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/server/package.json b/server/package.json index 30499e046..f420899a3 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "3.3.1", + "version": "3.3.2", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index 51853ea0e..91f6b7e54 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "3.3.1", + "version": "3.3.2", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From ea1bfcf2485bb6a810997d2b760f979f73c5abe5 Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 16:27:32 +0000 Subject: [PATCH 5/6] perf(server): improve people query performance (#32441) perf(server): improve people query performance (#32405) fix(server): slow people query (cherry picked from commit 6b79a82800cb984a755b163bca0cf689b486ad9a) Co-authored-by: Zack Pollard --- server/src/queries/person.repository.sql | 156 +++++++++++-------- server/src/repositories/person.repository.ts | 49 +++--- 2 files changed, 125 insertions(+), 80 deletions(-) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index 7eb7c3bd1..9218f6a79 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -239,38 +239,52 @@ from "person_group" inner join "person" as "owned" on "owned"."personGroupId" = "person_group"."id" and "owned"."ownerId" = $5 - inner join "asset_face" on "asset_face"."personGroupId" = "person_group"."id" - and "asset_face"."deletedAt" is null - and "asset_face"."isVisible" is true - inner join "asset" on "asset"."id" = "asset_face"."assetId" - and "asset"."visibility" = 'timeline' - and "asset"."deletedAt" is null - and ( - "asset"."ownerId" = any ($6::uuid[]) - or exists ( - select - 1 as "exists" - from - "album_asset" - inner join "album" on "album"."id" = "album_asset"."albumId" - and "album"."deletedAt" is null - inner join "album_user" on "album_user"."albumId" = "album"."id" - and "album_user"."userId" = $7::uuid - where - "album_asset"."assetId" = "asset"."id" - ) - ) + inner join ( + select + "asset_face"."personGroupId", + count("asset"."id") as "faceCount" + from + "asset_face" + inner join "asset" on "asset"."id" = "asset_face"."assetId" + and "asset"."visibility" = 'timeline' + and "asset"."deletedAt" is null + and ( + "asset"."ownerId" = any ($6::uuid[]) + or exists ( + select + 1 as "exists" + from + "album_asset" + inner join "album" on "album"."id" = "album_asset"."albumId" + and "album"."deletedAt" is null + inner join "album_user" on "album_user"."albumId" = "album"."id" + and "album_user"."userId" = $7::uuid + where + "album_asset"."assetId" = "asset"."id" + ) + ) + where + "asset_face"."personGroupId" = any ( + array( + ( + select + "person"."personGroupId" + from + "person" + where + "person"."ownerId" = $8 + ) + ) + ) + and "asset_face"."deletedAt" is null + and "asset_face"."isVisible" is true + group by + "asset_face"."personGroupId" + ) as "faces" on "faces"."personGroupId" = "person_group"."id" where - "owned"."isHidden" = $8 - and 1 = 1 -group by - "person_group"."id", - "owned"."ownerId", - "owned"."personGroupId" -having ( "owned"."name" != $9 - or count("asset"."id") >= COALESCE( + or "faces"."faceCount" >= COALESCE( ( SELECT value -> 'people' ->> 'minimumFaces' @@ -283,17 +297,19 @@ having '3' )::int ) + and "owned"."isHidden" = $11 + and 1 = 1 order by "owned"."isHidden" asc, "owned"."isFavorite" desc, NULLIF("owned"."name", '') is null asc, - count("asset"."id") desc, + "faces"."faceCount" desc, NULLIF("owned"."name", '') asc nulls last, "owned"."createdAt" limit - $11 -offset $12 +offset + $13 -- PersonRepository.getAllWithoutFaces select @@ -901,49 +917,65 @@ from "person_group" inner join "person" as "owned" on "owned"."personGroupId" = "person_group"."id" and "owned"."ownerId" = $2 - inner join "asset_face" on "asset_face"."personGroupId" = "person_group"."id" - and "asset_face"."deletedAt" is null - and "asset_face"."isVisible" is true - inner join "asset" on "asset"."id" = "asset_face"."assetId" - and "asset"."visibility" = 'timeline' - and "asset"."deletedAt" is null - and ( - "asset"."ownerId" = any ($3::uuid[]) - or exists ( - select - 1 as "exists" - from - "album_asset" - inner join "album" on "album"."id" = "album_asset"."albumId" - and "album"."deletedAt" is null - inner join "album_user" on "album_user"."albumId" = "album"."id" - and "album_user"."userId" = $4::uuid - where - "album_asset"."assetId" = "asset"."id" - ) - ) + inner join ( + select + "asset_face"."personGroupId", + count("asset"."id") as "faceCount" + from + "asset_face" + inner join "asset" on "asset"."id" = "asset_face"."assetId" + and "asset"."visibility" = 'timeline' + and "asset"."deletedAt" is null + and ( + "asset"."ownerId" = any ($3::uuid[]) + or exists ( + select + 1 as "exists" + from + "album_asset" + inner join "album" on "album"."id" = "album_asset"."albumId" + and "album"."deletedAt" is null + inner join "album_user" on "album_user"."albumId" = "album"."id" + and "album_user"."userId" = $4::uuid + where + "album_asset"."assetId" = "asset"."id" + ) + ) + where + "asset_face"."personGroupId" = any ( + array( + ( + select + "person"."personGroupId" + from + "person" + where + "person"."ownerId" = $5 + ) + ) + ) + and "asset_face"."deletedAt" is null + and "asset_face"."isVisible" is true + group by + "asset_face"."personGroupId" + ) as "faces" on "faces"."personGroupId" = "person_group"."id" where - 1 = 1 - group by - "person_group"."id", - "owned"."ownerId", - "owned"."personGroupId" - having ( - "owned"."name" != $5 - or count("asset"."id") >= COALESCE( + "owned"."name" != $6 + or "faces"."faceCount" >= COALESCE( ( SELECT value -> 'people' ->> 'minimumFaces' FROM user_metadata WHERE - "userId" = $6 + "userId" = $7 AND key = 'preferences' ), '3' )::int ) + and 1 = 1 ) as "people" -- PersonRepository.createGroup diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 9b9235b8b..d6378d6ec 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -224,8 +224,6 @@ const asPerson = ({ ownedPerson, otherPeople, sharedBy, sharedWith }: PersonGrou sharedWith, }); -const faceCount = (eb: ExpressionBuilder) => eb.fn.count('asset.id'); - const withPerson = ({ viewingUserId }: WithPersonOptions) => { return (eb: ExpressionBuilder) => jsonObjectFrom( @@ -448,25 +446,40 @@ export class PersonRepository { .innerJoin('person as owned', (join) => join.onRef('owned.personGroupId', '=', 'person_group.id').on('owned.ownerId', '=', userId), ) - .innerJoin('asset_face', (join) => - join - .onRef('asset_face.personGroupId', '=', 'person_group.id') - .on('asset_face.deletedAt', 'is', null) - .on('asset_face.isVisible', 'is', true), + .innerJoin( + (eb) => + eb + .selectFrom('asset_face') + .innerJoin('asset', (join) => + join + .onRef('asset.id', '=', 'asset_face.assetId') + .on('asset.visibility', '=', sql.lit(AssetVisibility.Timeline)) + .on('asset.deletedAt', 'is', null) + .on((eb) => + eb.or([eb('asset.ownerId', '=', anyUuid([userId, ...partnerIds])), inSharedAlbum(eb, userId)]), + ), + ) + .select('asset_face.personGroupId') + .select((eb) => eb.fn.count('asset.id').as('faceCount')) + // an array instead of a join or `in`, which the planner may turn into a scan of every face in the instance + .where('asset_face.personGroupId', '=', (eb) => { + const ownedGroupIds = eb + .selectFrom('person') + .select('person.personGroupId') + .where('person.ownerId', '=', userId); + return eb.fn.any(eb.fn('array', [ownedGroupIds])); + }) + .where('asset_face.deletedAt', 'is', null) + .where('asset_face.isVisible', 'is', true) + .groupBy('asset_face.personGroupId') + .as('faces'), + (join) => join.onRef('faces.personGroupId', '=', 'person_group.id'), ) - .innerJoin('asset', (join) => - join - .onRef('asset.id', '=', 'asset_face.assetId') - .on('asset.visibility', '=', sql.lit(AssetVisibility.Timeline)) - .on('asset.deletedAt', 'is', null) - .on((eb) => eb.or([eb('asset.ownerId', '=', anyUuid([userId, ...partnerIds])), inSharedAlbum(eb, userId)])), - ) - .groupBy(['person_group.id', 'owned.ownerId', 'owned.personGroupId']) - .having((eb) => + .where((eb) => eb.or([ eb('owned.name', '!=', ''), eb( - faceCount, + 'faces.faceCount', '>=', sql`COALESCE( (SELECT value -> 'people' ->> 'minimumFaces' @@ -509,7 +522,7 @@ export class PersonRepository { .$if(!options.closestFaceAssetId, (qb) => qb .orderBy(sql`NULLIF("owned"."name", '') is null`, 'asc') - .orderBy(faceCount, 'desc') + .orderBy('faces.faceCount', 'desc') .orderBy(sql`NULLIF("owned"."name", '')`, (om) => om.asc().nullsLast()) .orderBy('owned.createdAt'), ) From d2dac658fe1c67e8bbd08aa18200a32e5d45b9e4 Mon Sep 17 00:00:00 2001 From: "immich-push-o-matic[bot]" <179150890+immich-push-o-matic[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 16:30:09 +0000 Subject: [PATCH 6/6] chore: version v3.3.3 --- e2e/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 8 ++++---- mobile/ios/Runner/Info.plist | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- package.json | 2 +- packages/cli/package.json | 2 +- packages/sdk/package.json | 2 +- packages/sdk/src/fetch-client.ts | 2 +- server/package.json | 2 +- web/package.json | 2 +- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 19dcb67cf..25be88ada 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "3.3.2", + "version": "3.3.3", "description": "", "main": "index.js", "type": "module", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 8c0b59e75..42091b6bf 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "3.3.2" +version = "3.3.3" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.12,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 033474d4c..70580a9f4 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -676,7 +676,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "3.3.2" +version = "3.3.3" source = { editable = "." } dependencies = [ { name = "fastapi" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index a6296335a..54143abfc 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -22,8 +22,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3030299, - "android.injected.version.name" => "3.3.2", + "android.injected.version.code" => 3030399, + "android.injected.version.name" => "3.3.3", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab', track: 'beta') @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3030299, - "android.injected.version.name" => "3.3.2", + "android.injected.version.code" => 3030399, + "android.injected.version.name" => "3.3.3", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 7bc63d768..4fef21539 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -78,7 +78,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.3.2 + 3.3.3 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 127da7d1f..11c9ac009 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 3.3.2+3030299 +version: 3.3.3+3030399 environment: sdk: '>=3.12.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index de91bf6f7..d9b315d0d 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -18211,7 +18211,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "3.3.2", + "version": "3.3.3", "contact": {} }, "tags": [ diff --git a/package.json b/package.json index 02af88d83..95f9b54b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "3.3.2", + "version": "3.3.3", "description": "Monorepo for Immich", "type": "module", "private": true, diff --git a/packages/cli/package.json b/packages/cli/package.json index 759eeec1e..8928bd6a6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "3.3.2", + "version": "3.3.3", "description": "Command Line Interface (CLI) for Immich", "repository": { "type": "git", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index de376c500..519ce59c9 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "3.3.2", + "version": "3.3.3", "description": "Auto-generated TypeScript SDK for the Immich API", "repository": { "type": "git", diff --git a/packages/sdk/src/fetch-client.ts b/packages/sdk/src/fetch-client.ts index 17f626999..6fa324eed 100644 --- a/packages/sdk/src/fetch-client.ts +++ b/packages/sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 3.3.2 + * 3.3.3 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/server/package.json b/server/package.json index f420899a3..7946093e2 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "3.3.2", + "version": "3.3.3", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index 91f6b7e54..985b9290c 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "3.3.2", + "version": "3.3.3", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": {