From c6c8e516d7aa7488ddc97aa062aa1a597e058e07 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, 7 Oct 2026 08:16:22 +0000 Subject: [PATCH] fix(server): read ISO values above 65535 (#32183) fix(server): read ISO values above 65535 (#32182) (cherry picked from commit 6962412c0be35bf21c87d6a5935035adc7ae94e2) Co-authored-by: bo0tzz --- server/src/services/metadata.service.spec.ts | 11 +++++++++++ server/src/services/metadata.service.ts | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index 65ab6dc37..365ead9c4 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -329,6 +329,17 @@ describe(MetadataService.name, () => { }); }); + it('should prefer the 32-bit sensitivity tags over a saturated ISO', async () => { + const asset = AssetFactory.create(); + mocks.assetJob.getForMetadataExtraction.mockResolvedValue(getForMetadataExtraction(asset)); + mockReadTags({ ISO: 65_535, RecommendedExposureIndex: 128_000 }); + + await sut.handleMetadataExtraction({ id: asset.id }); + expect(mocks.asset.upsertExif).toHaveBeenCalledWith( + expect.objectContaining({ exif: expect.objectContaining({ iso: 128_000 }) }), + ); + }); + it('should not delete latituide and longitude without reverse geocode', async () => { // regression test for issue 17511 const asset = AssetFactory.from().exif().build(); diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index be314651f..e1c1bee16 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -298,7 +298,7 @@ export class MetadataService extends BaseService { exifTags.Author ?? null, fps: video?.frameRate ?? validate(Number(exifTags.VideoFrameRate!)), - iso: validate(exifTags.ISO) as number, + iso: validate(exifTags.RecommendedExposureIndex ?? exifTags.StandardOutputSensitivity ?? exifTags.ISO) as number, exposureTime: exifTags.ExposureTime ?? null, lensModel: getLensModel(exifTags), fNumber: validate(exifTags.FNumber),