/** * Thumbnail-promise verifier. * * The thumbnail makes a visual promise (a man underwater, a huge pile * of money, a broken phone). Per the MrBeast manual: "match the * clickbait expectations and front-load." If the promised element * doesn't show up until minute 8, retention craters before the payoff. * * This module asks the vision model to: * 1. Look at the thumbnail FIRST and identify the visual promise. * 2. Look at N sampled frames from the opening window. * 3. Score how well those frames deliver on (or build up to) the * promise. * * One LLM call, structured JSON out. Pure parser exported for tests. */ export interface ThumbnailPromiseResult { /** 0..1 — how well the opening delivers on the thumbnail's visual promise. */ matches: number; /** ≤200 char description of what the thumbnail is promising. */ thumbnailPromise: string; /** ≤200 char description of what the opening frames actually show. */ openingShows: string; /** Up to 4 specific elements promised by the thumbnail but missing from the opening. */ missing: string[]; /** ≤200 char actionable suggestion. */ suggestion: string; } export interface VerifyOptions { apiKey?: string; model?: string; detail?: "low" | "high"; /** Window length used to sample frames; surfaced in the prompt for context. */ windowSec: number; signal?: AbortSignal; } /** * Run ONE vision call against the thumbnail + N opening frames. */ export declare function runThumbnailPromise(thumbnailPath: string, framePaths: string[], opts: VerifyOptions): Promise; /** * Parse the model's JSON. Robust to missing keys; clamps `matches` to * [0, 1] and caps strings. Pure — exported for testing. */ export declare function parsePromiseResponse(content: string): ThumbnailPromiseResult; //# sourceMappingURL=thumbnail-promise.d.ts.map