From 0a79dd1228e336569b6fc4f5572c0b221c3ce389 Mon Sep 17 00:00:00 2001 From: Brendan Ngo <107925883+brendanngo@users.noreply.github.com> Date: Thu, 12 Mar 2026 04:29:37 +1100 Subject: [PATCH] fix(server): extract make/model from sony video files (#26833) Co-authored-by: Your Name Co-authored-by: Daniel Dietzler --- server/src/repositories/metadata.repository.ts | 2 ++ server/src/services/metadata.service.spec.ts | 5 +++++ server/src/services/metadata.service.ts | 6 ++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/src/repositories/metadata.repository.ts b/server/src/repositories/metadata.repository.ts index 3c36bf62db..fc00d44b3f 100644 --- a/server/src/repositories/metadata.repository.ts +++ b/server/src/repositories/metadata.repository.ts @@ -72,6 +72,8 @@ export interface ImmichTags extends Omit { AndroidMake?: string; AndroidModel?: string; + DeviceManufacturer?: string; + DeviceModelName?: string; } @Injectable() diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index ae27f9bd1a..19dd1e5352 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -1569,6 +1569,11 @@ describe(MetadataService.name, () => { expected: { make: '1', model: '2' }, }, { exif: { AndroidMake: '1', AndroidModel: '2' }, expected: { make: '1', model: '2' } }, + { exif: { DeviceManufacturer: '1', DeviceModelName: '2' }, expected: { make: '1', model: '2' } }, + { + exif: { Make: '1', Model: '2', DeviceManufacturer: '3', DeviceModelName: '4' }, + expected: { make: '1', model: '2' }, + }, ])('should read camera make and model $exif -> $expected', async ({ exif, expected }) => { const asset = AssetFactory.create(); mocks.assetJob.getForMetadataExtraction.mockResolvedValue(getForMetadataExtraction(asset)); diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index 528eede5de..d2467ae6d9 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -289,8 +289,10 @@ export class MetadataService extends BaseService { colorspace: exifTags.ColorSpace === undefined ? null : String(exifTags.ColorSpace), // camera - make: exifTags.Make ?? exifTags.Device?.Manufacturer ?? exifTags.AndroidMake ?? null, - model: exifTags.Model ?? exifTags.Device?.ModelName ?? exifTags.AndroidModel ?? null, + make: + exifTags.Make ?? exifTags.Device?.Manufacturer ?? exifTags.AndroidMake ?? (exifTags.DeviceManufacturer || null), + model: + exifTags.Model ?? exifTags.Device?.ModelName ?? exifTags.AndroidModel ?? (exifTags.DeviceModelName || null), fps: validate(Number.parseFloat(exifTags.VideoFrameRate!)), iso: validate(exifTags.ISO) as number, exposureTime: exifTags.ExposureTime ?? null,