export interface ClipScoreResponse { hook: number; flow: number; engagement: number; trend: number; why: string; } export interface ClipScore extends ClipScoreResponse { score: number; durationSec: number; } export interface ClipScoreWeights { hook?: number; flow?: number; engagement?: number; trend?: number; } /** * Robust parser — tolerates prose around the JSON, missing keys, and * out-of-range numbers. Mirrors `parseHookVisionResponse`. */ export declare function parseClipScoreResponse(content: string): ClipScoreResponse; /** * Combine the four 0-1 dimensions into a single 0-100 score, using the * default (or caller-supplied) weights. */ export declare function combineClipScore(vision: ClipScoreResponse, durationSec: number, weights?: ClipScoreWeights): ClipScore; export interface ScoreClipOptions { apiKey?: string; model?: string; detail?: "low" | "high"; weights?: ClipScoreWeights; signal?: AbortSignal; } /** * Run the LLM scoring pass. Frames are optional — transcript-only is * the cheap default; pass frames when visual energy matters. * * Pure-ish: the only side effects are the OpenAI fetch and reading * frame files off disk. Used directly by both the tool wrapper and * `find_viral_moments`. */ export declare function scoreClipInternal(transcriptText: string, startSec: number, endSec: number, framePaths?: string[], opts?: ScoreClipOptions): Promise; //# sourceMappingURL=clip-scoring.d.ts.map