export interface SkinGradeColorBalance { shadows: [number, number, number]; midtones: [number, number, number]; highlights: [number, number, number]; } export interface SkinGradeSelectiveColor { reds: [number, number, number, number]; yellows: [number, number, number, number]; } export interface SkinGradeEq { saturation: number; contrast: number; brightness: number; } export interface SkinGradeCdl { slope: [number, number, number]; offset: [number, number, number]; power: [number, number, number]; saturation: number; } export interface SkinGrade { colorbalance: SkinGradeColorBalance; selectivecolor: SkinGradeSelectiveColor; eq: SkinGradeEq; cdl: SkinGradeCdl; /** Confidence 0-1; below 0.4 means "I'm guessing" — don't apply blindly. */ confidence: number; /** ≤120 char rationale. */ why: string; } export interface SkinGradeOptions { apiKey?: string; model?: string; detail?: "low" | "high"; signal?: AbortSignal; } export declare function deriveSkinGrade(referenceFramePath: string, targetFramePath: string, opts?: SkinGradeOptions): Promise; /** * Parse a model JSON response into a SkinGrade with all values clamped to * safe ranges. Tolerates missing fields (falls back to neutral) and prose * wrapping around the JSON. */ export declare function parseSkinGradeResponse(content: string): SkinGrade; /** * Build the ffmpeg `-vf` filter string for a SkinGrade. Returns an empty * string when the grade is effectively neutral (no-op pass-through). */ export declare function buildSkinGradeFilter(grade: SkinGrade): string; export interface ApplySkinGradeOptions { videoCodec?: string; crf?: number; signal?: AbortSignal; } /** * Spawn ffmpeg to render `inputPath` through a SkinGrade filter chain into * `outputPath`. Audio is copied. Returns the absolute output path. * * If the grade is effectively neutral, ffmpeg still re-encodes (since the * caller asked for an output file) but with no `-vf` filter. */ export declare function applySkinGrade(inputPath: string, outputPath: string, grade: SkinGrade, opts?: ApplySkinGradeOptions): Promise; //# sourceMappingURL=skin-grade.d.ts.map