mirror of
https://github.com/immich-app/immich.git
synced 2026-01-04 09:07:24 -08:00
* add thumbhash: server generation and web impl * move logic to infra & use byta in db * remove unnecesary logs * update generated API and simplify thumbhash gen * fix check errors * removed unnecessary library and css tag * style edits * syntax mistake * update server test, change thumbhash job name * fix tests * Update server/src/domain/asset/response-dto/asset-response.dto.ts Co-authored-by: Thomas <9749173+uhthomas@users.noreply.github.com> * add unit test, change migration date * change to official thumbhash impl * update call method to not use eval * "generate missing" looks for thumbhash * improve queue & improve syntax * update syntax again * update tests * fix thumbhash generation * consolidate queueing to avoid duplication * cover all types of incorrect thumbnail cases * split out jest tasks * put back thumbnail duration loading for images without thumbhash * Remove stray package.json --------- Co-authored-by: Luke McCarthy <mail@lukehmcc.com> Co-authored-by: Thomas <9749173+uhthomas@users.noreply.github.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
export const IMediaRepository = 'IMediaRepository';
|
|
|
|
export interface ResizeOptions {
|
|
size: number;
|
|
format: 'webp' | 'jpeg';
|
|
}
|
|
|
|
export interface VideoStreamInfo {
|
|
height: number;
|
|
width: number;
|
|
rotation: number;
|
|
codecName?: string;
|
|
codecType?: string;
|
|
frameCount: number;
|
|
}
|
|
|
|
export interface AudioStreamInfo {
|
|
codecName?: string;
|
|
codecType?: string;
|
|
}
|
|
|
|
export interface VideoFormat {
|
|
formatName?: string;
|
|
formatLongName?: string;
|
|
duration: number;
|
|
}
|
|
|
|
export interface VideoInfo {
|
|
format: VideoFormat;
|
|
videoStreams: VideoStreamInfo[];
|
|
audioStreams: AudioStreamInfo[];
|
|
}
|
|
|
|
export interface CropOptions {
|
|
top: number;
|
|
left: number;
|
|
width: number;
|
|
height: number;
|
|
}
|
|
|
|
export interface TranscodeOptions {
|
|
outputOptions: string[];
|
|
twoPass: boolean;
|
|
}
|
|
|
|
export interface IMediaRepository {
|
|
// image
|
|
resize(input: string | Buffer, output: string, options: ResizeOptions): Promise<void>;
|
|
crop(input: string, options: CropOptions): Promise<Buffer>;
|
|
generateThumbhash(imagePath: string): Promise<Buffer>;
|
|
|
|
// video
|
|
extractVideoThumbnail(input: string, output: string, size: number): Promise<void>;
|
|
probe(input: string): Promise<VideoInfo>;
|
|
transcode(input: string, output: string, options: TranscodeOptions): Promise<void>;
|
|
}
|