Merge branch 'main' into feat/mobile-ocr

This commit is contained in:
Yaros
2026-04-13 18:07:43 +02:00
committed by GitHub
417 changed files with 13493 additions and 14010 deletions
+130 -7
View File
@@ -5285,6 +5285,65 @@
"x-immich-state": "Stable"
}
},
"/duplicates/resolve": {
"post": {
"description": "Resolve duplicate groups by synchronizing metadata across assets and deleting/trashing duplicates.",
"operationId": "resolveDuplicates",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DuplicateResolveDto"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/BulkIdResponseDto"
},
"type": "array"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Resolve duplicate groups",
"tags": [
"Duplicates"
],
"x-immich-history": [
{
"version": "v3.0.0",
"state": "Added"
},
{
"version": "v3.0.0",
"state": "Alpha"
}
],
"x-immich-permission": "duplicate.delete",
"x-immich-state": "Alpha"
}
},
"/duplicates/{id}": {
"delete": {
"description": "Delete a single duplicate asset specified by its ID.",
@@ -15166,7 +15225,7 @@
"info": {
"title": "Immich",
"description": "Immich API",
"version": "2.6.2",
"version": "2.7.5",
"contact": {}
},
"tags": [
@@ -17299,7 +17358,8 @@
"duplicate",
"no_permission",
"not_found",
"unknown"
"unknown",
"validation"
],
"type": "string"
},
@@ -17311,10 +17371,14 @@
"duplicate",
"no_permission",
"not_found",
"unknown"
"unknown",
"validation"
],
"type": "string"
},
"errorMessage": {
"type": "string"
},
"id": {
"description": "ID",
"type": "string"
@@ -17657,11 +17721,15 @@
},
"filesize": {
"type": "number"
},
"timezone": {
"type": "string"
}
},
"required": [
"filename",
"filesize"
"filesize",
"timezone"
],
"type": "object"
},
@@ -17828,6 +17896,52 @@
],
"type": "object"
},
"DuplicateResolveDto": {
"properties": {
"groups": {
"description": "List of duplicate groups to resolve",
"items": {
"$ref": "#/components/schemas/DuplicateResolveGroupDto"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"groups"
],
"type": "object"
},
"DuplicateResolveGroupDto": {
"properties": {
"duplicateId": {
"format": "uuid",
"type": "string"
},
"keepAssetIds": {
"description": "Asset IDs to keep",
"items": {
"format": "uuid",
"type": "string"
},
"type": "array"
},
"trashAssetIds": {
"description": "Asset IDs to trash or delete",
"items": {
"format": "uuid",
"type": "string"
},
"type": "array"
}
},
"required": [
"duplicateId",
"keepAssetIds",
"trashAssetIds"
],
"type": "object"
},
"DuplicateResponseDto": {
"properties": {
"assets": {
@@ -17840,11 +17954,20 @@
"duplicateId": {
"description": "Duplicate group ID",
"type": "string"
},
"suggestedKeepAssetIds": {
"description": "Suggested asset IDs to keep based on file size and EXIF data",
"items": {
"format": "uuid",
"type": "string"
},
"type": "array"
}
},
"required": [
"assets",
"duplicateId"
"duplicateId",
"suggestedKeepAssetIds"
],
"type": "object"
},
@@ -19129,7 +19252,7 @@
"type": "boolean"
},
"withPeople": {
"description": "Include assets with people",
"description": "Include people data in response",
"type": "boolean"
},
"withStacked": {
@@ -20868,7 +20991,7 @@
"type": "boolean"
},
"withPeople": {
"description": "Include assets with people",
"description": "Include people data in response",
"type": "boolean"
},
"withStacked": {
+1 -1
View File
@@ -1 +1 @@
24.13.1
24.14.1
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@immich/sdk",
"version": "2.6.2",
"version": "2.7.5",
"description": "Auto-generated TypeScript SDK for the Immich API",
"type": "module",
"main": "./build/index.js",
@@ -19,8 +19,8 @@
"@oazapfts/runtime": "^1.0.2"
},
"devDependencies": {
"@types/node": "^24.11.0",
"typescript": "^5.3.3"
"@types/node": "^24.12.0",
"typescript": "^6.0.0"
},
"repository": {
"type": "git",
@@ -28,6 +28,6 @@
"directory": "open-api/typescript-sdk"
},
"volta": {
"node": "24.13.1"
"node": "24.14.1"
}
}
+37 -5
View File
@@ -1,6 +1,6 @@
/**
* Immich
* 2.6.2
* 2.7.5
* DO NOT MODIFY - This file has been generated using oazapfts.
* See https://www.npmjs.com/package/oazapfts
*/
@@ -63,6 +63,7 @@ export type DatabaseBackupDeleteDto = {
export type DatabaseBackupDto = {
filename: string;
filesize: number;
timezone: string;
};
export type DatabaseBackupListResponseDto = {
backups: DatabaseBackupDto[];
@@ -725,6 +726,7 @@ export type BulkIdsDto = {
export type BulkIdResponseDto = {
/** Error reason if failed */
error?: Error;
errorMessage?: string;
/** ID */
id: string;
/** Whether operation succeeded */
@@ -1163,6 +1165,19 @@ export type DuplicateResponseDto = {
assets: AssetResponseDto[];
/** Duplicate group ID */
duplicateId: string;
/** Suggested asset IDs to keep based on file size and EXIF data */
suggestedKeepAssetIds: string[];
};
export type DuplicateResolveGroupDto = {
duplicateId: string;
/** Asset IDs to keep */
keepAssetIds: string[];
/** Asset IDs to trash or delete */
trashAssetIds: string[];
};
export type DuplicateResolveDto = {
/** List of duplicate groups to resolve */
groups: DuplicateResolveGroupDto[];
};
export type PersonResponseDto = {
/** Person date of birth */
@@ -1741,7 +1756,7 @@ export type MetadataSearchDto = {
withDeleted?: boolean;
/** Include EXIF data in response */
withExif?: boolean;
/** Include assets with people */
/** Include people data in response */
withPeople?: boolean;
/** Include stacked assets */
withStacked?: boolean;
@@ -1855,7 +1870,7 @@ export type RandomSearchDto = {
withDeleted?: boolean;
/** Include EXIF data in response */
withExif?: boolean;
/** Include assets with people */
/** Include people data in response */
withPeople?: boolean;
/** Include stacked assets */
withStacked?: boolean;
@@ -4569,6 +4584,21 @@ export function getAssetDuplicates(opts?: Oazapfts.RequestOpts) {
...opts
}));
}
/**
* Resolve duplicate groups
*/
export function resolveDuplicates({ duplicateResolveDto }: {
duplicateResolveDto: DuplicateResolveDto;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: BulkIdResponseDto[];
}>("/duplicates/resolve", oazapfts.json({
...opts,
method: "POST",
body: duplicateResolveDto
})));
}
/**
* Delete a duplicate
*/
@@ -6931,13 +6961,15 @@ export enum BulkIdErrorReason {
Duplicate = "duplicate",
NoPermission = "no_permission",
NotFound = "not_found",
Unknown = "unknown"
Unknown = "unknown",
Validation = "validation"
}
export enum Error {
Duplicate = "duplicate",
NoPermission = "no_permission",
NotFound = "not_found",
Unknown = "unknown"
Unknown = "unknown",
Validation = "validation"
}
export enum Permission {
All = "all",
+1
View File
@@ -7,6 +7,7 @@
"outDir": "build",
"module": "Node16",
"moduleResolution": "Node16",
"rootDir": "./src",
"lib": ["esnext", "dom"]
},
"include": ["src/**/*.ts"]