/** Where a reviewed clip's frames land. Gitignored, and outside the publish fingerprint. */ export declare function contactSheetPath(root: string, assetId: string): string; export interface ClipReview { /** The written sheet, or null when no sheet could be made. */ sheetPath: string | null; /** Whether the clip carries an audio track; null when it could not be determined. */ hasAudioTrack: boolean | null; /** Why a step was skipped — printed as-is, one line each. Empty when everything worked. */ notes: string[]; } export type FetchLike = (url: string) => Promise<{ ok: boolean; status: number; arrayBuffer(): Promise; }>; /** * Download the clip, tile frames from it, and report whether it has sound. * * The mp4 itself is deliberately not kept: it is several MB per generation, the URL is printed * beside the sheet, and the dev view plays the clip when a creator wants to watch it move. */ export declare function reviewGeneratedClip(options: { root: string; assetId: string; videoUrl: string; durationSeconds: number; fetch: FetchLike; }): Promise;