import { BinaryField, Tags } from 'exiftool-vendored'; export const IMetadataRepository = 'IMetadataRepository'; export interface ExifDuration { Value: number; Scale?: number; } type TagsWithWrongTypes = 'FocalLength' | 'Duration' | 'Description' | 'ImageDescription' | 'RegionInfo'; export interface ImmichTags extends Omit { ContentIdentifier?: string; MotionPhoto?: number; MotionPhotoVersion?: number; MotionPhotoPresentationTimestampUs?: number; MediaGroupUUID?: string; ImagePixelDepth?: string; FocalLength?: number; Duration?: number | string | ExifDuration; EmbeddedVideoType?: string; EmbeddedVideoFile?: BinaryField; MotionPhotoVideo?: BinaryField; // Type is wrong, can also be number. Description?: string | number; ImageDescription?: string | number; // Extended properties for image regions, such as faces RegionInfo?: { AppliedToDimensions: { W: number; H: number; Unit: string; }; RegionList: { Area: { // (X,Y) // center of the rectangle X: number; Y: number; W: number; H: number; Unit: string; }; Rotation?: number; Type?: string; Name?: string; }[]; }; } export interface IMetadataRepository { teardown(): Promise; readTags(path: string): Promise; writeTags(path: string, tags: Partial): Promise; extractBinaryTag(tagName: string, path: string): Promise; getCountries(userIds: string[]): Promise>; getStates(userIds: string[], country?: string): Promise>; getCities(userIds: string[], country?: string, state?: string): Promise>; getCameraMakes(userIds: string[], model?: string): Promise>; getCameraModels(userIds: string[], make?: string): Promise>; }