import { type ImageEdgeOptions, type ImageEdgeVerdict } from "./asset-integrity.js"; export type ObjectFit = "fill" | "cover" | "contain" | "none" | "scale-down"; export type DeviceFrameSample = { selector: string; container: { w: number; h: number; }; media: { w: number; h: number; }; objectFit?: ObjectFit; objectPosition?: { x: number; y: number; }; }; export type CropAxis = { cropped_fraction: number; lost_start: number; lost_end: number; }; export type DeviceFrameVerdict = { selector: string; object_fit: ObjectFit; container_ar: number; media_ar: number; verdict: "fits" | "cropped" | "letterboxed" | "distorted" | "inconclusive"; cropped_edges: Array<"top" | "bottom" | "left" | "right">; crop_fraction: number; distortion: number; horizontal: CropAxis; vertical: CropAxis; confidence: number; reason: string; }; export type DeviceFrameOptions = { cropThreshold?: number; distortionThreshold?: number; }; export type ClipMotionInput = { label: string; firstFramePath: string; lastFramePath: string; }; export type MotionVerdict = { label: string; verdict: "static" | "pan" | "zoom" | "pan-zoom" | "inconclusive"; mean_displacement: number; zoom_ratio: number; pan_vector: { dx: number; dy: number; }; confidence: number; warnings: string[]; reason: string; }; export type MotionOptions = { grid?: number; searchRadius?: number; downsampleWidth?: number; staticThreshold?: number; zoomThreshold?: number; }; export type FrameEdgeInput = { label: string; framePath: string; }; export declare function auditDeviceFrames(samples: DeviceFrameSample[], opts?: DeviceFrameOptions): DeviceFrameVerdict[]; export declare function auditClipMotion(inputs: ClipMotionInput[], opts?: MotionOptions): Promise; export declare function auditFrameEdges(inputs: FrameEdgeInput[], opts?: ImageEdgeOptions): Promise;