export type ImageOutputFormat = 'jpeg' | 'png' | 'webp'; export type VideoExportQuality = 'high' | 'medium' | 'low' | 'original'; export type PhotoFilterPreset = 'none' | 'mono' | 'sepia' | 'vibrant' | 'warm' | 'cool' | 'vintage' | 'noir' | 'fade'; export interface CropRect { x: number; y: number; width: number; height: number; isNormalized?: boolean; } export interface RedactionBox { x: number; y: number; width: number; height: number; style?: 'blackout' | 'blur'; isNormalized?: boolean; } export interface AnnotationBox { x: number; y: number; width: number; height: number; color?: string; label?: string; isNormalized?: boolean; } export interface PhotoAdjustments { brightness?: number; contrast?: number; saturation?: number; temperature?: number; vignette?: number; sharpen?: number; } export interface PhotoEditOptions { uri: string; crop?: CropRect; redactions?: RedactionBox[]; annotations?: AnnotationBox[]; rotation?: number; flipHorizontal?: boolean; flipVertical?: boolean; adjustments?: PhotoAdjustments; filterPreset?: PhotoFilterPreset; format?: ImageOutputFormat; quality?: number; } export interface PhotoEditResult { uri: string; width: number; height: number; size: number; mimeType: string; format: ImageOutputFormat; } export interface VideoTrimOptions { uri: string; startTimeMs: number; endTimeMs: number; quality?: VideoExportQuality; muteAudio?: boolean; mute?: boolean; adjustments?: { brightness?: number; contrast?: number; saturation?: number; }; } export interface VideoTrimResult { uri: string; durationMs: number; size: number; width: number; height: number; format: 'mp4'; } export interface FilmstripOptions { uri: string; count?: number; targetWidth?: number; targetHeight?: number; maxWidth?: number; maxHeight?: number; format?: 'jpeg' | 'png'; quality?: number; } export interface FilmstripThumbnail { timeMs: number; uri: string; index: number; } export interface FilmstripResult { thumbnails: FilmstripThumbnail[]; durationMs: number; }