Merge remote-tracking branch 'origin/main' into feat/yucca-integration

This commit is contained in:
izzy
2026-04-16 12:04:38 +01:00
523 changed files with 2711 additions and 54886 deletions
+1
View File
@@ -23,6 +23,7 @@ function dart {
patch --no-backup-if-mismatch -u ../mobile/openapi/lib/api_client.dart <./patch/api_client.dart.patch
patch --no-backup-if-mismatch -u ../mobile/openapi/lib/api.dart <./patch/api.dart.patch
patch --no-backup-if-mismatch -u ../mobile/openapi/pubspec.yaml <./patch/pubspec_immich_mobile.yaml.patch
patch --no-backup-if-mismatch -u ../mobile/openapi/lib/model/asset_edit_action_item_dto.dart <./patch/asset_edit_action_item_dto.dart.patch
# Don't include analysis_options.yaml for the generated openapi files
# so that language servers can properly exclude the mobile/openapi directory
rm ../mobile/openapi/analysis_options.yaml
+173 -528
View File
@@ -1956,15 +1956,6 @@
"schema": {
"type": "string"
}
},
{
"name": "withoutAssets",
"required": false,
"in": "query",
"description": "Exclude assets from response",
"schema": {
"type": "boolean"
}
}
],
"responses": {
@@ -2227,6 +2218,77 @@
"x-immich-state": "Stable"
}
},
"/albums/{id}/map-markers": {
"get": {
"description": "Retrieve map marker information for a specific album by its ID.",
"operationId": "getAlbumMapMarkers",
"parameters": [
{
"name": "id",
"required": true,
"in": "path",
"schema": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
}
},
{
"name": "key",
"required": false,
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "slug",
"required": false,
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/MapMarkerResponseDto"
},
"type": "array"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Retrieve album map markers",
"tags": [
"Albums"
],
"x-immich-history": [
{
"version": "v3",
"state": "Added"
}
],
"x-immich-permission": "album.read"
}
},
"/albums/{id}/user/{userId}": {
"delete": {
"description": "Remove a user from an album. Use an ID of \"me\" to leave a shared album.",
@@ -2441,7 +2503,7 @@
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/APIKeyResponseDto"
"$ref": "#/components/schemas/ApiKeyResponseDto"
},
"type": "array"
}
@@ -2490,7 +2552,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyCreateDto"
"$ref": "#/components/schemas/ApiKeyCreateDto"
}
}
},
@@ -2501,7 +2563,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyCreateResponseDto"
"$ref": "#/components/schemas/ApiKeyCreateResponseDto"
}
}
},
@@ -2551,7 +2613,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyResponseDto"
"$ref": "#/components/schemas/ApiKeyResponseDto"
}
}
},
@@ -2663,7 +2725,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyResponseDto"
"$ref": "#/components/schemas/ApiKeyResponseDto"
}
}
},
@@ -2721,7 +2783,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyUpdateDto"
"$ref": "#/components/schemas/ApiKeyUpdateDto"
}
}
},
@@ -2732,7 +2794,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/APIKeyResponseDto"
"$ref": "#/components/schemas/ApiKeyResponseDto"
}
}
},
@@ -3084,126 +3146,6 @@
"x-immich-state": "Stable"
}
},
"/assets/device/{deviceId}": {
"get": {
"deprecated": true,
"description": "Get all asset of a device that are in the database, ID only.",
"operationId": "getAllUserAssetsByDeviceId",
"parameters": [
{
"name": "deviceId",
"required": true,
"in": "path",
"description": "Device ID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"type": "string"
},
"type": "array"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Retrieve assets by device ID",
"tags": [
"Assets",
"Deprecated"
],
"x-immich-history": [
{
"version": "v1",
"state": "Added"
},
{
"version": "v2",
"state": "Deprecated"
}
],
"x-immich-state": "Deprecated"
}
},
"/assets/exist": {
"post": {
"description": "Checks if multiple assets exist on the server and returns all existing - used by background backup",
"operationId": "checkExistingAssets",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CheckExistingAssetsDto"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CheckExistingAssetsResponseDto"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Check existing assets",
"tags": [
"Assets"
],
"x-immich-history": [
{
"version": "v1",
"state": "Added"
},
{
"version": "v1",
"state": "Beta"
},
{
"version": "v2",
"state": "Stable"
}
],
"x-immich-permission": "asset.upload",
"x-immich-state": "Stable"
}
},
"/assets/jobs": {
"post": {
"description": "Run a specific job on a set of assets.",
@@ -9255,15 +9197,6 @@
"type": "string"
}
},
{
"name": "deviceId",
"required": false,
"in": "query",
"description": "Device ID to filter by",
"schema": {
"type": "string"
}
},
{
"name": "isEncoded",
"required": false,
@@ -12294,123 +12227,6 @@
"x-immich-state": "Stable"
}
},
"/sync/delta-sync": {
"post": {
"deprecated": true,
"description": "Retrieve changed assets since the last sync for the authenticated user.",
"operationId": "getDeltaSync",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetDeltaSyncDto"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetDeltaSyncResponseDto"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Get delta sync for user",
"tags": [
"Sync",
"Deprecated"
],
"x-immich-history": [
{
"version": "v1",
"state": "Added"
},
{
"version": "v2",
"state": "Deprecated"
}
],
"x-immich-state": "Deprecated"
}
},
"/sync/full-sync": {
"post": {
"deprecated": true,
"description": "Retrieve all assets for a full synchronization for the authenticated user.",
"operationId": "getFullSyncForUser",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetFullSyncDto"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/AssetResponseDto"
},
"type": "array"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Get full sync for user",
"tags": [
"Sync",
"Deprecated"
],
"x-immich-history": [
{
"version": "v1",
"state": "Added"
},
{
"version": "v2",
"state": "Deprecated"
}
],
"x-immich-state": "Deprecated"
}
},
"/sync/stream": {
"post": {
"description": "Retrieve a JSON lines streamed response of changes for synchronization. This endpoint is used by the mobile app to efficiently stay up to date with changes.",
@@ -14077,7 +13893,7 @@
"x-immich-state": "Stable"
},
"put": {
"description": "Update the current user making teh API request.",
"description": "Update the current user making the API request.",
"operationId": "updateMyUser",
"parameters": [],
"requestBody": {
@@ -16295,100 +16111,6 @@
}
},
"schemas": {
"APIKeyCreateDto": {
"properties": {
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"permissions"
],
"type": "object"
},
"APIKeyCreateResponseDto": {
"properties": {
"apiKey": {
"$ref": "#/components/schemas/APIKeyResponseDto"
},
"secret": {
"description": "API key secret (only shown once)",
"type": "string"
}
},
"required": [
"apiKey",
"secret"
],
"type": "object"
},
"APIKeyResponseDto": {
"properties": {
"createdAt": {
"description": "Creation date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"id": {
"description": "API key ID",
"type": "string"
},
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"type": "array"
},
"updatedAt": {
"description": "Last update date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
}
},
"required": [
"createdAt",
"id",
"name",
"permissions",
"updatedAt"
],
"type": "object"
},
"APIKeyUpdateDto": {
"properties": {
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"minItems": 1,
"type": "array"
}
},
"type": "object"
},
"ActiveScheduleItemDto": {
"properties": {
"repositoryId": {
@@ -16552,12 +16274,6 @@
"minimum": 0,
"type": "integer"
},
"assets": {
"items": {
"$ref": "#/components/schemas/AssetResponseDto"
},
"type": "array"
},
"contributorCounts": {
"items": {
"$ref": "#/components/schemas/ContributorCountResponseDto"
@@ -16625,7 +16341,6 @@
"albumThumbnailAssetId",
"albumUsers",
"assetCount",
"assets",
"createdAt",
"description",
"hasSharedLink",
@@ -16788,6 +16503,100 @@
},
"type": "object"
},
"ApiKeyCreateDto": {
"properties": {
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"permissions"
],
"type": "object"
},
"ApiKeyCreateResponseDto": {
"properties": {
"apiKey": {
"$ref": "#/components/schemas/ApiKeyResponseDto"
},
"secret": {
"description": "API key secret (only shown once)",
"type": "string"
}
},
"required": [
"apiKey",
"secret"
],
"type": "object"
},
"ApiKeyResponseDto": {
"properties": {
"createdAt": {
"description": "Creation date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"id": {
"description": "API key ID",
"type": "string"
},
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"type": "array"
},
"updatedAt": {
"description": "Last update date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
}
},
"required": [
"createdAt",
"id",
"name",
"permissions",
"updatedAt"
],
"type": "object"
},
"ApiKeyUpdateDto": {
"properties": {
"name": {
"description": "API key name",
"type": "string"
},
"permissions": {
"description": "List of permissions",
"items": {
"$ref": "#/components/schemas/Permission"
},
"minItems": 1,
"type": "array"
}
},
"type": "object"
},
"AssetBulkDeleteDto": {
"properties": {
"force": {
@@ -17009,59 +16818,6 @@
],
"type": "object"
},
"AssetDeltaSyncDto": {
"properties": {
"updatedAfter": {
"description": "Sync assets updated after this date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"userIds": {
"description": "User IDs to sync",
"items": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
},
"type": "array"
}
},
"required": [
"updatedAfter",
"userIds"
],
"type": "object"
},
"AssetDeltaSyncResponseDto": {
"description": "Asset delta sync response",
"properties": {
"deleted": {
"description": "Deleted asset IDs",
"items": {
"type": "string"
},
"type": "array"
},
"needsFullSync": {
"description": "Whether full sync is needed",
"type": "boolean"
},
"upserted": {
"items": {
"$ref": "#/components/schemas/AssetResponseDto"
},
"type": "array"
}
},
"required": [
"deleted",
"needsFullSync",
"upserted"
],
"type": "object"
},
"AssetEditAction": {
"description": "Type of edit action to perform",
"enum": [
@@ -17407,40 +17163,6 @@
],
"type": "object"
},
"AssetFullSyncDto": {
"properties": {
"lastId": {
"description": "Last asset ID (pagination)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
},
"limit": {
"description": "Maximum number of assets to return",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"updatedUntil": {
"description": "Sync assets updated until this date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"userId": {
"description": "Filter by user ID",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
}
},
"required": [
"limit",
"updatedUntil"
],
"type": "object"
},
"AssetIdErrorReason": {
"description": "Error reason if failed",
"enum": [
@@ -17525,14 +17247,6 @@
"format": "binary",
"type": "string"
},
"deviceAssetId": {
"description": "Device asset ID",
"type": "string"
},
"deviceId": {
"description": "Device ID",
"type": "string"
},
"duration": {
"description": "Duration (for videos)",
"type": "string"
@@ -17583,8 +17297,6 @@
},
"required": [
"assetData",
"deviceAssetId",
"deviceId",
"fileCreatedAt",
"fileModifiedAt"
],
@@ -17900,14 +17612,6 @@
"format": "date-time",
"type": "string"
},
"deviceAssetId": {
"description": "Device asset ID",
"type": "string"
},
"deviceId": {
"description": "Device ID",
"type": "string"
},
"duplicateId": {
"description": "Duplicate group ID",
"nullable": true,
@@ -18089,8 +17793,6 @@
"required": [
"checksum",
"createdAt",
"deviceAssetId",
"deviceId",
"duration",
"fileCreatedAt",
"fileModifiedAt",
@@ -18425,42 +18127,6 @@
],
"type": "object"
},
"CheckExistingAssetsDto": {
"properties": {
"deviceAssetIds": {
"description": "Device asset IDs to check",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array"
},
"deviceId": {
"description": "Device ID",
"type": "string"
}
},
"required": [
"deviceAssetIds",
"deviceId"
],
"type": "object"
},
"CheckExistingAssetsResponseDto": {
"properties": {
"existingIds": {
"description": "Existing asset IDs",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"existingIds"
],
"type": "object"
},
"Colorspace": {
"description": "Colorspace",
"enum": [
@@ -19516,7 +19182,6 @@
"AssetFileMigration",
"AssetGenerateThumbnailsQueueAll",
"AssetGenerateThumbnails",
"AuditLogCleanup",
"AuditTableCleanup",
"DatabaseBackup",
"FacialRecognitionQueueAll",
@@ -20362,14 +20027,6 @@
"description": "Filter by description text",
"type": "string"
},
"deviceAssetId": {
"description": "Filter by device asset ID",
"type": "string"
},
"deviceId": {
"description": "Device ID to filter by",
"type": "string"
},
"encodedVideoPath": {
"description": "Filter by encoded video file path",
"type": "string"
@@ -22270,10 +21927,6 @@
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"deviceId": {
"description": "Device ID to filter by",
"type": "string"
},
"isEncoded": {
"description": "Filter by encoded status",
"type": "boolean"
@@ -24057,10 +23710,6 @@
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"deviceId": {
"description": "Device ID to filter by",
"type": "string"
},
"isEncoded": {
"description": "Filter by encoded status",
"type": "boolean"
@@ -24362,10 +24011,6 @@
"description": "Filter by description text",
"type": "string"
},
"deviceId": {
"description": "Device ID to filter by",
"type": "string"
},
"isEncoded": {
"description": "Filter by encoded status",
"type": "boolean"
@@ -0,0 +1,18 @@
@@ -20,7 +20,7 @@ class AssetEditActionItemDto {
/// Type of edit action to perform
AssetEditAction action;
- AssetEditActionItemDtoParameters parameters;
+ Map<String, dynamic> parameters;
@override
bool operator ==(Object other) => identical(this, other) || other is AssetEditActionItemDto &&
@@ -53,7 +53,7 @@ class AssetEditActionItemDto {
return AssetEditActionItemDto(
action: AssetEditAction.fromJson(json[r'action'])!,
- parameters: AssetEditActionItemDtoParameters.fromJson(json[r'parameters'])!,
+ parameters: json[r'parameters'],
);
}
return null;
+329 -426
View File
@@ -446,6 +446,303 @@ export type AlbumUserResponseDto = {
role: AlbumUserRole;
user: UserResponseDto;
};
export type ContributorCountResponseDto = {
/** Number of assets contributed */
assetCount: number;
/** User ID */
userId: string;
};
export type AlbumResponseDto = {
/** Album name */
albumName: string;
/** Thumbnail asset ID */
albumThumbnailAssetId: string | null;
albumUsers: AlbumUserResponseDto[];
/** Number of assets */
assetCount: number;
contributorCounts?: ContributorCountResponseDto[];
/** Creation date */
createdAt: string;
/** Album description */
description: string;
/** End date (latest asset) */
endDate?: string;
/** Has shared link */
hasSharedLink: boolean;
/** Album ID */
id: string;
/** Activity feed enabled */
isActivityEnabled: boolean;
/** Last modified asset timestamp */
lastModifiedAssetTimestamp?: string;
order?: AssetOrder;
owner: UserResponseDto;
/** Owner user ID */
ownerId: string;
/** Is shared album */
shared: boolean;
/** Start date (earliest asset) */
startDate?: string;
/** Last update date */
updatedAt: string;
};
export type AlbumUserCreateDto = {
role: AlbumUserRole;
/** User ID */
userId: string;
};
export type CreateAlbumDto = {
/** Album name */
albumName: string;
/** Album users */
albumUsers?: AlbumUserCreateDto[];
/** Initial asset IDs */
assetIds?: string[];
/** Album description */
description?: string;
};
export type AlbumsAddAssetsDto = {
/** Album IDs */
albumIds: string[];
/** Asset IDs */
assetIds: string[];
};
export type AlbumsAddAssetsResponseDto = {
error?: BulkIdErrorReason;
/** Operation success */
success: boolean;
};
export type AlbumStatisticsResponseDto = {
/** Number of non-shared albums */
notShared: number;
/** Number of owned albums */
owned: number;
/** Number of shared albums */
shared: number;
};
export type UpdateAlbumDto = {
/** Album name */
albumName?: string;
/** Album thumbnail asset ID */
albumThumbnailAssetId?: string;
/** Album description */
description?: string;
/** Enable activity feed */
isActivityEnabled?: boolean;
order?: AssetOrder;
};
export type BulkIdsDto = {
/** IDs to process */
ids: string[];
};
export type BulkIdResponseDto = {
error?: BulkIdErrorReason;
errorMessage?: string;
/** ID */
id: string;
/** Whether operation succeeded */
success: boolean;
};
export type MapMarkerResponseDto = {
/** City name */
city: string | null;
/** Country name */
country: string | null;
/** Asset ID */
id: string;
/** Latitude */
lat: number;
/** Longitude */
lon: number;
/** State/Province name */
state: string | null;
};
export type UpdateAlbumUserDto = {
role: AlbumUserRole;
};
export type AlbumUserAddDto = {
/** Album user role */
role?: AlbumUserRole;
/** User ID */
userId: string;
};
export type AddUsersDto = {
/** Album users to add */
albumUsers: AlbumUserAddDto[];
};
export type ApiKeyResponseDto = {
/** Creation date */
createdAt: string;
/** API key ID */
id: string;
/** API key name */
name: string;
/** List of permissions */
permissions: Permission[];
/** Last update date */
updatedAt: string;
};
export type ApiKeyCreateDto = {
/** API key name */
name?: string;
/** List of permissions */
permissions: Permission[];
};
export type ApiKeyCreateResponseDto = {
apiKey: ApiKeyResponseDto;
/** API key secret (only shown once) */
secret: string;
};
export type ApiKeyUpdateDto = {
/** API key name */
name?: string;
/** List of permissions */
permissions?: Permission[];
};
export type AssetBulkDeleteDto = {
/** Force delete even if in use */
force?: boolean;
/** IDs to process */
ids: string[];
};
export type AssetMetadataUpsertItemDto = {
/** Metadata key */
key: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type AssetMediaCreateDto = {
/** Asset file data */
assetData: Blob;
/** Duration (for videos) */
duration?: string;
/** File creation date */
fileCreatedAt: string;
/** File modification date */
fileModifiedAt: string;
/** Filename */
filename?: string;
/** Mark as favorite */
isFavorite?: boolean;
/** Live photo video ID */
livePhotoVideoId?: string;
/** Asset metadata items */
metadata?: AssetMetadataUpsertItemDto[];
/** Sidecar file data */
sidecarData?: Blob;
visibility?: AssetVisibility;
};
export type AssetMediaResponseDto = {
/** Asset media ID */
id: string;
status: AssetMediaStatus;
};
export type AssetBulkUpdateDto = {
/** Original date and time */
dateTimeOriginal?: string;
/** Relative time offset in seconds */
dateTimeRelative?: number;
/** Asset description */
description?: string;
/** Duplicate ID */
duplicateId?: string | null;
/** Asset IDs to update */
ids: string[];
/** Mark as favorite */
isFavorite?: boolean;
/** Latitude coordinate */
latitude?: number;
/** Longitude coordinate */
longitude?: number;
/** Rating in range [1-5], or null for unrated */
rating?: number | null;
/** Time zone (IANA timezone) */
timeZone?: string;
visibility?: AssetVisibility;
};
export type AssetBulkUploadCheckItem = {
/** Base64 or hex encoded SHA1 hash */
checksum: string;
/** Asset ID */
id: string;
};
export type AssetBulkUploadCheckDto = {
/** Assets to check */
assets: AssetBulkUploadCheckItem[];
};
export type AssetBulkUploadCheckResult = {
action: AssetUploadAction;
/** Existing asset ID if duplicate */
assetId?: string;
/** Asset ID */
id: string;
/** Whether existing asset is trashed */
isTrashed?: boolean;
reason?: AssetRejectReason;
};
export type AssetBulkUploadCheckResponseDto = {
/** Upload check results */
results: AssetBulkUploadCheckResult[];
};
export type AssetCopyDto = {
/** Copy album associations */
albums?: boolean;
/** Copy favorite status */
favorite?: boolean;
/** Copy shared links */
sharedLinks?: boolean;
/** Copy sidecar file */
sidecar?: boolean;
/** Source asset ID */
sourceId: string;
/** Copy stack association */
stack?: boolean;
/** Target asset ID */
targetId: string;
};
export type AssetJobsDto = {
/** Asset IDs */
assetIds: string[];
name: AssetJobName;
};
export type AssetMetadataBulkDeleteItemDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
};
export type AssetMetadataBulkDeleteDto = {
/** Metadata items to delete */
items: AssetMetadataBulkDeleteItemDto[];
};
export type AssetMetadataBulkUpsertItemDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type AssetMetadataBulkUpsertDto = {
/** Metadata items to upsert */
items: AssetMetadataBulkUpsertItemDto[];
};
export type AssetMetadataBulkResponseDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
/** Last update date */
updatedAt: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type ExifResponseDto = {
/** City name */
city?: string | null;
@@ -557,10 +854,6 @@ export type AssetResponseDto = {
checksum: string;
/** The UTC timestamp when the asset was originally uploaded to Immich. */
createdAt: string;
/** Device asset ID */
deviceAssetId: string;
/** Device ID */
deviceId: string;
/** Duplicate group ID */
duplicateId?: string | null;
/** Video duration (for videos) */
@@ -616,304 +909,6 @@ export type AssetResponseDto = {
/** Asset width */
width: number | null;
};
export type ContributorCountResponseDto = {
/** Number of assets contributed */
assetCount: number;
/** User ID */
userId: string;
};
export type AlbumResponseDto = {
/** Album name */
albumName: string;
/** Thumbnail asset ID */
albumThumbnailAssetId: string | null;
albumUsers: AlbumUserResponseDto[];
/** Number of assets */
assetCount: number;
assets: AssetResponseDto[];
contributorCounts?: ContributorCountResponseDto[];
/** Creation date */
createdAt: string;
/** Album description */
description: string;
/** End date (latest asset) */
endDate?: string;
/** Has shared link */
hasSharedLink: boolean;
/** Album ID */
id: string;
/** Activity feed enabled */
isActivityEnabled: boolean;
/** Last modified asset timestamp */
lastModifiedAssetTimestamp?: string;
order?: AssetOrder;
owner: UserResponseDto;
/** Owner user ID */
ownerId: string;
/** Is shared album */
shared: boolean;
/** Start date (earliest asset) */
startDate?: string;
/** Last update date */
updatedAt: string;
};
export type AlbumUserCreateDto = {
role: AlbumUserRole;
/** User ID */
userId: string;
};
export type CreateAlbumDto = {
/** Album name */
albumName: string;
/** Album users */
albumUsers?: AlbumUserCreateDto[];
/** Initial asset IDs */
assetIds?: string[];
/** Album description */
description?: string;
};
export type AlbumsAddAssetsDto = {
/** Album IDs */
albumIds: string[];
/** Asset IDs */
assetIds: string[];
};
export type AlbumsAddAssetsResponseDto = {
error?: BulkIdErrorReason;
/** Operation success */
success: boolean;
};
export type AlbumStatisticsResponseDto = {
/** Number of non-shared albums */
notShared: number;
/** Number of owned albums */
owned: number;
/** Number of shared albums */
shared: number;
};
export type UpdateAlbumDto = {
/** Album name */
albumName?: string;
/** Album thumbnail asset ID */
albumThumbnailAssetId?: string;
/** Album description */
description?: string;
/** Enable activity feed */
isActivityEnabled?: boolean;
order?: AssetOrder;
};
export type BulkIdsDto = {
/** IDs to process */
ids: string[];
};
export type BulkIdResponseDto = {
error?: BulkIdErrorReason;
errorMessage?: string;
/** ID */
id: string;
/** Whether operation succeeded */
success: boolean;
};
export type UpdateAlbumUserDto = {
role: AlbumUserRole;
};
export type AlbumUserAddDto = {
/** Album user role */
role?: AlbumUserRole;
/** User ID */
userId: string;
};
export type AddUsersDto = {
/** Album users to add */
albumUsers: AlbumUserAddDto[];
};
export type ApiKeyResponseDto = {
/** Creation date */
createdAt: string;
/** API key ID */
id: string;
/** API key name */
name: string;
/** List of permissions */
permissions: Permission[];
/** Last update date */
updatedAt: string;
};
export type ApiKeyCreateDto = {
/** API key name */
name?: string;
/** List of permissions */
permissions: Permission[];
};
export type ApiKeyCreateResponseDto = {
apiKey: ApiKeyResponseDto;
/** API key secret (only shown once) */
secret: string;
};
export type ApiKeyUpdateDto = {
/** API key name */
name?: string;
/** List of permissions */
permissions?: Permission[];
};
export type AssetBulkDeleteDto = {
/** Force delete even if in use */
force?: boolean;
/** IDs to process */
ids: string[];
};
export type AssetMetadataUpsertItemDto = {
/** Metadata key */
key: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type AssetMediaCreateDto = {
/** Asset file data */
assetData: Blob;
/** Device asset ID */
deviceAssetId: string;
/** Device ID */
deviceId: string;
/** Duration (for videos) */
duration?: string;
/** File creation date */
fileCreatedAt: string;
/** File modification date */
fileModifiedAt: string;
/** Filename */
filename?: string;
/** Mark as favorite */
isFavorite?: boolean;
/** Live photo video ID */
livePhotoVideoId?: string;
/** Asset metadata items */
metadata?: AssetMetadataUpsertItemDto[];
/** Sidecar file data */
sidecarData?: Blob;
visibility?: AssetVisibility;
};
export type AssetMediaResponseDto = {
/** Asset media ID */
id: string;
status: AssetMediaStatus;
};
export type AssetBulkUpdateDto = {
/** Original date and time */
dateTimeOriginal?: string;
/** Relative time offset in seconds */
dateTimeRelative?: number;
/** Asset description */
description?: string;
/** Duplicate ID */
duplicateId?: string | null;
/** Asset IDs to update */
ids: string[];
/** Mark as favorite */
isFavorite?: boolean;
/** Latitude coordinate */
latitude?: number;
/** Longitude coordinate */
longitude?: number;
/** Rating in range [1-5], or null for unrated */
rating?: number | null;
/** Time zone (IANA timezone) */
timeZone?: string;
visibility?: AssetVisibility;
};
export type AssetBulkUploadCheckItem = {
/** Base64 or hex encoded SHA1 hash */
checksum: string;
/** Asset ID */
id: string;
};
export type AssetBulkUploadCheckDto = {
/** Assets to check */
assets: AssetBulkUploadCheckItem[];
};
export type AssetBulkUploadCheckResult = {
action: AssetUploadAction;
/** Existing asset ID if duplicate */
assetId?: string;
/** Asset ID */
id: string;
/** Whether existing asset is trashed */
isTrashed?: boolean;
reason?: AssetRejectReason;
};
export type AssetBulkUploadCheckResponseDto = {
/** Upload check results */
results: AssetBulkUploadCheckResult[];
};
export type AssetCopyDto = {
/** Copy album associations */
albums?: boolean;
/** Copy favorite status */
favorite?: boolean;
/** Copy shared links */
sharedLinks?: boolean;
/** Copy sidecar file */
sidecar?: boolean;
/** Source asset ID */
sourceId: string;
/** Copy stack association */
stack?: boolean;
/** Target asset ID */
targetId: string;
};
export type CheckExistingAssetsDto = {
/** Device asset IDs to check */
deviceAssetIds: string[];
/** Device ID */
deviceId: string;
};
export type CheckExistingAssetsResponseDto = {
/** Existing asset IDs */
existingIds: string[];
};
export type AssetJobsDto = {
/** Asset IDs */
assetIds: string[];
name: AssetJobName;
};
export type AssetMetadataBulkDeleteItemDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
};
export type AssetMetadataBulkDeleteDto = {
/** Metadata items to delete */
items: AssetMetadataBulkDeleteItemDto[];
};
export type AssetMetadataBulkUpsertItemDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type AssetMetadataBulkUpsertDto = {
/** Metadata items to upsert */
items: AssetMetadataBulkUpsertItemDto[];
};
export type AssetMetadataBulkResponseDto = {
/** Asset ID */
assetId: string;
/** Metadata key */
key: string;
/** Last update date */
updatedAt: string;
/** Metadata value (object) */
value: {
[key: string]: any;
};
};
export type UpdateAssetDto = {
/** Original date and time */
dateTimeOriginal?: string;
@@ -1323,20 +1318,6 @@ export type ValidateLibraryResponseDto = {
/** Validation results for import paths */
importPaths?: ValidateLibraryImportPathResponseDto[];
};
export type MapMarkerResponseDto = {
/** City name */
city: string | null;
/** Country name */
country: string | null;
/** Asset ID */
id: string;
/** Latitude */
lat: number;
/** Longitude */
lon: number;
/** State/Province name */
state: string | null;
};
export type MapReverseGeocodeResponseDto = {
/** City name */
city: string | null;
@@ -1661,10 +1642,6 @@ export type MetadataSearchDto = {
createdBefore?: string;
/** Filter by description text */
description?: string;
/** Filter by device asset ID */
deviceAssetId?: string;
/** Device ID to filter by */
deviceId?: string;
/** Filter by encoded video file path */
encodedVideoPath?: string;
/** Filter by asset ID */
@@ -1790,8 +1767,6 @@ export type RandomSearchDto = {
createdAfter?: string;
/** Filter by creation date (before) */
createdBefore?: string;
/** Device ID to filter by */
deviceId?: string;
/** Filter by encoded status */
isEncoded?: boolean;
/** Filter by favorite status */
@@ -1856,8 +1831,6 @@ export type SmartSearchDto = {
createdAfter?: string;
/** Filter by creation date (before) */
createdBefore?: string;
/** Device ID to filter by */
deviceId?: string;
/** Filter by encoded status */
isEncoded?: boolean;
/** Filter by favorite status */
@@ -1928,8 +1901,6 @@ export type StatisticsSearchDto = {
createdBefore?: string;
/** Filter by description text */
description?: string;
/** Device ID to filter by */
deviceId?: string;
/** Filter by encoded status */
isEncoded?: boolean;
/** Filter by favorite status */
@@ -2321,29 +2292,6 @@ export type SyncAckSetDto = {
/** Acknowledgment IDs (max 1000) */
acks: string[];
};
export type AssetDeltaSyncDto = {
/** Sync assets updated after this date */
updatedAfter: string;
/** User IDs to sync */
userIds: string[];
};
export type AssetDeltaSyncResponseDto = {
/** Deleted asset IDs */
deleted: string[];
/** Whether full sync is needed */
needsFullSync: boolean;
upserted: AssetResponseDto[];
};
export type AssetFullSyncDto = {
/** Last asset ID (pagination) */
lastId?: string;
/** Maximum number of assets to return */
limit: number;
/** Sync assets updated until this date */
updatedUntil: string;
/** Filter by user ID */
userId?: string;
};
export type SyncStreamDto = {
/** Reset sync state */
reset?: boolean;
@@ -3919,19 +3867,17 @@ export function deleteAlbum({ id }: {
/**
* Retrieve an album
*/
export function getAlbumInfo({ id, key, slug, withoutAssets }: {
export function getAlbumInfo({ id, key, slug }: {
id: string;
key?: string;
slug?: string;
withoutAssets?: boolean;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: AlbumResponseDto;
}>(`/albums/${encodeURIComponent(id)}${QS.query(QS.explode({
key,
slug,
withoutAssets
slug
}))}`, {
...opts
}));
@@ -3984,6 +3930,24 @@ export function addAssetsToAlbum({ id, bulkIdsDto }: {
body: bulkIdsDto
})));
}
/**
* Retrieve album map markers
*/
export function getAlbumMapMarkers({ id, key, slug }: {
id: string;
key?: string;
slug?: string;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: MapMarkerResponseDto[];
}>(`/albums/${encodeURIComponent(id)}/map-markers${QS.query(QS.explode({
key,
slug
}))}`, {
...opts
}));
}
/**
* Remove user from album
*/
@@ -4181,34 +4145,6 @@ export function copyAsset({ assetCopyDto }: {
body: assetCopyDto
})));
}
/**
* Retrieve assets by device ID
*/
export function getAllUserAssetsByDeviceId({ deviceId }: {
deviceId: string;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: string[];
}>(`/assets/device/${encodeURIComponent(deviceId)}`, {
...opts
}));
}
/**
* Check existing assets
*/
export function checkExistingAssets({ checkExistingAssetsDto }: {
checkExistingAssetsDto: CheckExistingAssetsDto;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: CheckExistingAssetsResponseDto;
}>("/assets/exist", oazapfts.json({
...opts,
method: "POST",
body: checkExistingAssetsDto
})));
}
/**
* Run an asset job
*/
@@ -5588,13 +5524,12 @@ export function getExploreData(opts?: Oazapfts.RequestOpts) {
/**
* Search large assets
*/
export function searchLargeAssets({ albumIds, city, country, createdAfter, createdBefore, deviceId, isEncoded, isFavorite, isMotion, isNotInAlbum, isOffline, lensModel, libraryId, make, minFileSize, model, ocr, personIds, rating, size, state, tagIds, takenAfter, takenBefore, trashedAfter, trashedBefore, $type, updatedAfter, updatedBefore, visibility, withDeleted, withExif }: {
export function searchLargeAssets({ albumIds, city, country, createdAfter, createdBefore, isEncoded, isFavorite, isMotion, isNotInAlbum, isOffline, lensModel, libraryId, make, minFileSize, model, ocr, personIds, rating, size, state, tagIds, takenAfter, takenBefore, trashedAfter, trashedBefore, $type, updatedAfter, updatedBefore, visibility, withDeleted, withExif }: {
albumIds?: string[];
city?: string | null;
country?: string | null;
createdAfter?: string;
createdBefore?: string;
deviceId?: string;
isEncoded?: boolean;
isFavorite?: boolean;
isMotion?: boolean;
@@ -5631,7 +5566,6 @@ export function searchLargeAssets({ albumIds, city, country, createdAfter, creat
country,
createdAfter,
createdBefore,
deviceId,
isEncoded,
isFavorite,
isMotion,
@@ -6294,36 +6228,6 @@ export function sendSyncAck({ syncAckSetDto }: {
body: syncAckSetDto
})));
}
/**
* Get delta sync for user
*/
export function getDeltaSync({ assetDeltaSyncDto }: {
assetDeltaSyncDto: AssetDeltaSyncDto;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: AssetDeltaSyncResponseDto;
}>("/sync/delta-sync", oazapfts.json({
...opts,
method: "POST",
body: assetDeltaSyncDto
})));
}
/**
* Get full sync for user
*/
export function getFullSyncForUser({ assetFullSyncDto }: {
assetFullSyncDto: AssetFullSyncDto;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: AssetResponseDto[];
}>("/sync/full-sync", oazapfts.json({
...opts,
method: "POST",
body: assetFullSyncDto
})));
}
/**
* Stream sync changes
*/
@@ -7364,17 +7268,6 @@ export enum AlbumUserRole {
Editor = "editor",
Viewer = "viewer"
}
export enum SourceType {
MachineLearning = "machine-learning",
Exif = "exif",
Manual = "manual"
}
export enum AssetTypeEnum {
Image = "IMAGE",
Video = "VIDEO",
Audio = "AUDIO",
Other = "OTHER"
}
export enum BulkIdErrorReason {
Duplicate = "duplicate",
NoPermission = "no_permission",
@@ -7558,6 +7451,17 @@ export enum AssetJobName {
RegenerateThumbnail = "regenerate-thumbnail",
TranscodeVideo = "transcode-video"
}
export enum SourceType {
MachineLearning = "machine-learning",
Exif = "exif",
Manual = "manual"
}
export enum AssetTypeEnum {
Image = "IMAGE",
Video = "VIDEO",
Audio = "AUDIO",
Other = "OTHER"
}
export enum AssetEditAction {
Crop = "crop",
Rotate = "rotate",
@@ -7662,7 +7566,6 @@ export enum JobName {
AssetFileMigration = "AssetFileMigration",
AssetGenerateThumbnailsQueueAll = "AssetGenerateThumbnailsQueueAll",
AssetGenerateThumbnails = "AssetGenerateThumbnails",
AuditLogCleanup = "AuditLogCleanup",
AuditTableCleanup = "AuditTableCleanup",
DatabaseBackup = "DatabaseBackup",
FacialRecognitionQueueAll = "FacialRecognitionQueueAll",