mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
import { BinaryField, Tags } from 'exiftool-vendored';
|
|
|
|
export const IMetadataRepository = 'IMetadataRepository';
|
|
|
|
export interface ExifDuration {
|
|
Value: number;
|
|
Scale?: number;
|
|
}
|
|
|
|
type StringOrNumber = string | number;
|
|
|
|
type TagsWithWrongTypes =
|
|
| 'FocalLength'
|
|
| 'Duration'
|
|
| 'Description'
|
|
| 'ImageDescription'
|
|
| 'RegionInfo'
|
|
| 'TagsList'
|
|
| 'Keywords'
|
|
| 'HierarchicalSubject'
|
|
| 'ISO';
|
|
export interface ImmichTags extends Omit<Tags, TagsWithWrongTypes> {
|
|
ContentIdentifier?: string;
|
|
MotionPhoto?: number;
|
|
MotionPhotoVersion?: number;
|
|
MotionPhotoPresentationTimestampUs?: number;
|
|
MediaGroupUUID?: string;
|
|
ImagePixelDepth?: string;
|
|
FocalLength?: number;
|
|
Duration?: number | string | ExifDuration;
|
|
EmbeddedVideoType?: string;
|
|
EmbeddedVideoFile?: BinaryField;
|
|
MotionPhotoVideo?: BinaryField;
|
|
TagsList?: StringOrNumber[];
|
|
HierarchicalSubject?: StringOrNumber[];
|
|
Keywords?: StringOrNumber | StringOrNumber[];
|
|
ISO?: number | number[];
|
|
|
|
// Type is wrong, can also be number.
|
|
Description?: StringOrNumber;
|
|
ImageDescription?: StringOrNumber;
|
|
|
|
// 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<void>;
|
|
readTags(path: string): Promise<ImmichTags>;
|
|
writeTags(path: string, tags: Partial<Tags>): Promise<void>;
|
|
extractBinaryTag(tagName: string, path: string): Promise<Buffer>;
|
|
}
|