import { type XskillAwaitOptions } from './providers/xskill.js'; /** The apiz/xskill model id for OmniHuman v1.5 audio-driven video. */ export declare const OMNIHUMAN_MODEL_ID = "fal-ai/bytedance/omnihuman/v1.5"; export type LipsyncResolution = '720p' | '1080p'; /** Max input-audio seconds the model accepts at each resolution. */ export declare const OMNIHUMAN_AUDIO_LIMITS: Record; export interface OmniHumanParams { image_url: string; audio_url: string; resolution: LipsyncResolution; prompt?: string; turbo_mode?: boolean; } export interface BuildOmniHumanParamsInput { imageUrl: string; audioUrl: string; resolution?: LipsyncResolution; prompt?: string; turbo?: boolean; } /** Build the OmniHuman request params (PURE). Defaults to 1080p. */ export declare function buildOmniHumanParams(input: BuildOmniHumanParamsInput): OmniHumanParams; /** * Build the ffmpeg args (PURE) that NORMALIZE an OmniHuman clip to CFR `fps` * (default 24) + even dimensions, so frame-accurate seeking works downstream. * Keeps the (already lip-synced) audio. Everything AFTER `ffmpeg -y`. */ export declare function buildLipsyncNormalizeArgs(input: string, output: string, fps?: number): string[]; /** Validate the audio length against the model's per-resolution cap. */ export declare function assertAudioWithinLimit(audioSec: number, resolution: LipsyncResolution): void; export interface RunLipsyncOptions { image: string; audio: string; output: string; prompt?: string; resolution?: LipsyncResolution; turbo?: boolean; /** Normalize target fps (default 24). */ normalizeFps?: number; /** Skip the CFR/even-dims normalize (keep the raw OmniHuman clip). */ skipNormalize?: boolean; dryRun?: boolean; apiKey?: string; env?: NodeJS.ProcessEnv; awaitOptions?: XskillAwaitOptions; uploadImage?: (path: string) => Promise; uploadAudio?: (path: string) => Promise; submit?: (modelId: string, params: Record) => Promise; awaitTask?: (taskId: string) => Promise; download?: (url: string, dest: string) => Promise; probeAudioSec?: (path: string) => Promise; normalize?: (input: string, output: string, fps: number) => Promise; } export interface RunLipsyncResult { output: string; resolution: LipsyncResolution; audioSec: number; normalized: boolean; dryRun: boolean; params?: OmniHumanParams; taskId?: string; imageUrl?: string; audioUrl?: string; outputUrl?: string; } /** * Execute one lip-sync: validate audio length → (upload image+audio → submit * OmniHuman → await → download → normalize). On `dryRun`, returns the plan * (resolution, audio length, params) without uploading or spending. */ export declare function runLipsync(opts: RunLipsyncOptions): Promise; //# sourceMappingURL=lipsync.d.ts.map