Compare commits

...

1 Commits

Author SHA1 Message Date
Alex Tran
f62e56456b fix: metadata extraction failed on high concurrency 2025-12-10 16:45:01 +00:00

View File

@@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common';
import { BinaryField, DefaultReadTaskOptions, ExifTool, Tags } from 'exiftool-vendored'; import { BinaryField, DefaultReadTaskOptions, ExifTool, Tags } from 'exiftool-vendored';
import geotz from 'geo-tz'; import geotz from 'geo-tz';
import { LoggingRepository } from 'src/repositories/logging.repository'; import { LoggingRepository } from 'src/repositories/logging.repository';
import { mimeTypes } from 'src/utils/mime-types';
interface ExifDuration { interface ExifDuration {
Value: number; Value: number;
@@ -82,6 +81,7 @@ export class MetadataRepository {
inferTimezoneFromDatestamps: true, inferTimezoneFromDatestamps: true,
inferTimezoneFromTimeStamp: true, inferTimezoneFromTimeStamp: true,
useMWG: true, useMWG: true,
taskTimeoutMillis: 1 * 60 * 1000,
numericTags: [...DefaultReadTaskOptions.numericTags, 'FocalLength', 'FileSize'], numericTags: [...DefaultReadTaskOptions.numericTags, 'FocalLength', 'FileSize'],
/* eslint unicorn/no-array-callback-reference: off, unicorn/no-array-method-this-argument: off */ /* eslint unicorn/no-array-callback-reference: off, unicorn/no-array-method-this-argument: off */
geoTz: (lat, lon) => geotz.find(lat, lon)[0], geoTz: (lat, lon) => geotz.find(lat, lon)[0],
@@ -104,8 +104,7 @@ export class MetadataRepository {
} }
readTags(path: string): Promise<ImmichTags> { readTags(path: string): Promise<ImmichTags> {
const args = mimeTypes.isVideo(path) ? ['-ee'] : []; return this.exiftool.read(path).catch((error) => {
return this.exiftool.read(path, args).catch((error) => {
this.logger.warn(`Error reading exif data (${path}): ${error}\n${error?.stack}`); this.logger.warn(`Error reading exif data (${path}): ${error}\n${error?.stack}`);
return {}; return {};
}) as Promise<ImmichTags>; }) as Promise<ImmichTags>;